diff --git a/DEPS b/DEPS index ab1853e..0a9cd217 100644 --- a/DEPS +++ b/DEPS
@@ -175,11 +175,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': 'e5ca6ba2c84c029ae3ce15a141927d6f621311ae', + 'skia_revision': '9686528ac8c752563425f73237aa0ed60dcbc0dd', # 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': 'afbcf6555bbd448b0de90303cdf43901f7596e94', + 'v8_revision': '3b9e4cb4a5d75f7a8fccd9807443b97a85de4561', # 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. @@ -187,15 +187,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': '20983e35b3f96a86526542f6b477cad2777fad5b', + 'angle_revision': '107e4e989e94e70c594eb91b090d3f4a0108bea5', # 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': '3decd1af6bde6185b745e0fe5e2cdb66ef27e1d3', + 'swiftshader_revision': '540bdf92531d0c325d7b5c770ec33e869b56059f', # 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': 'cd1f1eb24f50c6ea538445fde93b83d78fb1e3e0', + 'pdfium_revision': '7bb6613a0b68569f94e9ff271a111dfe8de88097', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -238,7 +238,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': '341e229c3d32f8400a3048b6ce2b7e76c010089b', + 'catapult_revision': '054d61d117f0cff2a34dc23d0ac6f04c434e181a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -246,7 +246,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'f021bbb3a0e9fce7089de056ec66d1ae5fc7afc7', + 'devtools_frontend_revision': '8c53b6f52b2900fec80a8b245862279ad6a1e57f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -286,7 +286,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'spv_tools_revision': '60104cd97446877dad8ed1010a635218937a2f18', + 'spv_tools_revision': '1346dd5de119d603686e260daf08f36958909a23', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -298,11 +298,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'shaderc_revision': 'eb7bd643ef43ffb9ba091e39a389d0a2a923b1aa', + 'shaderc_revision': '3d915b2802667f44a359463f1f420ac33576001b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '11652ff8f8b3c3104eb2627717fa652d432d5b84', + 'dawn_revision': 'b867e14cac14aabe1836e414640f48f7b14daef9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -521,7 +521,7 @@ }, 'src/ios/third_party/material_components_ios/src': { - 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '58a181306f5dabb4bbb42f75a479db71b649b3a8', + 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'a8a560da42e41a8268f4081df0810f9e19d934f7', 'condition': 'checkout_ios', }, @@ -852,7 +852,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '7fa2d5f5ff44bcb0a5c3b3d36780f0c91769ba3b', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'fce26aa1391b60ab470283a642efbb99476050e0', 'condition': 'checkout_linux', }, @@ -877,7 +877,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '8f41598abfd67ee4eb0721414b0c2227c3b48cd2', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '7c5efb2a7e2bd90a212b184f1ae441bc24a842f1', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -933,7 +933,7 @@ Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'fa1c3c4e673cf12ffa22b8fbe4a7c79314571f1b', 'src/third_party/glslang/src': - Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '1f0fcbe5a30fdc9632a8bff36277103fabf0797c', + Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '393c564ae0b4e1b81383f4b9bb863f75e93a7ea8', 'src/third_party/google_toolbox_for_mac/src': { 'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'), @@ -1211,7 +1211,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '6f26bce0b1c4e8ce0e13332f7c0083788def5fdf', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + 'dba08d7f6fed58387a54570688ef1673dea0bd9d', + Var('chromium_git') + '/openscreen' + '@' + '46fdad4eca6312d74fea473088bc9429c849e773', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f', @@ -1228,7 +1228,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '82dd375715f3741bb9128f85459904a89f14f37f', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '3685fb977e1554091ab10656b8ac0b0c280a2234', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1448,7 +1448,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '84ee597cdeae08bb26e578fc66a35bcf35f633f4', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'ea6ae4a323074aefd2a976eb26e6dc99ce49bfda', + Var('webrtc_git') + '/src.git' + '@' + '26d52e1ba0907f6a5a4dd525659ba78c344c4cc1', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1523,7 +1523,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@1ecfc8d921d5d9a808377baa10dd4a94e08897c7', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a65af29054120060ea7efd8d6429543b88866ace', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/nonembedded/BUILD.gn b/android_webview/nonembedded/BUILD.gn index 67d9ec9..210effc 100644 --- a/android_webview/nonembedded/BUILD.gn +++ b/android_webview/nonembedded/BUILD.gn
@@ -34,8 +34,9 @@ android_library("devui_java") { sources = [ - "java/src/org/chromium/android_webview/devui/CrashesListActivity.java", - "java/src/org/chromium/android_webview/devui/FlagsActivity.java", + "java/src/org/chromium/android_webview/devui/CrashesListFragment.java", + "java/src/org/chromium/android_webview/devui/FlagsFragment.java", + "java/src/org/chromium/android_webview/devui/HomeFragment.java", "java/src/org/chromium/android_webview/devui/MainActivity.java", "java/src/org/chromium/android_webview/devui/PersistentErrorView.java", "java/src/org/chromium/android_webview/devui/WebViewPackageError.java", @@ -57,6 +58,7 @@ "//base:base_java", "//components/minidump_uploader:minidump_uploader_java", "//third_party/android_deps:androidx_annotation_annotation_java", + "//third_party/android_deps:com_android_support_support_fragment_java", "//ui/android:ui_java", ] android_manifest_for_lint = system_webview_android_manifest @@ -117,12 +119,13 @@ android_resources("devui_resources") { sources = [ "java/res_devui/drawable/blue_circle.xml", - "java/res_devui/layout/activity_crashes_list.xml", - "java/res_devui/layout/activity_flags.xml", "java/res_devui/layout/activity_main.xml", "java/res_devui/layout/crashes_list_item_body.xml", "java/res_devui/layout/crashes_list_item_header.xml", "java/res_devui/layout/flag_states.xml", + "java/res_devui/layout/fragment_crashes_list.xml", + "java/res_devui/layout/fragment_flags.xml", + "java/res_devui/layout/fragment_home.xml", "java/res_devui/layout/persistent_error_message.xml", "java/res_devui/layout/toggleable_flag.xml", "java/res_devui/layout/two_line_list_item.xml",
diff --git a/android_webview/nonembedded/java/AndroidManifest.xml b/android_webview/nonembedded/java/AndroidManifest.xml index bd69d86..fc461e3 100644 --- a/android_webview/nonembedded/java/AndroidManifest.xml +++ b/android_webview/nonembedded/java/AndroidManifest.xml
@@ -51,20 +51,6 @@ android:targetActivity="org.chromium.android_webview.devui.MainActivity" android:enabled="false" android:process=":webview_apk" /> {# Explicit process required for monochrome compatibility. #} - <activity android:name="org.chromium.android_webview.devui.CrashesListActivity" - android:label="WebView Crashes" - android:theme="@style/Theme.DevUi.DayNight" - android:launchMode="singleTop" - android:taskAffinity="{{ manifest_package }}.org.chromium.android_webview.devui" {# Explicit taskAffinity to distinguish from monochrome browser task. #} - android:process=":webview_apk"> {# Explicit process required for monochrome compatibility. #} - </activity> - <activity android:name="org.chromium.android_webview.devui.FlagsActivity" - android:label="WebView Flags" - android:theme="@style/Theme.DevUi.DayNight" - android:launchMode="singleTop" - android:taskAffinity="{{ manifest_package }}.org.chromium.android_webview.devui" {# Explicit taskAffinity to distinguish from monochrome browser task. #} - android:process=":webview_apk"> {# Explicit process required for monochrome compatibility. #} - </activity> <!-- End of WebView Developer UI Activities --> <activity android:name="org.chromium.android_webview.nonembedded.LicenseActivity"
diff --git a/android_webview/nonembedded/java/res_devui/layout/activity_main.xml b/android_webview/nonembedded/java/res_devui/layout/activity_main.xml index 06d9a29..ce96947 100644 --- a/android_webview/nonembedded/java/res_devui/layout/activity_main.xml +++ b/android_webview/nonembedded/java/res_devui/layout/activity_main.xml
@@ -15,8 +15,12 @@ layout="@layout/persistent_error_message" android:id="@+id/webview_package_error"/> - <ListView - android:id="@+id/main_info_list" + <include + layout="@layout/persistent_error_message" + android:id="@+id/crash_consent_error"/> + + <FrameLayout + android:id="@+id/content_fragment" android:layout_width="match_parent" android:layout_height="match_parent"/>
diff --git a/android_webview/nonembedded/java/res_devui/layout/activity_crashes_list.xml b/android_webview/nonembedded/java/res_devui/layout/fragment_crashes_list.xml similarity index 84% rename from android_webview/nonembedded/java/res_devui/layout/activity_crashes_list.xml rename to android_webview/nonembedded/java/res_devui/layout/fragment_crashes_list.xml index bfc6405..c07aac7 100644 --- a/android_webview/nonembedded/java/res_devui/layout/activity_crashes_list.xml +++ b/android_webview/nonembedded/java/res_devui/layout/fragment_crashes_list.xml
@@ -11,14 +11,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <include - layout="@layout/persistent_error_message" - android:id="@+id/webview_package_error"/> - - <include - layout="@layout/persistent_error_message" - android:id="@+id/crash_consent_error"/> - <TextView android:id="@+id/crashes_summary_textview" android:layout_width="match_parent"
diff --git a/android_webview/nonembedded/java/res_devui/layout/activity_flags.xml b/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml similarity index 93% rename from android_webview/nonembedded/java/res_devui/layout/activity_flags.xml rename to android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml index e81975f..c5208603 100644 --- a/android_webview/nonembedded/java/res_devui/layout/activity_flags.xml +++ b/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml
@@ -12,10 +12,6 @@ android:layout_height="match_parent" android:padding="10dp"> - <include - layout="@layout/persistent_error_message" - android:id="@+id/webview_package_error"/> - <!--suppress HardcodedText --> <TextView android:id="@+id/flags_warning"
diff --git a/android_webview/nonembedded/java/res_devui/layout/fragment_home.xml b/android_webview/nonembedded/java/res_devui/layout/fragment_home.xml new file mode 100644 index 0000000..a66d5898 --- /dev/null +++ b/android_webview/nonembedded/java/res_devui/layout/fragment_home.xml
@@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Chromium Authors. All rights reserved. Use of this + source code is governed by a BSD-style license that can be found in the + LICENSE file. +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/fragment_home" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ListView + android:id="@+id/main_info_list" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + +</LinearLayout>
diff --git a/android_webview/nonembedded/java/res_devui/layout/persistent_error_message.xml b/android_webview/nonembedded/java/res_devui/layout/persistent_error_message.xml index c7b37f74..234053fe 100644 --- a/android_webview/nonembedded/java/res_devui/layout/persistent_error_message.xml +++ b/android_webview/nonembedded/java/res_devui/layout/persistent_error_message.xml
@@ -7,6 +7,7 @@ <TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium"
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListFragment.java similarity index 87% rename from android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListActivity.java rename to android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListFragment.java index 38e252a..a80dbc5 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListActivity.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/CrashesListFragment.java
@@ -18,7 +18,9 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -31,6 +33,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; +import androidx.fragment.app.Fragment; import org.chromium.android_webview.common.AwSwitches; import org.chromium.android_webview.common.DeveloperModeUtils; @@ -38,7 +41,6 @@ import org.chromium.android_webview.common.crash.CrashInfo; import org.chromium.android_webview.common.crash.CrashInfo.UploadState; import org.chromium.android_webview.common.crash.CrashUploadUtil; -import org.chromium.android_webview.devui.util.NavigationMenuHelper; import org.chromium.android_webview.devui.util.WebViewCrashInfoCollector; import org.chromium.android_webview.devui.util.WebViewPackageHelper; import org.chromium.base.CommandLine; @@ -52,17 +54,17 @@ import java.util.Locale; /** - * An activity to show a list of recent WebView crashes. + * A fragment to show a list of recent WebView crashes. */ -public class CrashesListActivity extends Activity { +public class CrashesListFragment extends Fragment { private static final String TAG = "WebViewDevTools"; // Max number of crashes to show in the crashes list. private static final int MAX_CRASHES_NUMBER = 20; private CrashListExpandableAdapter mCrashListViewAdapter; - private WebViewPackageError mDifferentPackageError; private PersistentErrorView mCrashConsentError; + private Context mContext; // There is a limit on the length of this query string, see https://crbug.com/1015923 // TODO(https://crbug.com/1052295): add assert statement to check the length of this String. @@ -96,31 +98,40 @@ + "Crash ID: http://crash/%s\n"; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_crashes_list); - - mCrashListViewAdapter = new CrashListExpandableAdapter(); - ExpandableListView crashListView = findViewById(R.id.crashes_list); - crashListView.setAdapter(mCrashListViewAdapter); - - mDifferentPackageError = new WebViewPackageError(this); - mCrashConsentError = - buildCrashConsentError(PlatformServiceBridge.getInstance().canUseGms()); - - // show the dialog once when the activity is created. - mDifferentPackageError.showDialogIfDifferent(); + public void onAttach(Context context) { + super.onAttach(context); + mContext = context; } @Override - protected void onResume() { - super.onResume(); - // Check package status in onResume() to hide/show the error message if the user - // changes WebView implementation from system settings and then returns back to the - // activity. - mDifferentPackageError.showMessageIfDifferent(); + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_crashes_list, null); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + Activity activity = (Activity) mContext; + activity.setTitle("WebView Crashes"); + + TextView crashesSummaryView = view.findViewById(R.id.crashes_summary_textview); + mCrashListViewAdapter = new CrashListExpandableAdapter(crashesSummaryView); + ExpandableListView crashListView = view.findViewById(R.id.crashes_list); + crashListView.setAdapter(mCrashListViewAdapter); + + mCrashConsentError = + buildCrashConsentError(PlatformServiceBridge.getInstance().canUseGms()); + } + + @Override + public void onResume() { + super.onResume(); // Check if crash collection is enabled and show or hide the error message. // Firstly, check for the flag value in commandline, since it doesn't require any IPCs. // Then check for flags value in the DeveloperUi ContentProvider (it involves an IPC but @@ -147,8 +158,8 @@ } private boolean isCrashUploadsEnabledFromFlagsUi() { - if (DeveloperModeUtils.isDeveloperModeEnabled(getPackageName())) { - return DeveloperModeUtils.getFlagOverrides(getPackageName()) + if (DeveloperModeUtils.isDeveloperModeEnabled(mContext.getPackageName())) { + return DeveloperModeUtils.getFlagOverrides(mContext.getPackageName()) .getOrDefault(AwSwitches.CRASH_UPLOADS_ENABLED_FOR_TESTING_SWITCH, false); } return false; @@ -160,10 +171,9 @@ private class CrashListExpandableAdapter extends BaseExpandableListAdapter { private List<CrashInfo> mCrashInfoList; - CrashListExpandableAdapter() { + CrashListExpandableAdapter(TextView crashesSummaryView) { mCrashInfoList = new ArrayList<>(); - TextView crashesSummaryView = findViewById(R.id.crashes_summary_textview); // Update crash summary when the data changes. registerDataSetObserver(new DataSetObserver() { @Override @@ -200,7 +210,7 @@ } else { packageName = crashInfo.packageName; try { - Drawable icon = getPackageManager().getApplicationIcon(packageName); + Drawable icon = mContext.getPackageManager().getApplicationIcon(packageName); packageIcon.setImageDrawable(icon); } catch (PackageManager.NameNotFoundException e) { // This can happen if the app was uninstalled after the crash was recorded. @@ -234,13 +244,11 @@ new Date(crashInfo.uploadTime).toString() + "\nID: " + crashInfo.uploadId; uploadInfoView.setOnLongClickListener(v -> { ClipboardManager clipboard = - (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("upload info", uploadInfo); clipboard.setPrimaryClip(clip); // Show a toast that the text has been copied. - Toast.makeText( - CrashesListActivity.this, "Copied upload info", Toast.LENGTH_SHORT) - .show(); + Toast.makeText(mContext, "Copied upload info", Toast.LENGTH_SHORT).show(); return true; }); setTwoLineListItemText(uploadInfoView, uploadState, uploadInfo); @@ -264,8 +272,8 @@ || crashInfo.uploadState == UploadState.PENDING) { uploadButton.setVisibility(View.VISIBLE); uploadButton.setOnClickListener(v -> { - if (!CrashUploadUtil.isNetworkUnmetered(CrashesListActivity.this)) { - new AlertDialog.Builder(CrashesListActivity.this) + if (!CrashUploadUtil.isNetworkUnmetered(mContext)) { + new AlertDialog.Builder(mContext) .setTitle("Network Warning") .setMessage( "You are connected to a metered network or cellular data." @@ -288,7 +296,7 @@ private void attemptUploadCrash(String crashLocalId) { // Attempt uploading the file asynchronously, upload is not guaranteed. - CrashUploadUtil.tryUploadCrashDumpWithLocalId(CrashesListActivity.this, crashLocalId); + CrashUploadUtil.tryUploadCrashDumpWithLocalId(mContext, crashLocalId); // Update the uploadState to be PENDING_USER_REQUESTED or UPLOADED. updateCrashes(); } @@ -373,7 +381,7 @@ String appVersion = ""; if (crashInfo.packageName != null) { try { - PackageManager pm = getPackageManager(); + PackageManager pm = mContext.getPackageManager(); PackageInfo packageInfo = pm.getPackageInfo(crashInfo.packageName, 0); appPackage = crashInfo.packageName; appVersion = String.format( @@ -382,8 +390,7 @@ } } - PackageInfo webViewPackage = - WebViewPackageHelper.getContextPackageInfo(CrashesListActivity.this); + PackageInfo webViewPackage = WebViewPackageHelper.getContextPackageInfo(mContext); return new Uri.Builder() .scheme("https") @@ -433,7 +440,7 @@ } private PersistentErrorView buildCrashConsentError(boolean canUseGms) { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext); dialogBuilder.setTitle("Error Showing Crashes"); if (canUseGms) { dialogBuilder.setMessage( @@ -443,7 +450,7 @@ // cannot be opened directly. Intent settingsIntent = new Intent("com.android.settings.action.EXTRA_SETTINGS"); List<ResolveInfo> intentResolveInfo = - getPackageManager().queryIntentActivities(settingsIntent, 0); + mContext.getPackageManager().queryIntentActivities(settingsIntent, 0); // Show a button to open GMS settings activity only if it exists. if (intentResolveInfo.size() > 0) { dialogBuilder.setPositiveButton( @@ -455,28 +462,30 @@ dialogBuilder.setMessage("Crash collection is not supported at the moment."); } + Activity activity = (Activity) mContext; return new PersistentErrorView( - this, R.id.crash_consent_error, PersistentErrorView.Type.ERROR) + activity, R.id.crash_consent_error, PersistentErrorView.Type.ERROR) .setText("Crash collection is disabled. Tap for more info.") .setDialog(dialogBuilder.create()); } @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.crashes_options_menu, menu); - NavigationMenuHelper.inflate(this, menu); - return true; + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.crashes_options_menu, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (NavigationMenuHelper.onOptionsItemSelected(this, item)) { - return true; - } if (item.getItemId() == R.id.options_menu_refresh) { mCrashListViewAdapter.updateCrashes(); return true; } return super.onOptionsItemSelected(item); } + + @Override + public void onDestroyView() { + mCrashConsentError.hide(); + super.onDestroyView(); + } }
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java similarity index 77% rename from android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsActivity.java rename to android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java index a77b368c..4e8a2a4 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsActivity.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java
@@ -13,8 +13,7 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; -import android.view.Menu; -import android.view.MenuItem; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -25,22 +24,23 @@ import android.widget.Spinner; import android.widget.TextView; +import androidx.fragment.app.Fragment; + import org.chromium.android_webview.common.DeveloperModeUtils; import org.chromium.android_webview.common.Flag; import org.chromium.android_webview.common.ProductionSupportedFlagList; import org.chromium.android_webview.common.services.IDeveloperUiService; import org.chromium.android_webview.common.services.ServiceNames; -import org.chromium.android_webview.devui.util.NavigationMenuHelper; import org.chromium.base.Log; import java.util.HashMap; import java.util.Map; /** - * An activity to toggle experimental WebView flags/features. + * A fragment to toggle experimental WebView flags/features. */ @SuppressLint("SetTextI18n") -public class FlagsActivity extends Activity { +public class FlagsFragment extends Fragment { private static final String TAG = "WebViewDevTools"; private static final String STATE_DEFAULT = "Default"; @@ -52,46 +52,45 @@ STATE_DISABLED, }; - private WebViewPackageError mDifferentPackageError; private Map<String, Boolean> mOverriddenFlags = new HashMap<>(); private FlagsListAdapter mListAdapter; + private Context mContext; + @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onAttach(Context context) { + super.onAttach(context); + mContext = context; + } - setContentView(R.layout.activity_flags); + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_flags, null); + } - ListView flagsListView = findViewById(R.id.flags_list); - TextView flagsDescriptionView = findViewById(R.id.flags_description); + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + Activity activity = (Activity) mContext; + activity.setTitle("WebView Flags"); + + ListView flagsListView = view.findViewById(R.id.flags_list); + TextView flagsDescriptionView = view.findViewById(R.id.flags_description); flagsDescriptionView.setText("By enabling these features, you could " + "lose app data or compromise your security or privacy. Enabled features apply to " + "WebViews across all apps on the device."); // Restore flag overrides from the service process to repopulate the UI, if developer mode // is enabled. - if (DeveloperModeUtils.isDeveloperModeEnabled(getPackageName())) { - mOverriddenFlags = DeveloperModeUtils.getFlagOverrides(getPackageName()); + if (DeveloperModeUtils.isDeveloperModeEnabled(mContext.getPackageName())) { + mOverriddenFlags = DeveloperModeUtils.getFlagOverrides(mContext.getPackageName()); } mListAdapter = new FlagsListAdapter(); flagsListView.setAdapter(mListAdapter); - Button resetFlagsButton = findViewById(R.id.reset_flags_button); - resetFlagsButton.setOnClickListener((View view) -> { resetAllFlags(); }); - - mDifferentPackageError = new WebViewPackageError(this); - // show the dialog once when the activity is created. - mDifferentPackageError.showDialogIfDifferent(); - } - - @Override - protected void onResume() { - super.onResume(); - // Check package status in onResume() to hide/show the error message if the user - // changes WebView implementation from system settings and then returns back to the - // activity. - mDifferentPackageError.showMessageIfDifferent(); + Button resetFlagsButton = view.findViewById(R.id.reset_flags_button); + resetFlagsButton.setOnClickListener((View flagButton) -> { resetAllFlags(); }); } private static int booleanToState(Boolean b) { @@ -150,8 +149,7 @@ */ private class FlagsListAdapter extends ArrayAdapter<Flag> { public FlagsListAdapter() { - super(FlagsActivity.this, R.layout.toggleable_flag, - ProductionSupportedFlagList.sFlagList); + super(mContext, R.layout.toggleable_flag, ProductionSupportedFlagList.sFlagList); } @Override @@ -174,7 +172,7 @@ flagName.setText(label); flagDescription.setText(flag.getDescription()); ArrayAdapter<String> adapter = - new ArrayAdapter<>(FlagsActivity.this, R.layout.flag_states, sFlagStates); + new ArrayAdapter<>(mContext, R.layout.flag_states, sFlagStates); adapter.setDropDownViewResource(android.R.layout.select_dialog_singlechoice); flagToggle.setAdapter(adapter); @@ -207,26 +205,11 @@ } } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - NavigationMenuHelper.inflate(this, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (NavigationMenuHelper.onOptionsItemSelected(this, item)) { - return true; - } - return super.onOptionsItemSelected(item); - } - private class FlagsServiceConnection implements ServiceConnection { public void start() { Intent intent = new Intent(); - intent.setClassName( - FlagsActivity.this.getPackageName(), ServiceNames.DEVELOPER_UI_SERVICE); - if (!FlagsActivity.this.bindService(intent, this, Context.BIND_AUTO_CREATE)) { + intent.setClassName(mContext.getPackageName(), ServiceNames.DEVELOPER_UI_SERVICE); + if (!mContext.bindService(intent, this, Context.BIND_AUTO_CREATE)) { Log.e(TAG, "Failed to bind to Developer UI service"); } } @@ -234,8 +217,7 @@ @Override public void onServiceConnected(ComponentName name, IBinder service) { Intent intent = new Intent(); - intent.setClassName( - FlagsActivity.this.getPackageName(), ServiceNames.DEVELOPER_UI_SERVICE); + intent.setClassName(mContext.getPackageName(), ServiceNames.DEVELOPER_UI_SERVICE); try { IDeveloperUiService.Stub.asInterface(service).setFlagOverrides(mOverriddenFlags); } catch (RemoteException e) { @@ -243,7 +225,7 @@ } finally { // Unbind when we've sent the flags overrides, since we can always rebind later. The // service will manage its own lifetime. - FlagsActivity.this.unbindService(this); + mContext.unbindService(this); } }
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/HomeFragment.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/HomeFragment.java new file mode 100644 index 0000000..a9da3ae --- /dev/null +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/HomeFragment.java
@@ -0,0 +1,126 @@ +// 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.devui; + +import android.app.Activity; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.pm.PackageInfo; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import org.chromium.android_webview.devui.util.WebViewPackageHelper; +import org.chromium.ui.widget.Toast; + +import java.util.Locale; + +/** + * Dev UI main fragment. + * It shows a summary about WebView package and the device. + */ +public class HomeFragment extends Fragment { + private Context mContext; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mContext = context; + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_home, null); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + Activity activity = (Activity) mContext; + activity.setTitle("WebView DevTools"); + + PackageInfo webViewPackage = WebViewPackageHelper.getContextPackageInfo(mContext); + InfoItem[] infoItems = new InfoItem[] { + new InfoItem("WebView package", webViewPackage.packageName), + new InfoItem("WebView version", + String.format(Locale.US, "%s (%s)", webViewPackage.versionName, + webViewPackage.versionCode)), + new InfoItem("Device info", + String.format(Locale.US, "%s - %s", Build.MODEL, Build.FINGERPRINT)), + }; + + ListView infoListView = view.findViewById(R.id.main_info_list); + ArrayAdapter<InfoItem> itemsArrayAdapter = new InfoListAdapter(infoItems); + infoListView.setAdapter(itemsArrayAdapter); + + // Copy item's text to clipboard on long tapping a list item. + infoListView.setOnItemLongClickListener((parent, clickedView, pos, id) -> { + InfoItem item = (InfoItem) parent.getItemAtPosition(pos); + ClipboardManager clipboard = + (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText(item.title, item.subtitle); + clipboard.setPrimaryClip(clip); + // Show a toast that the text has been copied. + Toast.makeText(mContext, "Copied " + item.title, Toast.LENGTH_SHORT).show(); + + return true; + }); + } + + /** + * A model class for a key-value piece of information to be displayed as a title (key) and + * subtitle (value). + */ + private static class InfoItem { + public static final String UNKNOWN = "Unknown"; + public final String title; + public final String subtitle; + + public InfoItem(String title, String subtitle) { + this.title = title; + this.subtitle = subtitle == null ? UNKNOWN : subtitle; + } + } + + /** + * An ArrayAdapter to show a list of {@code InfoItem} objects. + * + * It uses android stock {@code android.R.layout.simple_list_item_2} which has two {@code + * TextView}; {@code text1} acts as the item title and {@code text2} as the item subtitle. + */ + private class InfoListAdapter extends ArrayAdapter<InfoItem> { + private final InfoItem[] mItems; + + public InfoListAdapter(InfoItem[] items) { + super(mContext, R.layout.two_line_list_item, items); + mItems = items; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + // If the the old view is already created then reuse it, else create a new one by layout + // inflation. + if (view == null) { + view = getLayoutInflater().inflate(R.layout.two_line_list_item, null, true); + } + + InfoItem item = mItems[position]; + TextView title = view.findViewById(android.R.id.text1); + TextView subtitle = view.findViewById(android.R.id.text2); + + title.setText(item.title); + subtitle.setText(item.subtitle); + + return view; + } + } +}
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java index a427799e..7e85dab2 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java
@@ -3,34 +3,31 @@ // found in the LICENSE file. package org.chromium.android_webview.devui; -import android.app.Activity; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.content.pm.PackageInfo; -import android.os.Build; +import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import org.chromium.android_webview.devui.util.NavigationMenuHelper; -import org.chromium.android_webview.devui.util.WebViewPackageHelper; -import org.chromium.ui.widget.Toast; - -import java.util.Locale; /** * Dev UI main activity. - * It shows a summary about WebView package and the device. - * It helps to navigate to other WebView developer tools. + * It shows persistent errors and helps to navigate to WebView developer tools. */ -public class MainActivity extends Activity { +public class MainActivity extends FragmentActivity { private WebViewPackageError mDifferentPackageError; + private boolean mSwitchFragmentOnResume; + + // Keep in sync with DeveloperUiService.java + private static final String FRAGMENT_ID_INTENT_EXTRA = "fragment-id"; + private static final int FRAGMENT_ID_HOME = 0; + private static final int FRAGMENT_ID_CRASHES = 1; + private static final int FRAGMENT_ID_FLAGS = 2; @Override protected void onCreate(Bundle savedInstanceState) { @@ -38,32 +35,8 @@ setContentView(R.layout.activity_main); - PackageInfo webViewPackage = WebViewPackageHelper.getContextPackageInfo(this); - InfoItem[] infoItems = new InfoItem[] { - new InfoItem("WebView package", webViewPackage.packageName), - new InfoItem("WebView version", - String.format(Locale.US, "%s (%s)", webViewPackage.versionName, - webViewPackage.versionCode)), - new InfoItem("Device info", - String.format(Locale.US, "%s - %s", Build.MODEL, Build.FINGERPRINT)), - }; - - ListView infoListView = findViewById(R.id.main_info_list); - ArrayAdapter<InfoItem> itemsArrayAdapter = new InfoListAdapter(infoItems); - infoListView.setAdapter(itemsArrayAdapter); - - // Copy item's text to clipboard on long tapping a list item. - infoListView.setOnItemLongClickListener((parent, view, pos, id) -> { - InfoItem item = (InfoItem) parent.getItemAtPosition(pos); - ClipboardManager clipboard = - (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText(item.title, item.subtitle); - clipboard.setPrimaryClip(clip); - // Show a toast that the text has been copied. - Toast.makeText(MainActivity.this, "Copied " + item.title, Toast.LENGTH_SHORT).show(); - - return true; - }); + // Let onResume handle showing the initial Fragment. + mSwitchFragmentOnResume = true; mDifferentPackageError = new WebViewPackageError(this); // show the dialog once when the activity is created. @@ -71,60 +44,58 @@ } @Override + protected void onNewIntent(Intent intent) { + // Store the Intent so we can switch Fragments in onResume (which is called next). Only need + // to switch Fragment if the Intent specifies to do so. + setIntent(intent); + mSwitchFragmentOnResume = intent.hasExtra(FRAGMENT_ID_INTENT_EXTRA); + } + + @Override protected void onResume() { super.onResume(); // Check package status in onResume() to hide/show the error message if the user // changes WebView implementation from system settings and then returns back to the // activity. mDifferentPackageError.showMessageIfDifferent(); - } - /** - * A model class for a key-value piece of information to be displayed as a title (key) and - * subtitle (value). - */ - private static class InfoItem { - public static final String UNKNOWN = "Unknown"; - public final String title; - public final String subtitle; + // Don't change Fragment unless we have a new Intent, since the user might just be coming + // back to this through the task switcher. + if (!mSwitchFragmentOnResume) return; - public InfoItem(String title, String subtitle) { - this.title = title; - this.subtitle = subtitle == null ? UNKNOWN : subtitle; - } - } + // Ensure we only switch the first time we see a new Intent. + mSwitchFragmentOnResume = false; - /** - * An ArrayAdapter to show a list of {@code InfoItem} objects. - * - * It uses android stock {@code android.R.layout.simple_list_item_2} which has two {@code - * TextView}; {@code text1} acts as the item title and {@code text2} as the item subtitle. - */ - private class InfoListAdapter extends ArrayAdapter<InfoItem> { - private final InfoItem[] mItems; - - public InfoListAdapter(InfoItem[] items) { - super(MainActivity.this, R.layout.two_line_list_item, items); - mItems = items; + // Default to HomeFragment if not specified. + int fragmentId = FRAGMENT_ID_HOME; + // FRAGMENT_ID_INTENT_EXTRA is an optional extra to specify which fragment to open. At the + // moment, it's specified only by DeveloperUiService (so make sure these constants stay in + // sync). + Bundle extras = getIntent().getExtras(); + if (extras != null) { + fragmentId = extras.getInt(FRAGMENT_ID_INTENT_EXTRA, fragmentId); } - @Override - public View getView(int position, View view, ViewGroup parent) { - // If the the old view is already created then reuse it, else create a new one by layout - // inflation. - if (view == null) { - view = getLayoutInflater().inflate(R.layout.two_line_list_item, null, true); - } - - InfoItem item = mItems[position]; - TextView title = view.findViewById(android.R.id.text1); - TextView subtitle = view.findViewById(android.R.id.text2); - - title.setText(item.title); - subtitle.setText(item.subtitle); - - return view; + Fragment fragment = null; + switch (fragmentId) { + default: + // Fall through. + case FRAGMENT_ID_HOME: + fragment = new HomeFragment(); + break; + case FRAGMENT_ID_CRASHES: + fragment = new CrashesListFragment(); + break; + case FRAGMENT_ID_FLAGS: + fragment = new FlagsFragment(); + break; } + assert fragment != null; + + FragmentManager fm = getSupportFragmentManager(); + FragmentTransaction transaction = fm.beginTransaction(); + transaction.replace(R.id.content_fragment, fragment); + transaction.commit(); } @Override
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/util/NavigationMenuHelper.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/util/NavigationMenuHelper.java index 0e9c2f2..4037789 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/util/NavigationMenuHelper.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/util/NavigationMenuHelper.java
@@ -3,16 +3,20 @@ // found in the LICENSE file. package org.chromium.android_webview.devui.util; -import android.app.Activity; import android.content.Intent; import android.os.Build; import android.provider.Settings; import android.view.Menu; import android.view.MenuItem; -import org.chromium.android_webview.devui.CrashesListActivity; -import org.chromium.android_webview.devui.FlagsActivity; -import org.chromium.android_webview.devui.MainActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import org.chromium.android_webview.devui.CrashesListFragment; +import org.chromium.android_webview.devui.FlagsFragment; +import org.chromium.android_webview.devui.HomeFragment; import org.chromium.android_webview.devui.R; /** @@ -24,9 +28,10 @@ /** * Inflate the navigation menu in the given {@code activity} options menu. * - * This should be called inside {@code Activity#onCreateOptionsMenu} method. + * This should be called inside {@link android.app.Activity#onCreateOptionsMenu} or + * {@link Fragment#onCreateOptionsMenu}. */ - public static void inflate(Activity activity, Menu menu) { + public static void inflate(FragmentActivity activity, Menu menu) { activity.getMenuInflater().inflate(R.menu.navigation_menu, menu); // Switching WebView providers is possible only from API >= 24. @@ -44,19 +49,25 @@ * This should be called inside {@code Activity#onOptionsItemSelected} method. * @return {@code true} if the item selection event is consumed. */ - public static boolean onOptionsItemSelected(Activity activity, MenuItem item) { + public static boolean onOptionsItemSelected(FragmentActivity activity, MenuItem item) { + Fragment fragment = null; if (item.getItemId() == R.id.nav_menu_crash_ui) { - activity.startActivity(new Intent(activity, CrashesListActivity.class)); + fragment = new CrashesListFragment(); } else if (item.getItemId() == R.id.nav_menu_flags_ui) { - activity.startActivity(new Intent(activity, FlagsActivity.class)); + fragment = new FlagsFragment(); } else if (item.getItemId() == R.id.nav_menu_main_ui) { - activity.startActivity(new Intent(activity, MainActivity.class)); + fragment = new HomeFragment(); } else if (item.getItemId() == R.id.nav_menu_switch_provider && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { activity.startActivity(new Intent(Settings.ACTION_WEBVIEW_SETTINGS)); - } else { - return false; + return true; } + if (fragment == null) return false; + + FragmentManager fm = activity.getSupportFragmentManager(); + FragmentTransaction transaction = fm.beginTransaction(); + transaction.replace(R.id.content_fragment, fragment); + transaction.commit(); return true; }
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/DeveloperUiService.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/DeveloperUiService.java index 166cefe..efe09efe 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/services/DeveloperUiService.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/services/DeveloperUiService.java
@@ -36,6 +36,12 @@ private static final String CHANNEL_ID = "DevUiChannel"; private static final int FLAG_OVERRIDE_NOTIFICATION_ID = 1; + // Keep in sync with MainActivity.java + private static final String FRAGMENT_ID_INTENT_EXTRA = "fragment-id"; + private static final int FRAGMENT_ID_HOME = 0; + private static final int FRAGMENT_ID_CRASHES = 1; + private static final int FRAGMENT_ID_FLAGS = 2; + private static final Object sLock = new Object(); @GuardedBy("sLock") private static Map<String, Boolean> sOverriddenFlags = new HashMap<>(); @@ -106,7 +112,8 @@ Intent notificationIntent = new Intent(); notificationIntent.setClassName( - getPackageName(), "org.chromium.android_webview.devui.FlagsActivity"); + getPackageName(), "org.chromium.android_webview.devui.MainActivity"); + notificationIntent.putExtra(FRAGMENT_ID_INTENT_EXTRA, FRAGMENT_ID_FLAGS); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification.Builder builder =
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 73f8b59..703a8f2 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -590,6 +590,8 @@ "screen_util.cc", "screen_util.h", "screenshot_delegate.h", + "session/fullscreen_controller.cc", + "session/fullscreen_controller.h", "session/multiprofiles_intro_dialog.cc", "session/multiprofiles_intro_dialog.h", "session/session_aborted_dialog.cc",
diff --git a/ash/accessibility/accessibility_controller_impl.cc b/ash/accessibility/accessibility_controller_impl.cc index 96df74dd..e4f3963 100644 --- a/ash/accessibility/accessibility_controller_impl.cc +++ b/ash/accessibility/accessibility_controller_impl.cc
@@ -1424,6 +1424,7 @@ UpdateAutoclickMenuPositionFromPref(); UpdateLargeCursorFromPref(); UpdateShortcutsEnabledFromPref(); + UpdateTabletModeShelfNavigationButtonsFromPref(); } void AccessibilityControllerImpl::UpdateAutoclickDelayFromPref() {
diff --git a/ash/ambient/ui/ambient_container_view_unittest.cc b/ash/ambient/ui/ambient_container_view_unittest.cc index f78b1b4..15e9180 100644 --- a/ash/ambient/ui/ambient_container_view_unittest.cc +++ b/ash/ambient/ui/ambient_container_view_unittest.cc
@@ -102,7 +102,7 @@ // Download |kImageBufferLength| / 2 + 1 images to fill buffer in PhotoModel, // in order to return false in |ShouldFetchImmediately()| and start timer. const int num_image_to_load = kImageBufferLength / 2 + 1; - task_environment_->FastForwardBy(kAnimationDuration * num_image_to_load); + task_environment()->FastForwardBy(kAnimationDuration * num_image_to_load); EXPECT_TRUE(GetTimer().IsRunning()); @@ -121,7 +121,7 @@ // Download |kImageBufferLength| / 2 + 1 images to fill buffer in PhotoModel, // in order to return false in |ShouldFetchImmediately()| and start timer. const int num_image_to_load = kImageBufferLength / 2 + 1; - task_environment_->FastForwardBy(kAnimationDuration * num_image_to_load); + task_environment()->FastForwardBy(kAnimationDuration * num_image_to_load); EXPECT_TRUE(GetTimer().IsRunning()); // Simulate mouse click to close the widget.
diff --git a/ash/ambient/ui/assistant_response_container_view.cc b/ash/ambient/ui/assistant_response_container_view.cc index fd81742..670f97f1 100644 --- a/ash/ambient/ui/assistant_response_container_view.cc +++ b/ash/ambient/ui/assistant_response_container_view.cc
@@ -63,6 +63,9 @@ case AssistantUiElementType::kText: AddTextElementView(static_cast<const AssistantTextElement*>(ui_element)); break; + case AssistantUiElementType::kTimers: + NOTIMPLEMENTED(); + break; } // Return |nullptr| to prevent animations.
diff --git a/ash/app_list/app_list_presenter_delegate_impl.cc b/ash/app_list/app_list_presenter_delegate_impl.cc index 7dac208..510306e 100644 --- a/ash/app_list/app_list_presenter_delegate_impl.cc +++ b/ash/app_list/app_list_presenter_delegate_impl.cc
@@ -34,7 +34,6 @@ #include "ui/events/keycodes/keyboard_codes_posix.h" #include "ui/views/widget/widget.h" #include "ui/wm/core/coordinate_conversion.h" -#include "ui/wm/public/activation_client.h" namespace ash { namespace { @@ -93,11 +92,8 @@ void AppListPresenterDelegateImpl::Init(AppListView* view, int64_t display_id) { view_ = view; - view->InitView( - IsTabletMode(), controller_->GetContainerForDisplayId(display_id), - base::BindRepeating( - &AppListPresenterDelegateImpl::OnViewBoundsChangedAnimationEnded, - weak_ptr_factory_.GetWeakPtr())); + view->InitView(IsTabletMode(), + controller_->GetContainerForDisplayId(display_id)); // By setting us as DnD recipient, the app list knows that we can // handle items. @@ -125,7 +121,6 @@ view_->SetShelfHasRoundedCorners( IsShelfBackgroundTypeWithRoundedCorners(shelf->GetBackgroundType())); view_->Show(IsSideShelf(shelf), IsTabletMode()); - view_->GetWidget()->ShowInactive(); SnapAppListBoundsToDisplayEdge(); @@ -325,23 +320,4 @@ window->SetBounds(bounds); } -void AppListPresenterDelegateImpl::OnViewBoundsChangedAnimationEnded() { - views::Widget* widget = view_->GetWidget(); - // If we are currently dragging the applist from the shelf, do not update - // window activation to avoid redrawing during dragging which is also a heavy - // operation. The activation will be handled when this callback is run again - // after the state bounds animation finishes. - if (Shelf::ForWindow(widget->GetNativeWindow()) - ->shelf_layout_manager() - ->IsDraggingApplist()) { - return; - } - - // Deactivation after dragging or animating is not supported. - if (!is_visible_) - return; - - UpdateActivationForAppListView(view_, IsTabletMode()); -} - } // namespace ash
diff --git a/ash/app_list/app_list_presenter_delegate_impl.h b/ash/app_list/app_list_presenter_delegate_impl.h index a4a93913..96763a6 100644 --- a/ash/app_list/app_list_presenter_delegate_impl.h +++ b/ash/app_list/app_list_presenter_delegate_impl.h
@@ -12,7 +12,6 @@ #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_observer.h" #include "base/macros.h" -#include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "ui/display/display_observer.h" #include "ui/display/screen.h" @@ -74,10 +73,6 @@ // https://crbug.com/884889). void SnapAppListBoundsToDisplayEdge(); - // Callback function which is run after a bounds animation on |view_| is - // ended. Handles activation of |view_|'s widget. - void OnViewBoundsChangedAnimationEnded(); - // Whether the app list is visible (or in the process of being shown). bool is_visible_ = false; @@ -97,8 +92,6 @@ // An observer that notifies AppListView when the shelf state has changed. ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this}; - base::WeakPtrFactory<AppListPresenterDelegateImpl> weak_ptr_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(AppListPresenterDelegateImpl); };
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc index f51e6d8..787145d4 100644 --- a/ash/app_list/app_list_presenter_delegate_unittest.cc +++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -8,7 +8,6 @@ #include "ash/accessibility/accessibility_controller_impl.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_presenter_impl.h" -#include "ash/app_list/app_list_util.h" #include "ash/app_list/model/app_list_item.h" #include "ash/app_list/test/app_list_test_helper.h" #include "ash/app_list/test/app_list_test_model.h" @@ -220,10 +219,7 @@ protected: void CreateAndOpenAppList() { app_list_view_ = new AppListView(app_list_test_delegate_.get()); - app_list_view_->InitView( - false /*is_tablet_mode*/, GetContext(), - base::BindRepeating(&UpdateActivationForAppListView, app_list_view_, - /*is_tablet_mode=*/false)); + app_list_view_->InitView(/*is_tablet_mode=*/false, GetContext()); app_list_view_->Show(false /*is_side_shelf*/, false /*is_tablet_mode*/); }
diff --git a/ash/app_list/app_list_presenter_impl_unittest.cc b/ash/app_list/app_list_presenter_impl_unittest.cc index 0416b52..238b32a 100644 --- a/ash/app_list/app_list_presenter_impl_unittest.cc +++ b/ash/app_list/app_list_presenter_impl_unittest.cc
@@ -8,7 +8,6 @@ #include <utility> #include <vector> -#include "ash/app_list/app_list_util.h" #include "ash/app_list/test/app_list_test_view_delegate.h" #include "ash/app_list/views/app_list_item_view.h" #include "ash/app_list/views/app_list_view.h" @@ -52,10 +51,7 @@ void Init(AppListView* view, int64_t display_id) override { init_called_ = true; view_ = view; - view->InitView( - /*is_tablet_mode*/ false, container_, - base::BindRepeating(&UpdateActivationForAppListView, view_, - /*is_tablet_mode=*/false)); + view->InitView(/*is_tablet_mode=*/false, container_); } void ShowForDisplay(int64_t display_id) override {} void OnClosing() override { on_dismissed_called_ = true; }
diff --git a/ash/app_list/app_list_util.cc b/ash/app_list/app_list_util.cc index ec2cf7bd..61ee209 100644 --- a/ash/app_list/app_list_util.cc +++ b/ash/app_list/app_list_util.cc
@@ -4,13 +4,8 @@ #include "ash/app_list/app_list_util.h" -#include "ash/app_list/views/app_list_main_view.h" -#include "ash/app_list/views/app_list_view.h" -#include "ash/app_list/views/contents_view.h" -#include "ui/aura/window.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/focus/focus_manager.h" -#include "ui/wm/public/activation_client.h" namespace ash { @@ -105,19 +100,4 @@ return true; } -void UpdateActivationForAppListView(AppListView* app_list_view, - bool is_tablet_mode) { - views::Widget* widget = app_list_view->GetWidget(); - const aura::Window* active_window = - wm::GetActivationClient(widget->GetNativeWindow()->GetRootWindow()) - ->GetActiveWindow(); - - // After switching to tablet mode, other app windows may be active. Show the - // app list without activating it to avoid breaking other windows' state. - if (is_tablet_mode && active_window) - return; - - widget->Show(); -} - } // namespace ash
diff --git a/ash/app_list/app_list_util.h b/ash/app_list/app_list_util.h index 59f6f38..83477ff 100644 --- a/ash/app_list/app_list_util.h +++ b/ash/app_list/app_list_util.h
@@ -13,7 +13,6 @@ } namespace ash { -class AppListView; // Returns true if the key event is an unhandled left or right arrow (unmodified // by ctrl, shift, or alt) @@ -47,11 +46,6 @@ views::Textfield* textfield, const ui::KeyEvent& key_event); -// Updates the activation for |app_list_view|. Intended to be a callback -// function for when the view's bounds are finished animating. -APP_LIST_EXPORT void UpdateActivationForAppListView(AppListView* app_list_view, - bool is_tablet_mode); - } // namespace ash #endif // ASH_APP_LIST_APP_LIST_UTIL_H_
diff --git a/ash/app_list/demo/app_list_demo_views.cc b/ash/app_list/demo/app_list_demo_views.cc index a241165..b1c8387 100644 --- a/ash/app_list/demo/app_list_demo_views.cc +++ b/ash/app_list/demo/app_list_demo_views.cc
@@ -6,7 +6,6 @@ #include <memory> -#include "ash/app_list/app_list_util.h" #include "ash/app_list/test/app_list_test_model.h" #include "ash/app_list/test/app_list_test_view_delegate.h" #include "ash/app_list/views/app_list_view.h" @@ -52,10 +51,7 @@ gfx::NativeView container = window_context; view_ = new AppListView(this); - view_->InitView( - /*is_tablet_mode=*/false, container, - base::BindRepeating(&UpdateActivationForAppListView, view_, - /*is_tablet_mode=*/false)); + view_->InitView(/*is_tablet_mode=*/false, container); view_->Show(false /*is_side_shelf*/, false /*is_tablet_mode*/); // Populate some apps.
diff --git a/ash/app_list/views/app_list_main_view.cc b/ash/app_list/views/app_list_main_view.cc index 4d18d8d..31faf4c 100644 --- a/ash/app_list/views/app_list_main_view.cc +++ b/ash/app_list/views/app_list_main_view.cc
@@ -38,6 +38,7 @@ #include "ui/views/controls/textfield/textfield.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/widget/widget.h" +#include "ui/wm/public/activation_client.h" namespace ash { @@ -84,6 +85,19 @@ search_box_view_->set_contents_view(contents_view_); } +void AppListMainView::ShowAppListWhenReady() { + // After switching to tablet mode, other app windows may be active. Show the + // app list without activating it to avoid breaking other windows' state. + const aura::Window* active_window = + wm::GetActivationClient( + app_list_view_->GetWidget()->GetNativeView()->GetRootWindow()) + ->GetActiveWindow(); + if (app_list_view_->is_tablet_mode() && active_window) + GetWidget()->ShowInactive(); + else + GetWidget()->Show(); +} + void AppListMainView::ModelChanged() { model_->RemoveObserver(this); model_ = delegate_->GetModel();
diff --git a/ash/app_list/views/app_list_main_view.h b/ash/app_list/views/app_list_main_view.h index 5ae92d0..489497e 100644 --- a/ash/app_list/views/app_list_main_view.h +++ b/ash/app_list/views/app_list_main_view.h
@@ -43,6 +43,8 @@ void Init(int initial_apps_page, SearchBoxView* search_box_view); + void ShowAppListWhenReady(); + void ModelChanged(); SearchBoxView* search_box_view() const { return search_box_view_; }
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc index 1a8aed5..743e1653a 100644 --- a/ash/app_list/views/app_list_view.cc +++ b/ash/app_list/views/app_list_view.cc
@@ -598,19 +598,13 @@ return short_animations_for_testing; } -void AppListView::InitView( - bool is_tablet_mode, - gfx::NativeView parent, - base::RepeatingClosure on_bounds_animation_ended_callback) { +void AppListView::InitView(bool is_tablet_mode, gfx::NativeView parent) { base::AutoReset<bool> auto_reset(&is_building_, true); time_shown_ = base::Time::Now(); UpdateAppListConfig(parent); InitContents(is_tablet_mode); InitWidget(parent); InitChildWidget(); - - on_bounds_animation_ended_callback_ = - std::move(on_bounds_animation_ended_callback); } void AppListView::InitContents(bool is_tablet_mode) { @@ -731,8 +725,7 @@ CloseKeyboardIfVisible(); OnTabletModeChanged(is_tablet_mode); - // Widget may be activated by |on_bounds_animation_ended_callback_|. - GetWidget()->ShowInactive(); + app_list_main_view_->ShowAppListWhenReady(); UMA_HISTOGRAM_TIMES(kAppListCreationTimeHistogram, base::Time::Now() - time_shown_.value()); @@ -2070,9 +2063,6 @@ // Layout if the animation was completed. if (!was_animation_interrupted) Layout(); - - if (on_bounds_animation_ended_callback_) - on_bounds_animation_ended_callback_.Run(); } gfx::Rect AppListView::GetItemScreenBoundsInFirstGridPage(
diff --git a/ash/app_list/views/app_list_view.h b/ash/app_list/views/app_list_view.h index 4313196b..ec86fca 100644 --- a/ash/app_list/views/app_list_view.h +++ b/ash/app_list/views/app_list_view.h
@@ -137,9 +137,7 @@ static float GetTransitionProgressForState(AppListViewState state); // Initializes the view, only done once per session. - void InitView(bool is_tablet_mode, - gfx::NativeView parent, - base::RepeatingClosure on_bounds_animation_ended_callback); + void InitView(bool is_tablet_mode, gfx::NativeView parent); // Initializes the contents of the view. void InitContents(bool is_tablet_mode); @@ -579,9 +577,6 @@ // instead of the default instance. std::unique_ptr<AppListConfig> app_list_config_; - // Callback which is run when the bounds animation of the widget is ended. - base::RepeatingClosure on_bounds_animation_ended_callback_; - base::WeakPtrFactory<AppListView> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(AppListView);
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc index 9dd5c85f..7a5dbee 100644 --- a/ash/app_list/views/app_list_view_unittest.cc +++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -13,7 +13,6 @@ #include <utility> #include <vector> -#include "ash/app_list/app_list_util.h" #include "ash/app_list/model/search/search_box_model.h" #include "ash/app_list/test/app_list_test_model.h" #include "ash/app_list/test/app_list_test_view_delegate.h" @@ -190,9 +189,7 @@ void Initialize(bool is_tablet_mode) { delegate_ = std::make_unique<AppListTestViewDelegate>(); view_ = new AppListView(delegate_.get()); - view_->InitView(is_tablet_mode, GetContext(), - base::BindRepeating(&UpdateActivationForAppListView, view_, - is_tablet_mode)); + view_->InitView(is_tablet_mode, GetContext()); test_api_.reset(new AppsGridViewTestApi(apps_grid_view())); EXPECT_FALSE(view_->GetWidget()->IsVisible()); } @@ -452,9 +449,7 @@ "weather", "Unimportant Title")); delegate_ = std::make_unique<AppListTestViewDelegate>(); view_ = new AppListView(delegate_.get()); - view_->InitView(false /*is_tablet_mode*/, GetContext(), - base::BindRepeating(&UpdateActivationForAppListView, view_, - /*is_tablet_mode=*/false)); + view_->InitView(false /*is_tablet_mode*/, GetContext()); Show(); test_api_.reset(new AppsGridViewTestApi(apps_grid_view())); suggestions_container_ = contents_view()
diff --git a/ash/app_list/views/apps_grid_view_unittest.cc b/ash/app_list/views/apps_grid_view_unittest.cc index 1ed871c..62db6ec 100644 --- a/ash/app_list/views/apps_grid_view_unittest.cc +++ b/ash/app_list/views/apps_grid_view_unittest.cc
@@ -10,7 +10,6 @@ #include <string> #include "ash/app_list/app_list_metrics.h" -#include "ash/app_list/app_list_util.h" #include "ash/app_list/model/app_list_folder_item.h" #include "ash/app_list/model/app_list_item.h" #include "ash/app_list/model/app_list_model.h" @@ -202,10 +201,7 @@ parent->SetBounds(gfx::Rect(gfx::Point(0, 0), gfx::Size(1024, 768))); delegate_ = std::make_unique<AppListTestViewDelegate>(); app_list_view_ = new AppListView(delegate_.get()); - app_list_view_->InitView( - create_as_tablet_mode_, parent, - base::BindRepeating(&UpdateActivationForAppListView, app_list_view_, - create_as_tablet_mode_)); + app_list_view_->InitView(create_as_tablet_mode_, parent); app_list_view_->Show(false /*is_side_shelf*/, create_as_tablet_mode_); contents_view_ = app_list_view_->app_list_main_view()->contents_view(); apps_grid_view_ = contents_view_->GetAppsContainerView()->apps_grid_view();
diff --git a/ash/app_list/views/contents_view.cc b/ash/app_list/views/contents_view.cc index a06a229c..02a016c 100644 --- a/ash/app_list/views/contents_view.cc +++ b/ash/app_list/views/contents_view.cc
@@ -384,15 +384,6 @@ return IsStateActive(AppListState::kStateEmbeddedAssistant); } -void ContentsView::FocusEmbeddedAssistantPage() { - const int assistant_page = - GetPageIndexForState(AppListState::kStateEmbeddedAssistant); - DCHECK_GE(assistant_page, 0); - auto* page_view = GetPageView(assistant_page); - page_view->RequestFocus(); - page_view->SetVisible(true); -} - void ContentsView::InitializeSearchBoxAnimation(AppListState current_state, AppListState target_state) { SearchBoxView* search_box = GetSearchBoxView();
diff --git a/ash/app_list/views/contents_view.h b/ash/app_list/views/contents_view.h index ed174fce..11ec5a50 100644 --- a/ash/app_list/views/contents_view.h +++ b/ash/app_list/views/contents_view.h
@@ -117,8 +117,6 @@ void ShowEmbeddedAssistantUI(bool show); bool IsShowingEmbeddedAssistantUI() const; - void FocusEmbeddedAssistantPage(); - void ShowFolderContent(AppListFolderItem* folder); // Sets the active launcher page and animates the pages into place.
diff --git a/ash/app_list/views/search_box_view_unittest.cc b/ash/app_list/views/search_box_view_unittest.cc index 5955d66..955f32f 100644 --- a/ash/app_list/views/search_box_view_unittest.cc +++ b/ash/app_list/views/search_box_view_unittest.cc
@@ -10,7 +10,6 @@ #include <string> #include <utility> -#include "ash/app_list/app_list_util.h" #include "ash/app_list/test/app_list_test_view_delegate.h" #include "ash/app_list/views/app_list_main_view.h" #include "ash/app_list/views/app_list_view.h" @@ -73,10 +72,7 @@ views::test::WidgetTest::SetUp(); app_list_view_ = new AppListView(&view_delegate_); - app_list_view_->InitView( - /*is_tablet_mode=*/false, GetContext(), - base::BindRepeating(&UpdateActivationForAppListView, app_list_view_, - /*is_tablet_mode=*/false)); + app_list_view_->InitView(/*is_tablet_mode=*/false, GetContext()); widget_ = CreateTopLevelPlatformWidget(); view_ =
diff --git a/ash/app_list/views/search_result_page_view_unittest.cc b/ash/app_list/views/search_result_page_view_unittest.cc index 1d58c45..8a0e160 100644 --- a/ash/app_list/views/search_result_page_view_unittest.cc +++ b/ash/app_list/views/search_result_page_view_unittest.cc
@@ -8,7 +8,6 @@ #include <utility> #include <vector> -#include "ash/app_list/app_list_util.h" #include "ash/app_list/model/app_list_model.h" #include "ash/app_list/test/app_list_test_view_delegate.h" #include "ash/app_list/test/test_search_result.h" @@ -78,10 +77,7 @@ // Setting up views. delegate_ = std::make_unique<AppListTestViewDelegate>(); app_list_view_ = new AppListView(delegate_.get()); - app_list_view_->InitView( - /*is_tablet_mode=*/false, GetContext(), - base::BindRepeating(&UpdateActivationForAppListView, app_list_view_, - /*is_tablet_mode=*/false)); + app_list_view_->InitView(/*is_tablet_mode=*/false, GetContext()); app_list_view_->Show(false /*is_side_shelf*/, false /*is_tablet_mode*/); ContentsView* contents_view =
diff --git a/ash/assistant/assistant_alarm_timer_controller_unittest.cc b/ash/assistant/assistant_alarm_timer_controller_unittest.cc index 769c327..e267bd3c 100644 --- a/ash/assistant/assistant_alarm_timer_controller_unittest.cc +++ b/ash/assistant/assistant_alarm_timer_controller_unittest.cc
@@ -106,8 +106,8 @@ // API will hang when |time_delta| is sufficiently large, ultimately resulting // in unittest timeout. void AdvanceClock(base::TimeDelta time_delta) { - task_environment_->AdvanceClock(time_delta); - task_environment_->RunUntilIdle(); + task_environment()->AdvanceClock(time_delta); + task_environment()->RunUntilIdle(); } AssistantAlarmTimerController* controller() { return controller_; }
diff --git a/ash/assistant/assistant_interaction_controller.cc b/ash/assistant/assistant_interaction_controller.cc index 4322b021..b6291baa 100644 --- a/ash/assistant/assistant_interaction_controller.cc +++ b/ash/assistant/assistant_interaction_controller.cc
@@ -16,6 +16,7 @@ #include "ash/assistant/model/assistant_ui_model.h" #include "ash/assistant/model/ui/assistant_card_element.h" #include "ash/assistant/model/ui/assistant_text_element.h" +#include "ash/assistant/model/ui/assistant_timers_element.h" #include "ash/assistant/ui/assistant_ui_constants.h" #include "ash/assistant/util/assistant_util.h" #include "ash/assistant/util/deep_link_util.h" @@ -617,8 +618,25 @@ if (!HasActiveInteraction()) return; - // TODO(dmblack): Implement inline UI for timers. - NOTIMPLEMENTED(); + if (!IsResponseProcessingV2Enabled()) { + // If this occurs, the server has broken our response ordering agreement. We + // should not crash but we cannot handle the response so we ignore it. + if (!HasUnprocessedPendingResponse()) { + NOTREACHED(); + return; + } + } + + AssistantResponse* response = GetResponseForActiveInteraction(); + response->AddUiElement(std::make_unique<AssistantTimersElement>(timer_ids)); + + if (IsResponseProcessingV2Enabled()) { + // If |response| is pending, commit it to cause the response for the + // previous interaction, if one exists, to be animated off stage and the new + // |response| to begin rendering. + if (response == model_.pending_response()) + model_.CommitPendingResponse(); + } } void AssistantInteractionController::OnSpeechRecognitionStarted() {}
diff --git a/ash/assistant/assistant_notification_controller_unittest.cc b/ash/assistant/assistant_notification_controller_unittest.cc index e0af213..85a0b02 100644 --- a/ash/assistant/assistant_notification_controller_unittest.cc +++ b/ash/assistant/assistant_notification_controller_unittest.cc
@@ -117,7 +117,7 @@ } void ForwardTimeInMs(int time_in_ms) { - task_environment_->FastForwardBy( + task_environment()->FastForwardBy( base::TimeDelta::FromMilliseconds(time_in_ms)); }
diff --git a/ash/assistant/model/BUILD.gn b/ash/assistant/model/BUILD.gn index b0238c99..46f6f5d 100644 --- a/ash/assistant/model/BUILD.gn +++ b/ash/assistant/model/BUILD.gn
@@ -39,6 +39,8 @@ "ui/assistant_card_element.h", "ui/assistant_text_element.cc", "ui/assistant_text_element.h", + "ui/assistant_timers_element.cc", + "ui/assistant_timers_element.h", "ui/assistant_ui_element.cc", "ui/assistant_ui_element.h", ]
diff --git a/ash/assistant/model/ui/assistant_timers_element.cc b/ash/assistant/model/ui/assistant_timers_element.cc new file mode 100644 index 0000000..c0a2a6a --- /dev/null +++ b/ash/assistant/model/ui/assistant_timers_element.cc
@@ -0,0 +1,16 @@ +// Copyright 2020 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 "ash/assistant/model/ui/assistant_timers_element.h" + +namespace ash { + +AssistantTimersElement::AssistantTimersElement( + const std::vector<std::string>& timer_ids) + : AssistantUiElement(AssistantUiElementType::kTimers), + timer_ids_(timer_ids) {} + +AssistantTimersElement::~AssistantTimersElement() = default; + +} // namespace ash
diff --git a/ash/assistant/model/ui/assistant_timers_element.h b/ash/assistant/model/ui/assistant_timers_element.h new file mode 100644 index 0000000..f77702c --- /dev/null +++ b/ash/assistant/model/ui/assistant_timers_element.h
@@ -0,0 +1,33 @@ +// Copyright 2020 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 ASH_ASSISTANT_MODEL_UI_ASSISTANT_TIMERS_ELEMENT_H_ +#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_TIMERS_ELEMENT_H_ + +#include <string> +#include <vector> + +#include "ash/assistant/model/ui/assistant_ui_element.h" +#include "base/component_export.h" + +namespace ash { + +// An Assistant UI element that is bound to and renders a set of timers. +class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantTimersElement + : public AssistantUiElement { + public: + explicit AssistantTimersElement(const std::vector<std::string>& timer_ids); + AssistantTimersElement(const AssistantTimersElement&) = delete; + AssistantTimersElement& operator=(const AssistantTimersElement&) = delete; + ~AssistantTimersElement() override; + + const std::vector<std::string>& timer_ids() const { return timer_ids_; } + + private: + std::vector<std::string> timer_ids_; +}; + +} // namespace ash + +#endif // ASH_ASSISTANT_MODEL_UI_ASSISTANT_TIMERS_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_ui_element.h b/ash/assistant/model/ui/assistant_ui_element.h index 2b35077..50d0635 100644 --- a/ash/assistant/model/ui/assistant_ui_element.h +++ b/ash/assistant/model/ui/assistant_ui_element.h
@@ -15,8 +15,9 @@ // Defines possible types of Assistant UI elements. enum class AssistantUiElementType { - kCard, // See AssistantCardElement. - kText, // See AssistantTextElement. + kCard, // See AssistantCardElement. + kText, // See AssistantTextElement. + kTimers, // See AssistantTimersElement. }; // AssistantUiElement ----------------------------------------------------------
diff --git a/ash/assistant/ui/BUILD.gn b/ash/assistant/ui/BUILD.gn index 42d6e66..19753fa 100644 --- a/ash/assistant/ui/BUILD.gn +++ b/ash/assistant/ui/BUILD.gn
@@ -64,6 +64,8 @@ "main_stage/assistant_query_view.h", "main_stage/assistant_text_element_view.cc", "main_stage/assistant_text_element_view.h", + "main_stage/assistant_timers_element_view.cc", + "main_stage/assistant_timers_element_view.h", "main_stage/assistant_ui_element_view.cc", "main_stage/assistant_ui_element_view.h", "main_stage/assistant_ui_element_view_factory.cc",
diff --git a/ash/assistant/ui/main_stage/assistant_timers_element_view.cc b/ash/assistant/ui/main_stage/assistant_timers_element_view.cc new file mode 100644 index 0000000..cfc98cb --- /dev/null +++ b/ash/assistant/ui/main_stage/assistant_timers_element_view.cc
@@ -0,0 +1,81 @@ +// Copyright 2020 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 "ash/assistant/ui/main_stage/assistant_timers_element_view.h" + +#include "ash/assistant/model/assistant_alarm_timer_model.h" +#include "ash/assistant/model/ui/assistant_timers_element.h" +#include "ash/assistant/ui/assistant_view_delegate.h" +#include "base/strings/utf_string_conversions.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/fill_layout.h" + +namespace ash { + +AssistantTimersElementView::AssistantTimersElementView( + AssistantViewDelegate* delegate, + const AssistantTimersElement* timers_element) + : delegate_(delegate), timers_element_(timers_element) { + InitLayout(); + UpdateLayout(); + + delegate_->AddAlarmTimerModelObserver(this); +} + +AssistantTimersElementView::~AssistantTimersElementView() { + delegate_->RemoveAlarmTimerModelObserver(this); +} + +const char* AssistantTimersElementView::GetClassName() const { + return "AssistantTimersElementView"; +} + +ui::Layer* AssistantTimersElementView::GetLayerForAnimating() { + return layer(); +} + +std::string AssistantTimersElementView::ToStringForTesting() const { + return base::UTF16ToUTF8(label_->GetText()); +} + +void AssistantTimersElementView::ChildPreferredSizeChanged(views::View* child) { + PreferredSizeChanged(); +} + +void AssistantTimersElementView::OnTimerUpdated( + const mojom::AssistantTimer& timer) { + UpdateLayout(); +} + +// TODO(dmblack): Update w/ actual UI adhering to the spec. +void AssistantTimersElementView::InitLayout() { + // Layout. + SetLayoutManager(std::make_unique<views::FillLayout>()); + + // Label. + label_ = AddChildView(std::make_unique<views::Label>()); + label_->SetMultiLine(true); + + // Layer. + SetPaintToLayer(); + layer()->SetFillsBoundsOpaquely(false); +} + +// TODO(dmblack): Update w/ actual UI adhering to the spec. +void AssistantTimersElementView::UpdateLayout() { + std::stringstream stream; + + for (const auto& timer_id : timers_element_->timer_ids()) { + // NOTE: The timer for |timer_id| may no longer exist in the model if it + // has been removed while Assistant UI is still showing. This will be better + // handled in production once the UI spec has been implemented. + const auto* timer = delegate_->GetAlarmTimerModel()->GetTimerById(timer_id); + stream << (timer ? timer->remaining_time : base::TimeDelta()).InSeconds(); + stream << "\n"; + } + + label_->SetText(base::UTF8ToUTF16(stream.str())); +} + +} // namespace ash
diff --git a/ash/assistant/ui/main_stage/assistant_timers_element_view.h b/ash/assistant/ui/main_stage/assistant_timers_element_view.h new file mode 100644 index 0000000..0d6ea3df --- /dev/null +++ b/ash/assistant/ui/main_stage/assistant_timers_element_view.h
@@ -0,0 +1,57 @@ +// Copyright 2020 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 ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_TIMERS_ELEMENT_VIEW_H_ +#define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_TIMERS_ELEMENT_VIEW_H_ + +#include <string> + +#include "ash/assistant/model/assistant_alarm_timer_model_observer.h" +#include "ash/assistant/ui/main_stage/assistant_ui_element_view.h" +#include "base/component_export.h" + +namespace views { +class Label; +} // namespace views + +namespace ash { + +class AssistantTimersElement; +class AssistantViewDelegate; + +// AssistantTimersElementView is the visual representation of an +// AssistantTimersElement. It is a child view of UiElementContainerView. +class COMPONENT_EXPORT(ASSISTANT_UI) AssistantTimersElementView + : public AssistantUiElementView, + public AssistantAlarmTimerModelObserver { + public: + AssistantTimersElementView(AssistantViewDelegate* delegate, + const AssistantTimersElement* timers_element); + AssistantTimersElementView(const AssistantTimersElementView&) = delete; + AssistantTimersElementView& operator=(const AssistantTimersElementView&) = + delete; + ~AssistantTimersElementView() override; + + // AssistantUiElementView: + const char* GetClassName() const override; + ui::Layer* GetLayerForAnimating() override; + std::string ToStringForTesting() const override; + void ChildPreferredSizeChanged(views::View* child) override; + + // AssistantAlarmTimerModelObserver: + void OnTimerUpdated(const mojom::AssistantTimer& timer) override; + + private: + void InitLayout(); + void UpdateLayout(); + + AssistantViewDelegate* const delegate_; // Owned (indirectly) by Shell. + views::Label* label_; // Owned by view hierarchy. + + const AssistantTimersElement* timers_element_; +}; + +} // namespace ash + +#endif // ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_TIMERS_ELEMENT_VIEW_H_
diff --git a/ash/assistant/ui/main_stage/assistant_ui_element_view_factory.cc b/ash/assistant/ui/main_stage/assistant_ui_element_view_factory.cc index ad27ff4..7f83fd7c 100644 --- a/ash/assistant/ui/main_stage/assistant_ui_element_view_factory.cc +++ b/ash/assistant/ui/main_stage/assistant_ui_element_view_factory.cc
@@ -6,10 +6,12 @@ #include "ash/assistant/model/ui/assistant_card_element.h" #include "ash/assistant/model/ui/assistant_text_element.h" +#include "ash/assistant/model/ui/assistant_timers_element.h" #include "ash/assistant/model/ui/assistant_ui_element.h" #include "ash/assistant/ui/assistant_view_delegate.h" #include "ash/assistant/ui/main_stage/assistant_card_element_view.h" #include "ash/assistant/ui/main_stage/assistant_text_element_view.h" +#include "ash/assistant/ui/main_stage/assistant_timers_element_view.h" #include "ash/assistant/ui/main_stage/assistant_ui_element_view.h" namespace ash { @@ -29,6 +31,9 @@ case AssistantUiElementType::kText: return std::make_unique<AssistantTextElementView>( static_cast<const AssistantTextElement*>(ui_element)); + case AssistantUiElementType::kTimers: + return std::make_unique<AssistantTimersElementView>( + delegate_, static_cast<const AssistantTimersElement*>(ui_element)); } }
diff --git a/ash/autoclick/autoclick_unittest.cc b/ash/autoclick/autoclick_unittest.cc index 68a761e..af0ddcc 100644 --- a/ash/autoclick/autoclick_unittest.cc +++ b/ash/autoclick/autoclick_unittest.cc
@@ -140,7 +140,7 @@ } void FastForwardBy(int milliseconds) { - task_environment_->FastForwardBy( + task_environment()->FastForwardBy( base::TimeDelta::FromMilliseconds(milliseconds)); }
diff --git a/ash/display/display_prefs.cc b/ash/display/display_prefs.cc index b547944..74505f52 100644 --- a/ash/display/display_prefs.cc +++ b/ash/display/display_prefs.cc
@@ -894,8 +894,4 @@ StoreDisplayMixedMirrorModeParams(local_state_, mixed_params); } -void DisplayPrefs::SetPrefServiceForTest(PrefService* local_state) { - local_state_ = local_state; -} - } // namespace ash
diff --git a/ash/display/display_prefs.h b/ash/display/display_prefs.h index bb42e6ce..c1593fc 100644 --- a/ash/display/display_prefs.h +++ b/ash/display/display_prefs.h
@@ -75,11 +75,8 @@ // Loads display preferences from |local_state_|. void LoadDisplayPreferences(); - // Sets |local_state| for testing. - void SetPrefServiceForTest(PrefService* local_state); - private: - PrefService* local_state_ = nullptr; // Non-owned and must out-live this. + PrefService* local_state_; // Non-owned and must out-live this. bool store_requested_ = false; DISALLOW_COPY_AND_ASSIGN(DisplayPrefs);
diff --git a/ash/display/display_prefs_unittest.cc b/ash/display/display_prefs_unittest.cc index b05a4bf4..bc94956b 100644 --- a/ash/display/display_prefs_unittest.cc +++ b/ash/display/display_prefs_unittest.cc
@@ -50,12 +50,6 @@ namespace ash { namespace { -const char kPrimaryIdKey[] = "primary-id"; -const char kPositionKey[] = "position"; -const char kOffsetKey[] = "offset"; -const char kPlacementDisplayIdKey[] = "placement.display_id"; -const char kPlacementParentDisplayIdKey[] = "placement.parent_display_id"; - bool IsRotationLocked() { return ash::Shell::Get()->screen_orientation_controller()->rotation_locked(); } @@ -120,10 +114,7 @@ ~DisplayPrefsTest() override {} void SetUp() override { - DisableProvideLocalState(); AshTestBase::SetUp(); - DisplayPrefs::RegisterLocalStatePrefs(local_state_.registry()); - display_prefs()->SetPrefServiceForTest(&local_state_); observer_ = std::make_unique<DisplayConfigurationObserver>(); observer_->OnDisplaysInitialized(); } @@ -235,15 +226,14 @@ .ToString(); } - chromeos::DisplayPowerState GetRequestedPowerState() const { - return Shell::Get()->display_configurator()->GetRequestedPowerState(); + display::DisplayConfigurator* display_configurator() { + return Shell::Get()->display_configurator(); } - PrefService* local_state() { return &local_state_; } + DisplayPrefs* display_prefs() { return Shell::Get()->display_prefs(); } private: std::unique_ptr<WindowTreeHostManager::Observer> observer_; - TestingPrefServiceSimple local_state_; base::test::ScopedFeatureList scoped_feature_list_; DISALLOW_COPY_AND_ASSIGN(DisplayPrefsTest); @@ -277,11 +267,12 @@ // requested_power_state_ should be chromeos::DISPLAY_POWER_ALL_ON at boot const base::Optional<chromeos::DisplayPowerState> requested_power_state = - Shell::Get()->display_configurator()->GetRequestedPowerStateForTest(); + display_configurator()->GetRequestedPowerStateForTest(); ASSERT_NE(base::nullopt, requested_power_state); EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, *requested_power_state); // DisplayPowerState should be ignored at boot. - EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, GetRequestedPowerState()); + EXPECT_EQ(chromeos::DISPLAY_POWER_ALL_ON, + display_configurator()->GetRequestedPowerState()); Shell::Get()->display_manager()->UpdateDisplays(); // Check if the layout settings are notified to the system properly. @@ -514,8 +505,13 @@ EXPECT_EQ(id2, stored_placement.parent_display_id); EXPECT_EQ(id2, stored_layout.primary_id); - if (true) - return; + // TODO(oshima): Make the below pass and re-enable, https://crbug.com/1063529 +#if 0 + const char kPrimaryIdKey[] = "primary-id"; + const char kPositionKey[] = "position"; + const char kOffsetKey[] = "offset"; + const char kPlacementDisplayIdKey[] = "placement.display_id"; + const char kPlacementParentDisplayIdKey[] = "placement.parent_display_id"; std::string primary_id_str; EXPECT_TRUE(layout_value->GetString(kPrimaryIdKey, &primary_id_str)); @@ -609,6 +605,7 @@ EXPECT_TRUE(property->GetInteger("height", &height)); EXPECT_EQ(500, width); EXPECT_EQ(400, height); +#endif } TEST_F(DisplayPrefsTest, PreventStore) { @@ -804,31 +801,32 @@ TEST_F(DisplayPrefsTest, DisplayPowerStateAfterRestart) { display_prefs()->StoreDisplayPowerStateForTest( chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON); + EXPECT_EQ("internal_off_external_on", + local_state()->GetString(prefs::kDisplayPowerState)); + display_configurator()->reset_requested_power_state_for_test(); LoadDisplayPreferences(); EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, - GetRequestedPowerState()); + display_configurator()->GetRequestedPowerState()); } TEST_F(DisplayPrefsTest, DontSaveAndRestoreAllOff) { display_prefs()->StoreDisplayPowerStateForTest( chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON); - LoadDisplayPreferences(); - // DisplayPowerState should be ignored at boot. - EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, - GetRequestedPowerState()); - - display_prefs()->StoreDisplayPowerStateForTest( - chromeos::DISPLAY_POWER_ALL_OFF); - EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, - GetRequestedPowerState()); EXPECT_EQ("internal_off_external_on", local_state()->GetString(prefs::kDisplayPowerState)); - // Don't try to load + // Don't save ALL_OFF. + display_prefs()->StoreDisplayPowerStateForTest( + chromeos::DISPLAY_POWER_ALL_OFF); + EXPECT_EQ("internal_off_external_on", + local_state()->GetString(prefs::kDisplayPowerState)); + + // Don't restore ALL_OFF. local_state()->SetString(prefs::kDisplayPowerState, "all_off"); + display_configurator()->reset_requested_power_state_for_test(); LoadDisplayPreferences(); - EXPECT_EQ(chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, - GetRequestedPowerState()); + EXPECT_EQ(base::nullopt, + display_configurator()->GetRequestedPowerStateForTest()); } // Tests that display configuration changes caused by TabletModeController
diff --git a/ash/login/login_screen_test_api.cc b/ash/login/login_screen_test_api.cc index ab0e06e2..5609088 100644 --- a/ash/login/login_screen_test_api.cc +++ b/ash/login/login_screen_test_api.cc
@@ -162,6 +162,11 @@ } // static +bool LoginScreenTestApi::IsCancelButtonShown() { + return IsLoginShelfViewButtonShown(LoginShelfView::kCancel); +} + +// static bool LoginScreenTestApi::IsParentAccessButtonShown() { return IsLoginShelfViewButtonShown(LoginShelfView::kParentAccess); } @@ -204,13 +209,21 @@ // static bool LoginScreenTestApi::ClickAddUserButton() { LoginShelfView* view = GetLoginShelfView(); - return view && view->SimulateAddUserButtonForTesting(); + return view && + view->SimulateButtonPressedForTesting(LoginShelfView::kAddUser); +} + +// static +bool LoginScreenTestApi::ClickCancelButton() { + LoginShelfView* view = GetLoginShelfView(); + return view && view->SimulateButtonPressedForTesting(LoginShelfView::kCancel); } // static bool LoginScreenTestApi::ClickGuestButton() { LoginShelfView* view = GetLoginShelfView(); - return view && view->SimulateGuestButtonForTesting(); + return view && + view->SimulateButtonPressedForTesting(LoginShelfView::kBrowseAsGuest); } // static
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc index 7d705f0..c3b35ff 100644 --- a/ash/public/cpp/ash_features.cc +++ b/ash/public/cpp/ash_features.cc
@@ -105,7 +105,7 @@ base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kSwipingFromLeftEdgeToGoBack{ - "SwipingFromLeftEdgeToGoBack", base::FEATURE_DISABLED_BY_DEFAULT}; + "SwipingFromLeftEdgeToGoBack", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kDragFromShelfToHomeOrOverview{ "DragFromShelfToHomeOrOverview", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -206,11 +206,7 @@ } bool IsSwipingFromLeftEdgeToGoBackEnabled() { - // The kSwipingFromLeftEdgeToGoBack feature is only enabled on the devices - // that have hotseat enabled (i.e., on Krane and on Dogfood devices) in M80. - // See crbug.com/1030122 for details. - return base::FeatureList::IsEnabled(kSwipingFromLeftEdgeToGoBack) || - chromeos::switches::ShouldShowShelfHotseat(); + return base::FeatureList::IsEnabled(kSwipingFromLeftEdgeToGoBack); } bool IsDragFromShelfToHomeOrOverviewEnabled() {
diff --git a/ash/public/cpp/login_screen_test_api.h b/ash/public/cpp/login_screen_test_api.h index 17848875..d021876 100644 --- a/ash/public/cpp/login_screen_test_api.h +++ b/ash/public/cpp/login_screen_test_api.h
@@ -24,12 +24,14 @@ static bool IsAuthErrorBubbleShown(); static bool IsGuestButtonShown(); static bool IsAddUserButtonShown(); + static bool IsCancelButtonShown(); static bool IsParentAccessButtonShown(); static void SubmitPassword(const AccountId& account_id, const std::string& password); static int64_t GetUiUpdateCount(); static bool LaunchApp(const std::string& app_id); static bool ClickAddUserButton(); + static bool ClickCancelButton(); static bool ClickGuestButton(); static bool WaitForUiUpdate(int64_t previous_update_count); static int GetUsersCount();
diff --git a/ash/session/fullscreen_controller.cc b/ash/session/fullscreen_controller.cc new file mode 100644 index 0000000..c9541150 --- /dev/null +++ b/ash/session/fullscreen_controller.cc
@@ -0,0 +1,70 @@ +// Copyright 2020 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 "ash/session/fullscreen_controller.h" + +#include "ash/session/session_controller_impl.h" +#include "ash/shelf/shelf.h" +#include "ash/wm/window_state.h" +#include "ash/wm/wm_event.h" +#include "chromeos/dbus/power_manager/idle.pb.h" + +namespace ash { + +FullscreenController::FullscreenController( + SessionControllerImpl* session_controller) + : session_controller_(session_controller) { + auto* power_manager = chromeos::PowerManagerClient::Get(); + // Might be nullptr in tests. + if (power_manager) { + power_manager->AddObserver(this); + } +} + +FullscreenController::~FullscreenController() { + auto* power_manager = chromeos::PowerManagerClient::Get(); + if (power_manager) { + power_manager->RemoveObserver(this); + } +} + +// static +void FullscreenController::MaybeExitFullscreen() { + // If the active window is fullscreen, exit fullscreen to avoid the web page + // or app mimicking the lock screen. Do not exit fullscreen if the shelf is + // visible while in fullscreen because the shelf makes it harder for a web + // page or app to mimic the lock screen. + WindowState* active_window_state = WindowState::ForActiveWindow(); + if (!active_window_state || !active_window_state->IsFullscreen()) + return; + + Shelf* shelf = Shelf::ForWindow(active_window_state->window()); + const bool shelf_visible = + shelf->GetVisibilityState() == ShelfVisibilityState::SHELF_VISIBLE; + + if (shelf_visible && !active_window_state->GetHideShelfWhenFullscreen()) + return; + + const WMEvent event(WM_EVENT_TOGGLE_FULLSCREEN); + active_window_state->OnWMEvent(&event); +} + +void FullscreenController::SuspendImminent( + power_manager::SuspendImminent::Reason reason) { + if (session_controller_->login_status() != LoginStatus::GUEST) + return; + + MaybeExitFullscreen(); +} + +void FullscreenController::ScreenIdleStateChanged( + const power_manager::ScreenIdleState& proto) { + if (session_controller_->login_status() != LoginStatus::GUEST) + return; + + if (proto.off() || proto.dimmed()) + MaybeExitFullscreen(); +} + +} // namespace ash
diff --git a/ash/session/fullscreen_controller.h b/ash/session/fullscreen_controller.h new file mode 100644 index 0000000..17112ab --- /dev/null +++ b/ash/session/fullscreen_controller.h
@@ -0,0 +1,35 @@ +// Copyright 2020 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 ASH_SESSION_FULLSCREEN_CONTROLLER_H_ +#define ASH_SESSION_FULLSCREEN_CONTROLLER_H_ + +#include "chromeos/dbus/power/power_manager_client.h" + +namespace ash { + +class SessionControllerImpl; + +class FullscreenController : public chromeos::PowerManagerClient::Observer { + public: + explicit FullscreenController(SessionControllerImpl* session_controller); + FullscreenController(const FullscreenController&) = delete; + FullscreenController& operator=(const FullscreenController&) = delete; + + ~FullscreenController() override; + + static void MaybeExitFullscreen(); + + private: + // chromeos::PowerManagerClient::Observer: + void SuspendImminent(power_manager::SuspendImminent::Reason reason) override; + void ScreenIdleStateChanged( + const power_manager::ScreenIdleState& proto) override; + + const SessionControllerImpl* const session_controller_; +}; + +} // namespace ash + +#endif // ASH_SESSION_FULLSCREEN_CONTROLLER_H_
diff --git a/ash/session/session_controller_impl.cc b/ash/session/session_controller_impl.cc index 111ca8e..93989313 100644 --- a/ash/session/session_controller_impl.cc +++ b/ash/session/session_controller_impl.cc
@@ -13,6 +13,7 @@ #include "ash/public/cpp/session/session_activation_observer.h" #include "ash/public/cpp/session/session_controller_client.h" #include "ash/public/cpp/session/user_info.h" +#include "ash/session/fullscreen_controller.h" #include "ash/session/multiprofiles_intro_dialog.h" #include "ash/session/session_aborted_dialog.h" #include "ash/session/session_observer.h" @@ -22,9 +23,7 @@ #include "ash/system/screen_security/screen_switch_check_controller.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/mru_window_tracker.h" -#include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/command_line.h" @@ -39,7 +38,8 @@ namespace ash { -SessionControllerImpl::SessionControllerImpl() = default; +SessionControllerImpl::SessionControllerImpl() + : fullscreen_controller_(std::make_unique<FullscreenController>(this)) {} SessionControllerImpl::~SessionControllerImpl() { // Abort pending start lock request. @@ -367,17 +367,7 @@ } void SessionControllerImpl::PrepareForLock(PrepareForLockCallback callback) { - // If the active window is fullscreen, exit fullscreen to avoid the web page - // or app mimicking the lock screen. Do not exit fullscreen if the shelf is - // visible while in fullscreen because the shelf makes it harder for a web - // page or app to mimick the lock screen. - WindowState* active_window_state = WindowState::ForActiveWindow(); - if (active_window_state && active_window_state->IsFullscreen() && - active_window_state->GetHideShelfWhenFullscreen()) { - const WMEvent event(WM_EVENT_TOGGLE_FULLSCREEN); - active_window_state->OnWMEvent(&event); - } - + FullscreenController::MaybeExitFullscreen(); std::move(callback).Run(); }
diff --git a/ash/session/session_controller_impl.h b/ash/session/session_controller_impl.h index ad8247e1..54c8b2da 100644 --- a/ash/session/session_controller_impl.h +++ b/ash/session/session_controller_impl.h
@@ -26,6 +26,7 @@ namespace ash { +class FullscreenController; class SessionControllerClient; class SessionObserver; class TestSessionControllerClient; @@ -308,6 +309,8 @@ PrefService* last_active_user_prefs_ = nullptr; + std::unique_ptr<FullscreenController> fullscreen_controller_; + base::WeakPtrFactory<SessionControllerImpl> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(SessionControllerImpl);
diff --git a/ash/shelf/hotseat_widget_unittest.cc b/ash/shelf/hotseat_widget_unittest.cc index 6598f66..a85cede 100644 --- a/ash/shelf/hotseat_widget_unittest.cc +++ b/ash/shelf/hotseat_widget_unittest.cc
@@ -128,7 +128,7 @@ GetAppListTestHelper()->WaitUntilIdle(); // Advance clock to make sure long press gesture is triggered. - task_environment_->AdvanceClock(base::TimeDelta::FromSeconds(5)); + task_environment()->AdvanceClock(base::TimeDelta::FromSeconds(5)); GetAppListTestHelper()->WaitUntilIdle(); GetEventGenerator()->ReleaseTouch();
diff --git a/ash/shelf/login_shelf_view.cc b/ash/shelf/login_shelf_view.cc index 0db0b1e..98a6f99 100644 --- a/ash/shelf/login_shelf_view.cc +++ b/ash/shelf/login_shelf_view.cc
@@ -41,6 +41,7 @@ #include "ui/base/models/menu_model.h" #include "ui/base/models/simple_menu_model.h" #include "ui/compositor/scoped_layer_animation_settings.h" +#include "ui/events/types/event_type.h" #include "ui/gfx/canvas.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/geometry/rect.h" @@ -573,21 +574,15 @@ kiosk_apps_button_->LaunchAppForTesting(app_id); } -bool LoginShelfView::SimulateAddUserButtonForTesting() { - views::View* add_user_button = GetViewByID(kAddUser); - if (!add_user_button->GetEnabled()) +bool LoginShelfView::SimulateButtonPressedForTesting( + LoginShelfView::ButtonId button_id) { + views::View* button = GetViewByID(button_id); + if (!button->GetEnabled()) return false; - StartAddUser(); - return true; -} - -bool LoginShelfView::SimulateGuestButtonForTesting() { - views::View* guest_login_button = GetViewByID(kBrowseAsGuest); - if (!guest_login_button->GetEnabled()) - return false; - - Shell::Get()->login_screen_controller()->LoginAsGuest(); + ButtonPressed(static_cast<LoginShelfButton*>(button), + ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::PointF(), + gfx::PointF(), base::TimeTicks(), 0, 0)); return true; }
diff --git a/ash/shelf/login_shelf_view.h b/ash/shelf/login_shelf_view.h index 984d835d..9a87f1b 100644 --- a/ash/shelf/login_shelf_view.h +++ b/ash/shelf/login_shelf_view.h
@@ -122,8 +122,7 @@ // Test API. Returns true if request was successful (i.e. button was // clickable). bool LaunchAppForTesting(const std::string& app_id); - bool SimulateAddUserButtonForTesting(); - bool SimulateGuestButtonForTesting(); + bool SimulateButtonPressedForTesting(ButtonId button); // Adds test delegate. Delegate will become owned by LoginShelfView. void InstallTestUiUpdateDelegate(
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc index 51396ec..8bc6a210 100644 --- a/ash/shell_unittest.cc +++ b/ash/shell_unittest.cc
@@ -38,7 +38,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "components/account_id/account_id.h" -#include "components/prefs/testing_pref_service.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/env.h" #include "ui/aura/window.h" @@ -583,15 +582,6 @@ window_->Init(ui::LAYER_NOT_DRAWN); } -// Tests the local state code path. -class ShellLocalStateTest : public AshTestBase { - public: - ShellLocalStateTest() { DisableProvideLocalState(); } - - protected: - std::unique_ptr<TestingPrefServiceSimple> local_state_; -}; - using ShellLoginTest = NoSessionAshTestBase; TEST_F(ShellLoginTest, DragAndDropDisabledBeforeLogin) {
diff --git a/ash/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc b/ash/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc index 0336ad9..c382cc4 100644 --- a/ash/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc +++ b/ash/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc
@@ -249,7 +249,7 @@ // Type a letter and show the search results. KeyPress(ui::VKEY_A, /*should_insert=*/true); auto time_out = base::TimeDelta::FromMilliseconds(300); - task_environment_->FastForwardBy(time_out); + task_environment()->FastForwardBy(time_out); base::RunLoop().RunUntilIdle(); EXPECT_FALSE(GetFoundShortcutItems().empty());
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index 6e20c12..e3423c7 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -596,6 +596,7 @@ <translation id="8735953464173050365">কীব'ৰ্ডৰ ছেটিংসমূহ দেখুৱাওক। <ph name="KEYBOARD_NAME" /> বাছনি কৰা হৈছে।</translation> <translation id="875593634123171288">VPN ছেটিংসমূহ দেখুৱাওক</translation> <translation id="8785070478575117577"><ph name="NETWORK_NAME" />ত সংযোগ কৰক</translation> +<translation id="8788027118671217603"><ph name="STATE_TEXT" />। <ph name="ENTERPRISE_TEXT" /></translation> <translation id="8814190375133053267">ৱাই-ফাই</translation> <translation id="8825863694328519386">উভতি যাবলৈ বাওঁফালৰ পৰা ছোৱাইপ কৰক</translation> <translation id="8828714802988429505">৯০°</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 4f12a6c..49f6659 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -600,7 +600,7 @@ <translation id="8735953464173050365">কীবোর্ড সেটিংস দেখান। <ph name="KEYBOARD_NAME" /> বেছে নেওয়া হয়েছে</translation> <translation id="875593634123171288">VPN সেটিংস দেখান</translation> <translation id="8785070478575117577"><ph name="NETWORK_NAME" />-এ কানেক্ট করুন</translation> -<translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation> +<translation id="8788027118671217603"><ph name="STATE_TEXT" />। <ph name="ENTERPRISE_TEXT" /></translation> <translation id="8814190375133053267">ওয়াই-ফাই</translation> <translation id="8825863694328519386">ফিরে যেতে আপনার স্ক্রিনের বাম প্রান্ত থেকে সোয়াইপ করুন</translation> <translation id="8828714802988429505">৯০°</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 5706d3af..40a328f 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -398,7 +398,7 @@ <translation id="607652042414456612">Ordenagailua ikusgai dago inguruko Bluetooth bidezko gailuetarako, eta "<ph name="NAME" />" izenarekin eta <ph name="ADDRESS" /> helbidearekin agertuko da</translation> <translation id="612734058257491180">Google-ren Laguntzailea ez dago erabilgarri gonbidatuentzako saioetan.</translation> <translation id="615957422585914272">Erakutsi pantailako teklatua</translation> -<translation id="6164005077879661055">Erabiltzaile gainbegiratuarekin erlazionatutako fitxategi eta datu lokal guztiak behin betiko ezabatuko dira erabiltzaile gainbegiratua kentzean. Hala ere, erabiltzaile gainbegiratuak bisitatu dituen webguneak eta bere ezarpenak ikusten jarraitu ahal izango du kudeatzaileak <ph name="MANAGEMENT_URL" /> webgunean.</translation> +<translation id="6164005077879661055">Erabiltzaile gainbegiratuarekin erlazionatutako fitxategi eta datu lokal guztiak betiko ezabatuko dira erabiltzaile gainbegiratua kentzean. Hala ere, erabiltzaile gainbegiratuak bisitatu dituen webguneak eta bere ezarpenak ikusten jarraitu ahal izango du kudeatzaileak <ph name="MANAGEMENT_URL" /> webgunean.</translation> <translation id="6165508094623778733">Lortu informazio gehiago</translation> <translation id="6236290670123303279">Kudeatu ezarpenak</translation> <translation id="6237231532760393653">1X</translation>
diff --git a/ash/system/bluetooth/bluetooth_power_controller_unittest.cc b/ash/system/bluetooth/bluetooth_power_controller_unittest.cc index 6375e5b..69bb3ff 100644 --- a/ash/system/bluetooth/bluetooth_power_controller_unittest.cc +++ b/ash/system/bluetooth/bluetooth_power_controller_unittest.cc
@@ -46,21 +46,16 @@ } // namespace -// NOTE: Manually controls local state prefs and user prefs so to allow tests -// of default pref values before the pref service initialization notifications. -class BluetoothPowerControllerTest : public NoSessionAshTestBase { +class BluetoothPowerControllerTest : public AshTestBase { public: - BluetoothPowerControllerTest() { DisableProvideLocalState(); } + BluetoothPowerControllerTest() { + BluetoothPowerController::RegisterProfilePrefs( + active_user_prefs_.registry()); + } ~BluetoothPowerControllerTest() override = default; void SetUp() override { - NoSessionAshTestBase::SetUp(); - - BluetoothPowerController::RegisterProfilePrefs( - active_user_prefs_.registry()); - BluetoothPowerController::RegisterLocalStatePrefs(local_state_.registry()); - - GetController()->local_state_ = &local_state_; + AshTestBase::SetUp(); SetupBluetoothAdapter(); } @@ -104,21 +99,28 @@ } TestingPrefServiceSimple active_user_prefs_; - TestingPrefServiceSimple local_state_; private: DISALLOW_COPY_AND_ASSIGN(BluetoothPowerControllerTest); }; +class BluetoothPowerControllerNoSessionTest + : public BluetoothPowerControllerTest { + public: + BluetoothPowerControllerNoSessionTest() { set_start_session(false); } +}; + // Tests toggling Bluetooth setting on and off. -TEST_F(BluetoothPowerControllerTest, ToggleBluetoothEnabled) { +TEST_F(BluetoothPowerControllerNoSessionTest, ToggleBluetoothEnabled) { // Toggling bluetooth on/off when there is no user session should affect // local state prefs. - EXPECT_FALSE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_FALSE( + local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); GetController()->SetBluetoothEnabled(true); - EXPECT_TRUE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_TRUE(local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); GetController()->SetBluetoothEnabled(false); - EXPECT_FALSE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_FALSE( + local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); // Toggling bluetooth on/off when there is user session should affect // user prefs. @@ -140,14 +142,15 @@ // Makes sure we start with bluetooth power off. EXPECT_FALSE(GetBluetoothAdapter()->IsPowered()); - EXPECT_FALSE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_FALSE( + local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); // Power should be turned on when pref changes to enabled. - local_state_.SetBoolean(prefs::kSystemBluetoothAdapterEnabled, true); + local_state()->SetBoolean(prefs::kSystemBluetoothAdapterEnabled, true); EXPECT_TRUE(GetBluetoothAdapter()->IsPowered()); // Power should be turned off when pref changes to disabled. - local_state_.SetBoolean(prefs::kSystemBluetoothAdapterEnabled, false); + local_state()->SetBoolean(prefs::kSystemBluetoothAdapterEnabled, false); EXPECT_FALSE(GetBluetoothAdapter()->IsPowered()); } @@ -202,9 +205,10 @@ // the pref hasn't been set before. TEST_F(BluetoothPowerControllerTest, ApplyBluetoothLocalStatePrefDefault) { // Makes sure pref hasn't been set before. - EXPECT_TRUE( - local_state_.FindPreference(prefs::kSystemBluetoothAdapterEnabled) - ->IsDefaultValue()); + local_state()->RemoveUserPref(prefs::kSystemBluetoothAdapterEnabled); + EXPECT_TRUE(local_state() + ->FindPreference(prefs::kSystemBluetoothAdapterEnabled) + ->IsDefaultValue()); // Start with bluetooth power on. GetBluetoothAdapter()->SetPowered(true, base::DoNothing(), base::DoNothing()); EXPECT_TRUE(GetBluetoothAdapter()->IsPowered()); @@ -212,20 +216,20 @@ ApplyBluetoothLocalStatePref(); // Pref should now contain the current bluetooth adapter state (on). - EXPECT_FALSE( - local_state_.FindPreference(prefs::kSystemBluetoothAdapterEnabled) - ->IsDefaultValue()); - EXPECT_TRUE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_FALSE(local_state() + ->FindPreference(prefs::kSystemBluetoothAdapterEnabled) + ->IsDefaultValue()); + EXPECT_TRUE(local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); } // Tests how BluetoothPowerController applies the local state pref when // the pref has been set before. TEST_F(BluetoothPowerControllerTest, ApplyBluetoothLocalStatePrefOn) { // Set the pref to true. - local_state_.SetBoolean(prefs::kSystemBluetoothAdapterEnabled, true); - EXPECT_FALSE( - local_state_.FindPreference(prefs::kSystemBluetoothAdapterEnabled) - ->IsDefaultValue()); + local_state()->SetBoolean(prefs::kSystemBluetoothAdapterEnabled, true); + EXPECT_FALSE(local_state() + ->FindPreference(prefs::kSystemBluetoothAdapterEnabled) + ->IsDefaultValue()); // Start with bluetooth power off. GetBluetoothAdapter()->SetPowered(false, base::DoNothing(), base::DoNothing()); @@ -234,7 +238,7 @@ ApplyBluetoothLocalStatePref(); // Bluetooth power setting should be applied (on), and pref value unchanged. - EXPECT_TRUE(local_state_.GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); + EXPECT_TRUE(local_state()->GetBoolean(prefs::kSystemBluetoothAdapterEnabled)); EXPECT_TRUE(GetBluetoothAdapter()->IsPowered()); } @@ -264,7 +268,8 @@ // Tests how BluetoothPowerController applies the user pref when // the pref hasn't been set before, and it's a first-login user. -TEST_F(BluetoothPowerControllerTest, ApplyBluetoothPrimaryUserPrefDefaultNew) { +TEST_F(BluetoothPowerControllerNoSessionTest, + ApplyBluetoothPrimaryUserPrefDefaultNew) { AddUserSessionAndStartWatchingPrefsChanges( kUser1Email, user_manager::USER_TYPE_REGULAR, kUserFirstLogin); @@ -291,7 +296,8 @@ // Tests how BluetoothPowerController applies the user pref when // the pref hasn't been set before, but not a regular user (e.g. kiosk). -TEST_F(BluetoothPowerControllerTest, ApplyBluetoothKioskUserPrefDefault) { +TEST_F(BluetoothPowerControllerNoSessionTest, + ApplyBluetoothKioskUserPrefDefault) { AddUserSessionAndStartWatchingPrefsChanges(kUser1Email, user_manager::USER_TYPE_KIOSK_APP);
diff --git a/ash/system/machine_learning/user_settings_event_logger_unittest.cc b/ash/system/machine_learning/user_settings_event_logger_unittest.cc index e697ff8..4828c36 100644 --- a/ash/system/machine_learning/user_settings_event_logger_unittest.cc +++ b/ash/system/machine_learning/user_settings_event_logger_unittest.cc
@@ -112,7 +112,7 @@ protected: void FastForwardBySeconds(const int seconds) { - task_environment_->FastForwardBy(base::TimeDelta::FromSeconds(seconds)); + task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(seconds)); } std::vector<const ukm::mojom::UkmEntry*> GetUkmEntries() { @@ -123,7 +123,7 @@ // Volume features are logged at the end of the timer delay. void LogVolumeAndWait(const int previous_level, const int current_level) { logger_->LogVolumeUkmEvent(previous_level, current_level); - task_environment_->FastForwardBy(kSliderDelay); + task_environment()->FastForwardBy(kSliderDelay); } void LogBrightness(const int current_level, @@ -142,7 +142,7 @@ void LogBrightnessAndWait(const int current_level, const bool initiated_by_user = true) { LogBrightness(current_level, initiated_by_user); - task_environment_->FastForwardBy(kSliderDelay); + task_environment()->FastForwardBy(kSliderDelay); } void LogSharedFeatures() { @@ -360,13 +360,13 @@ TEST_F(UserSettingsEventLoggerTest, TestVolumeDelay) { // Only log an event if there is a pause of |kSliderDelay|. logger_->LogVolumeUkmEvent(10, 11); - task_environment_->FastForwardBy(kSliderDelay / 2); + task_environment()->FastForwardBy(kSliderDelay / 2); logger_->LogVolumeUkmEvent(11, 12); logger_->LogVolumeUkmEvent(12, 13); logger_->LogVolumeUkmEvent(13, 14); - task_environment_->FastForwardBy(kSliderDelay / 2); + task_environment()->FastForwardBy(kSliderDelay / 2); logger_->LogVolumeUkmEvent(14, 15); - task_environment_->FastForwardBy(kSliderDelay); + task_environment()->FastForwardBy(kSliderDelay); const auto& entries = GetUkmEntries(); ASSERT_EQ(1ul, entries.size()); @@ -434,14 +434,14 @@ // Only log an event if there is a pause of |kSliderDelay|. LogBrightness(11); - task_environment_->FastForwardBy(kSliderDelay / 2); + task_environment()->FastForwardBy(kSliderDelay / 2); LogBrightness(12); - task_environment_->FastForwardBy(kSliderDelay / 2); + task_environment()->FastForwardBy(kSliderDelay / 2); LogBrightness(13); LogBrightness(14, false); LogBrightness(15); LogBrightness(16, false); - task_environment_->FastForwardBy(kSliderDelay); + task_environment()->FastForwardBy(kSliderDelay); LogBrightnessAndWait(17);
diff --git a/ash/system/network/OWNERS b/ash/system/network/OWNERS index 5af576f..0c7b1b0 100644 --- a/ash/system/network/OWNERS +++ b/ash/system/network/OWNERS
@@ -5,4 +5,4 @@ tbarzic@chromium.org tonydeluna@chromium.org -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/ash/system/update/update_notification_controller_unittest.cc b/ash/system/update/update_notification_controller_unittest.cc index f7093e5..0c76b24 100644 --- a/ash/system/update/update_notification_controller_unittest.cc +++ b/ash/system/update/update_notification_controller_unittest.cc
@@ -113,7 +113,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -142,7 +142,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -185,7 +185,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -211,7 +211,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -228,7 +228,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification disappears. EXPECT_FALSE(HasNotification()); @@ -247,7 +247,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -271,7 +271,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -295,7 +295,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification is now visible. ASSERT_TRUE(HasNotification()); @@ -319,7 +319,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification's title and body have changed. ASSERT_TRUE(HasNotification()); @@ -344,7 +344,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification's title and body have changed. ASSERT_TRUE(HasNotification()); @@ -362,7 +362,7 @@ // Showing Update Notification posts a task to check for slow boot request // and use the result of that check to generate appropriate notification. Wait // until everything is complete and then check if the notification is visible. - task_environment_->RunUntilIdle(); + task_environment()->RunUntilIdle(); // The notification has the default text. ASSERT_TRUE(HasNotification());
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc index 62e7475..75d0328 100644 --- a/ash/test/ash_test_base.cc +++ b/ash/test/ash_test_base.cc
@@ -115,8 +115,11 @@ ///////////////////////////////////////////////////////////////////////////// -AshTestBase::AshTestBase(AshTestBase::SubclassManagesTaskEnvironment /* tag */) - : task_environment_(base::nullopt) {} +AshTestBase::AshTestBase( + std::unique_ptr<base::test::TaskEnvironment> task_environment) + : task_environment_(std::move(task_environment)) { + RegisterLocalStatePrefs(local_state_.registry(), true); +} AshTestBase::~AshTestBase() { CHECK(setup_called_) @@ -145,11 +148,7 @@ AshTestHelper::InitParams params; params.start_session = start_session_; params.delegate = std::move(delegate); - if (register_local_state_) { - DCHECK(local_state_.get()); - RegisterLocalStatePrefs(local_state_->registry(), true); - } - params.local_state = local_state_.get(); + params.local_state = local_state(); ash_test_helper_.SetUp(std::move(params)); Shell::GetPrimaryRootWindow()->Show(); @@ -375,11 +374,6 @@ gfx::Rect()); } -void AshTestBase::DisableProvideLocalState() { - local_state_.reset(); - register_local_state_ = false; -} - TestScreenshotDelegate* AshTestBase::GetScreenshotDelegate() { return static_cast<TestScreenshotDelegate*>( Shell::Get()->screenshot_controller()->screenshot_delegate_.get());
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h index 503868188e..ef4dd92 100644 --- a/ash/test/ash_test_base.h +++ b/ash/test/ash_test_base.h
@@ -18,8 +18,6 @@ #include "ash/wm/desks/desks_util.h" #include "base/compiler_specific.h" #include "base/macros.h" -#include "base/optional.h" -#include "base/template_util.h" #include "base/test/task_environment.h" #include "base/threading/thread.h" #include "base/traits_bag.h" @@ -82,15 +80,13 @@ // specified. template <typename... TaskEnvironmentTraits> NOINLINE explicit AshTestBase(TaskEnvironmentTraits&&... traits) - : task_environment_(base::in_place, - base::test::TaskEnvironment::MainThreadType::UI, - std::forward<TaskEnvironmentTraits>(traits)...) {} + : AshTestBase(std::make_unique<base::test::TaskEnvironment>( + base::test::TaskEnvironment::MainThreadType::UI, + std::forward<TaskEnvironmentTraits>(traits)...)) {} - // Alternatively a subclass may pass this tag to ask this AshTestBase not to - // instantiate a TaskEnvironment. The subclass is then responsible to - // instantiate one before AshTestBase::SetUp(). - struct SubclassManagesTaskEnvironment {}; - explicit AshTestBase(SubclassManagesTaskEnvironment tag); + // Alternatively a subclass may pass a TaskEnvironment directly. + explicit AshTestBase( + std::unique_ptr<base::test::TaskEnvironment> task_environment); ~AshTestBase() override; @@ -214,8 +210,11 @@ static display::Display::Rotation GetCurrentInternalDisplayRotation(); void set_start_session(bool start_session) { start_session_ = start_session; } - void DisableProvideLocalState(); + base::test::TaskEnvironment* task_environment() { + return task_environment_.get(); + } + TestingPrefServiceSimple* local_state() { return &local_state_; } AshTestHelper* ash_test_helper() { return &ash_test_helper_; } TestScreenshotDelegate* GetScreenshotDelegate(); @@ -283,37 +282,22 @@ bool setup_called_ = false; bool teardown_called_ = false; - // |SetUp()| doesn't activate session if this is set to false. + + // SetUp() doesn't activate session if this is set to false. bool start_session_ = true; - // Must be initialized at construction because some tests rely on AshTestBase - // methods before AshTestBase::SetUp(). + // |task_environment_| is initialized-once at construction time but + // subclasses may elect to provide their own. + std::unique_ptr<base::test::TaskEnvironment> task_environment_; + + // A pref service used for local state. + TestingPrefServiceSimple local_state_; + + // Must be constructed after |task_environment_| but before SetUp(). AshTestHelper ash_test_helper_; std::unique_ptr<ui::test::EventGenerator> event_generator_; - // protected so it can be accesssed by test subclasses to drive the task - // environment. - protected: - // |task_environment_| is initialized-once at construction time but - // subclasses may elect to provide their own. Declare it last to ensure its - // initialization/destruction semantics are identical in the - // SubclassManagesTaskEnvironment mode. - base::Optional<base::test::TaskEnvironment> task_environment_; - - // A pref service used for local state. Reset it by - // DisableProvideLocalState() if a test provides its own local state. - std::unique_ptr<TestingPrefServiceSimple> local_state_ = - std::make_unique<TestingPrefServiceSimple>(); - - // True to register pref service with ash during SetUp(). Set to false if - // a test wants to register and provide the local state data before - // creating the ash shell. - bool register_local_state_ = true; - - // Private again for DISALLOW_COPY_AND_ASSIGN; additional members should be - // added in the first private section to be before |task_environment_|. - private: DISALLOW_COPY_AND_ASSIGN(AshTestBase); };
diff --git a/ash/test/ash_test_helper.h b/ash/test/ash_test_helper.h index 6f92c2c1..95524f1 100644 --- a/ash/test/ash_test_helper.h +++ b/ash/test/ash_test_helper.h
@@ -103,10 +103,6 @@ PrefService* GetLocalStatePrefService(); - AshTestViewsDelegate* test_views_delegate() { - return test_views_delegate_.get(); - } - display::Display GetSecondaryDisplay() const; TestSessionControllerClient* test_session_controller_client() {
diff --git a/ash/wallpaper/wallpaper_controller_unittest.cc b/ash/wallpaper/wallpaper_controller_unittest.cc index a282d43d..c51a36b03 100644 --- a/ash/wallpaper/wallpaper_controller_unittest.cc +++ b/ash/wallpaper/wallpaper_controller_unittest.cc
@@ -8,7 +8,6 @@ #include <cstdlib> #include "ash/public/cpp/ash_pref_names.h" -#include "ash/public/cpp/ash_prefs.h" #include "ash/public/cpp/ash_switches.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/public/cpp/test/shell_test_api.h" @@ -2636,10 +2635,7 @@ void SetUp() override { { - RegisterLocalStatePrefs(local_state_->registry(), true); - register_local_state_ = false; - DictionaryPrefUpdate update(local_state_.get(), - prefs::kDisplayProperties); + DictionaryPrefUpdate update(local_state(), prefs::kDisplayProperties); base::DictionaryValue* pref_data = update.Get();
diff --git a/ash/wm/desks/desk.cc b/ash/wm/desks/desk.cc index 45770b3..d0696dcb 100644 --- a/ash/wm/desks/desk.cc +++ b/ash/wm/desks/desk.cc
@@ -12,6 +12,7 @@ #include "ash/public/cpp/window_properties.h" #include "ash/shell.h" #include "ash/wm/mru_window_tracker.h" +#include "ash/wm/overview/overview_controller.h" #include "ash/wm/window_positioner.h" #include "ash/wm/window_state.h" #include "ash/wm/window_transient_descendant_iterator.h" @@ -193,9 +194,8 @@ windows_.push_back(window); // No need to refresh the mini_views if the destroyed window doesn't show up // there in the first place. - // The WorkspaceLayoutManager updates the backdrop for us. if (!window->GetProperty(kHideInDeskMiniViewKey)) - NotifyContentChanged(/*update_backdrops=*/false); + NotifyContentChanged(); } void Desk::RemoveWindowFromDesk(aura::Window* window) { @@ -203,9 +203,8 @@ base::Erase(windows_, window); // No need to refresh the mini_views if the destroyed window doesn't show up // there in the first place. - // The WorkspaceLayoutManager updates the backdrop for us. if (!window->GetProperty(kHideInDeskMiniViewKey)) - NotifyContentChanged(/*update_backdrops=*/false); + NotifyContentChanged(); } base::AutoReset<bool> Desk::GetScopedNotifyContentChangedDisabler() { @@ -337,8 +336,8 @@ } } - NotifyContentChanged(/*update_backdrops=*/true); - target_desk->NotifyContentChanged(/*update_backdrops=*/true); + NotifyContentChanged(); + target_desk->NotifyContentChanged(); } void Desk::MoveWindowToDesk(aura::Window* window, @@ -379,8 +378,8 @@ window_state->Unminimize(); } - NotifyContentChanged(/*update_backdrops=*/true); - target_desk->NotifyContentChanged(/*update_backdrops=*/true); + NotifyContentChanged(); + target_desk->NotifyContentChanged(); } aura::Window* Desk::GetDeskContainerForRoot(aura::Window* root) const { @@ -389,14 +388,21 @@ return root->GetChildById(container_id_); } -void Desk::NotifyContentChanged(bool update_backdrops) { +void Desk::NotifyContentChanged() { if (!should_notify_content_changed_) return; - // If requested, update the backdrop availability and visibility first before - // notifying observers, so that the mini_views update *after* the backdrops - // do. - if (update_backdrops) + // Updating the backdrops below may lead to the removal or creation of + // backdrop windows in this desk, which can cause us to recurse back here. + // Disable this. + auto disable_recursion = GetScopedNotifyContentChangedDisabler(); + + // The availability and visibility of backdrops of all containers associated + // with this desk will be updated *before* notifying observer, so that the + // mini_views update *after* the backdrops do. + // This is *only* needed if the WorkspaceLayoutManager won't take care of this + // for us while overview is active. + if (Shell::Get()->overview_controller()->InOverviewSession()) UpdateDeskBackdrops(); for (auto& observer : observers_)
diff --git a/ash/wm/desks/desk.h b/ash/wm/desks/desk.h index 360357f..2e07656 100644 --- a/ash/wm/desks/desk.h +++ b/ash/wm/desks/desk.h
@@ -118,13 +118,7 @@ // Notifies observers that the desk's contents (list of application windows on // the desk) have changed. - // If |update_backdrops| is true, the backdrops of all containers associated - // with this desk will be updated (even if overview is active). - // This is *only* needed if the WorkspaceLayoutManager won't take care of this - // for us in desk-modifying operations that happen within overview, such as - // removing desks (and move its windows out) or dragging a window and dropping - // in another desk. - void NotifyContentChanged(bool update_backdrops); + void NotifyContentChanged(); // Update (even if overview is active) the backdrop availability and // visibility on the containers (on all roots) associated with this desk.
diff --git a/ash/wm/desks/desks_controller.cc b/ash/wm/desks/desks_controller.cc index 78a30a14..a02596a 100644 --- a/ash/wm/desks/desks_controller.cc +++ b/ash/wm/desks/desks_controller.cc
@@ -876,7 +876,7 @@ // if windows from the removed desk moved to it. DCHECK(active_desk_->should_notify_content_changed()); if (!removed_desk_windows.empty()) - active_desk_->NotifyContentChanged(/*force_update_backdrops=*/true); + active_desk_->NotifyContentChanged(); UpdateDesksDefaultNames();
diff --git a/ash/wm/desks/desks_unittests.cc b/ash/wm/desks/desks_unittests.cc index c8b4f1a8..c32b6e6 100644 --- a/ash/wm/desks/desks_unittests.cc +++ b/ash/wm/desks/desks_unittests.cc
@@ -1973,6 +1973,76 @@ EXPECT_FALSE(desk_2_backdrop_controller->backdrop_window()); } +TEST_F(TabletModeDesksTest, + BackdropStackingAndMiniviewsUpdatesWithOverviewDragDrop) { + auto* controller = DesksController::Get(); + NewDesk(); + ASSERT_EQ(2u, controller->desks().size()); + Desk* desk_1 = controller->desks()[0].get(); + Desk* desk_2 = controller->desks()[1].get(); + auto window = CreateAppWindow(gfx::Rect(0, 0, 250, 100)); + wm::ActivateWindow(window.get()); + EXPECT_EQ(window.get(), window_util::GetActiveWindow()); + auto* desk_1_backdrop_controller = + GetDeskBackdropController(desk_1, Shell::GetPrimaryRootWindow()); + auto* desk_2_backdrop_controller = + GetDeskBackdropController(desk_2, Shell::GetPrimaryRootWindow()); + + // Enter overview and expect that |desk_1| has a backdrop stacked under + // |window| while desk_2 has none. + auto* overview_controller = Shell::Get()->overview_controller(); + overview_controller->StartOverview(); + EXPECT_TRUE(overview_controller->InOverviewSession()); + ASSERT_TRUE(desk_1_backdrop_controller->backdrop_window()); + EXPECT_FALSE(desk_2_backdrop_controller->backdrop_window()); + EXPECT_EQ(window.get(), desk_1_backdrop_controller->window_having_backdrop()); + EXPECT_FALSE(desk_2_backdrop_controller->window_having_backdrop()); + EXPECT_TRUE(IsStackedBelow(desk_1_backdrop_controller->backdrop_window(), + window.get())); + + // Prepare to drag and drop |window| on desk_2's mini view. + auto* overview_grid = GetOverviewGridForRoot(Shell::GetPrimaryRootWindow()); + EXPECT_EQ(1u, overview_grid->size()); + auto* overview_session = overview_controller->overview_session(); + auto* overview_item = + overview_session->GetOverviewItemForWindow(window.get()); + ASSERT_TRUE(overview_item); + const auto* desks_bar_view = overview_grid->desks_bar_view(); + ASSERT_TRUE(desks_bar_view); + auto* desk_2_mini_view = desks_bar_view->mini_views()[1].get(); + + // Observe how many times a drag and drop operation updates the mini views. + TestDeskObserver observer1; + TestDeskObserver observer2; + desk_1->AddObserver(&observer1); + desk_2->AddObserver(&observer2); + { + // For this test to fail the stacking test below, we need to drag and drop + // while animations are enabled. https://crbug.com/1055732. + ui::ScopedAnimationDurationScaleMode normal_anim( + ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); + DragItemToPoint(overview_item, + desk_2_mini_view->GetBoundsInScreen().CenterPoint(), + GetEventGenerator()); + } + // The backdrop should be destroyed for |desk_1|, and a new one should be + // created for |window| in desk_2 and should be stacked below it. + EXPECT_TRUE(overview_controller->InOverviewSession()); + EXPECT_TRUE(base::Contains(desk_2->windows(), window.get())); + EXPECT_FALSE(desk_1_backdrop_controller->backdrop_window()); + ASSERT_TRUE(desk_2_backdrop_controller->backdrop_window()); + EXPECT_FALSE(desk_1_backdrop_controller->window_having_backdrop()); + EXPECT_EQ(window.get(), desk_2_backdrop_controller->window_having_backdrop()); + EXPECT_TRUE(IsStackedBelow(desk_2_backdrop_controller->backdrop_window(), + window.get())); + + // The mini views should only be updated once for both desks. + EXPECT_EQ(1, observer1.notify_counts()); + EXPECT_EQ(1, observer2.notify_counts()); + desk_1->RemoveObserver(&observer1); + desk_2->RemoveObserver(&observer2); +} + TEST_F(TabletModeDesksTest, NoDesksBarInTabletModeWithOneDesk) { // Initially there's only one desk. auto* controller = DesksController::Get();
diff --git a/ash/wm/overview/delayed_animation_observer_impl_unittest.cc b/ash/wm/overview/delayed_animation_observer_impl_unittest.cc index 148d75b8..757e1893 100644 --- a/ash/wm/overview/delayed_animation_observer_impl_unittest.cc +++ b/ash/wm/overview/delayed_animation_observer_impl_unittest.cc
@@ -76,10 +76,10 @@ delegate.AddEnterAnimationObserver(std::move(observer)); EXPECT_EQ(1u, delegate.num_enter_observers()); - task_environment_->FastForwardBy(base::TimeDelta::FromMilliseconds(50)); + task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(50)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1u, delegate.num_enter_observers()); - task_environment_->FastForwardBy(base::TimeDelta::FromMilliseconds(55)); + task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(55)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, delegate.num_enter_observers()); }
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc index c1f4cf34..743a259 100644 --- a/ash/wm/overview/overview_session_unittest.cc +++ b/ash/wm/overview/overview_session_unittest.cc
@@ -3397,7 +3397,7 @@ for (int i = 0; i < kMaxLoops && grid_event_handler->IsFlingInProgressForTesting(); ++i) { - task_environment_->FastForwardBy(base::TimeDelta::FromMilliseconds(50)); + task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(50)); float scroll_offset = grid->scroll_offset(); EXPECT_LE(scroll_offset, previous_scroll_offset);
diff --git a/ash/wm/workspace/backdrop_controller.cc b/ash/wm/workspace/backdrop_controller.cc index 93f369f..425a809 100644 --- a/ash/wm/workspace/backdrop_controller.cc +++ b/ash/wm/workspace/backdrop_controller.cc
@@ -269,8 +269,12 @@ } void BackdropController::OnDeskContentChanged() { - // Desk content changes may result in the need to update the backdrop even - // when overview is active, since the mini_view should show updated content. + // This should *only* be called while overview is active. Otherwise, the + // WorkspaceLayoutManager should take care of updating the backdrop. + DCHECK(InOverviewSession()); + + // Desk content changes may result in the need to update the backdrop when + // overview is active, since the mini_view should show updated content. // Example: when the last window needing backdrop is moved to another desk, // the backdrop should be destroyed from the source desk, while created for // the target desk, and the mini_views of both desks should be updated. @@ -282,13 +286,6 @@ if (pause_update_ || InOverviewSession()) return; - base::Optional<Shelf::ScopedAutoHideLock> auto_hide_lock; - - // Updating the back drop widget should not affect the shelf's auto hide - // state. - if (chromeos::switches::ShouldShowShelfHotseat()) - auto_hide_lock.emplace(ash::Shelf::ForWindow(container_)); - UpdateBackdropInternal(); } @@ -398,6 +395,12 @@ if (pause_update_) return; + // Updating the back drop widget should not affect the shelf's auto hide + // state. + base::Optional<Shelf::ScopedAutoHideLock> auto_hide_lock; + if (chromeos::switches::ShouldShowShelfHotseat()) + auto_hide_lock.emplace(ash::Shelf::ForWindow(container_)); + // We are either destroying the backdrop widget or changing the order of // windows which will cause recursion. base::AutoReset<bool> lock(&pause_update_, true); @@ -526,7 +529,11 @@ DCHECK(backdrop_window_); DCHECK(window_having_backdrop_); - if (MaybeWaitForWindowAnimation()) + // No need to wait for window animations while in overview, since the backdrop + // will be hidden anyways, but we still have to update its stacking and + // layout. + const bool in_overview = InOverviewSession(); + if (!in_overview && MaybeWaitForWindowAnimation()) return; Layout(); @@ -537,7 +544,7 @@ // When overview is active, the backdrop should never be shown. However, it // must be laid out, since it should show up properly in the mini_views. - if (backdrop_->IsVisible() || InOverviewSession()) + if (backdrop_->IsVisible() || in_overview) return; ScopedWindowVisibilityAnimationTypeResetter resetter{
diff --git a/ash/wm/workspace/backdrop_controller.h b/ash/wm/workspace/backdrop_controller.h index 10a466a..c74f296 100644 --- a/ash/wm/workspace/backdrop_controller.h +++ b/ash/wm/workspace/backdrop_controller.h
@@ -78,6 +78,8 @@ aura::Window* backdrop_window() { return backdrop_window_; } + aura::Window* window_having_backdrop() { return window_having_backdrop_; } + // OverviewObserver: void OnOverviewModeStarting() override; void OnOverviewModeEnding(OverviewSession* overview_session) override;
diff --git a/base/allocator/partition_allocator/partition_alloc.cc b/base/allocator/partition_allocator/partition_alloc.cc index 45c906d..1160260 100644 --- a/base/allocator/partition_allocator/partition_alloc.cc +++ b/base/allocator/partition_allocator/partition_alloc.cc
@@ -57,8 +57,8 @@ PartitionRootGeneric::~PartitionRootGeneric() = default; PartitionAllocatorGeneric::PartitionAllocatorGeneric() = default; -subtle::SpinLock& GetLock() { - static NoDestructor<subtle::SpinLock> s_initialized_lock; +Lock& GetLock() { + static NoDestructor<Lock> s_initialized_lock; return *s_initialized_lock; } static bool g_initialized = false; @@ -176,7 +176,7 @@ static void PartitionAllocBaseInit(internal::PartitionRootBase* root) { DCHECK(!root->initialized); { - subtle::SpinLock::Guard guard(GetLock()); + AutoLock guard(GetLock()); if (!g_initialized) { g_initialized = true; // We mark the sentinel bucket/page as free to make sure it is skipped by
diff --git a/base/allocator/partition_allocator/random.cc b/base/allocator/partition_allocator/random.cc index 46ffaab..7da12dd 100644 --- a/base/allocator/partition_allocator/random.cc +++ b/base/allocator/partition_allocator/random.cc
@@ -8,13 +8,22 @@ #include "base/logging.h" #include "base/no_destructor.h" #include "base/rand_util.h" +#include "base/synchronization/lock.h" namespace base { +namespace { + +Lock& GetLock() { + static NoDestructor<Lock> lock; + return *lock; +} + +} // namespace + // This is the same PRNG as used by tcmalloc for mapping address randomness; // see http://burtleburtle.net/bob/rand/smallprng.html. struct RandomContext { - subtle::SpinLock lock; bool initialized; uint32_t a; uint32_t b; @@ -22,45 +31,44 @@ uint32_t d; }; +static RandomContext g_context GUARDED_BY(GetLock()); + namespace { -RandomContext* GetRandomContext() { - static NoDestructor<RandomContext> g_random_context; - RandomContext* x = g_random_context.get(); - subtle::SpinLock::Guard guard(x->lock); - if (UNLIKELY(!x->initialized)) { +RandomContext& GetRandomContext() EXCLUSIVE_LOCKS_REQUIRED(GetLock()) { + if (UNLIKELY(!g_context.initialized)) { const uint64_t r1 = RandUint64(); const uint64_t r2 = RandUint64(); - x->a = static_cast<uint32_t>(r1); - x->b = static_cast<uint32_t>(r1 >> 32); - x->c = static_cast<uint32_t>(r2); - x->d = static_cast<uint32_t>(r2 >> 32); - x->initialized = true; + g_context.a = static_cast<uint32_t>(r1); + g_context.b = static_cast<uint32_t>(r1 >> 32); + g_context.c = static_cast<uint32_t>(r2); + g_context.d = static_cast<uint32_t>(r2 >> 32); + g_context.initialized = true; } - return x; + return g_context; } } // namespace uint32_t RandomValue() { - RandomContext* x = GetRandomContext(); - subtle::SpinLock::Guard guard(x->lock); + AutoLock guard(GetLock()); + RandomContext& x = GetRandomContext(); #define rot(x, k) (((x) << (k)) | ((x) >> (32 - (k)))) - uint32_t e = x->a - rot(x->b, 27); - x->a = x->b ^ rot(x->c, 17); - x->b = x->c + x->d; - x->c = x->d + e; - x->d = e + x->a; - return x->d; + uint32_t e = x.a - rot(x.b, 27); + x.a = x.b ^ rot(x.c, 17); + x.b = x.c + x.d; + x.c = x.d + e; + x.d = e + x.a; + return x.d; #undef rot } void SetMmapSeedForTesting(uint64_t seed) { - RandomContext* x = GetRandomContext(); - subtle::SpinLock::Guard guard(x->lock); - x->a = x->b = static_cast<uint32_t>(seed); - x->c = x->d = static_cast<uint32_t>(seed >> 32); - x->initialized = true; + AutoLock guard(GetLock()); + RandomContext& x = GetRandomContext(); + x.a = x.b = static_cast<uint32_t>(seed); + x.c = x.d = static_cast<uint32_t>(seed >> 32); + x.initialized = true; } } // namespace base
diff --git a/base/bind.h b/base/bind.h index 0bbc2ace..5884c62 100644 --- a/base/bind.h +++ b/base/bind.h
@@ -12,6 +12,7 @@ #include "base/bind_internal.h" #include "base/compiler_specific.h" +#include "base/template_util.h" #include "build/build_config.h" #if defined(OS_MACOSX) && !HAS_FEATURE(objc_arc) @@ -227,7 +228,7 @@ // PolymorphicInvoke, to which CallbackType will cast back. using PolymorphicInvoke = typename CallbackType::PolymorphicInvoke; PolymorphicInvoke invoke_func = - GetInvokeFunc<Invoker>(std::integral_constant<bool, kIsOnce>()); + GetInvokeFunc<Invoker>(bool_constant<kIsOnce>()); using InvokeFuncStorage = internal::BindStateBase::InvokeFuncStorage; return CallbackType(BindState::Create(
diff --git a/base/bind_internal.h b/base/bind_internal.h index bed151a8..b1573a61 100644 --- a/base/bind_internal.h +++ b/base/bind_internal.h
@@ -321,21 +321,11 @@ struct IsCallableObject<Callable, void_t<decltype(&Callable::operator())>> : std::true_type {}; -// HasRefCountedTypeAsRawPtr selects true_type when any of the |Args| is a raw -// pointer to a RefCounted type. -// Implementation note: This non-specialized case handles zero-arity case only. -// Non-zero-arity cases should be handled by the specialization below. -template <typename... Args> -struct HasRefCountedTypeAsRawPtr : std::false_type {}; - -// Implementation note: Select true_type if the first parameter is a raw pointer -// to a RefCounted type. Otherwise, skip the first parameter and check rest of -// parameters recursively. -template <typename T, typename... Args> -struct HasRefCountedTypeAsRawPtr<T, Args...> - : std::conditional_t<NeedsScopedRefptrButGetsRawPtr<T>::value, - std::true_type, - HasRefCountedTypeAsRawPtr<Args...>> {}; +// HasRefCountedTypeAsRawPtr inherits from true_type when any of the |Args| is a +// raw pointer to a RefCounted type. +template <typename... Ts> +struct HasRefCountedTypeAsRawPtr + : disjunction<NeedsScopedRefptrButGetsRawPtr<Ts>...> {}; // ForceVoidReturn<> // @@ -802,8 +792,7 @@ // This stores all the state passed into Bind(). template <typename Functor, typename... BoundArgs> struct BindState final : BindStateBase { - using IsCancellable = std::integral_constant< - bool, + using IsCancellable = bool_constant< CallbackCancellationTraits<Functor, std::tuple<BoundArgs...>>::is_cancellable>;
diff --git a/base/containers/span.h b/base/containers/span.h index 1edf775..5aa95aa 100644 --- a/base/containers/span.h +++ b/base/containers/span.h
@@ -18,6 +18,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/stl_util.h" +#include "base/template_util.h" namespace base { @@ -29,17 +30,20 @@ namespace internal { +template <size_t I> +using size_constant = std::integral_constant<size_t, I>; + template <typename T> -struct ExtentImpl : std::integral_constant<size_t, dynamic_extent> {}; +struct ExtentImpl : size_constant<dynamic_extent> {}; template <typename T, size_t N> -struct ExtentImpl<T[N]> : std::integral_constant<size_t, N> {}; +struct ExtentImpl<T[N]> : size_constant<N> {}; template <typename T, size_t N> -struct ExtentImpl<std::array<T, N>> : std::integral_constant<size_t, N> {}; +struct ExtentImpl<std::array<T, N>> : size_constant<N> {}; template <typename T, size_t N> -struct ExtentImpl<base::span<T, N>> : std::integral_constant<size_t, N> {}; +struct ExtentImpl<base::span<T, N>> : size_constant<N> {}; template <typename T> using Extent = ExtentImpl<std::remove_cv_t<std::remove_reference_t<T>>>; @@ -51,7 +55,7 @@ struct IsSpanImpl<span<T, Extent>> : std::true_type {}; template <typename T> -using IsSpan = IsSpanImpl<std::decay_t<T>>; +using IsNotSpan = negation<IsSpanImpl<std::decay_t<T>>>; template <typename T> struct IsStdArrayImpl : std::false_type {}; @@ -60,10 +64,10 @@ struct IsStdArrayImpl<std::array<T, N>> : std::true_type {}; template <typename T> -using IsStdArray = IsStdArrayImpl<std::decay_t<T>>; +using IsNotStdArray = negation<IsStdArrayImpl<std::decay_t<T>>>; template <typename T> -using IsCArray = std::is_array<std::remove_reference_t<T>>; +using IsNotCArray = negation<std::is_array<std::remove_reference_t<T>>>; template <typename From, typename To> using IsLegalDataConversion = std::is_convertible<From (*)[], To (*)[]>; @@ -92,13 +96,11 @@ // SFINAE check if Container can be converted to a span<T>. template <typename Container, typename T> using IsSpanCompatibleContainer = - std::conditional_t<!IsSpan<Container>::value && - !IsStdArray<Container>::value && - !IsCArray<Container>::value && - ContainerHasConvertibleData<Container, T>::value && - ContainerHasIntegralSize<Container>::value, - std::true_type, - std::false_type>; + conjunction<IsNotSpan<Container>, + IsNotStdArray<Container>, + IsNotCArray<Container>, + ContainerHasConvertibleData<Container, T>, + ContainerHasIntegralSize<Container>>; template <typename Container, typename T> using EnableIfSpanCompatibleContainer =
diff --git a/base/memory/raw_scoped_refptr_mismatch_checker.h b/base/memory/raw_scoped_refptr_mismatch_checker.h index ab8b2ab..9e50458 100644 --- a/base/memory/raw_scoped_refptr_mismatch_checker.h +++ b/base/memory/raw_scoped_refptr_mismatch_checker.h
@@ -31,18 +31,14 @@ decltype(std::declval<T*>()->Release())>> : std::true_type {}; +// Human readable translation: you needed to be a scoped_refptr if you are a raw +// pointer type and are convertible to a RefCounted(Base|ThreadSafeBase) type. template <typename T> -struct NeedsScopedRefptrButGetsRawPtr { +struct NeedsScopedRefptrButGetsRawPtr + : conjunction<std::is_pointer<T>, + IsRefCountedType<std::remove_pointer_t<T>>> { static_assert(!std::is_reference<T>::value, "NeedsScopedRefptrButGetsRawPtr requires non-reference type."); - - enum { - // Human readable translation: you needed to be a scoped_refptr if you are a - // raw pointer type and are convertible to a RefCounted(Base|ThreadSafeBase) - // type. - value = std::is_pointer<T>::value && - IsRefCountedType<std::remove_pointer_t<T>>::value - }; }; } // namespace internal
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc index ebdadc5..beb0048b 100644 --- a/base/metrics/field_trial.cc +++ b/base/metrics/field_trial.cc
@@ -22,7 +22,6 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "base/trace_event/trace_event.h" #include "base/unguessable_token.h" // On POSIX, the fd is shared using the mapping in GlobalDescriptors. @@ -972,7 +971,6 @@ // static void FieldTrialList::NotifyFieldTrialGroupSelection(FieldTrial* field_trial) { - TRACE_EVENT0("base", "FieldTrialList::NotifyFieldTrialGroupSelection"); if (!global_) return;
diff --git a/base/optional.h b/base/optional.h index af1d1682..1586efd9 100644 --- a/base/optional.h +++ b/base/optional.h
@@ -359,27 +359,23 @@ // Helper to conditionally enable converting constructors and assign operators. template <typename T, typename U> -struct IsConvertibleFromOptional - : std::integral_constant< - bool, - std::is_constructible<T, Optional<U>&>::value || - std::is_constructible<T, const Optional<U>&>::value || - std::is_constructible<T, Optional<U>&&>::value || - std::is_constructible<T, const Optional<U>&&>::value || - std::is_convertible<Optional<U>&, T>::value || - std::is_convertible<const Optional<U>&, T>::value || - std::is_convertible<Optional<U>&&, T>::value || - std::is_convertible<const Optional<U>&&, T>::value> {}; +using IsConvertibleFromOptional = + disjunction<std::is_constructible<T, Optional<U>&>, + std::is_constructible<T, const Optional<U>&>, + std::is_constructible<T, Optional<U>&&>, + std::is_constructible<T, const Optional<U>&&>, + std::is_convertible<Optional<U>&, T>, + std::is_convertible<const Optional<U>&, T>, + std::is_convertible<Optional<U>&&, T>, + std::is_convertible<const Optional<U>&&, T>>; template <typename T, typename U> -struct IsAssignableFromOptional - : std::integral_constant< - bool, - IsConvertibleFromOptional<T, U>::value || - std::is_assignable<T&, Optional<U>&>::value || - std::is_assignable<T&, const Optional<U>&>::value || - std::is_assignable<T&, Optional<U>&&>::value || - std::is_assignable<T&, const Optional<U>&&>::value> {}; +using IsAssignableFromOptional = + disjunction<IsConvertibleFromOptional<T, U>, + std::is_assignable<T&, Optional<U>&>, + std::is_assignable<T&, const Optional<U>&>, + std::is_assignable<T&, Optional<U>&&>, + std::is_assignable<T&, const Optional<U>&&>>; // Forward compatibility for C++17. // Introduce one more deeper nested namespace to avoid leaking using std::swap.
diff --git a/base/parameter_pack.h b/base/parameter_pack.h index 8fec8fba..d6871454 100644 --- a/base/parameter_pack.h +++ b/base/parameter_pack.h
@@ -5,14 +5,13 @@ #ifndef BASE_PARAMETER_PACK_H_ #define BASE_PARAMETER_PACK_H_ +#include <stddef.h> + #include <initializer_list> +#include <tuple> #include <type_traits> -#include <cstddef> -#if !defined(__clang__) -#include <tuple> -#endif - +#include "base/template_util.h" #include "build/build_config.h" namespace base { @@ -54,26 +53,16 @@ struct ParameterPack { // Checks if |Type| occurs in the parameter pack. template <typename Type> - static constexpr bool HasType() { - return any_of({std::is_same<Type, Ts>::value...}); - } + using HasType = bool_constant<any_of({std::is_same<Type, Ts>::value...})>; // Checks if the parameter pack only contains |Type|. template <typename Type> - static constexpr bool OnlyHasType() { - return all_of({std::is_same<Type, Ts>::value...}); - } + using OnlyHasType = bool_constant<all_of({std::is_same<Type, Ts>::value...})>; // Checks if |Type| occurs only once in the parameter pack. template <typename Type> - static constexpr bool IsUniqueInPack() { - size_t count = 0; - for (bool value : {std::is_same<Type, Ts>::value...}) { - if (value) - count++; - } - return count == 1; - } + using IsUniqueInPack = + bool_constant<count({std::is_same<Type, Ts>::value...}, true) == 1>; // Returns the zero-based index of |Type| within |Pack...| or |pack_npos| if // it's not within the pack. @@ -90,20 +79,11 @@ // Helper for extracting the Nth type from a parameter pack. template <size_t N> -#if defined(__clang__) && !defined(OS_NACL) - // A clang extension which efficiently returns the Nth type from a pack. This - // is faster to compile than std::tuple_element<>. - // See: https://ldionne.com/2015/11/29/efficient-parameter-pack-indexing/ - using NthType = __type_pack_element<N, Ts...>; -#else - using NthType = typename std::tuple_element<N, std::tuple<Ts...>>::type; -#endif + using NthType = std::tuple_element_t<N, std::tuple<Ts...>>; // Checks if every type in the parameter pack is the same. - static constexpr bool IsAllSameType() { - using FirstType = NthType<0>; - return all_of({std::is_same<FirstType, Ts>::value...}); - } + using IsAllSameType = + bool_constant<all_of({std::is_same<NthType<0>, Ts>::value...})>; }; } // namespace base
diff --git a/base/task/post_job.cc b/base/task/post_job.cc index 01b1afcf..0fe80ff1 100644 --- a/base/task/post_job.cc +++ b/base/task/post_job.cc
@@ -40,7 +40,6 @@ #if DCHECK_IS_ON() // ShouldYield() shouldn't be called again after returning true. DCHECK(!last_should_yield_); - AssertExpectedConcurrency(recorded_max_concurrency_); #endif // DCHECK_IS_ON() const bool should_yield = task_source_->ShouldYield() ||
diff --git a/base/task/task_traits_extension.h b/base/task/task_traits_extension.h index c731758d..1ba37c3f 100644 --- a/base/task/task_traits_extension.h +++ b/base/task/task_traits_extension.h
@@ -197,10 +197,8 @@ // Tests that that a trait extension accepts all |ArgsTypes...|. template <class... ArgTypes> -struct AreValidTraitsForExtension - : std::integral_constant< - bool, - std::is_constructible<TaskTraitsExtension, ArgTypes...>::value> {}; +using AreValidTraitsForExtension = + std::is_constructible<TaskTraitsExtension, ArgTypes...>; // Helper function that returns the TaskTraitsExtensionStorage of a // serialized extension created with |args...| if there are arguments that are
diff --git a/base/template_util.h b/base/template_util.h index 51bd0852..1f1632cf 100644 --- a/base/template_util.h +++ b/base/template_util.h
@@ -180,6 +180,50 @@ static constexpr bool value = true; }; +// C++14 implementation of C++17's std::bool_constant. +// +// Reference: https://en.cppreference.com/w/cpp/types/integral_constant +// Specification: https://wg21.link/meta.type.synop +template <bool B> +using bool_constant = std::integral_constant<bool, B>; + +// C++14 implementation of C++17's std::conjunction. +// +// Reference: https://en.cppreference.com/w/cpp/types/conjunction +// Specification: https://wg21.link/meta.logical#1.itemdecl:1 +template <typename...> +struct conjunction : std::true_type {}; + +template <typename B1> +struct conjunction<B1> : B1 {}; + +template <typename B1, typename... Bn> +struct conjunction<B1, Bn...> + : std::conditional_t<static_cast<bool>(B1::value), conjunction<Bn...>, B1> { +}; + +// C++14 implementation of C++17's std::disjunction. +// +// Reference: https://en.cppreference.com/w/cpp/types/disjunction +// Specification: https://wg21.link/meta.logical#itemdecl:2 +template <typename...> +struct disjunction : std::false_type {}; + +template <typename B1> +struct disjunction<B1> : B1 {}; + +template <typename B1, typename... Bn> +struct disjunction<B1, Bn...> + : std::conditional_t<static_cast<bool>(B1::value), B1, disjunction<Bn...>> { +}; + +// C++14 implementation of C++17's std::negation. +// +// Reference: https://en.cppreference.com/w/cpp/types/negation +// Specification: https://wg21.link/meta.logical#itemdecl:3 +template <typename B> +struct negation : bool_constant<!static_cast<bool>(B::value)> {}; + } // namespace base #undef CR_USE_FALLBACKS_FOR_GCC_WITH_LIBCXX
diff --git a/base/template_util_unittest.cc b/base/template_util_unittest.cc index 48add1c..bde7677 100644 --- a/base/template_util_unittest.cc +++ b/base/template_util_unittest.cc
@@ -5,6 +5,7 @@ #include "base/template_util.h" #include <string> +#include <type_traits> #include "base/containers/flat_tree.h" #include "base/test/move_only_int.h" @@ -114,6 +115,75 @@ !base::is_trivially_copy_constructible<std::vector<NoCopy>>::value, "is_trivially_copy_constructible<std::vector<T>> must be compiled."); +using TrueT = std::true_type; +using FalseT = std::false_type; + +// bool_constant +static_assert(std::is_same<TrueT, bool_constant<true>>::value, ""); +static_assert(std::is_same<FalseT, bool_constant<false>>::value, ""); + +struct True { + static constexpr bool value = true; +}; + +struct False { + static constexpr bool value = false; +}; + +// conjunction +static_assert(conjunction<>::value, ""); +static_assert(conjunction<TrueT>::value, ""); +static_assert(!conjunction<FalseT>::value, ""); + +static_assert(conjunction<TrueT, TrueT>::value, ""); +static_assert(!conjunction<TrueT, FalseT>::value, ""); +static_assert(!conjunction<FalseT, TrueT>::value, ""); +static_assert(!conjunction<FalseT, FalseT>::value, ""); + +static_assert(conjunction<TrueT, TrueT, TrueT>::value, ""); +static_assert(!conjunction<TrueT, TrueT, FalseT>::value, ""); +static_assert(!conjunction<TrueT, FalseT, TrueT>::value, ""); +static_assert(!conjunction<TrueT, FalseT, FalseT>::value, ""); +static_assert(!conjunction<FalseT, TrueT, TrueT>::value, ""); +static_assert(!conjunction<FalseT, TrueT, FalseT>::value, ""); +static_assert(!conjunction<FalseT, FalseT, TrueT>::value, ""); +static_assert(!conjunction<FalseT, FalseT, FalseT>::value, ""); + +static_assert(conjunction<True>::value, ""); +static_assert(!conjunction<False>::value, ""); + +// disjunction +static_assert(!disjunction<>::value, ""); +static_assert(disjunction<TrueT>::value, ""); +static_assert(!disjunction<FalseT>::value, ""); + +static_assert(disjunction<TrueT, TrueT>::value, ""); +static_assert(disjunction<TrueT, FalseT>::value, ""); +static_assert(disjunction<FalseT, TrueT>::value, ""); +static_assert(!disjunction<FalseT, FalseT>::value, ""); + +static_assert(disjunction<TrueT, TrueT, TrueT>::value, ""); +static_assert(disjunction<TrueT, TrueT, FalseT>::value, ""); +static_assert(disjunction<TrueT, FalseT, TrueT>::value, ""); +static_assert(disjunction<TrueT, FalseT, FalseT>::value, ""); +static_assert(disjunction<FalseT, TrueT, TrueT>::value, ""); +static_assert(disjunction<FalseT, TrueT, FalseT>::value, ""); +static_assert(disjunction<FalseT, FalseT, TrueT>::value, ""); +static_assert(!disjunction<FalseT, FalseT, FalseT>::value, ""); + +static_assert(disjunction<True>::value, ""); +static_assert(!disjunction<False>::value, ""); + +// negation +static_assert(!negation<TrueT>::value, ""); +static_assert(negation<FalseT>::value, ""); + +static_assert(!negation<True>::value, ""); +static_assert(negation<False>::value, ""); + +static_assert(negation<negation<TrueT>>::value, ""); +static_assert(!negation<negation<FalseT>>::value, ""); + } // namespace } // namespace base
diff --git a/base/threading/hang_watcher_unittest.cc b/base/threading/hang_watcher_unittest.cc index cbf3207e..6a3aa69 100644 --- a/base/threading/hang_watcher_unittest.cc +++ b/base/threading/hang_watcher_unittest.cc
@@ -226,7 +226,9 @@ base::ScopedClosureRunner unregister_thread_closure_; }; -TEST_F(HangWatcherRealTimeTest, PeriodicCallsCount) { +// TODO(https://crbug.com/1064116): Fix this test not to rely on timely task +// execution, which results in flakiness on slower bots. +TEST_F(HangWatcherRealTimeTest, DISABLED_PeriodicCallsCount) { // These values are chosen to execute fast enough while running the unit tests // but be large enough to buffer against clock precision problems. const base::TimeDelta kMonitoringPeriod(
diff --git a/base/traits_bag.h b/base/traits_bag.h index 382c0c8..b8344d8e9 100644 --- a/base/traits_bag.h +++ b/base/traits_bag.h
@@ -12,6 +12,7 @@ #include "base/optional.h" #include "base/parameter_pack.h" +#include "base/template_util.h" // A bag of Traits (structs / enums / etc...) can be an elegant alternative to // the builder pattern and multiple default arguments for configuring things. @@ -74,14 +75,14 @@ struct Exclude { template <typename T, std::enable_if_t<ParameterPack< - TraitsToExclude...>::template HasType<T>()>* = nullptr> + TraitsToExclude...>::template HasType<T>::value>* = nullptr> static constexpr EmptyTrait Filter(T t) { return EmptyTrait(); } template <typename T, std::enable_if_t<!ParameterPack< - TraitsToExclude...>::template HasType<T>()>* = nullptr> + TraitsToExclude...>::template HasType<T>::value>* = nullptr> static constexpr T Filter(T t) { return t; } @@ -198,10 +199,8 @@ // Note EmptyTrait is always regarded as valid to support filtering. template <class ValidTraits, class T> -inline constexpr bool IsValidTrait() { - return std::is_constructible<ValidTraits, T>::value || - std::is_same<T, EmptyTrait>::value; -} +using IsValidTrait = disjunction<std::is_constructible<ValidTraits, T>, + std::is_same<T, EmptyTrait>>; // Tests whether a given trait type is valid or invalid by testing whether it is // convertible to the provided ValidTraits type. To use, define a ValidTraits @@ -220,11 +219,8 @@ // ... // }; template <class ValidTraits, class... ArgTypes> -struct AreValidTraits - : std::integral_constant<bool, - all_of( - {IsValidTrait<ValidTraits, ArgTypes>()...})> { -}; +using AreValidTraits = + bool_constant<all_of({IsValidTrait<ValidTraits, ArgTypes>::value...})>; // Helper to make getting an enum from a trait more readable. template <typename Enum, typename... Args> @@ -247,12 +243,11 @@ // Helper to make checking for the presence of a trait more readable. template <typename Trait, typename... Args> -static constexpr bool HasTrait() { +struct HasTrait : ParameterPack<Args...>::template HasType<Trait> { static_assert( count({std::is_constructible<Trait, Args>::value...}, true) <= 1, "The traits bag contains multiple traits of the same type."); - return ParameterPack<Args...>::template HasType<Trait>(); -} +}; // If you need a template vararg constructor to delegate to a private // constructor, you may need to add this to the private constructor to ensure
diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py index 5d5b79cc..91f2c88 100644 --- a/build/android/PRESUBMIT.py +++ b/build/android/PRESUBMIT.py
@@ -89,6 +89,7 @@ J('pylib', 'utils', 'decorators_test.py'), J('pylib', 'utils', 'device_dependencies_test.py'), J('pylib', 'utils', 'dexdump_test.py'), + J('pylib', 'utils', 'gold_utils_test.py'), J('pylib', 'utils', 'proguard_test.py'), J('pylib', 'utils', 'test_filter_test.py'), J('.', 'convert_dex_profile_tests.py'),
diff --git a/build/android/pylib/base/output_manager_factory.py b/build/android/pylib/base/output_manager_factory.py index 7a644bc..97a0d88 100644 --- a/build/android/pylib/base/output_manager_factory.py +++ b/build/android/pylib/base/output_manager_factory.py
@@ -5,10 +5,11 @@ from pylib import constants from pylib.output import local_output_manager from pylib.output import remote_output_manager +from pylib.utils import local_utils def CreateOutputManager(args): - if args.local_output: + if args.local_output or not local_utils.IsOnSwarming(): return local_output_manager.LocalOutputManager( output_dir=constants.GetOutDirectory()) else:
diff --git a/build/android/pylib/instrumentation/instrumentation_test_instance.py b/build/android/pylib/instrumentation/instrumentation_test_instance.py index 3096c78c..edb55ed 100644 --- a/build/android/pylib/instrumentation/instrumentation_test_instance.py +++ b/build/android/pylib/instrumentation/instrumentation_test_instance.py
@@ -19,6 +19,7 @@ from pylib.symbols import deobfuscator from pylib.symbols import stack_symbolizer from pylib.utils import dexdump +from pylib.utils import gold_utils from pylib.utils import instrumentation_tracing from pylib.utils import proguard from pylib.utils import shared_preference_utils @@ -516,6 +517,9 @@ self._use_webview_provider = None self._initializeUseWebviewProviderAttributes(args) + self._skia_gold_properties = None + self._initializeSkiaGoldAttributes(args) + self._external_shard_index = args.test_launcher_shard_index self._total_external_shards = args.test_launcher_total_shards @@ -724,6 +728,9 @@ return self._use_webview_provider = args.use_webview_provider + def _initializeSkiaGoldAttributes(self, args): + self._skia_gold_properties = gold_utils.SkiaGoldProperties(args) + @property def additional_apks(self): return self._additional_apks @@ -801,6 +808,10 @@ return self._screenshot_dir @property + def skia_gold_properties(self): + return self._skia_gold_properties + + @property def store_tombstones(self): return self._store_tombstones
diff --git a/build/android/pylib/instrumentation/instrumentation_test_instance_test.py b/build/android/pylib/instrumentation/instrumentation_test_instance_test.py index cbe860f..d3003b8 100755 --- a/build/android/pylib/instrumentation/instrumentation_test_instance_test.py +++ b/build/android/pylib/instrumentation/instrumentation_test_instance_test.py
@@ -30,13 +30,16 @@ @staticmethod def createTestInstance(): c = _INSTRUMENTATION_TEST_INSTANCE_PATH % 'InstrumentationTestInstance' + # yapf: disable with mock.patch('%s._initializeApkAttributes' % c), ( mock.patch('%s._initializeDataDependencyAttributes' % c)), ( - mock.patch('%s._initializeTestFilterAttributes' % c)), ( + mock.patch('%s._initializeTestFilterAttributes' %c)), ( mock.patch('%s._initializeFlagAttributes' % c)), ( mock.patch('%s._initializeDriverAttributes' % c)), ( mock.patch('%s._initializeTestControlAttributes' % c)), ( - mock.patch('%s._initializeTestCoverageAttributes' % c)): + mock.patch('%s._initializeTestCoverageAttributes' % c)), ( + mock.patch('%s._initializeSkiaGoldAttributes' % c)): + # yapf: enable return instrumentation_test_instance.InstrumentationTestInstance( mock.MagicMock(), mock.MagicMock(), lambda s: None)
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py index 561d613..37fb58688 100644 --- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py +++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -34,6 +34,7 @@ from pylib.local.device import local_device_environment from pylib.local.device import local_device_test_run from pylib.output import remote_output_manager +from pylib.utils import gold_utils from pylib.utils import instrumentation_tracing from pylib.utils import shared_preference_utils @@ -92,6 +93,7 @@ r'(?P<description>[-\w]+)\.' r'(?P<device_model_sdk>[-\w]+)\.png') + @contextlib.contextmanager def _LogTestEndpoints(device, test_name): device.RunShellCommand( @@ -638,8 +640,7 @@ json_archive_name, 'ui_capture', output_manager.Datatype.JSON ) as json_archive: json.dump(screenshots, json_archive) - for result in results: - result.SetLink('ui screenshot', json_archive.Link()) + _SetLinkOnResults(results, 'ui screenshot', json_archive.Link()) def pull_ui_screenshot(filename): source_dir = ui_capture_dir.name @@ -667,9 +668,8 @@ for step in post_test_steps: step() - for result in results: - if logcat_file: - result.SetLink('logcat', logcat_file.Link()) + if logcat_file: + _SetLinkOnResults(results, 'logcat', logcat_file.Link()) # Update the result name if the test used flags. if flags_to_add: @@ -889,12 +889,108 @@ screenshot_host_file.name) finally: screenshot_device_file.close() - for result in results: - result.SetLink(link_name, screenshot_host_file.Link()) + _SetLinkOnResults(results, link_name, screenshot_host_file.Link()) def _ProcessRenderTestResults( self, device, render_tests_device_output_dir, results): + self._ProcessSkiaGoldRenderTestResults( + device, render_tests_device_output_dir, results) + self._ProcessLocalRenderTestResults(device, render_tests_device_output_dir, + results) + def _ProcessSkiaGoldRenderTestResults( + self, device, render_tests_device_output_dir, results): + gold_dir = posixpath.join(render_tests_device_output_dir, 'skia_gold') + if not device.FileExists(gold_dir): + return + + gold_properties = self._test_instance.skia_gold_properties + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + gold_session = gold_utils.SkiaGoldSession( + working_dir=working_dir, gold_properties=gold_properties) + use_luci = not (gold_properties.local_pixel_tests + or gold_properties.no_luci_auth) + for image_name in device.ListDirectory(gold_dir): + if not image_name.endswith('.png'): + continue + + render_name = image_name[:-4] + json_name = render_name + '.json' + device_json_path = posixpath.join(gold_dir, json_name) + if not device.FileExists(device_json_path): + _FailTestIfNecessary(results) + _AppendToLog( + results, 'Unable to find corresponding JSON file for image %s ' + 'when doing Skia Gold comparison.' % image_name) + continue + + host_image_path = os.path.join(working_dir, image_name) + device.PullFile(posixpath.join(gold_dir, image_name), host_image_path) + host_json_path = os.path.join(working_dir, json_name) + device.PullFile(device_json_path, host_json_path) + + status, error = gold_session.RunComparison( + name=render_name, + keys_file=host_json_path, + png_file=host_image_path, + output_manager=self._env.output_manager, + use_luci=use_luci) + + if not status: + continue + + _FailTestIfNecessary(results) + failure_log = ( + 'Skia Gold reported failure for RenderTest %s. See ' + 'RENDER_TESTS.md for how to fix this failure.' % render_name) + status_codes = gold_utils.SkiaGoldSession.StatusCodes + if status == status_codes.AUTH_FAILURE: + _AppendToLog(results, + 'Gold authentication failed with output %s' % error) + elif status == status_codes.COMPARISON_FAILURE_REMOTE: + triage_link = gold_session.GetTriageLink(render_name) + if not triage_link: + _AppendToLog( + results, 'Failed to get triage link for %s, raw output: %s' % + (render_name, error)) + _AppendToLog( + results, 'Reason for no triage link: %s' % + gold_session.GetTriageLinkOmissionReason(render_name)) + continue + if gold_properties.IsTryjobRun(): + _SetLinkOnResults(results, 'Skia Gold triage link for entire CL', + triage_link) + else: + _SetLinkOnResults(results, + 'Skia Gold triage link for %s' % render_name, + triage_link) + _AppendToLog(results, failure_log) + + elif status == status_codes.COMPARISON_FAILURE_LOCAL: + given_link = gold_session.GetGivenImageLink(render_name) + closest_link = gold_session.GetClosestImageLink(render_name) + diff_link = gold_session.GetDiffImageLink(render_name) + + processed_template_output = _GenerateRenderTestHtml( + render_name, given_link, closest_link, diff_link) + with self._env.output_manager.ArchivedTempfile( + '%s.html' % render_name, 'gold_local_diffs', + output_manager.Datatype.HTML) as html_results: + html_results.write(processed_template_output) + _SetLinkOnResults(results, render_name, html_results.Link()) + _AppendToLog( + results, + 'See %s link for diff image with closest positive.' % render_name) + elif status == status_codes.LOCAL_DIFF_FAILURE: + _AppendToLog(results, + 'Failed to generate diffs from Gold: %s' % error) + else: + logging.error( + 'Given unhandled SkiaGoldSession StatusCode %s with error %s', + status, error) + + def _ProcessLocalRenderTestResults(self, device, + render_tests_device_output_dir, results): failure_images_device_dir = posixpath.join( render_tests_device_output_dir, 'failures') if not device.FileExists(failure_images_device_dir): @@ -940,24 +1036,15 @@ else: diff_link = '' - jinja2_env = jinja2.Environment( - loader=jinja2.FileSystemLoader(_JINJA_TEMPLATE_DIR), - trim_blocks=True) - template = jinja2_env.get_template(_JINJA_TEMPLATE_FILENAME) - # pylint: disable=no-member - processed_template_output = template.render( - test_name=failure_filename, - failure_link=failure_link, - golden_link=golden_link, - diff_link=diff_link) + processed_template_output = _GenerateRenderTestHtml( + failure_filename, failure_link, golden_link, diff_link) with self._env.output_manager.ArchivedTempfile( '%s.html' % failure_filename, 'render_tests', output_manager.Datatype.HTML) as html_results: html_results.write(processed_template_output) html_results.flush() - for result in results: - result.SetLink(failure_filename, html_results.Link()) + _SetLinkOnResults(results, failure_filename, html_results.Link()) #override def _ShouldRetry(self, test, result): @@ -1000,3 +1087,69 @@ test = [test] return any([RENDER_TEST_FEATURE_ANNOTATION in t['annotations'].get( FEATURE_ANNOTATION, {}).get('value', ()) for t in test]) + + +def _GenerateRenderTestHtml(image_name, failure_link, golden_link, diff_link): + """Generates a RenderTest results page. + + Displays the generated (failure) image, the golden image, and the diff + between them. + + Args: + image_name: The name of the image whose comparison failed. + failure_link: The URL to the generated/failure image. + golden_link: The URL to the golden image. + diff_link: The URL to the diff image between the failure and golden images. + + Returns: + A string containing the generated HTML. + """ + jinja2_env = jinja2.Environment( + loader=jinja2.FileSystemLoader(_JINJA_TEMPLATE_DIR), trim_blocks=True) + template = jinja2_env.get_template(_JINJA_TEMPLATE_FILENAME) + # pylint: disable=no-member + return template.render( + test_name=image_name, + failure_link=failure_link, + golden_link=golden_link, + diff_link=diff_link) + + +def _FailTestIfNecessary(results): + """Marks the given results as failed if it wasn't already. + + Marks the result types as ResultType.FAIL unless they were already some sort + of failure type, e.g. ResultType.CRASH. + + Args: + results: A list of base_test_result.BaseTestResult objects. + """ + for result in results: + if result.GetType() not in [ + base_test_result.ResultType.FAIL, base_test_result.ResultType.CRASH, + base_test_result.ResultType.TIMEOUT, base_test_result.ResultType.UNKNOWN + ]: + result.SetType(base_test_result.ResultType.FAIL) + + +def _AppendToLog(results, line): + """Appends the given line to the end of the logs of the given results. + + Args: + results: A list of base_test_result.BaseTestResult objects. + line: A string to be appended as a neww line to the log of |result|. + """ + for result in results: + result.SetLog(result.GetLog() + '\n' + line) + + +def _SetLinkOnResults(results, link_name, link): + """Sets the given link on the given results. + + Args: + results: A list of base_test_result.BaseTestResult objects. + link_name: A string containing the name of the link being set. + link: A string containing the lkink being set. + """ + for result in results: + result.SetLink(link_name, link)
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py b/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py index fb96ee6..3129c112 100755 --- a/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py +++ b/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py
@@ -14,16 +14,21 @@ from pylib.base import mock_test_instance from pylib.local.device import local_device_instrumentation_test_run + class LocalDeviceInstrumentationTestRunTest(unittest.TestCase): + def setUp(self): + super(LocalDeviceInstrumentationTestRunTest, self).setUp() + self._env = mock_environment.MockEnvironment() + self._ti = mock_test_instance.MockTestInstance() + self._obj = ( + local_device_instrumentation_test_run.LocalDeviceInstrumentationTestRun( + self._env, self._ti)) + # TODO(crbug.com/797002): Decide whether the _ShouldRetry hook is worth # retaining and remove these tests if not. def testShouldRetry_failure(self): - env = mock_environment.MockEnvironment() - ti = mock_test_instance.MockTestInstance() - obj = (local_device_instrumentation_test_run - .LocalDeviceInstrumentationTestRun(env, ti)) test = { 'annotations': {}, 'class': 'SadTest', @@ -32,13 +37,9 @@ } result = base_test_result.BaseTestResult( 'SadTest.testFailure', base_test_result.ResultType.FAIL) - self.assertTrue(obj._ShouldRetry(test, result)) + self.assertTrue(self._obj._ShouldRetry(test, result)) def testShouldRetry_retryOnFailure(self): - env = mock_environment.MockEnvironment() - ti = mock_test_instance.MockTestInstance() - obj = (local_device_instrumentation_test_run - .LocalDeviceInstrumentationTestRun(env, ti)) test = { 'annotations': {'RetryOnFailure': None}, 'class': 'SadTest', @@ -47,13 +48,9 @@ } result = base_test_result.BaseTestResult( 'SadTest.testRetryOnFailure', base_test_result.ResultType.FAIL) - self.assertTrue(obj._ShouldRetry(test, result)) + self.assertTrue(self._obj._ShouldRetry(test, result)) def testShouldRetry_notRun(self): - env = mock_environment.MockEnvironment() - ti = mock_test_instance.MockTestInstance() - obj = (local_device_instrumentation_test_run - .LocalDeviceInstrumentationTestRun(env, ti)) test = { 'annotations': {}, 'class': 'SadTest', @@ -62,7 +59,7 @@ } result = base_test_result.BaseTestResult( 'SadTest.testNotRun', base_test_result.ResultType.NOTRUN) - self.assertTrue(obj._ShouldRetry(test, result)) + self.assertTrue(self._obj._ShouldRetry(test, result)) if __name__ == '__main__':
diff --git a/build/android/pylib/utils/gold_utils.py b/build/android/pylib/utils/gold_utils.py new file mode 100644 index 0000000..1702553e --- /dev/null +++ b/build/android/pylib/utils/gold_utils.py
@@ -0,0 +1,488 @@ +# Copyright 2020 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. +"""Utilities for interacting with the Skia Gold image diffing service.""" + +import json +import logging +import os +import shutil +import tempfile + +from devil.utils import cmd_helper +from pylib.base.output_manager import Datatype +from pylib.constants import host_paths +from pylib.utils import local_utils +from pylib.utils import repo_utils + +DEFAULT_INSTANCE = 'chrome' + +GOLDCTL_BINARY = os.path.join(host_paths.DIR_SOURCE_ROOT, 'tools', + 'skia_goldctl', 'linux', 'goldctl') + + +class SkiaGoldSession(object): + class StatusCodes(object): + """Status codes for RunComparison.""" + SUCCESS = 0 + AUTH_FAILURE = 1 + COMPARISON_FAILURE_REMOTE = 2 + COMPARISON_FAILURE_LOCAL = 3 + LOCAL_DIFF_FAILURE = 4 + NO_OUTPUT_MANAGER = 5 + + class ComparisonResults(object): + """Struct-like object for storing results of an image comparison.""" + + def __init__(self): + self.triage_link = None + self.triage_link_omission_reason = None + self.local_diff_given_image = None + self.local_diff_closest_image = None + self.local_diff_diff_image = None + + def __init__(self, working_dir, gold_properties, instance=DEFAULT_INSTANCE): + """A class to handle all aspects of an image comparison via Skia Gold. + + Args: + working_dir: The directory to store config files, etc. Sharing the same + working directory between multiple SkiaGoldSessions allows re-use of + authentication and downloaded baselines. + gold_properties: A SkiaGoldProperties instance for the current test run. + instance: The name of the Skia Gold instance to interact with. + """ + self._working_dir = working_dir + self._gold_properties = gold_properties + self._instance = instance + self._triage_link_file = tempfile.NamedTemporaryFile( + suffix='.txt', dir=working_dir, delete=False).name + # A map of image name (string) to ComparisonResults for that image. + self._comparison_results = {} + + def RunComparison(self, + name, + keys_file, + png_file, + output_manager, + use_luci=True): + """Helper method to run all steps to compare a produced image. + + Handles authentication, comparison, and, if necessary, local diffing. + + Args: + name: The name of the image being compared. + keys_file: A path to a JSON file containing various comparison config + data such as corpus and debug information like the hardware/software + configuration the image was produced on. + png_file: A path to a PNG file containing the image to be compared. + output_manager: The output manager used to save local diff images if + necessary. Can be None, but will fail if it ends up needing to be used + and is not set. + use_luci: If true, authentication will use the service account provided + by the LUCI context. If false, will attempt to use whatever is set up + in gsutil, which is only supported for local runs. + + Returns: + A tuple (status, error). |status| is a value from + SkiaGoldSession.StatusCodes signifying the result of the comparison. + |error| is an error message describing the status if not successful. + """ + auth_rc, auth_stdout = self.Authenticate(use_luci=use_luci) + if auth_rc: + return self.StatusCodes.AUTH_FAILURE, auth_stdout + + with open(keys_file) as f: + corpus = json.load(f).get('source_type', self._instance) + + compare_rc, compare_stdout = self.Compare( + name=name, keys_file=keys_file, png_file=png_file, corpus=corpus) + if not compare_rc: + return self.StatusCodes.SUCCESS, None + + logging.error('Gold comparison failed: %s', compare_stdout) + if not self._gold_properties.local_pixel_tests: + return self.StatusCodes.COMPARISON_FAILURE_REMOTE, compare_stdout + + if not output_manager: + return (self.StatusCodes.NO_OUTPUT_MANAGER, + 'No output manager for local diff images') + diff_rc, diff_stdout = self.Diff( + name=name, + png_file=png_file, + corpus=corpus, + output_manager=output_manager) + if diff_rc: + return self.StatusCodes.LOCAL_DIFF_FAILURE, diff_stdout + return self.StatusCodes.COMPARISON_FAILURE_LOCAL, compare_stdout + + def Authenticate(self, use_luci=True): + """Authenticates with Skia Gold for this session. + + Args: + use_luci: If true, authentication will use the service account provided + by the LUCI context. If false, will attempt to use whatever is set up + in gsutil, which is only supported for local runs. + + Returns: + A tuple (return_code, output). |return_code| is the return code of the + authentication process. |output| is the stdout + stderr of the + authentication process. + """ + auth_cmd = [GOLDCTL_BINARY, 'auth', '--work-dir', self._working_dir] + if use_luci: + auth_cmd.append('--luci') + elif not self._gold_properties.local_pixel_tests: + raise RuntimeError( + 'Cannot authenticate to Skia Gold with use_luci=False unless running ' + 'local pixel tests') + + rc, stdout, _ = cmd_helper.GetCmdStatusOutputAndError( + auth_cmd, merge_stderr=True) + return rc, stdout + + def Compare(self, name, keys_file, png_file, corpus): + """Compares the given image to images known to Gold. + + Triage links can later be retrieved using GetTriageLink(). + + Args: + name: The name of the image being compared. + keys_file: A path to a JSON file containing various comparison config + data such as corpus and debug information like the hardware/software + configuration the image was produced on. + png_file: A path to a PNG file containing the image to be compared. + corpus: The corpus that the image belongs to. + + Returns: + A tuple (return_code, output). |return_code| is the return code of the + comparison process. |output| is the stdout + stderr of the comparison + process. + """ + compare_cmd = [ + GOLDCTL_BINARY, + 'imgtest', + 'add', + '--passfail', + '--test-name', + name, + '--instance', + self._instance, + '--corpus', + corpus, + '--keys-file', + keys_file, + '--png-file', + png_file, + '--work-dir', + self._working_dir, + '--failure-file', + self._triage_link_file, + '--commit', + self._gold_properties.git_revision, + ] + if self._gold_properties.local_pixel_tests: + compare_cmd.append('--dryrun') + if self._gold_properties.IsTryjobRun(): + compare_cmd.extend([ + '--issue', + str(self._gold_properties.issue), + '--patchset', + str(self._gold_properties.patchset), + '--jobid', + str(self._gold_properties.job_id), + '--crs', + str(self._gold_properties.code_review_system), + '--cis', + str(self._gold_properties.continuous_integration_system), + ]) + + rc, stdout, _ = cmd_helper.GetCmdStatusOutputAndError( + compare_cmd, merge_stderr=True) + + self._comparison_results[name] = self.ComparisonResults() + if rc == 0: + self._comparison_results[name].triage_link_omission_reason = ( + 'Comparison succeeded, no triage link') + elif self._gold_properties.IsTryjobRun(): + # TODO(skbug.com/9879): Remove the explicit corpus when Gold's UI is + # updated to show results from all corpora for tryjobs. + cl_triage_link = ('https://{instance}-gold.skia.org/search?' + 'issue={issue}&' + 'new_clstore=true&' + 'query=source_type%3D{corpus}') + cl_triage_link = cl_triage_link.format( + instance=self._instance, + issue=self._gold_properties.issue, + corpus=corpus) + self._comparison_results[name].triage_link = cl_triage_link + else: + try: + with open(self._triage_link_file) as tlf: + triage_link = tlf.read().strip() + self._comparison_results[name].triage_link = triage_link + except IOError: + self._comparison_results[name].triage_link_omission_reason = ( + 'Failed to read triage link from file') + return rc, stdout + + def Diff(self, name, png_file, corpus, output_manager): + """Performs a local image diff against the closest known positive in Gold. + + This is used for running tests on a workstation, where uploading data to + Gold for ingestion is not allowed, and thus the web UI is not available. + + Image links can later be retrieved using Get*ImageLink(). + + Args: + name: The name of the image being compared. + png_file: The path to a PNG file containing the image to be diffed. + corpus: The corpus that the image belongs to. + output_manager: The output manager used to save local diff images. + + Returns: + A tuple (return_code, output). |return_code| is the return code of the + diff process. |output| is the stdout + stderr of the diff process. + """ + # Output managers only support archived files, not directories, so we have + # to use a temporary directory and later move the data into the archived + # files. + output_dir = tempfile.mkdtemp(dir=self._working_dir) + diff_cmd = [ + GOLDCTL_BINARY, + 'diff', + '--corpus', + corpus, + '--instance', + self._instance, + '--input', + png_file, + '--test', + name, + '--work-dir', + self._working_dir, + '--out-dir', + output_dir, + ] + rc, stdout, _ = cmd_helper.GetCmdStatusOutputAndError( + diff_cmd, merge_stderr=True) + given_path = closest_path = diff_path = None + # The directory should contain "input-<hash>.png", "closest-<hash>.png", + # and "diff.png". + for f in os.listdir(output_dir): + filepath = os.path.join(output_dir, f) + if f.startswith('input-'): + given_path = filepath + elif f.startswith('closest-'): + closest_path = filepath + elif f == 'diff.png': + diff_path = filepath + results = self._comparison_results.setdefault(name, + self.ComparisonResults()) + if given_path: + with output_manager.ArchivedTempfile('given_%s.png' % name, + 'gold_local_diffs', + Datatype.PNG) as given_file: + shutil.move(given_path, given_file.name) + results.local_diff_given_image = given_file.Link() + if closest_path: + with output_manager.ArchivedTempfile('closest_%s.png' % name, + 'gold_local_diffs', + Datatype.PNG) as closest_file: + shutil.move(closest_path, closest_file.name) + results.local_diff_closest_image = closest_file.Link() + if diff_path: + with output_manager.ArchivedTempfile( + 'diff_%s.png' % name, 'gold_local_diffs', Datatype.PNG) as diff_file: + shutil.move(diff_path, diff_file.name) + results.local_diff_diff_image = diff_file.Link() + return rc, stdout + + def GetTriageLink(self, name): + """Gets the triage link for the given image. + + Args: + name: The name of the image to retrieve the triage link for. + + Returns: + A string containing the triage link if it is available, or None if it is + not available for some reason. The reason can be retrieved using + GetTriageLinkOmissionReason. + """ + return self._comparison_results.get(name, + self.ComparisonResults()).triage_link + + def GetTriageLinkOmissionReason(self, name): + """Gets the reason why a triage link is not available for an image. + + Args: + name: The name of the image whose triage link does not exist. + + Returns: + A string containing the reason why a triage link is not available. + """ + if name not in self._comparison_results: + return 'No image comparison performed for %s' % name + results = self._comparison_results[name] + # This method should not be called if there is a valid triage link. + assert results.triage_link is None + if results.triage_link_omission_reason: + return results.triage_link_omission_reason + if results.local_diff_given_image: + return 'Gold only used to do a local image diff' + raise RuntimeError( + 'Somehow have a ComparisonResults instance for %s that should not ' + 'exist' % name) + + def GetGivenImageLink(self, name): + """Gets the link to the given image used for local diffing. + + Args: + name: The name of the image that was diffed. + + Returns: + A string containing the link to where the image is saved, or None if it + does not exist. Since local diffing should only be done when running + locally, this *should* be a file:// URL, but there is no guarantee of + that. + """ + assert name in self._comparison_results + return self._comparison_results[name].local_diff_given_image + + def GetClosestImageLink(self, name): + """Gets the link to the closest known image used for local diffing. + + Args: + name: The name of the image that was diffed. + + Returns: + A string containing the link to where the image is saved, or None if it + does not exist. Since local diffing should only be done when running + locally, this *should* be a file:// URL, but there is no guarantee of + that. + """ + assert name in self._comparison_results + return self._comparison_results[name].local_diff_closest_image + + def GetDiffImageLink(self, name): + """Gets the link to the diff between the given and closest images. + + Args: + name: The name of the image that was diffed. + + Returns: + A string containing the link to where the image is saved, or None if it + does not exist. Since local diffing should only be done when running + locally, this *should* be a file:// URL, but there is no guarantee of + that. + """ + assert name in self._comparison_results + return self._comparison_results[name].local_diff_diff_image + + +class SkiaGoldProperties(object): + def __init__(self, args): + """Class to validate and store properties related to Skia Gold. + + Args: + args: The parsed arguments from an argparse.ArgumentParser. + """ + self._git_revision = None + self._issue = None + self._patchset = None + self._job_id = None + self._local_pixel_tests = None + self._no_luci_auth = None + + # Could in theory be configurable, but hard-coded for now since there's + # no plan to support anything else. + self._code_review_system = 'gerrit' + self._continuous_integration_system = 'buildbucket' + + self._InitializeProperties(args) + + def IsTryjobRun(self): + return self.issue is not None + + @property + def continuous_integration_system(self): + return self._continuous_integration_system + + @property + def code_review_system(self): + return self._code_review_system + + @property + def git_revision(self): + return self._GetGitRevision() + + @property + def issue(self): + return self._issue + + @property + def job_id(self): + return self._job_id + + @property + def local_pixel_tests(self): + return self._IsLocalRun() + + @property + def no_luci_auth(self): + return self._no_luci_auth + + @property + def patchset(self): + return self._patchset + + def _GetGitRevision(self): + if not self._git_revision: + # Automated tests should always pass the revision, so assume we're on + # a workstation and try to get the local origin/master HEAD. + if not self._IsLocalRun(): + raise RuntimeError( + '--git-revision was not passed when running on a bot') + revision = repo_utils.GetGitOriginMasterHeadSHA1( + host_paths.DIR_SOURCE_ROOT) + if not revision or len(revision) != 40: + raise RuntimeError( + '--git-revision not passed and unable to determine from git') + self._git_revision = revision + return self._git_revision + + def _IsLocalRun(self): + if self._local_pixel_tests is None: + self._local_pixel_tests = not local_utils.IsOnSwarming() + if self._local_pixel_tests: + logging.warning( + 'Automatically determined that test is running on a workstation') + else: + logging.warning( + 'Automatically determined that test is running on a bot') + return self._local_pixel_tests + + def _InitializeProperties(self, args): + if hasattr(args, 'local_pixel_tests'): + # If not set, will be automatically determined later if needed. + self._local_pixel_tests = args.local_pixel_tests + + if hasattr(args, 'no_luci_auth'): + self._no_luci_auth = args.no_luci_auth + + # Will be automatically determined later if needed. + if not hasattr(args, 'git_revision') or not args.git_revision: + return + self._git_revision = args.git_revision + + # Only expected on tryjob runs. + if not hasattr(args, 'gerrit_issue') or not args.gerrit_issue: + return + self._issue = args.gerrit_issue + if not hasattr(args, 'gerrit_patchset') or not args.gerrit_patchset: + raise RuntimeError( + '--gerrit-issue passed, but --gerrit-patchset not passed.') + self._patchset = args.gerrit_patchset + if not hasattr(args, 'buildbucket_id') or not args.buildbucket_id: + raise RuntimeError( + '--gerrit-issue passed, but --buildbucket-id not passed.') + self._job_id = args.buildbucket_id
diff --git a/build/android/pylib/utils/gold_utils_test.py b/build/android/pylib/utils/gold_utils_test.py new file mode 100755 index 0000000..924a6302 --- /dev/null +++ b/build/android/pylib/utils/gold_utils_test.py
@@ -0,0 +1,625 @@ +#!/usr/bin/env vpython +# Copyright 2020 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. +"""Tests for gold_utils.""" + +#pylint: disable=protected-access + +import collections +import json +import os +import unittest + +from pylib.constants import host_paths +from pylib.utils import gold_utils +from py_utils import tempfile_ext + +with host_paths.SysPath(host_paths.PYMOCK_PATH): + import mock # pylint: disable=import-error + +_SkiaGoldArgs = collections.namedtuple('_SkiaGoldArgs', [ + 'local_pixel_tests', + 'no_luci_auth', + 'git_revision', + 'gerrit_issue', + 'gerrit_patchset', + 'buildbucket_id', +]) + + +def createSkiaGoldArgs(local_pixel_tests=None, + no_luci_auth=None, + git_revision=None, + gerrit_issue=None, + gerrit_patchset=None, + buildbucket_id=None): + return _SkiaGoldArgs(local_pixel_tests, no_luci_auth, git_revision, + gerrit_issue, gerrit_patchset, buildbucket_id) + + +def assertArgWith(test, arg_list, arg, value): + i = arg_list.index(arg) + test.assertEqual(arg_list[i + 1], value) + + +class SkiaGoldSessionRunComparisonTest(unittest.TestCase): + """Tests the functionality of SkiaGoldSession.RunComparison.""" + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_comparisonSuccess(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (0, None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, None) + status, _ = session.RunComparison(None, keys_file, None, None) + self.assertEqual(status, gold_utils.SkiaGoldSession.StatusCodes.SUCCESS) + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 0) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_authFailure(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (1, 'Auth failed') + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, None) + status, error = session.RunComparison(None, None, None, None) + self.assertEqual(status, + gold_utils.SkiaGoldSession.StatusCodes.AUTH_FAILURE) + self.assertEqual(error, 'Auth failed') + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 0) + self.assertEqual(diff_mock.call_count, 0) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_compareFailureRemote(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (1, 'Compare failed') + args = createSkiaGoldArgs(local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, sgp) + status, error = session.RunComparison(None, keys_file, None, None) + self.assertEqual( + status, + gold_utils.SkiaGoldSession.StatusCodes.COMPARISON_FAILURE_REMOTE) + self.assertEqual(error, 'Compare failed') + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 0) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_compareFailureLocal(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (1, 'Compare failed') + diff_mock.return_value = (0, None) + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, sgp) + status, error = session.RunComparison(None, keys_file, None, working_dir) + self.assertEqual( + status, + gold_utils.SkiaGoldSession.StatusCodes.COMPARISON_FAILURE_LOCAL) + self.assertEqual(error, 'Compare failed') + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 1) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_diffFailure(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (1, 'Compare failed') + diff_mock.return_value = (1, 'Diff failed') + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, sgp) + status, error = session.RunComparison(None, keys_file, None, working_dir) + self.assertEqual( + status, gold_utils.SkiaGoldSession.StatusCodes.LOCAL_DIFF_FAILURE) + self.assertEqual(error, 'Diff failed') + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 1) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_noOutputDirLocal(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (1, 'Compare failed') + diff_mock.return_value = (0, None) + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, sgp) + status, error = session.RunComparison(None, keys_file, None, None) + self.assertEqual(status, + gold_utils.SkiaGoldSession.StatusCodes.NO_OUTPUT_MANAGER) + self.assertEqual(error, 'No output manager for local diff images') + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 0) + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_corpusDefault(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (0, None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({}, f) + session = gold_utils.SkiaGoldSession(working_dir, None, 'SomeCorpus') + status, _ = session.RunComparison(None, keys_file, None, None) + self.assertEqual(status, gold_utils.SkiaGoldSession.StatusCodes.SUCCESS) + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 0) + compare_mock.assertCalledWith( + name=None, keys_file=keys_file, png_file=None, corpus='SomeCorpus') + + @mock.patch.object(gold_utils.SkiaGoldSession, 'Diff') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Compare') + @mock.patch.object(gold_utils.SkiaGoldSession, 'Authenticate') + def test_corpusFromJson(self, auth_mock, compare_mock, diff_mock): + auth_mock.return_value = (0, None) + compare_mock.return_value = (0, None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + keys_file = os.path.join(working_dir, 'keys.json') + with open(os.path.join(working_dir, 'keys.json'), 'w') as f: + json.dump({'source_type': 'foobar'}, f) + session = gold_utils.SkiaGoldSession(working_dir, None, 'SomeCorpus') + status, _ = session.RunComparison(None, keys_file, None, None) + self.assertEqual(status, gold_utils.SkiaGoldSession.StatusCodes.SUCCESS) + self.assertEqual(auth_mock.call_count, 1) + self.assertEqual(compare_mock.call_count, 1) + self.assertEqual(diff_mock.call_count, 0) + compare_mock.assertCalledWith( + name=None, keys_file=keys_file, png_file=None, corpus='foobar') + + +class SkiaGoldSessionAuthenticateTest(unittest.TestCase): + """Tests the functionality of SkiaGoldSession.Authenticate.""" + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandOutputReturned(self, cmd_mock): + cmd_mock.return_value = (1, 'Something bad :(', None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, None) + rc, stdout = session.Authenticate() + self.assertEqual(cmd_mock.call_count, 1) + self.assertEqual(rc, 1) + self.assertEqual(stdout, 'Something bad :(') + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandWithUseLuciTrue(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, None) + session.Authenticate(use_luci=True) + self.assertIn('--luci', cmd_mock.call_args[0][0]) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandWithUseLuciFalse(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + session.Authenticate(use_luci=False) + self.assertNotIn('--luci', cmd_mock.call_args[0][0]) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandWithUseLuciFalseNotLocal(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + with self.assertRaises(RuntimeError): + session.Authenticate(use_luci=False) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandCommonArgs(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, None) + session.Authenticate() + call_args = cmd_mock.call_args[0][0] + self.assertIn('auth', call_args) + assertArgWith(self, call_args, '--work-dir', working_dir) + + +class SkiaGoldSessionCompareTest(unittest.TestCase): + """Tests the functionality of SkiaGoldSession.Compare.""" + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandOutputReturned(self, cmd_mock): + cmd_mock.return_value = (1, 'Something bad :(', None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + rc, stdout = session.Compare(None, None, None, None) + self.assertEqual(cmd_mock.call_count, 1) + self.assertEqual(rc, 1) + self.assertEqual(stdout, 'Something bad :(') + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandWithLocalPixelTestsTrue(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + session.Compare(None, None, None, None) + self.assertIn('--dryrun', cmd_mock.call_args[0][0]) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandWithLocalPixelTestsFalse(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + session.Compare(None, None, None, None) + self.assertNotIn('--dryrun', cmd_mock.call_args[0][0]) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandTryjobArgs(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + session.Compare(None, None, None, None) + call_args = cmd_mock.call_args[0][0] + assertArgWith(self, call_args, '--issue', '1') + assertArgWith(self, call_args, '--patchset', '2') + assertArgWith(self, call_args, '--jobid', '3') + assertArgWith(self, call_args, '--crs', 'gerrit') + assertArgWith(self, call_args, '--cis', 'buildbucket') + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandTryjobArgsMissing(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + session.Compare(None, None, None, None) + call_args = cmd_mock.call_args[0][0] + self.assertNotIn('--issue', call_args) + self.assertNotIn('--patchset', call_args) + self.assertNotIn('--jobid', call_args) + self.assertNotIn('--crs', call_args) + self.assertNotIn('--cis', call_args) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandCommonArgs(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession( + working_dir, sgp, instance='instance') + session.Compare('name', 'keys_file', 'png_file', 'corpus') + call_args = cmd_mock.call_args[0][0] + self.assertIn('imgtest', call_args) + self.assertIn('add', call_args) + self.assertIn('--passfail', call_args) + assertArgWith(self, call_args, '--test-name', 'name') + assertArgWith(self, call_args, '--instance', 'instance') + assertArgWith(self, call_args, '--corpus', 'corpus') + assertArgWith(self, call_args, '--keys-file', 'keys_file') + assertArgWith(self, call_args, '--png-file', 'png_file') + assertArgWith(self, call_args, '--work-dir', working_dir) + assertArgWith(self, call_args, '--failure-file', session._triage_link_file) + assertArgWith(self, call_args, '--commit', 'a') + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_noLinkOnSuccess(self, cmd_mock): + cmd_mock.return_value = (0, None, None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + rc, _ = session.Compare('name', 'keys_file', 'png_file', None) + self.assertEqual(rc, 0) + self.assertEqual(session._comparison_results['name'].triage_link, None) + self.assertNotEqual( + session._comparison_results['name'].triage_link_omission_reason, None) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_clLinkOnTrybot(self, cmd_mock): + cmd_mock.return_value = (1, None, None) + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + rc, _ = session.Compare('name', 'keys_file', 'png_file', None) + self.assertEqual(rc, 1) + self.assertNotEqual(session._comparison_results['name'].triage_link, None) + self.assertIn('issue=1', session._comparison_results['name'].triage_link) + self.assertEqual( + session._comparison_results['name'].triage_link_omission_reason, None) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_individualLinkOnCi(self, cmd_mock): + cmd_mock.return_value = (1, None, None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + m = mock.mock_open(read_data='foobar') + with mock.patch('__builtin__.open', m, create=True): + rc, _ = session.Compare('name', 'keys_file', 'png_file', None) + self.assertEqual(rc, 1) + self.assertNotEqual(session._comparison_results['name'].triage_link, None) + self.assertEqual(session._comparison_results['name'].triage_link, 'foobar') + self.assertEqual( + session._comparison_results['name'].triage_link_omission_reason, None) + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_validOmissionOnIoError(self, cmd_mock): + cmd_mock.return_value = (1, None, None) + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + m = mock.mock_open() + m.side_effect = IOError('No read today') + with mock.patch('__builtin__.open', m, create=True): + rc, _ = session.Compare('name', 'keys_file', 'png_file', None) + self.assertEqual(rc, 1) + self.assertEqual(session._comparison_results['name'].triage_link, None) + self.assertNotEqual( + session._comparison_results['name'].triage_link_omission_reason, None) + self.assertIn( + 'Failed to read', + session._comparison_results['name'].triage_link_omission_reason) + + +class SkiaGoldSessionDiffTest(unittest.TestCase): + """Tests the functionality of SkiaGoldSession.Diff.""" + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandOutputReturned(self, cmd_mock): + cmd_mock.return_value = (1, 'Something bad :(', None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession(working_dir, sgp) + rc, stdout = session.Diff(None, None, None, None) + self.assertEqual(cmd_mock.call_count, 1) + self.assertEqual(rc, 1) + self.assertEqual(stdout, 'Something bad :(') + + @mock.patch('devil.utils.cmd_helper.GetCmdStatusOutputAndError') + def test_commandCommonArgs(self, cmd_mock): + cmd_mock.return_value = (None, None, None) + args = createSkiaGoldArgs(git_revision='a', local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with tempfile_ext.NamedTemporaryDirectory() as working_dir: + session = gold_utils.SkiaGoldSession( + working_dir, sgp, instance='instance') + session.Diff('name', 'png_file', 'corpus', None) + call_args = cmd_mock.call_args[0][0] + self.assertIn('diff', call_args) + assertArgWith(self, call_args, '--corpus', 'corpus') + assertArgWith(self, call_args, '--instance', 'instance') + assertArgWith(self, call_args, '--input', 'png_file') + assertArgWith(self, call_args, '--test', 'name') + assertArgWith(self, call_args, '--work-dir', working_dir) + i = call_args.index('--out-dir') + # The output directory should be a subdirectory of the working directory. + self.assertIn(working_dir, call_args[i + 1]) + + +class SkiaGoldSessionTriageLinkOmissionTest(unittest.TestCase): + """Tests the functionality of SkiaGoldSession.GetTriageLinkOmissionReason.""" + + # Avoid having to bother with the working directory. + class FakeGoldSession(gold_utils.SkiaGoldSession): + def __init__(self): # pylint: disable=super-init-not-called + self._comparison_results = { + 'foo': gold_utils.SkiaGoldSession.ComparisonResults(), + } + + def test_noComparison(self): + session = self.FakeGoldSession() + session._comparison_results = {} + reason = session.GetTriageLinkOmissionReason('foo') + self.assertEqual(reason, 'No image comparison performed for foo') + + def test_validReason(self): + session = self.FakeGoldSession() + session._comparison_results['foo'].triage_link_omission_reason = 'bar' + reason = session.GetTriageLinkOmissionReason('foo') + self.assertEqual(reason, 'bar') + + def test_onlyLocal(self): + session = self.FakeGoldSession() + session._comparison_results['foo'].local_diff_given_image = 'bar' + reason = session.GetTriageLinkOmissionReason('foo') + self.assertEqual(reason, 'Gold only used to do a local image diff') + + def test_onlyWithoutTriageLink(self): + session = self.FakeGoldSession() + session._comparison_results['foo'].triage_link = 'bar' + with self.assertRaises(AssertionError): + session.GetTriageLinkOmissionReason('foo') + + def test_resultsShouldNotExist(self): + session = self.FakeGoldSession() + with self.assertRaises(RuntimeError): + session.GetTriageLinkOmissionReason('foo') + + +class SkiaGoldPropertiesInitializationTest(unittest.TestCase): + """Tests that SkiaGoldProperties initializes (or doesn't) when expected.""" + + def verifySkiaGoldProperties(self, instance, expected): + self.assertEqual(instance._local_pixel_tests, + expected.get('local_pixel_tests')) + self.assertEqual(instance._no_luci_auth, expected.get('no_luci_auth')) + self.assertEqual(instance._git_revision, expected.get('git_revision')) + self.assertEqual(instance._issue, expected.get('gerrit_issue')) + self.assertEqual(instance._patchset, expected.get('gerrit_patchset')) + self.assertEqual(instance._job_id, expected.get('buildbucket_id')) + + def test_initializeSkiaGoldAttributes_unsetLocal(self): + args = createSkiaGoldArgs() + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {}) + + def test_initializeSkiaGoldAttributes_explicitLocal(self): + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': True}) + + def test_initializeSkiaGoldAttributes_explicitNonLocal(self): + args = createSkiaGoldArgs(local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': False}) + + def test_initializeSkiaGoldAttributes_explicitNoLuciAuth(self): + args = createSkiaGoldArgs(no_luci_auth=True) + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {'no_luci_auth': True}) + + def test_initializeSkiaGoldAttributes_explicitGitRevision(self): + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {'git_revision': 'a'}) + + def test_initializeSkiaGoldAttributes_tryjobArgsIgnoredWithoutRevision(self): + args = createSkiaGoldArgs( + gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties(sgp, {}) + + def test_initializeSkiaGoldAttributes_tryjobArgs(self): + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) + sgp = gold_utils.SkiaGoldProperties(args) + self.verifySkiaGoldProperties( + sgp, { + 'git_revision': 'a', + 'gerrit_issue': 1, + 'gerrit_patchset': 2, + 'buildbucket_id': 3 + }) + + def test_initializeSkiaGoldAttributes_tryjobMissingPatchset(self): + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, buildbucket_id=3) + with self.assertRaises(RuntimeError): + gold_utils.SkiaGoldProperties(args) + + def test_initializeSkiaGoldAttributes_tryjobMissingBuildbucket(self): + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, gerrit_patchset=2) + with self.assertRaises(RuntimeError): + gold_utils.SkiaGoldProperties(args) + + +class SkiaGoldPropertiesCalculationTest(unittest.TestCase): + """Tests that SkiaGoldProperties properly calculates certain properties.""" + + def testLocalPixelTests_determineTrue(self): + args = createSkiaGoldArgs() + sgp = gold_utils.SkiaGoldProperties(args) + with mock.patch.dict(os.environ, {}, clear=True): + self.assertTrue(sgp.local_pixel_tests) + + def testLocalPixelTests_determineFalse(self): + args = createSkiaGoldArgs() + sgp = gold_utils.SkiaGoldProperties(args) + with mock.patch.dict(os.environ, {'SWARMING_SERVER': ''}, clear=True): + self.assertFalse(sgp.local_pixel_tests) + + def testIsTryjobRun_noIssue(self): + args = createSkiaGoldArgs() + sgp = gold_utils.SkiaGoldProperties(args) + self.assertFalse(sgp.IsTryjobRun()) + + def testIsTryjobRun_issue(self): + args = createSkiaGoldArgs( + git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) + sgp = gold_utils.SkiaGoldProperties(args) + self.assertTrue(sgp.IsTryjobRun()) + + def testGetGitRevision_revisionSet(self): + args = createSkiaGoldArgs(git_revision='a') + sgp = gold_utils.SkiaGoldProperties(args) + self.assertEqual(sgp.git_revision, 'a') + + def testGetGitRevision_findValidRevision(self): + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with mock.patch( + 'pylib.utils.repo_utils.GetGitOriginMasterHeadSHA1') as patched_head: + expected = 'a' * 40 + patched_head.return_value = expected + self.assertEqual(sgp.git_revision, expected) + # Should be cached. + self.assertEqual(sgp._git_revision, expected) + + def testGetGitRevision_noExplicitOnBot(self): + args = createSkiaGoldArgs(local_pixel_tests=False) + sgp = gold_utils.SkiaGoldProperties(args) + with self.assertRaises(RuntimeError): + _ = sgp.git_revision + + def testGetGitRevision_findEmptyRevision(self): + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with mock.patch( + 'pylib.utils.repo_utils.GetGitOriginMasterHeadSHA1') as patched_head: + patched_head.return_value = '' + with self.assertRaises(RuntimeError): + _ = sgp.git_revision + + def testGetGitRevision_findMalformedRevision(self): + args = createSkiaGoldArgs(local_pixel_tests=True) + sgp = gold_utils.SkiaGoldProperties(args) + with mock.patch( + 'pylib.utils.repo_utils.GetGitOriginMasterHeadSHA1') as patched_head: + patched_head.return_value = 'a' * 39 + with self.assertRaises(RuntimeError): + _ = sgp.git_revision + + +if __name__ == '__main__': + unittest.main(verbosity=2)
diff --git a/build/android/pylib/utils/local_utils.py b/build/android/pylib/utils/local_utils.py new file mode 100644 index 0000000..027cca39 --- /dev/null +++ b/build/android/pylib/utils/local_utils.py
@@ -0,0 +1,19 @@ +# Copyright 2020 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. +"""Utilities for determining if a test is being run locally or not.""" + +import os + + +def IsOnSwarming(): + """Determines whether we are on swarming or not. + + Returns: + True if the test is being run on swarming, otherwise False. + """ + # Look for the presence of the SWARMING_SERVER environment variable as a + # heuristic to determine whether we're running on a workstation or a bot. + # This should always be set on swarming, but would be strange to be set on + # a workstation. + return 'SWARMING_SERVER' in os.environ
diff --git a/build/android/pylib/utils/repo_utils.py b/build/android/pylib/utils/repo_utils.py index 5a0efa8b..f9d300a 100644 --- a/build/android/pylib/utils/repo_utils.py +++ b/build/android/pylib/utils/repo_utils.py
@@ -14,3 +14,9 @@ command_line = ['git', 'log', '-1', '--pretty=format:%H'] output = cmd_helper.GetCmdOutput(command_line, cwd=in_directory) return output[0:40] + + +def GetGitOriginMasterHeadSHA1(in_directory): + command_line = ['git', 'rev-parse', 'origin/master'] + output = cmd_helper.GetCmdOutput(command_line, cwd=in_directory) + return output.strip()
diff --git a/build/android/test_runner.py b/build/android/test_runner.py index 0f6cc50..539210f 100755 --- a/build/android/test_runner.py +++ b/build/android/test_runner.py
@@ -45,6 +45,7 @@ from pylib.results import json_results from pylib.results import report_results from pylib.results.presentation import test_results_presentation +from pylib.utils import local_utils from pylib.utils import logdog_helper from pylib.utils import logging_utils from pylib.utils import test_filter @@ -401,7 +402,7 @@ def AddInstrumentationTestOptions(parser): """Adds Instrumentation test options to |parser|.""" - parser.add_argument_group('instrumentation arguments') + parser = parser.add_argument_group('instrumentation arguments') parser.add_argument( '--additional-apk', @@ -543,6 +544,52 @@ help=argparse.SUPPRESS) +def AddSkiaGoldTestOptions(parser): + """Adds Skia Gold test options to |parser|.""" + parser = parser.add_argument_group("Skia Gold arguments") + parser.add_argument( + '--git-revision', help='The git commit currently being tested.') + parser.add_argument( + '--gerrit-issue', + help='The Gerrit issue this test is being run on, if applicable.') + parser.add_argument( + '--gerrit-patchset', + help='The Gerrit patchset this test is being run on, if applicable.') + parser.add_argument( + '--buildbucket-id', + help='The Buildbucket build ID that this test was triggered from, if ' + 'applicable.') + local_group = parser.add_mutually_exclusive_group() + local_group.add_argument( + '--local-pixel-tests', + action='store_true', + default=None, + help='Specifies to run the Skia Gold pixel tests in local mode. When run ' + 'in local mode, uploading to Gold is disabled and traditional ' + 'generated/golden/diff images are output instead of triage links. ' + 'Running in local mode also implies --no-luci-auth. If both this ' + 'and --no-local-pixel-tests are left unset, the test harness will ' + 'attempt to detect whether it is running on a workstation or not ' + 'and set the options accordingly.') + local_group.add_argument( + '--no-local-pixel-tests', + action='store_false', + dest='local_pixel_tests', + help='Specifies to run the Skia Gold pixel tests in non-local (bot) ' + 'mode. When run in this mode, data is actually uploaded to Gold and ' + 'triage links are generated. If both this and --local-pixel-tests ' + 'are left unset, the test harness will attempt to detect whether ' + 'it is running on a workstation or not and set the options ' + 'accordingly.') + parser.add_argument( + '--no-luci-auth', + action='store_true', + default=False, + help="Don't use the serve account provided by LUCI for authentication " + 'with Skia Gold, instead relying on gsutil to be pre-authenticated. ' + 'Meant for testing locally instead of on the bots.') + + def AddJUnitTestOptions(parser): """Adds junit test options to |parser|.""" @@ -586,7 +633,7 @@ def AddLinkerTestOptions(parser): - parser.add_argument_group('linker arguments') + parser = parser.add_argument_group('linker arguments') parser.add_argument( '--test-apk', @@ -866,7 +913,7 @@ str(tot_tests), str(iteration_count)) - if args.local_output: + if args.local_output or not local_utils.IsOnSwarming(): with out_manager.ArchivedTempfile( 'test_results_presentation.html', 'test_results_presentation', @@ -923,6 +970,7 @@ AddDeviceOptions(subp) AddEmulatorOptions(subp) AddInstrumentationTestOptions(subp) + AddSkiaGoldTestOptions(subp) AddTracingOptions(subp) AddCommandLineOptions(subp)
diff --git a/build/android/test_runner.pydeps b/build/android/test_runner.pydeps index 94a99a9..3e4a461 100644 --- a/build/android/test_runner.pydeps +++ b/build/android/test_runner.pydeps
@@ -199,8 +199,10 @@ pylib/utils/decorators.py pylib/utils/device_dependencies.py pylib/utils/dexdump.py +pylib/utils/gold_utils.py pylib/utils/google_storage_helper.py pylib/utils/instrumentation_tracing.py +pylib/utils/local_utils.py pylib/utils/logdog_helper.py pylib/utils/logging_utils.py pylib/utils/proguard.py
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 6f096b95..36b5df6 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1591,8 +1591,10 @@ # TODO(thakis): Enable this more often, https://crbug.com/346399 # use_libfuzzer: https://crbug.com/1063180 + # cros/arm has warnings in nacl code. if (!is_nacl && !use_libfuzzer && - (target_os == "fuchsia" || target_os == "linux")) { + (target_os == "chromeos" || target_os == "fuchsia" || + target_os == "linux")) { cflags += [ "-Wunreachable-code" ] }
diff --git a/build/config/ios/ios_test_runner_wrapper.gni b/build/config/ios/ios_test_runner_wrapper.gni index 1f2ca0f1..a70074f 100644 --- a/build/config/ios/ios_test_runner_wrapper.gni +++ b/build/config/ios/ios_test_runner_wrapper.gni
@@ -94,10 +94,6 @@ "${shards}", ] - if (use_clang_coverage) { - executable_args += [ "--use-clang-coverage" ] - } - # test runner relies on iossim if use_ios_simulator (defined in ios_sdk.gni) if (use_ios_simulator) { _rebased_root_build_dir = rebase_path("${root_build_dir}", root_build_dir) @@ -112,6 +108,14 @@ ] } + if (use_clang_coverage) { + executable_args += [ "--use-clang-coverage" ] + } + + if (!is_debug) { + executable_args += [ "--release" ] + } + # wrapper script output name and path if (!defined(wrapper_output_name)) { _wrapper_output_name = "run_${target_name}"
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 3769d6f..87e8919 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20200324.1.1 \ No newline at end of file +0.20200324.3.1 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 3769d6f..87e8919 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20200324.1.1 \ No newline at end of file +0.20200324.3.1 \ No newline at end of file
diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc index 8a0f7b5..6fba5719 100644 --- a/cc/metrics/compositor_frame_reporter.cc +++ b/cc/metrics/compositor_frame_reporter.cc
@@ -24,9 +24,8 @@ using BlinkBreakdown = CompositorFrameReporter::BlinkBreakdown; using VizBreakdown = CompositorFrameReporter::VizBreakdown; -constexpr int kDroppedFrameReportTypeCount = - static_cast<int>(CompositorFrameReporter::DroppedFrameReportType:: - kDroppedFrameReportTypeCount); +constexpr int kFrameReportTypeCount = + static_cast<int>(CompositorFrameReporter::FrameReportType::kMaxValue) + 1; constexpr int kStageTypeCount = static_cast<int>(StageType::kStageTypeCount); constexpr int kAllBreakdownCount = static_cast<int>(VizBreakdown::kBreakdownCount) + @@ -139,18 +138,19 @@ } } -// Names for CompositorFrameReporter::DroppedFrameReportType, which should be +// Names for CompositorFrameReporter::FrameReportType, which should be // updated in case of changes to the enum. -constexpr const char* kReportTypeNames[]{"", "DroppedFrame."}; +constexpr const char* kReportTypeNames[]{"", "MissedDeadlineFrame.", + "DroppedFrame."}; -static_assert(base::size(kReportTypeNames) == kDroppedFrameReportTypeCount, +static_assert(base::size(kReportTypeNames) == kFrameReportTypeCount, "Compositor latency report types has changed."); // This value should be recalculated in case of changes to the number of values // in CompositorFrameReporter::DroppedFrameReportType or in // CompositorFrameReporter::StageType constexpr int kMaxCompositorLatencyHistogramIndex = - kDroppedFrameReportTypeCount * kFrameSequenceTrackerTypeCount * + kFrameReportTypeCount * kFrameSequenceTrackerTypeCount * (kStageTypeCount + kAllBreakdownCount); constexpr int kCompositorLatencyHistogramMin = 1; constexpr int kCompositorLatencyHistogramMax = 350000; @@ -201,12 +201,14 @@ CompositorFrameReporter::CompositorFrameReporter( const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::BeginFrameId& id, + const base::TimeTicks frame_deadline, LatencyUkmReporter* latency_ukm_reporter, bool is_single_threaded) : frame_id_(id), is_single_threaded_(is_single_threaded), active_trackers_(active_trackers), - latency_ukm_reporter_(latency_ukm_reporter) {} + latency_ukm_reporter_(latency_ukm_reporter), + frame_deadline_(frame_deadline) {} CompositorFrameReporter::~CompositorFrameReporter() { TerminateReporter(); @@ -311,7 +313,11 @@ } void CompositorFrameReporter::DroppedFrame() { - report_type_ = DroppedFrameReportType::kDroppedFrame; + report_type_ = FrameReportType::kDroppedFrame; +} + +void CompositorFrameReporter::MissedDeadlineFrame() { + report_type_ = FrameReportType::kMissedDeadlineFrame; } void CompositorFrameReporter::TerminateReporter() { @@ -320,12 +326,15 @@ DCHECK_EQ(current_stage_.start_time, base::TimeTicks()); bool report_compositor_latency = false; bool report_event_latency = false; + bool report_missed_deadline_frame = false; const char* termination_status_str = nullptr; switch (frame_termination_status_) { case FrameTerminationStatus::kPresentedFrame: report_compositor_latency = true; report_event_latency = true; termination_status_str = "presented_frame"; + if (frame_deadline_ < frame_termination_time_) + report_missed_deadline_frame = true; break; case FrameTerminationStatus::kDidNotPresentFrame: report_compositor_latency = true; @@ -349,9 +358,8 @@ // event, so skip emitting the end event, too. if (!stage_history_.empty()) { const char* submission_status_str = - report_type_ == DroppedFrameReportType::kDroppedFrame - ? "dropped_frame" - : "non_dropped_frame"; + report_type_ == FrameReportType::kDroppedFrame ? "dropped_frame" + : "non_dropped_frame"; TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP2( "cc,benchmark", "PipelineReporter", TRACE_ID_LOCAL(this), frame_termination_time_, "termination_status", termination_status_str, @@ -366,14 +374,28 @@ stage_history_.emplace_back(StageType::kTotalLatency, stage_history_.front().start_time, stage_history_.back().end_time); + ReportLatencyHistograms(report_event_latency, report_missed_deadline_frame); + } +} + +void CompositorFrameReporter::ReportLatencyHistograms( + bool report_event_latency, + bool report_delayed_latency) { + ReportCompositorLatencyHistograms(); + + if (report_delayed_latency) { + // If the frames are delayed also report them under MissedDeadlineFrame. + MissedDeadlineFrame(); ReportCompositorLatencyHistograms(); } + // Only report event latency histograms if the frame was presented. if (report_event_latency) ReportEventLatencyHistograms(); } void CompositorFrameReporter::ReportCompositorLatencyHistograms() const { + UMA_HISTOGRAM_ENUMERATION("CompositorLatency.Type", report_type_); for (const StageData& stage : stage_history_) { ReportStageHistogramWithBreakdown(stage); @@ -497,12 +519,12 @@ const int histogram_index = (stage_type_index * kFrameSequenceTrackerTypeCount + frame_sequence_tracker_type_index) * - kDroppedFrameReportTypeCount + + kFrameReportTypeCount + report_type_index; CHECK_LT(stage_type_index, kStageTypeCount + kAllBreakdownCount); CHECK_GE(stage_type_index, 0); - CHECK_LT(report_type_index, kDroppedFrameReportTypeCount); + CHECK_LT(report_type_index, kFrameReportTypeCount); CHECK_GE(report_type_index, 0); CHECK_LT(histogram_index, kMaxCompositorLatencyHistogramIndex); CHECK_GE(histogram_index, 0);
diff --git a/cc/metrics/compositor_frame_reporter.h b/cc/metrics/compositor_frame_reporter.h index 5b07031..8c33215 100644 --- a/cc/metrics/compositor_frame_reporter.h +++ b/cc/metrics/compositor_frame_reporter.h
@@ -62,14 +62,15 @@ kUnknown }; - enum class DroppedFrameReportType { + // These values are used for indexing the UMA histograms. + enum class FrameReportType { kNonDroppedFrame = 0, - kDroppedFrame = 1, - kDroppedFrameReportTypeCount + kMissedDeadlineFrame = 1, + kDroppedFrame = 2, + kMaxValue = kDroppedFrame }; - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. + // These values are used for indexing the UMA histograms. enum class StageType { kBeginImplFrameToSendBeginMainFrame = 0, kSendBeginMainFrameToCommit = 1, @@ -121,6 +122,7 @@ CompositorFrameReporter( const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::BeginFrameId& id, + const base::TimeTicks frame_deadline, LatencyUkmReporter* latency_ukm_reporter, bool is_single_threaded = false); ~CompositorFrameReporter(); @@ -153,10 +155,13 @@ private: void DroppedFrame(); + void MissedDeadlineFrame(); void TerminateReporter(); void EndCurrentStage(base::TimeTicks end_time); void ReportCompositorLatencyHistograms() const; + void ReportLatencyHistograms(bool report_event_latency = false, + bool report_delayed_latency = false); void ReportStageHistogramWithBreakdown( const StageData& stage, FrameSequenceTrackerType frame_sequence_tracker_type = @@ -205,8 +210,7 @@ std::vector<EventMetrics> events_metrics_; const bool is_single_threaded_; - DroppedFrameReportType report_type_ = - DroppedFrameReportType::kNonDroppedFrame; + FrameReportType report_type_ = FrameReportType::kNonDroppedFrame; base::TimeTicks frame_termination_time_; base::TimeTicks begin_main_frame_start_; FrameTerminationStatus frame_termination_status_ = @@ -223,6 +227,7 @@ // The time that work on Impl frame is finished. It's only valid if the // reporter is in a stage other than begin impl frame. base::TimeTicks impl_frame_finish_time_; + base::TimeTicks frame_deadline_; }; } // namespace cc
diff --git a/cc/metrics/compositor_frame_reporter_unittest.cc b/cc/metrics/compositor_frame_reporter_unittest.cc index 6e00be8..06004ac 100644 --- a/cc/metrics/compositor_frame_reporter_unittest.cc +++ b/cc/metrics/compositor_frame_reporter_unittest.cc
@@ -19,6 +19,8 @@ namespace cc { namespace { +base::TimeDelta INTERVAL = base::TimeDelta::FromMicroseconds(16); + MATCHER(IsWhitelisted, base::StrCat({negation ? "isn't" : "is", " whitelisted"})) { return arg.IsWhitelisted(); @@ -31,6 +33,7 @@ : pipeline_reporter_( std::make_unique<CompositorFrameReporter>(&active_trackers, viz::BeginFrameId(), + Now() + INTERVAL, nullptr)) { AdvanceNowByMs(1); }
diff --git a/cc/metrics/compositor_frame_reporting_controller.cc b/cc/metrics/compositor_frame_reporting_controller.cc index f47bd7a..e1976377 100644 --- a/cc/metrics/compositor_frame_reporting_controller.cc +++ b/cc/metrics/compositor_frame_reporting_controller.cc
@@ -54,7 +54,7 @@ } void CompositorFrameReportingController::WillBeginImplFrame( - const viz::BeginFrameId& id) { + const viz::BeginFrameArgs& args) { base::TimeTicks begin_time = Now(); if (reporters_[PipelineStage::kBeginImplFrame]) { // If the the reporter is replaced in this stage, it means that Impl frame @@ -64,22 +64,24 @@ begin_time); } std::unique_ptr<CompositorFrameReporter> reporter = - std::make_unique<CompositorFrameReporter>(&active_trackers_, id, - latency_ukm_reporter_.get(), - is_single_threaded_); + std::make_unique<CompositorFrameReporter>( + &active_trackers_, args.frame_id, + args.frame_time + (args.interval * 1.5), latency_ukm_reporter_.get(), + is_single_threaded_); reporter->StartStage(StageType::kBeginImplFrameToSendBeginMainFrame, begin_time); reporters_[PipelineStage::kBeginImplFrame] = std::move(reporter); } void CompositorFrameReportingController::WillBeginMainFrame( - const viz::BeginFrameId& id) { + const viz::BeginFrameArgs& args) { if (reporters_[PipelineStage::kBeginImplFrame]) { // We need to use .get() below because operator<< in std::unique_ptr is a // C++20 feature. DCHECK_NE(reporters_[PipelineStage::kBeginMainFrame].get(), reporters_[PipelineStage::kBeginImplFrame].get()); - DCHECK_EQ(reporters_[PipelineStage::kBeginImplFrame]->frame_id_, id); + DCHECK_EQ(reporters_[PipelineStage::kBeginImplFrame]->frame_id_, + args.frame_id); reporters_[PipelineStage::kBeginImplFrame]->StartStage( StageType::kSendBeginMainFrameToCommit, Now()); AdvanceReporterStage(PipelineStage::kBeginImplFrame, @@ -89,9 +91,10 @@ // beginMain frame before next BeginImplFrame (Not reached the ImplFrame // deadline yet). So will start a new reporter at BeginMainFrame. std::unique_ptr<CompositorFrameReporter> reporter = - std::make_unique<CompositorFrameReporter>(&active_trackers_, id, - latency_ukm_reporter_.get(), - is_single_threaded_); + std::make_unique<CompositorFrameReporter>( + &active_trackers_, args.frame_id, + args.frame_time + (args.interval * 1.5), + latency_ukm_reporter_.get(), is_single_threaded_); reporter->StartStage(StageType::kSendBeginMainFrameToCommit, Now()); reporters_[PipelineStage::kBeginMainFrame] = std::move(reporter); }
diff --git a/cc/metrics/compositor_frame_reporting_controller.h b/cc/metrics/compositor_frame_reporting_controller.h index 8cab7e1..c019f87 100644 --- a/cc/metrics/compositor_frame_reporting_controller.h +++ b/cc/metrics/compositor_frame_reporting_controller.h
@@ -50,8 +50,8 @@ const CompositorFrameReportingController&) = delete; // Events to signal Beginning/Ending of phases. - virtual void WillBeginImplFrame(const viz::BeginFrameId& id); - virtual void WillBeginMainFrame(const viz::BeginFrameId& id); + virtual void WillBeginImplFrame(const viz::BeginFrameArgs& args); + virtual void WillBeginMainFrame(const viz::BeginFrameArgs& args); virtual void BeginMainFrameAborted(const viz::BeginFrameId& id); virtual void WillInvalidateOnImplSide(); virtual void WillCommit();
diff --git a/cc/metrics/compositor_frame_reporting_controller_unittest.cc b/cc/metrics/compositor_frame_reporting_controller_unittest.cc index 53c2dcc..62409c1 100644 --- a/cc/metrics/compositor_frame_reporting_controller_unittest.cc +++ b/cc/metrics/compositor_frame_reporting_controller_unittest.cc
@@ -50,12 +50,14 @@ class CompositorFrameReportingControllerTest : public testing::Test { public: - CompositorFrameReportingControllerTest() : current_id_(1, 1) {} + CompositorFrameReportingControllerTest() : current_id_(1, 1) { + args_ = SimulateBeginFrameArgs(current_id_); + } // The following functions simulate the actions that would // occur for each phase of the reporting controller. void SimulateBeginImplFrame() { - reporting_controller_.WillBeginImplFrame(current_id_); + reporting_controller_.WillBeginImplFrame(args_); } void SimulateBeginMainFrame() { @@ -65,7 +67,7 @@ CHECK( reporting_controller_.reporters()[CompositorFrameReportingController:: PipelineStage::kBeginImplFrame]); - reporting_controller_.WillBeginMainFrame(current_id_); + reporting_controller_.WillBeginMainFrame(args_); } void SimulateCommit(std::unique_ptr<BeginMainFrameMetrics> blink_breakdown) { @@ -114,10 +116,25 @@ reporting_controller_.DidPresentCompositorFrame(*next_token_, details); } - void IncrementCurrentId() { current_id_.sequence_number++; } + viz::BeginFrameArgs SimulateBeginFrameArgs( + viz::BeginFrameId frame_id, + base::TimeTicks frame_time = base::TimeTicks::Now(), + base::TimeDelta interval = base::TimeDelta::FromMilliseconds(16)) { + args_ = viz::BeginFrameArgs(); + args_.frame_id = frame_id; + args_.frame_time = frame_time; + args_.interval = interval; + return args_; + } + + void IncrementCurrentId() { + current_id_.sequence_number++; + args_.frame_id = current_id_; + } protected: TestCompositorFrameReportingController reporting_controller_; + viz::BeginFrameArgs args_; viz::BeginFrameId current_id_; viz::BeginFrameId last_activated_id_; base::TimeTicks begin_main_start_; @@ -136,18 +153,18 @@ // - 4 Simultaneous Reporters // BF - reporting_controller_.WillBeginImplFrame(current_id_); + reporting_controller_.WillBeginImplFrame(args_); EXPECT_EQ(1, reporting_controller_.ActiveReporters()); // BF -> BF // Should replace previous reporter. - reporting_controller_.WillBeginImplFrame(current_id_); + reporting_controller_.WillBeginImplFrame(args_); EXPECT_EQ(1, reporting_controller_.ActiveReporters()); // BF -> BMF -> BF // Should add new reporter. - reporting_controller_.WillBeginMainFrame(current_id_); - reporting_controller_.WillBeginImplFrame(current_id_); + reporting_controller_.WillBeginMainFrame(args_); + reporting_controller_.WillBeginImplFrame(args_); EXPECT_EQ(2, reporting_controller_.ActiveReporters()); // BF -> BMF -> BF -> Commit @@ -158,7 +175,7 @@ // BF -> BMF -> BF -> Commit -> BMF -> Activate -> Commit -> Activation // Having two reporters at Activate phase should delete the older one. - reporting_controller_.WillBeginMainFrame(current_id_); + reporting_controller_.WillBeginMainFrame(args_); reporting_controller_.WillActivate(); reporting_controller_.DidActivate(); last_activated_id_ = current_id_; @@ -261,23 +278,28 @@ TEST_F(CompositorFrameReportingControllerTest, MainFrameCausedNoDamage) { base::HistogramTester histogram_tester; viz::BeginFrameId current_id_1_(1, 1); - viz::BeginFrameId current_id_2_(1, 2); - viz::BeginFrameId current_id_3_(1, 3); + viz::BeginFrameArgs args_1_ = SimulateBeginFrameArgs(current_id_1_); - reporting_controller_.WillBeginImplFrame(current_id_1_); - reporting_controller_.WillBeginMainFrame(current_id_1_); + viz::BeginFrameId current_id_2_(1, 2); + viz::BeginFrameArgs args_2_ = SimulateBeginFrameArgs(current_id_2_); + + viz::BeginFrameId current_id_3_(1, 3); + viz::BeginFrameArgs args_3_ = SimulateBeginFrameArgs(current_id_3_); + + reporting_controller_.WillBeginImplFrame(args_1_); + reporting_controller_.WillBeginMainFrame(args_1_); reporting_controller_.BeginMainFrameAborted(current_id_1_); reporting_controller_.OnFinishImplFrame(current_id_1_); reporting_controller_.DidNotProduceFrame(current_id_1_); - reporting_controller_.WillBeginImplFrame(current_id_2_); - reporting_controller_.WillBeginMainFrame(current_id_2_); + reporting_controller_.WillBeginImplFrame(args_2_); + reporting_controller_.WillBeginMainFrame(args_2_); reporting_controller_.OnFinishImplFrame(current_id_2_); reporting_controller_.BeginMainFrameAborted(current_id_2_); reporting_controller_.DidNotProduceFrame(current_id_2_); - reporting_controller_.WillBeginImplFrame(current_id_3_); - reporting_controller_.WillBeginMainFrame(current_id_3_); + reporting_controller_.WillBeginImplFrame(args_3_); + reporting_controller_.WillBeginMainFrame(args_3_); histogram_tester.ExpectTotalCount( "CompositorLatency.DroppedFrame.BeginImplFrameToSendBeginMainFrame", 0); @@ -288,8 +310,8 @@ TEST_F(CompositorFrameReportingControllerTest, MainFrameAborted) { base::HistogramTester histogram_tester; - reporting_controller_.WillBeginImplFrame(current_id_); - reporting_controller_.WillBeginMainFrame(current_id_); + reporting_controller_.WillBeginImplFrame(args_); + reporting_controller_.WillBeginMainFrame(args_); reporting_controller_.BeginMainFrameAborted(current_id_); reporting_controller_.OnFinishImplFrame(current_id_); reporting_controller_.DidSubmitCompositorFrame( @@ -312,17 +334,23 @@ TEST_F(CompositorFrameReportingControllerTest, MainFrameAborted2) { base::HistogramTester histogram_tester; viz::BeginFrameId current_id_1_(1, 1); + viz::BeginFrameArgs args_1_ = SimulateBeginFrameArgs(current_id_1_); + viz::BeginFrameId current_id_2_(1, 2); + viz::BeginFrameArgs args_2_ = SimulateBeginFrameArgs(current_id_2_); + viz::BeginFrameId current_id_3_(1, 3); - reporting_controller_.WillBeginImplFrame(current_id_1_); + viz::BeginFrameArgs args_3_ = SimulateBeginFrameArgs(current_id_3_); + + reporting_controller_.WillBeginImplFrame(args_1_); reporting_controller_.OnFinishImplFrame(current_id_1_); - reporting_controller_.WillBeginMainFrame(current_id_1_); + reporting_controller_.WillBeginMainFrame(args_1_); reporting_controller_.WillCommit(); reporting_controller_.DidCommit(); reporting_controller_.WillActivate(); reporting_controller_.DidActivate(); - reporting_controller_.WillBeginImplFrame(current_id_2_); - reporting_controller_.WillBeginMainFrame(current_id_2_); + reporting_controller_.WillBeginImplFrame(args_2_); + reporting_controller_.WillBeginMainFrame(args_2_); reporting_controller_.OnFinishImplFrame(current_id_2_); reporting_controller_.BeginMainFrameAborted(current_id_2_); reporting_controller_.DidSubmitCompositorFrame( @@ -362,7 +390,7 @@ histogram_tester.ExpectTotalCount( "CompositorLatency.SubmitCompositorFrameToPresentationCompositorFrame", 2); - reporting_controller_.WillBeginImplFrame(current_id_3_); + reporting_controller_.WillBeginImplFrame(args_3_); reporting_controller_.OnFinishImplFrame(current_id_3_); reporting_controller_.DidSubmitCompositorFrame( 3, current_id_3_, current_id_1_, std::vector<EventMetrics>()); @@ -440,6 +468,80 @@ "CompositorLatency.SendBeginMainFrameToCommit.BeginMainSentToStarted", 1); } +// If the presentation of the frame happens before deadline. +TEST_F(CompositorFrameReportingControllerTest, ReportingMissedDeadlineFrame1) { + base::HistogramTester histogram_tester; + + reporting_controller_.WillBeginImplFrame(args_); + reporting_controller_.OnFinishImplFrame(current_id_); + reporting_controller_.WillBeginMainFrame(args_); + reporting_controller_.WillCommit(); + reporting_controller_.DidCommit(); + reporting_controller_.WillActivate(); + reporting_controller_.DidActivate(); + reporting_controller_.DidSubmitCompositorFrame(1, current_id_, current_id_, + std::vector<EventMetrics>()); + viz::FrameTimingDetails details = {}; + details.presentation_feedback.timestamp = + args_.frame_time + args_.interval * 1.5 - + base::TimeDelta::FromMicroseconds(100); + reporting_controller_.DidPresentCompositorFrame(1, details); + + histogram_tester.ExpectTotalCount( + "CompositorLatency.BeginImplFrameToSendBeginMainFrame", 1); + histogram_tester.ExpectTotalCount("CompositorLatency.TotalLatency", 1); + histogram_tester.ExpectTotalCount( + "CompositorLatency.MissedDeadlineFrame." + "BeginImplFrameToSendBeginMainFrame", + 0); + histogram_tester.ExpectTotalCount( + "CompositorLatency.MissedDeadlineFrame.TotalLatency", 0); + + // Non-dropped cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 0, 1); + // Missed-deadline cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 1, 0); + // Dropped cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 2, 0); +} + +// If the presentation of the frame happens after deadline. +TEST_F(CompositorFrameReportingControllerTest, ReportingMissedDeadlineFrame2) { + base::HistogramTester histogram_tester; + + reporting_controller_.WillBeginImplFrame(args_); + reporting_controller_.OnFinishImplFrame(current_id_); + reporting_controller_.WillBeginMainFrame(args_); + reporting_controller_.WillCommit(); + reporting_controller_.DidCommit(); + reporting_controller_.WillActivate(); + reporting_controller_.DidActivate(); + reporting_controller_.DidSubmitCompositorFrame(1, current_id_, current_id_, + std::vector<EventMetrics>()); + viz::FrameTimingDetails details = {}; + details.presentation_feedback.timestamp = + args_.frame_time + args_.interval * 1.5 + + base::TimeDelta::FromMicroseconds(100); + reporting_controller_.DidPresentCompositorFrame(1, details); + + histogram_tester.ExpectTotalCount( + "CompositorLatency.BeginImplFrameToSendBeginMainFrame", 1); + histogram_tester.ExpectTotalCount("CompositorLatency.TotalLatency", 1); + histogram_tester.ExpectTotalCount( + "CompositorLatency.MissedDeadlineFrame." + "BeginImplFrameToSendBeginMainFrame", + 1); + histogram_tester.ExpectTotalCount( + "CompositorLatency.MissedDeadlineFrame.TotalLatency", 1); + + // Non-dropped cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 0, 1); + // Missed-deadline cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 1, 1); + // Dropped cases. + histogram_tester.ExpectBucketCount("CompositorLatency.Type", 2, 0); +} + // Tests that EventLatency histograms are reported properly when a frame is // presented to the user. TEST_F(CompositorFrameReportingControllerTest,
diff --git a/cc/metrics/compositor_timing_history.cc b/cc/metrics/compositor_timing_history.cc index 009ae74..e218dd10 100644 --- a/cc/metrics/compositor_timing_history.cc +++ b/cc/metrics/compositor_timing_history.cc
@@ -633,7 +633,7 @@ viz::BeginFrameArgs::BeginFrameArgsType frame_type = args.type; base::TimeTicks frame_time = args.frame_time; - compositor_frame_reporting_controller_->WillBeginImplFrame(args.frame_id); + compositor_frame_reporting_controller_->WillBeginImplFrame(args); // The check for whether a BeginMainFrame was sent anytime between two // BeginImplFrames protects us from not detecting a fast main thread that @@ -668,7 +668,7 @@ const viz::BeginFrameArgs& args) { DCHECK_EQ(base::TimeTicks(), begin_main_frame_sent_time_); - compositor_frame_reporting_controller_->WillBeginMainFrame(args.frame_id); + compositor_frame_reporting_controller_->WillBeginMainFrame(args); begin_main_frame_on_critical_path_ = args.on_critical_path; begin_main_frame_sent_time_ = Now();
diff --git a/cc/metrics/latency_ukm_reporter.cc b/cc/metrics/latency_ukm_reporter.cc index dc5ea3d..9678ede 100644 --- a/cc/metrics/latency_ukm_reporter.cc +++ b/cc/metrics/latency_ukm_reporter.cc
@@ -10,7 +10,7 @@ namespace cc { void LatencyUkmReporter::ReportLatencyUkm( - CompositorFrameReporter::DroppedFrameReportType report_type, + CompositorFrameReporter::FrameReportType report_type, const std::vector<CompositorFrameReporter::StageData>& stage_history, const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::FrameTimingDetails& viz_breakdown) {
diff --git a/cc/metrics/latency_ukm_reporter.h b/cc/metrics/latency_ukm_reporter.h index 3c171d8b..9bbc810c 100644 --- a/cc/metrics/latency_ukm_reporter.h +++ b/cc/metrics/latency_ukm_reporter.h
@@ -21,7 +21,7 @@ ~LatencyUkmReporter() = default; void ReportLatencyUkm( - CompositorFrameReporter::DroppedFrameReportType report_type, + CompositorFrameReporter::FrameReportType report_type, const std::vector<CompositorFrameReporter::StageData>& stage_history, const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::FrameTimingDetails& viz_breakdown);
diff --git a/cc/test/fake_compositor_frame_reporting_controller.cc b/cc/test/fake_compositor_frame_reporting_controller.cc index b1183fe..80aa09e2 100644 --- a/cc/test/fake_compositor_frame_reporting_controller.cc +++ b/cc/test/fake_compositor_frame_reporting_controller.cc
@@ -10,27 +10,39 @@ #include "components/viz/common/frame_timing_details.h" namespace cc { +base::TimeDelta INTERVAL = base::TimeDelta::FromMilliseconds(16); + FakeCompositorFrameReportingController::FakeCompositorFrameReportingController( bool is_single_threaded) : CompositorFrameReportingController(is_single_threaded) {} void FakeCompositorFrameReportingController::WillBeginMainFrame( - const viz::BeginFrameId& id) { + const viz::BeginFrameArgs& args) { if (!reporters_[PipelineStage::kBeginImplFrame]) - CompositorFrameReportingController::WillBeginImplFrame(id); - CompositorFrameReportingController::WillBeginMainFrame(id); + CompositorFrameReportingController::WillBeginImplFrame(args); + CompositorFrameReportingController::WillBeginMainFrame(args); } void FakeCompositorFrameReportingController::BeginMainFrameAborted( const viz::BeginFrameId& id) { - if (!reporters_[PipelineStage::kBeginMainFrame]) - WillBeginMainFrame(id); + if (!reporters_[PipelineStage::kBeginMainFrame]) { + viz::BeginFrameArgs args = viz::BeginFrameArgs(); + args.frame_id = id; + args.frame_time = Now(); + args.interval = INTERVAL; + WillBeginMainFrame(args); + } CompositorFrameReportingController::BeginMainFrameAborted(id); } void FakeCompositorFrameReportingController::WillCommit() { - if (!reporters_[PipelineStage::kBeginMainFrame]) - WillBeginMainFrame(viz::BeginFrameId()); + if (!reporters_[PipelineStage::kBeginMainFrame]) { + viz::BeginFrameArgs args = viz::BeginFrameArgs(); + args.frame_id = viz::BeginFrameId(); + args.frame_time = Now(); + args.interval = INTERVAL; + WillBeginMainFrame(args); + } CompositorFrameReportingController::WillCommit(); }
diff --git a/cc/test/fake_compositor_frame_reporting_controller.h b/cc/test/fake_compositor_frame_reporting_controller.h index b71c857..cbab3fd 100644 --- a/cc/test/fake_compositor_frame_reporting_controller.h +++ b/cc/test/fake_compositor_frame_reporting_controller.h
@@ -29,7 +29,7 @@ FakeCompositorFrameReportingController& operator=( const FakeCompositorFrameReportingController& controller) = delete; - void WillBeginMainFrame(const viz::BeginFrameId& id) override; + void WillBeginMainFrame(const viz::BeginFrameArgs& args) override; void BeginMainFrameAborted(const viz::BeginFrameId& id) override; void WillCommit() override; void DidCommit() override;
diff --git a/cc/trees/swap_promise_monitor.h b/cc/trees/swap_promise_monitor.h index 3350ca1..47821b2 100644 --- a/cc/trees/swap_promise_monitor.h +++ b/cc/trees/swap_promise_monitor.h
@@ -12,15 +12,21 @@ class SwapPromiseManager; class LayerTreeHostImpl; -// A SwapPromiseMonitor is used to monitor compositor state change that -// should be associated with a SwapPromise, e.g. SetNeedsCommit() is -// called on main thread or SetNeedsRedraw() is called on impl thread. +// A SwapPromiseMonitor is used to monitor compositor state change that should +// be associated with a SwapPromise, e.g. SetNeedsCommit() is called on main +// thread or SetNeedsRedraw() is called on impl thread. +// // Creating a SwapPromiseMonitor will insert itself into a SwapPromiseManager // or LayerTreeHostImpl. You must provide a pointer to the appropriate -// structure to the monitor (and only one of the two). Notification of -// compositor state change will be sent through OnSetNeedsCommitOnMain() -// or OnSetNeedsRedrawOnImpl(). When SwapPromiseMonitor is destroyed, it -// will unregister itself from SwapPromiseManager or LayerTreeHostImpl. +// structure to the monitor (and only one of the two). +// +// Notification of compositor state change will be sent through +// OnSetNeedsCommitOnMain() or OnSetNeedsRedrawOnImpl(). Note that multiple +// notifications of the same type to the same monitor will only queue one +// SwapPromise. +// +// When SwapPromiseMonitor is destroyed, it will unregister itself from +// SwapPromiseManager or LayerTreeHostImpl. class CC_EXPORT SwapPromiseMonitor { public: // If the monitor lives on the main thread, pass in |swap_promise_manager|
diff --git a/cc/trees/ukm_manager.cc b/cc/trees/ukm_manager.cc index 5973c3f..5a9e68cf 100644 --- a/cc/trees/ukm_manager.cc +++ b/cc/trees/ukm_manager.cc
@@ -188,14 +188,13 @@ } void UkmManager::RecordLatencyUKM( - CompositorFrameReporter::DroppedFrameReportType report_type, + CompositorFrameReporter::FrameReportType report_type, const std::vector<CompositorFrameReporter::StageData>& stage_history, const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::FrameTimingDetails& viz_breakdown) const { ukm::builders::Graphics_Smoothness_Latency builder(source_id_); - if (report_type == - CompositorFrameReporter::DroppedFrameReportType::kDroppedFrame) { + if (report_type == CompositorFrameReporter::FrameReportType::kDroppedFrame) { builder.SetMissedFrame(true); }
diff --git a/cc/trees/ukm_manager.h b/cc/trees/ukm_manager.h index 401b7c43..08cce51e 100644 --- a/cc/trees/ukm_manager.h +++ b/cc/trees/ukm_manager.h
@@ -49,7 +49,7 @@ void RecordAggregateThroughput(AggregationType aggregation_type, int64_t throughput_percent) const; void RecordLatencyUKM( - CompositorFrameReporter::DroppedFrameReportType report_type, + CompositorFrameReporter::FrameReportType report_type, const std::vector<CompositorFrameReporter::StageData>& stage_history, const base::flat_set<FrameSequenceTrackerType>* active_trackers, const viz::FrameTimingDetails& viz_breakdown) const;
diff --git a/chrome/VERSION b/chrome/VERSION index 5da30c9..607ed5d 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=83 MINOR=0 -BUILD=4095 +BUILD=4096 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 830eb59..1e402ed 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -839,6 +839,7 @@ "//chrome/browser/android/metrics:ukm_javatests", "//chrome/browser/download/android:java", "//chrome/browser/flags:java", + "//chrome/browser/password_manager/android_test_helpers:test_support_java", "//chrome/browser/performance_hints/android:java", "//chrome/browser/preferences:java", "//chrome/browser/profiles/android:java", @@ -1011,6 +1012,8 @@ "//media/test/data/bear-vp8a.webm", "//media/test/data/sfx.mp3", ] + + data_deps = [ "//ui/base:goldctl" ] } if (enable_vr || enable_arcore) { @@ -1070,6 +1073,8 @@ "//chrome/test/data/xr/e2e_test_files/", "//third_party/blink/web_tests/resources/testharness.js", ] + + data_deps = [ "//ui/base:goldctl" ] } if (enable_vr) { @@ -1284,6 +1289,7 @@ "//base/test:test_support", "//chrome:chrome_android_core", "//chrome/browser/android/metrics:ukm_utils_for_test", + "//chrome/browser/password_manager/android_test_helpers:android_wrappers", "//chrome/browser/subresource_filter:test_support", "//components/autofill_assistant/browser:test_support", "//components/crash/android:crash_android", @@ -1607,6 +1613,7 @@ ":chrome_public_base_module_java", "//chrome/android/features/autofill_assistant:autofill_assistant_java_test_support", "//chrome/browser/android/metrics:ukm_java_test_support", + "//chrome/browser/password_manager/android_test_helpers:test_support_java", "//chrome/browser/subresource_filter:subresource_filter_java_test_support", "//chrome/browser/thumbnail:thumbnail_java_test_support", "//components/minidump_uploader:minidump_uploader_java",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index 977a22e..906b52b 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -406,6 +406,7 @@ "java/src/org/chromium/chrome/browser/crash/MinidumpUploadService.java", "java/src/org/chromium/chrome/browser/crash/PureJavaExceptionHandler.java", "java/src/org/chromium/chrome/browser/crash/PureJavaExceptionReporter.java", + "java/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRenderer.java", "java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java", "java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java", "java/src/org/chromium/chrome/browser/customtabs/ClientManager.java", @@ -1580,7 +1581,6 @@ "java/src/org/chromium/chrome/browser/tab/TabCreationState.java", "java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java", "java/src/org/chromium/chrome/browser/tab/TabFavicon.java", - "java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java", "java/src/org/chromium/chrome/browser/tab/TabHelpers.java", "java/src/org/chromium/chrome/browser/tab/TabHidingType.java", "java/src/org/chromium/chrome/browser/tab/TabIdManager.java", @@ -1638,6 +1638,7 @@ "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorBase.java", "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java", "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorObserver.java", + "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplier.java", "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabModelObserver.java", "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorTabObserver.java", "java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorUma.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni index cba76b7..4edca8f 100644 --- a/chrome/android/chrome_junit_test_java_sources.gni +++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -43,6 +43,7 @@ "junit/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManagerTest.java", "junit/src/org/chromium/chrome/browser/cookies/CanonicalCookieTest.java", "junit/src/org/chromium/chrome/browser/crash/LogcatExtractionRunnableUnitTest.java", + "junit/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRendererUnitTest.java", "junit/src/org/chromium/chrome/browser/customtabs/CloseButtonNavigatorTest.java", "junit/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProviderTest.java", "junit/src/org/chromium/chrome/browser/customtabs/CustomTabNightModeStateControllerTest.java", @@ -205,6 +206,7 @@ "junit/src/org/chromium/chrome/browser/tab/TabBrowserControlsOffsetHelperTest.java", "junit/src/org/chromium/chrome/browser/tab/TabUnitTest.java", "junit/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegateTest.java", + "junit/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplierTest.java", "junit/src/org/chromium/chrome/browser/tabstate/TabStateUnitTest.java", "junit/src/org/chromium/chrome/browser/tasks/EngagementTimeUtilTest.java", "junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index a37393a..e16decd 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -210,6 +210,7 @@ "javatests/src/org/chromium/chrome/browser/incognito/IncognitoDataTestUtils.java", "javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java", "javatests/src/org/chromium/chrome/browser/incognito/IncognitoNotificationServiceTest.java", + "javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java", "javatests/src/org/chromium/chrome/browser/incognito/IncognitoTabLauncherTest.java", "javatests/src/org/chromium/chrome/browser/infobar/InfoBarAppearanceTest.java", "javatests/src/org/chromium/chrome/browser/infobar/InfoBarContainerTest.java",
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn index b2a1120..2403f1a4 100644 --- a/chrome/android/features/autofill_assistant/BUILD.gn +++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -243,6 +243,7 @@ "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantInfoBoxUiTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayUiTest.java", + "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPasswordManagerIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTextUtilsTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java", @@ -259,6 +260,7 @@ "//chrome/android:chrome_java", "//chrome/android:chrome_test_util_java", "//chrome/browser/image_fetcher:java", + "//chrome/browser/password_manager/android_test_helpers:test_support_java", "//chrome/browser/preferences:java", "//chrome/test/android:chrome_java_test_support", "//components/autofill_assistant/browser:proto_java",
diff --git a/chrome/android/features/autofill_assistant/javatests/DEPS b/chrome/android/features/autofill_assistant/javatests/DEPS index b7155a83..0d2fad1 100644 --- a/chrome/android/features/autofill_assistant/javatests/DEPS +++ b/chrome/android/features/autofill_assistant/javatests/DEPS
@@ -1,4 +1,6 @@ include_rules = [ "+components/browser_ui/widget/android", + "+chrome/browser/password_manager/android_test_helpers", + "-content/public/android", "+content/public/android/java/src/org/chromium/content_public/browser", ]
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataIntegrationTest.java index 0a2daf1..348464b3 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataIntegrationTest.java
@@ -26,7 +26,6 @@ import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.iterableWithSize; @@ -75,7 +74,6 @@ import org.chromium.chrome.browser.autofill_assistant.proto.ProcessedActionStatusProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto.Choice; -import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto; import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto; import org.chromium.chrome.browser.autofill_assistant.proto.TextInputProto; @@ -189,60 +187,6 @@ } /** - * Fill a form with a password generated by Chrome. - */ - @Test - @MediumTest - public void testEnterGeneratedPassword() throws Exception { - ArrayList<ActionProto> list = new ArrayList<>(); - list.add( - (ActionProto) ActionProto.newBuilder() - .setSetFormValue( - SetFormFieldValueProto.newBuilder() - .addValue(SetFormFieldValueProto.KeyPress.newBuilder() - .setGeneratePassword( - SetFormFieldValueProto - .GeneratePassword - .newBuilder() - .setMemoryKey( - "memory-key"))) - .setElement(ElementReferenceProto.newBuilder().addSelectors( - "#password"))) - .build()); - list.add( - (ActionProto) ActionProto.newBuilder() - .setSetFormValue( - SetFormFieldValueProto.newBuilder() - .addValue(SetFormFieldValueProto.KeyPress.newBuilder() - .setClientMemoryKey("memory-key")) - .setElement(ElementReferenceProto.newBuilder().addSelectors( - "#password-conf"))) - .build()); - - list.add((ActionProto) ActionProto.newBuilder() - .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices( - PromptProto.Choice.newBuilder())) - .build()); - AutofillAssistantTestScript script = new AutofillAssistantTestScript( - (SupportedScriptProto) SupportedScriptProto.newBuilder() - .setPath("form_target_website.html") - .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( - ChipProto.newBuilder().setText("Password generation"))) - .build(), - list); - - AutofillAssistantTestService testService = - new AutofillAssistantTestService(Collections.singletonList(script)); - startAutofillAssistant(mTestRule.getActivity(), testService); - - waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed()); - String password = getElementValue(getWebContents(), "password"); - String confirmation_password = getElementValue(getWebContents(), "password-conf"); - assertThat(password.length(), greaterThan(0)); - assertThat(password, is(confirmation_password)); - } - - /** * Showcasts an element of the webpage and checks that it can be interacted with. */ @Test
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPasswordManagerIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPasswordManagerIntegrationTest.java new file mode 100644 index 0000000..9afe2c6 --- /dev/null +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPasswordManagerIntegrationTest.java
@@ -0,0 +1,159 @@ +// 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.chrome.browser.autofill_assistant; + +import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed; +import static android.support.test.espresso.matcher.ViewMatchers.withText; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; + +import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.getElementValue; +import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition; + +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.MediumTest; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto; +import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto; +import org.chromium.chrome.browser.autofill_assistant.proto.ElementReferenceProto; +import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SetFormFieldValueProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto; +import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto; +import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; +import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.password_manager.PasswordChangeLauncher; +import org.chromium.chrome.browser.password_manager.PasswordManagerClientBridgeForTesting; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.test.util.TestThreadUtils; + +import java.util.ArrayList; +import java.util.Collections; + +/** + * Integration tests for password change flows. + */ +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +@RunWith(ChromeJUnit4ClassRunner.class) +public class AutofillAssistantPasswordManagerIntegrationTest { + @Rule + public CustomTabActivityTestRule mTestRule = new CustomTabActivityTestRule(); + + private static final String TEST_PAGE = "/components/test/data/autofill_assistant/html/" + + "form_target_website.html"; + + private WebContents getWebContents() { + return mTestRule.getWebContents(); + } + + @Before + public void setUp() throws Exception { + AutofillAssistantPreferencesUtil.setInitialPreferences(true); + mTestRule.startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent( + InstrumentationRegistry.getTargetContext(), + mTestRule.getTestServer().getURL(TEST_PAGE))); + TestThreadUtils.runOnUiThreadBlocking( + () + -> PasswordManagerClientBridgeForTesting.setLeakDialogWasShownForTesting( + getWebContents(), true)); + } + + @After + public void tearDown() { + TestThreadUtils.runOnUiThreadBlocking( + () + -> PasswordManagerClientBridgeForTesting.setLeakDialogWasShownForTesting( + getWebContents(), false)); + } + + /** + * Helper function to start a password change flow. + */ + private void startPasswordChangeFlow(AutofillAssistantTestScript script, String username) { + AutofillAssistantTestService testService = + new AutofillAssistantTestService(Collections.singletonList(script)); + testService.scheduleForInjection(); + TestThreadUtils.runOnUiThreadBlocking( + () + -> PasswordChangeLauncher.start(getWebContents().getTopLevelNativeWindow(), + getWebContents().getLastCommittedUrl(), username)); + } + + /** + * Run a password change flow (fill a form with username, old password, new password). + */ + @Test + @MediumTest + public void testPasswordChangeFlow() throws Exception { + ArrayList<ActionProto> list = new ArrayList<>(); + list.add( + (ActionProto) ActionProto.newBuilder() + .setSetFormValue( + SetFormFieldValueProto.newBuilder() + .addValue(SetFormFieldValueProto.KeyPress.newBuilder() + .setUseUsername(true)) + .setElement(ElementReferenceProto.newBuilder().addSelectors( + "#username"))) + .build()); + // TODO(crbug.com/1057608): Implement Android wrapper for PasswordStore to add a step and + // verification for current password filling. + list.add( + (ActionProto) ActionProto.newBuilder() + .setSetFormValue( + SetFormFieldValueProto.newBuilder() + .addValue(SetFormFieldValueProto.KeyPress.newBuilder() + .setGeneratePassword( + SetFormFieldValueProto + .GeneratePassword + .newBuilder() + .setMemoryKey( + "memory-key"))) + .setElement(ElementReferenceProto.newBuilder().addSelectors( + "#new-password"))) + .build()); + list.add( + (ActionProto) ActionProto.newBuilder() + .setSetFormValue( + SetFormFieldValueProto.newBuilder() + .addValue(SetFormFieldValueProto.KeyPress.newBuilder() + .setClientMemoryKey("memory-key")) + .setElement(ElementReferenceProto.newBuilder().addSelectors( + "#password-conf"))) + .build()); + + list.add((ActionProto) ActionProto.newBuilder() + .setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices( + PromptProto.Choice.newBuilder())) + .build()); + AutofillAssistantTestScript script = new AutofillAssistantTestScript( + (SupportedScriptProto) SupportedScriptProto.newBuilder() + .setPath("form_target_website.html") + .setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip( + ChipProto.newBuilder().setText("Password generation"))) + .build(), + list); + + String username = "test_username"; + startPasswordChangeFlow(script, username); + + waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed()); + assertThat(getElementValue(getWebContents(), "username"), is(username)); + String password = getElementValue(getWebContents(), "new-password"); + String confirmation_password = getElementValue(getWebContents(), "password-conf"); + assertThat(password.length(), greaterThan(0)); + assertThat(password, is(confirmation_password)); + } +}
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java index 634c94b..5f90465 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java
@@ -34,7 +34,6 @@ import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher; import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; @@ -122,7 +121,7 @@ // The Tab-to-GTS animation is done, and it's time to renew the thumbnail without causing // janky frames. // When animation is off, the thumbnail is already updated when showing the GTS. - if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) { + if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) { // Delay thumbnail taking a bit more to make it less likely to happen before the // thumbnail taking triggered by ThumbnailFetcher. See crbug.com/996385 for details. new Handler().postDelayed(() -> { @@ -140,7 +139,7 @@ // The Android View version of GTS overview is hidden. // If not doing GTS-to-Tab transition animation, we show the fade-out instead, which was // already done. - if (!TabFeatureUtilities.isTabToGtsAnimationEnabled()) { + if (!TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) { postHiding(); return; } @@ -179,8 +178,8 @@ // Skip shrinking animation when there is no tab in current tab model. boolean isCurrentTabModelEmpty = mTabModelSelector.getCurrentModel().getCount() == 0; - boolean showShrinkingAnimation = animate && TabFeatureUtilities.isTabToGtsAnimationEnabled() - && !isCurrentTabModelEmpty; + boolean showShrinkingAnimation = animate + && TabUiFeatureUtilities.isTabToGtsAnimationEnabled() && !isCurrentTabModelEmpty; boolean quick = mTabListDelegate.prepareOverview(); boolean skipSlowZooming = TabUiFeatureUtilities.SKIP_SLOW_ZOOMING.getValue(); Log.d(TAG, "SkipSlowZooming = " + skipSlowZooming); @@ -241,7 +240,7 @@ updateCacheVisibleIds(new LinkedList<>(Arrays.asList(sourceTabId))); mIsAnimating = true; - mController.hideOverview(!TabFeatureUtilities.isTabToGtsAnimationEnabled()); + mController.hideOverview(!TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); } @Override @@ -465,8 +464,9 @@ // The content viewport is intentionally sent as both params below. mSceneLayer.pushLayers(getContext(), contentViewport, contentViewport, this, layerTitleCache, tabContentManager, resourceManager, fullscreenManager, - TabFeatureUtilities.isTabToGtsAnimationEnabled() ? mTabListDelegate.getResourceId() - : 0, + TabUiFeatureUtilities.isTabToGtsAnimationEnabled() + ? mTabListDelegate.getResourceId() + : 0, mBackgroundAlpha, mStartSurface.getTabListDelegate().getTabListTopOffset()); mFrameCount++; if (mLastFrameTime != 0) {
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 d6f5cf89..299ee7cc 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
@@ -39,8 +39,8 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tab.TabSelectionType; +import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.chrome.tab_ui.R; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; @@ -111,7 +111,7 @@ mWaitingTime = 1000; mTabNumCap = 0; } - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); CriteriaHelper.pollUiThread(Criteria.equals(true, mActivityTestRule.getActivity()
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 1e66e51..3be91f3 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
@@ -84,7 +84,6 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tasks.tab_management.TabProperties; import org.chromium.chrome.browser.tasks.tab_management.TabSelectionEditorTestingRobot; @@ -275,7 +274,7 @@ @FlakyTest(message = "crbug.com/1064157 This test is flaky") public void testRenderGrid_3NativeTabs() throws InterruptedException, IOException { // clang-format on - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); // Prepare some incognito native tabs and enter tab switcher. // NTP in incognito mode is chosen for its consistency in look, and we don't have to mock // away the MV tiles, login promo, feed, etc. @@ -294,7 +293,7 @@ @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") @CommandLineFlags.Add({BASE_PARAMS}) public void testTabToGridFromLiveTab() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting()); assertEquals(0, mTabListDelegate.getCleanupDelayForTesting()); @@ -309,7 +308,7 @@ @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) @DisabledTest(message = "crbug.com/991852 This test is flaky") public void testTabToGridFromLiveTabAnimation() throws InterruptedException { - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, NTP_URL); testTabToGrid(mUrl); @@ -320,7 +319,7 @@ @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") @CommandLineFlags.Add({BASE_PARAMS + "/soft-cleanup-delay/2000/cleanup-delay/10000"}) public void testTabToGridFromLiveTabWarm() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); assertEquals(2000, mTabListDelegate.getSoftCleanupDelayForTesting()); assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting()); @@ -334,7 +333,7 @@ @CommandLineFlags.Add({BASE_PARAMS + "/soft-cleanup-delay/2000/cleanup-delay/10000"}) @MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction. public void testTabToGridFromLiveTabWarmAnimation() throws InterruptedException { - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, NTP_URL); testTabToGrid(mUrl); } @@ -344,7 +343,7 @@ @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") @CommandLineFlags.Add({BASE_PARAMS + "/cleanup-delay/10000"}) public void testTabToGridFromLiveTabSoft() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); assertEquals(0, mTabListDelegate.getSoftCleanupDelayForTesting()); assertEquals(10000, mTabListDelegate.getCleanupDelayForTesting()); @@ -358,7 +357,7 @@ @CommandLineFlags.Add({BASE_PARAMS + "/cleanup-delay/10000"}) @MinAndroidSdkLevel(Build.VERSION_CODES.M) // TODO(crbug.com/997065#c8): remove SDK restriction. public void testTabToGridFromLiveTabSoftAnimation() throws InterruptedException { - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, NTP_URL); testTabToGrid(mUrl); } @@ -415,7 +414,7 @@ @MediumTest @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") public void testGridToTabToCurrentLive() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(1, 0, mUrl); testGridToTab(false, false); } @@ -438,7 +437,7 @@ @MediumTest @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") public void testGridToTabToCurrentLiveDetached() throws Exception { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); // This works on emulators but not on real devices. See crbug.com/986047. if (!isEmulator()) return; @@ -479,7 +478,7 @@ @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) @DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X") public void testGridToTabToCurrentLiveWithAnimation() throws InterruptedException { - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(1, 0, mUrl); testGridToTab(false, false); } @@ -488,7 +487,7 @@ @MediumTest @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") public void testGridToTabToOtherLive() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, mUrl); testGridToTab(true, false); } @@ -499,7 +498,7 @@ @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) @DisabledTest(message = "crbug.com/993201 This test fails deterministically on Nexus 5X") public void testGridToTabToOtherLiveWithAnimation() throws InterruptedException { - assertTrue(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertTrue(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, mUrl); testGridToTab(true, false); } @@ -508,7 +507,7 @@ @MediumTest @DisableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study") public void testGridToTabToOtherFrozen() throws InterruptedException { - assertFalse(TabFeatureUtilities.isTabToGtsAnimationEnabled()); + assertFalse(TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); prepareTabs(2, 0, mUrl); testGridToTab(true, true); }
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 ab4240e..69494e49 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
@@ -45,7 +45,6 @@ import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabCreationState; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tab.TabImpl; import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tab.TabObserver; @@ -870,7 +869,7 @@ * The selected border should re-appear in the final fading-in stage. */ void prepareOverview() { - if (!TabFeatureUtilities.isTabToGtsAnimationEnabled() + if (!TabUiFeatureUtilities.isTabToGtsAnimationEnabled() || !mTabModelSelector.getTabModelFilterProvider() .getCurrentTabModelFilter() .isTabModelRestored()) { @@ -1017,7 +1016,7 @@ && (mModel.get(index).model.get(TabProperties.THUMBNAIL_FETCHER) == null || forceUpdate || isUpdatingId)) { ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, forceUpdate, - forceUpdate && !TabFeatureUtilities.isTabToGtsAnimationEnabled()); + forceUpdate && !TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); mModel.get(index).model.set(TabProperties.THUMBNAIL_FETCHER, callback); } } @@ -1249,7 +1248,7 @@ if (mThumbnailProvider != null && mVisible) { ThumbnailFetcher callback = new ThumbnailFetcher(mThumbnailProvider, tab, isSelected, - isSelected && !TabFeatureUtilities.isTabToGtsAnimationEnabled()); + isSelected && !TabUiFeatureUtilities.isTabToGtsAnimationEnabled()); tabInfo.set(TabProperties.THUMBNAIL_FETCHER, callback); } tab.addObserver(mTabObserver);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java index 7e4ed1af..4517d87 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
@@ -36,7 +36,6 @@ import org.chromium.base.Log; import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.tab_ui.R; import org.chromium.ui.interpolators.BakedBezierInterpolator; @@ -160,7 +159,7 @@ assert mFadeOutAnimator == null; mListener.startedShowing(animate); - long duration = TabFeatureUtilities.isTabToGtsAnimationEnabled() + long duration = TabUiFeatureUtilities.isTabToGtsAnimationEnabled() ? FINAL_FADE_IN_DURATION_MS : BASE_ANIMATION_DURATION_MS; @@ -183,7 +182,7 @@ unregisterDynamicView(); } // TODO(crbug.com/972157): remove this band-aid after we know why GTS is invisible. - if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) { + if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) { requestLayout(); } }
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 4eddecf..570fb92 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
@@ -36,7 +36,6 @@ import org.chromium.chrome.browser.init.FirstDrawDetector; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabCreationState; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tab.TabSelectionType; import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; @@ -509,7 +508,7 @@ TabModelFilter currentTabModelFilter = mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(); if (currentTabModelFilter != null && currentTabModelFilter.isTabModelRestored()) { - if (TabFeatureUtilities.isTabToGtsAnimationEnabled()) { + if (TabUiFeatureUtilities.isTabToGtsAnimationEnabled()) { quick = mResetHandler.resetWithTabList( currentTabModelFilter, false, mShowTabsInMruOrder); } @@ -535,7 +534,7 @@ .isTabModelRestored()) { mResetHandler.resetWithTabList( mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), - TabFeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder); + TabUiFeatureUtilities.isTabToGtsAnimationEnabled(), mShowTabsInMruOrder); } if (!animate) mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, false); setVisibility(true);
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java index 652c06c..02d990e6 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
@@ -4,16 +4,21 @@ package org.chromium.chrome.browser.tasks.tab_management; +import android.os.Build; import android.text.TextUtils; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import org.chromium.base.ContextUtils; +import org.chromium.base.Log; +import org.chromium.base.SysUtils; import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter; import org.chromium.chrome.browser.flags.CachedFeatureFlags; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.DoubleCachedFieldTrialParameter; +import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter; import org.chromium.chrome.browser.flags.StringCachedFieldTrialParameter; import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration; import org.chromium.ui.base.DeviceFormFactor; @@ -26,6 +31,8 @@ * A class to handle the state of flags for tab_management. */ public class TabUiFeatureUtilities { + private static final String TAG = "TabFeatureUtilities"; + // Field trial parameters: public static final String SKIP_SLOW_ZOOMING_PARAM = "skip-slow-zooming"; public static final BooleanCachedFieldTrialParameter SKIP_SLOW_ZOOMING = @@ -53,7 +60,19 @@ new BooleanCachedFieldTrialParameter( ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, SEARCH_CHIP_ADAPTIVE_PARAM, false); + // Field trial parameter for the minimum Android SDK version to enable zooming animation. + public static final String MIN_SDK_PARAM = "zooming-min-sdk-version"; + public static final IntCachedFieldTrialParameter ZOOMING_MIN_SDK = + new IntCachedFieldTrialParameter( + ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM, Build.VERSION_CODES.O); + // Field trial parameter for the minimum physical memory size to enable zooming animation. + public static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb"; + public static final IntCachedFieldTrialParameter ZOOMING_MIN_MEMORY = + new IntCachedFieldTrialParameter( + ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_MEMORY_MB_PARAM, 2048); + private static Boolean sTabManagementModuleSupportedForTesting; + private static Boolean sIsTabToGtsAnimationEnabled; /** * Set whether the tab management module is supported for testing. @@ -138,4 +157,28 @@ public static boolean isTabGridLayoutAndroidNewTabTileEnabled() { return TextUtils.equals(TAB_GRID_LAYOUT_ANDROID_NEW_TAB_TILE.getValue(), "NewTabTile"); } + + /** + * Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to + * null after the test has finished. + */ + @VisibleForTesting + public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) { + sIsTabToGtsAnimationEnabled = enabled; + } + + /** + * @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled. + */ + public static boolean isTabToGtsAnimationEnabled() { + if (sIsTabToGtsAnimationEnabled != null) { + Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled); + return sIsTabToGtsAnimationEnabled; + } + Log.d(TAG, "GTS.MinSdkVersion = " + ZOOMING_MIN_SDK.getValue()); + Log.d(TAG, "GTS.MinMemoryMB = " + ZOOMING_MIN_MEMORY.getValue()); + return CachedFeatureFlags.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION) + && Build.VERSION.SDK_INT >= ZOOMING_MIN_SDK.getValue() + && SysUtils.amountOfPhysicalMemoryKB() / 1024 >= ZOOMING_MIN_MEMORY.getValue(); + } }
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java index d16e57e..3aab66d 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java
@@ -28,7 +28,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.tab_ui.R; import org.chromium.chrome.test.util.browser.Features; import org.chromium.content_public.browser.test.util.CriteriaHelper; @@ -99,7 +98,7 @@ public void setUpTest() throws Exception { super.setUpTest(); MockitoAnnotations.initMocks(this); - TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false); + TabUiFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false); // TODO(meiliang): Replace with TabSwitcher instead when ready to integrate with // TabSwitcher. ViewGroup view = new FrameLayout(getActivity()); @@ -140,7 +139,7 @@ @After public void tearDown() { - TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null); + TabUiFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null); } @Test
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java index 9890167..b39127a 100644 --- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java +++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java
@@ -30,7 +30,7 @@ private static final double ASSERT_EQUALS_DOUBLE_DELTA = 0.001d; /** Default value for whether to use menu options to send user feedback. */ - public static final boolean SEND_FEEDBACK_ENABLED_DEFAULT = false; + public static final boolean SEND_FEEDBACK_ENABLED_DEFAULT = true; @Test @Feature({"Feed"})
diff --git a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected index 4647d7d8..3900b7e 100644 --- a/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected +++ b/chrome/android/java/monochrome_public_bundle__base_bundle_module.AndroidManifest.expected
@@ -1023,22 +1023,6 @@ android:value="true"/> </activity> <activity - android:label="WebView - Crashes" - android:launchMode="singleTop" - android:name="org.chromium.android_webview.devui.CrashesListActivity" - android:process=":webview_apk" - android:taskAffinity="org.chromium.chrome.org.chromium.android_webview.devui" - android:theme="@style/Theme.DevUi.DayNight"/> - <activity - android:label="WebView - Flags" - android:launchMode="singleTop" - android:name="org.chromium.android_webview.devui.FlagsActivity" - android:process=":webview_apk" - android:taskAffinity="org.chromium.chrome.org.chromium.android_webview.devui" - android:theme="@style/Theme.DevUi.DayNight"/> - <activity android:enabled="false" android:excludeFromRecents="true" android:exported="true"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeCachedFlags.java index 46dc7d7..6f8bb4e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeCachedFlags.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeCachedFlags.java
@@ -11,7 +11,6 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.chrome.browser.toolbar.bottom.BottomToolbarVariationManager; import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration; @@ -74,8 +73,8 @@ StartSurfaceConfiguration.START_SURFACE_HIDE_INCOGNITO_SWITCH, StartSurfaceConfiguration.START_SURFACE_VARIATION, TabContentManager.ALLOW_TO_REFETCH_TAB_THUMBNAIL_VARIATION, - TabFeatureUtilities.ZOOMING_MIN_MEMORY, - TabFeatureUtilities.ZOOMING_MIN_SDK, + TabUiFeatureUtilities.ZOOMING_MIN_MEMORY, + TabUiFeatureUtilities.ZOOMING_MIN_SDK, TabUiFeatureUtilities.SKIP_SLOW_ZOOMING, TabUiFeatureUtilities.TAB_GRID_LAYOUT_ANDROID_NEW_TAB_TILE, TabUiFeatureUtilities.THUMBNAIL_ASPECT_RATIO);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java index e6c72556..75732af 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
@@ -342,14 +342,12 @@ } } - // If the previous caller was not Chrome, but added EXTRA_IS_OPENED_BY_CHROME or - // EXTRA_IS_OPENED_BY_WEBAPK for malicious purpose, remove it. The new intent will be sent - // by Chrome, but was not sent by Chrome initially. + // If the previous caller was not Chrome, but added EXTRA_IS_OPENED_BY_CHROME + // for malicious purpose, remove it. The new intent will be sent by Chrome, but was not + // sent by Chrome initially. if (!IntentHandler.wasIntentSenderChrome(intent)) { IntentUtils.safeRemoveExtra( newIntent, CustomTabIntentDataProvider.EXTRA_IS_OPENED_BY_CHROME); - IntentUtils.safeRemoveExtra( - newIntent, CustomTabIntentDataProvider.EXTRA_IS_OPENED_BY_WEBAPK); } return newIntent;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java index 6552c98..94aa704b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/BrowserServicesIntentDataProvider.java
@@ -290,13 +290,6 @@ } /** - * @return Whether the Custom Tab was opened from a WebAPK. - */ - public boolean isOpenedByWebApk() { - return false; - } - - /** * @return Whether the Activity should be opened in incognito mode. */ public boolean isIncognito() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/cryptids/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/cryptids/OWNERS new file mode 100644 index 0000000..2d22316 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/cryptids/OWNERS
@@ -0,0 +1,2 @@ +tmartino@chromium.org +sebsg@chromium.org # backup \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRenderer.java b/chrome/android/java/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRenderer.java new file mode 100644 index 0000000..89b7ca6 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRenderer.java
@@ -0,0 +1,93 @@ +// Copyright 2020 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.chrome.browser.cryptids; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.base.Log; + +/** + * Allows for cryptids to be displayed on the New Tab Page under certain probabilistic conditions. + */ +public class ProbabilisticCryptidRenderer { + // Probabilities are expressed as instances per million. + protected static final int DENOMINATOR = 1000000; + + private static final String TAG = "ProbabilisticCryptid"; + + /** + * Determines whether cryptid should be rendered on this NTP instance, based on probability + * factors as well as variations groups. + * @return true if the probability conditions are met and cryptid should be shown, + * false otherwise + */ + public boolean shouldUseCryptidRendering() { + // TODO: This should be disabled unless enabled by variations. + return getRandom() < calculateProbability(getLastRenderTimestampMillis(), + System.currentTimeMillis(), getRenderingMoratoriumLengthMillis(), + getRampUpLengthMillis(), getMaxProbability()); + } + + // Protected for testing + protected long getLastRenderTimestampMillis() { + // TODO: Store last instance timestamp in a pref and return it. + return 0; + } + + protected long getRenderingMoratoriumLengthMillis() { + // TODO: This default should be overwritable by variations. + return 4 * 24 * 60 * 60 * 1000; // 4 days + } + + protected long getRampUpLengthMillis() { + // TODO: This default should be overwritable by variations. + return 21 * 24 * 60 * 60 * 1000; // 21 days + } + + protected int getMaxProbability() { + // TODO: This default should be overwritable by variations. + return 20000; // 2% + } + + protected int getRandom() { + return (int) (Math.random() * DENOMINATOR); + } + + /** + * Calculates the probability of display at a particular moment, based on various timestamp/ + * length factors. Roughly speaking, the probability starts at 0 after a rendering event, + * then after a moratorium period will ramp up linearly until reaching a maximum probability. + * @param lastRenderTimestamp the stored timestamp, in millis, of the last rendering event + * @param currentTimestamp the current time, in millis + * @param renderingMoratoriumLength the length, in millis, of the period prior to ramp-up + * when probability should remain at zero + * @param rampUpLength the length, in millis, of the period over which the linear ramp-up + * should occur + * @param maxProbability the highest probability value, as a fraction of |DENOMINATOR|, that + * should ever be returned (i.e., the value at the end of the ramp-up period) + * @return the probability, expressed as a fraction of |DENOMINATOR|, that cryptids will be + * rendered + */ + @VisibleForTesting + static int calculateProbability(long lastRenderTimestamp, long currentTimestamp, + long renderingMoratoriumLength, long rampUpLength, int maxProbability) { + if (currentTimestamp < lastRenderTimestamp) { + Log.e(TAG, "Last render timestamp is in the future"); + return 0; + } + + long windowStartTimestamp = lastRenderTimestamp + renderingMoratoriumLength; + long maxProbabilityStartTimestamp = windowStartTimestamp + rampUpLength; + + if (currentTimestamp < windowStartTimestamp) { + return 0; + } else if (currentTimestamp > maxProbabilityStartTimestamp) { + return maxProbability; + } + + float fractionOfRampUp = (float) (currentTimestamp - windowStartTimestamp) / rampUpLength; + return (int) Math.round(fractionOfRampUp * maxProbability); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java index badacf27..71b7670c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -115,10 +115,6 @@ public static final String EXTRA_DISABLE_DOWNLOAD_BUTTON = "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON"; - /** Extra that indicates whether the client is a WebAPK. */ - public static final String EXTRA_IS_OPENED_BY_WEBAPK = - "org.chromium.chrome.browser.customtabs.EXTRA_IS_OPENED_BY_WEBAPK"; - /** * Indicates the source where the Custom Tab is launched. The value is defined as * {@link LaunchSourceType}. @@ -169,7 +165,6 @@ private final int mInitialBackgroundColor; private final boolean mDisableStar; private final boolean mDisableDownload; - private final boolean mIsOpenedByWebApk; private final boolean mIsTrustedWebActivity; @Nullable private final Integer mNavigationBarColor; @@ -326,8 +321,6 @@ mDisableStar = IntentUtils.safeGetBooleanExtra(intent, EXTRA_DISABLE_STAR_BUTTON, false); mDisableDownload = IntentUtils.safeGetBooleanExtra(intent, EXTRA_DISABLE_DOWNLOAD_BUTTON, false); - mIsOpenedByWebApk = - IntentUtils.safeGetBooleanExtra(intent, EXTRA_IS_OPENED_BY_WEBAPK, false); mTranslateLanguage = IntentUtils.safeGetStringExtra(intent, EXTRA_TRANSLATE_LANGUAGE); mFocusIntent = IntentUtils.safeGetParcelableExtra(intent, EXTRA_FOCUS_INTENT); @@ -717,11 +710,6 @@ } @Override - public boolean isOpenedByWebApk() { - return mIsOpenedByWebApk; - } - - @Override public boolean isIncognito() { return mIsIncognito; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java index 19411f6..7a078cbb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityNavigationController.java
@@ -180,9 +180,6 @@ int transition; if (mIntentDataProvider.isTrustedWebActivity()) { transition = PageTransition.AUTO_TOPLEVEL | PageTransition.FROM_API; - } else if (mIntentDataProvider.isOpenedByWebApk()) { - transition = PageTransition.LINK; - params.setHasUserGesture(true); } else { transition = PageTransition.LINK | PageTransition.FROM_API; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java index fd1a1ad..bfb3d6d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
@@ -459,12 +459,6 @@ @Override public void onSourceMenuItemClicked(String code) { - // If source language is same as target language, the infobar will dismiss and no - // translation will be done. - if (mOptions.targetLanguageCode().equals(code)) { - closeInfobar(true); - return; - } // Reset source code in both UI and native. if (mNativeTranslateInfoBarPtr != 0 && mOptions.setSourceLanguage(code)) { recordInfobarLanguageData(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java index 5fad7aa7..3f42190 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java
@@ -257,8 +257,7 @@ } private boolean canSetLanguage(String sourceCode, String targetCode) { - return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode) - && !sourceCode.equals(targetCode); + return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java index dd28705..eef675e9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -57,6 +57,7 @@ import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.page_info.CertificateChainHelper; import org.chromium.components.payments.CurrencyFormatter; +import org.chromium.components.payments.ErrorMessageUtil; import org.chromium.components.payments.ErrorStrings; import org.chromium.components.payments.MethodStrings; import org.chromium.components.payments.OriginSecurityChecker; @@ -2800,7 +2801,7 @@ } else { if (mNativeObserverForTest != null) mNativeObserverForTest.onNotSupportedError(); disconnectFromClientWithDebugMessage( - ErrorStrings.GENERIC_PAYMENT_METHOD_NOT_SUPPORTED_MESSAGE + ErrorMessageUtil.getNotSupportedErrorMessage(mMethodData.keySet()) + (TextUtils.isEmpty(mRejectShowErrorMessage) ? "" : " " + mRejectShowErrorMessage), @@ -2828,7 +2829,7 @@ if (sObserverForTest != null) sObserverForTest.onPaymentRequestServiceShowFailed(); mRejectShowErrorMessage = ErrorStrings.STRICT_BASIC_CARD_SHOW_REJECT; disconnectFromClientWithDebugMessage( - ErrorStrings.GENERIC_PAYMENT_METHOD_NOT_SUPPORTED_MESSAGE + " " + ErrorMessageUtil.getNotSupportedErrorMessage(mMethodData.keySet()) + " " + mRejectShowErrorMessage, PaymentErrorReason.NOT_SUPPORTED);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java index 80109cb..fbb2782 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java
@@ -80,8 +80,11 @@ public static void handleSearchEngineChoice(Context context, SnackbarManager snackbarManager) { boolean searchEngineChoiceRequested = wasSearchEngineChoiceRequested(); boolean searchEngineChoicePresented = wasSearchEngineChoicePresented(); + boolean searchEngineChoiceAvailable = + !TemplateUrlServiceFactory.get().isDefaultSearchManaged(); - if (searchEngineChoiceRequested && !searchEngineChoicePresented) { + if (searchEngineChoiceRequested && searchEngineChoiceAvailable + && !searchEngineChoicePresented) { snackbarManager.showSnackbar(buildSnackbarNotification(context)); updateSearchEngineChoicePresented(); SearchEngineChoiceMetrics.recordEvent(SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java index a6eef95..7bb087a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java
@@ -202,9 +202,11 @@ } if (mSelectedSearchEnginePosition == -1) { - throw new IllegalStateException("Default search engine, " - + defaultSearchEngineTemplateUrl - + ", index did not match any available search engines."); + throw new IllegalStateException( + String.format("Default search engine is not found in available search engines:" + + " DSE is valid=%b, is managed=%b", + defaultSearchEngineTemplateUrl != null, + TemplateUrlServiceFactory.get().isDefaultSearchManaged())); } mInitialEnginePosition = mSelectedSearchEnginePosition;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java index 1dcd327..9b1788f4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java
@@ -15,6 +15,8 @@ /** * A preference fragment for selecting a default search engine. + * ATTENTION: User can't change search engine if it is controlled by an enterprise policy. Check + * TemplateUrlServiceFactory.get().isDefaultSearchManaged() before launching this fragment. * * TODO(crbug.com/988877): Add on scroll shadow to action bar. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java deleted file mode 100644 index 26d7e89..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabFeatureUtilities.java +++ /dev/null
@@ -1,74 +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. - -package org.chromium.chrome.browser.tab; - -import android.os.Build; - -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; - -import org.chromium.base.Log; -import org.chromium.base.SysUtils; -import org.chromium.chrome.browser.flags.CachedFeatureFlags; -import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter; - -/** - * Contains logic that decides whether to enable features related to tabs. - */ -public class TabFeatureUtilities { - private static final String TAG = "TabFeatureUtilities"; - private static final int DEFAULT_MIN_SDK = Build.VERSION_CODES.O; - private static final int DEFAULT_MIN_MEMORY_MB = 2048; - - // Field trial parameter for the minimum Android SDK version to enable zooming animation. - public static final String MIN_SDK_PARAM = "zooming-min-sdk-version"; - public static final IntCachedFieldTrialParameter ZOOMING_MIN_SDK = - new IntCachedFieldTrialParameter( - ChromeFeatureList.TAB_TO_GTS_ANIMATION, MIN_SDK_PARAM, DEFAULT_MIN_SDK); - - // Field trial parameter for the minimum physical memory size to enable zooming animation. - public static final String MIN_MEMORY_MB_PARAM = "zooming-min-memory-mb"; - public static final IntCachedFieldTrialParameter ZOOMING_MIN_MEMORY = - new IntCachedFieldTrialParameter(ChromeFeatureList.TAB_TO_GTS_ANIMATION, - MIN_MEMORY_MB_PARAM, DEFAULT_MIN_MEMORY_MB); - - private static Boolean sIsTabToGtsAnimationEnabled; - - /** - * Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to - * null after the test has finished. - */ - @VisibleForTesting - public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) { - sIsTabToGtsAnimationEnabled = enabled; - } - - /** - * @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled. - */ - public static boolean isTabToGtsAnimationEnabled() { - if (sIsTabToGtsAnimationEnabled != null) { - Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled); - return sIsTabToGtsAnimationEnabled; - } - Log.d(TAG, "GTS.MinSdkVersion = " + GridTabSwitcherUtil.getMinSdkVersion()); - Log.d(TAG, "GTS.MinMemoryMB = " + GridTabSwitcherUtil.getMinMemoryMB()); - return CachedFeatureFlags.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION) - && Build.VERSION.SDK_INT >= GridTabSwitcherUtil.getMinSdkVersion() - && SysUtils.amountOfPhysicalMemoryKB() / 1024 - >= GridTabSwitcherUtil.getMinMemoryMB(); - } - - private static class GridTabSwitcherUtil { - private static int getMinSdkVersion() { - return TabFeatureUtilities.ZOOMING_MIN_SDK.getValue(); - } - - private static int getMinMemoryMB() { - return TabFeatureUtilities.ZOOMING_MIN_MEMORY.getValue(); - } - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/DEPS b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/DEPS new file mode 100644 index 0000000..31186c4 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ +"+chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/Profile.java", +] \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplier.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplier.java new file mode 100644 index 0000000..7d45a6bf --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplier.java
@@ -0,0 +1,69 @@ +// Copyright 2020 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.chrome.browser.tabmodel; + +import org.chromium.base.supplier.ObservableSupplier; +import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.tab.Tab; + +/** + * {@link ObservableSupplier} for {@link Profile} that updates each time the profile of the current + * tab model changes, e.g. if the current tab model switches to/from incognito. + * Like {@link org.chromium.base.supplier.ObservableSupplier}, this class must only be + * accessed from a single thread. + */ +public class TabModelSelectorProfileSupplier + extends ObservableSupplierImpl<Profile> implements TabModelSelectorObserver { + private TabModelSelector mSelector; + + public TabModelSelectorProfileSupplier(ObservableSupplier<TabModelSelector> selectorSupplier) { + selectorSupplier.addObserver(this::setSelector); + } + + private void setSelector(TabModelSelector selector) { + mSelector = selector; + mSelector.addObserver(this); + } + + @Override + public void onTabModelSelected(TabModel newModel, TabModel oldModel) { + Profile newProfile = newModel.getProfile(); + // When switching to an incognito tab model, the corresponding off-the-record profile does + // not necessarily exist yet, but we may be able to force its creation. + if (newProfile == null && newModel.isIncognito()) { + Profile oldProfile = oldModel.getProfile(); + assert oldProfile != null; + // If the previous profile is itself off-the-record, we can't derive an + // off-the-record profile from it. + if (oldProfile.isOffTheRecord()) return; + // Forces creation of a primary off-the-record profile. TODO(pnoland): replace this with + // getIncognitoProfile() once multiple OTR profiles are supported on Android. + newProfile = oldProfile.getOffTheRecordProfile(); + } + + if (newProfile == null) return; + + set(newProfile); + } + + @Override + public void onChange() {} + + @Override + public void onNewTabCreated(Tab tab, int creationState) {} + + @Override + public void onTabStateInitialized() { + set(mSelector.getCurrentModel().getProfile()); + } + + public void destroy() { + if (mSelector != null) { + mSelector.removeObserver(this); + mSelector = null; + } + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 77a6b78..e7906f0d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -107,11 +107,10 @@ import org.chromium.chrome.browser.ui.native_page.NativePage; import org.chromium.chrome.browser.user_education.UserEducationHelper; import org.chromium.chrome.browser.util.AccessibilityUtil; -import org.chromium.chrome.browser.widget.ScrimView; -import org.chromium.chrome.browser.widget.ScrimView.ScrimObserver; -import org.chromium.chrome.browser.widget.ScrimView.ScrimParams; import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration; import org.chromium.components.browser_ui.styles.ChromeColors; +import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; +import org.chromium.components.browser_ui.widget.scrim.ScrimProperties; import org.chromium.components.browser_ui.widget.textbubble.TextBubble; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.feature_engagement.EventConstants; @@ -127,6 +126,7 @@ import org.chromium.content_public.common.ContentUrlConstants; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.PageTransition; +import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.util.TokenHolder; import java.util.List; @@ -135,7 +135,7 @@ * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. */ -public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlFocusChangeListener, +public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListener, ThemeColorObserver, MenuButtonDelegate, AccessibilityUtil.Observer { /** @@ -163,6 +163,7 @@ private final ToolbarControlContainer mControlContainer; private final FullscreenListener mFullscreenListener; private final TabObscuringHandler mTabObscuringHandler; + private final ScrimCoordinator mScrimCoordinator; private BottomControlsCoordinator mBottomControlsCoordinator; private TabModelSelector mTabModelSelector; @@ -253,6 +254,7 @@ * @param buttonDataProviders The list of button data providers for the optional toolbar button * in the browsing mode toolbar, given in precedence order. * @param tabProvider The {@link ActivityTabProvider} for accessing current activity tab. + * @param scrimCoordinator A means of showing the scrim. */ public ToolbarManager(ChromeActivity activity, ChromeFullscreenManager fullscreenManager, ToolbarControlContainer controlContainer, Invalidator invalidator, @@ -261,12 +263,14 @@ ObservableSupplier<ShareDelegate> shareDelegateSupplier, ObservableSupplierImpl<Boolean> bottomToolbarVisibilitySupplier, IdentityDiscController identityDiscController, - List<ButtonDataProvider> buttonDataProviders, ActivityTabProvider tabProvider) { + List<ButtonDataProvider> buttonDataProviders, ActivityTabProvider tabProvider, + ScrimCoordinator scrimCoordinator) { mActivity = activity; mFullscreenManager = fullscreenManager; mActionBarDelegate = new ViewShiftingActionBarDelegate(activity, controlContainer); mShareDelegateSupplier = shareDelegateSupplier; mBottomToolbarVisibilitySupplier = bottomToolbarVisibilitySupplier; + mScrimCoordinator = scrimCoordinator; mTabObscuringToken = TokenHolder.INVALID_TOKEN; mLocationBarModel = new LocationBarModel(activity); @@ -294,40 +298,71 @@ mLocationBarFocusObserver = new UrlFocusChangeListener() { /** The params used to control how the scrim behaves when shown for the omnibox. */ - private ScrimParams mScrimParams; + private PropertyModel mScrimModel; /** The light color to use for the scrim on the NTP. */ private int mLightScrimColor; @Override public void onUrlFocusChange(boolean hasFocus) { - if (mScrimParams == null) { + if (mScrimModel == null) { Resources res = mActivity.getResources(); int topMargin = res.getDimensionPixelSize(R.dimen.tab_strip_height); mLightScrimColor = ApiCompatibilityUtils.getColor( res, R.color.omnibox_focused_fading_background_color_light); View scrimTarget = mActivity.getCompositorViewHolder(); - mScrimParams = new ScrimView.ScrimParams( - scrimTarget, true, false, topMargin, ToolbarManager.this); + + Callback<Boolean> visibilityChangeCallback = (visible) -> { + if (visible) { + // It's possible for the scrim to unfocus and refocus without the + // visibility actually changing. In this case we have to make sure we + // unregister the previous token before acquiring a new one. + // TODO(mdjones): Consider calling the visibility change event in the + // scrim between requests the show. + int oldToken = mTabObscuringToken; + mTabObscuringToken = mTabObscuringHandler.obscureAllTabs(); + if (oldToken != TokenHolder.INVALID_TOKEN) { + mTabObscuringHandler.unobscureAllTabs(oldToken); + } + } else { + mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken); + mTabObscuringToken = TokenHolder.INVALID_TOKEN; + } + }; + + Runnable clickDelegate = + () -> setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS); + + mScrimModel = new PropertyModel.Builder(ScrimProperties.ALL_KEYS) + .with(ScrimProperties.ANCHOR_VIEW, scrimTarget) + .with(ScrimProperties.SHOW_IN_FRONT_OF_ANCHOR_VIEW, true) + .with(ScrimProperties.AFFECTS_STATUS_BAR, true) + .with(ScrimProperties.TOP_MARGIN, topMargin) + .with(ScrimProperties.CLICK_DELEGATE, clickDelegate) + .with(ScrimProperties.VISIBILITY_CALLBACK, + visibilityChangeCallback) + .with(ScrimProperties.BACKGROUND_COLOR, + ScrimProperties.INVALID_COLOR) + .build(); } boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity); - mScrimParams.backgroundColor = !isTablet && !mLocationBarModel.isIncognito() - && !mActivity.getNightModeStateProvider().isInNightMode() - ? mLightScrimColor - : null; + boolean useLightColor = !isTablet && !mLocationBarModel.isIncognito() + && !mActivity.getNightModeStateProvider().isInNightMode(); + mScrimModel.set(ScrimProperties.BACKGROUND_COLOR, + useLightColor ? mLightScrimColor : ScrimProperties.INVALID_COLOR); if (hasFocus && !showScrimAfterAnimationCompletes()) { - mActivity.getScrim().showScrim(mScrimParams); + mScrimCoordinator.showScrim(mScrimModel); } else if (!hasFocus) { - mActivity.getScrim().hideScrim(true); + mScrimCoordinator.hideScrim(true); } } @Override public void onUrlAnimationFinished(boolean hasFocus) { if (hasFocus && showScrimAfterAnimationCompletes()) { - mActivity.getScrim().showScrim(mScrimParams); + mScrimCoordinator.showScrim(mScrimModel); } } @@ -750,30 +785,6 @@ mAppMenuPropertiesDelegate = appMenuCoordinator.getAppMenuPropertiesDelegate(); } - @Override - public void onScrimVisibilityChanged(boolean visible) { - if (visible) { - // It's possible for the scrim to unfocus and refocus without the visibility actually - // changing. In this case we have to make sure we unregister the previous token before - // acquiring a new one. - // TODO(mdjones): Consider calling the visibility change event in the scrim between - // requests the show. - int oldToken = mTabObscuringToken; - mTabObscuringToken = mTabObscuringHandler.obscureAllTabs(); - if (oldToken != TokenHolder.INVALID_TOKEN) { - mTabObscuringHandler.unobscureAllTabs(oldToken); - } - } else { - mTabObscuringHandler.unobscureAllTabs(mTabObscuringToken); - mTabObscuringToken = TokenHolder.INVALID_TOKEN; - } - } - - @Override - public void onScrimClick() { - setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS); - } - /** * @return Whether the UrlBar currently has focus. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarView.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarView.java index faabd2f..8902afaa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarView.java
@@ -21,7 +21,7 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.device.DeviceClassManager; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; +import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.chrome.browser.toolbar.IncognitoStateProvider; import org.chromium.chrome.browser.toolbar.MenuButton; import org.chromium.chrome.browser.toolbar.NewTabButton; @@ -262,7 +262,7 @@ setVisibility(View.VISIBLE); boolean showZoomingAnimation = - animateToTab && TabFeatureUtilities.isTabToGtsAnimationEnabled(); + animateToTab && TabUiFeatureUtilities.isTabToGtsAnimationEnabled(); final long duration = showZoomingAnimation ? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS : TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java index 8c96d220..2d5c7f94 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java
@@ -21,7 +21,6 @@ import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.incognito.IncognitoUtils; -import org.chromium.chrome.browser.tab.TabFeatureUtilities; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.chrome.browser.toolbar.IncognitoStateProvider; @@ -138,7 +137,7 @@ setAlpha(inTabSwitcherMode ? 0.0f : 1.0f); boolean showZoomingAnimation = TabUiFeatureUtilities.isGridTabSwitcherEnabled() - && TabFeatureUtilities.isTabToGtsAnimationEnabled(); + && TabUiFeatureUtilities.isTabToGtsAnimationEnabled(); long duration = showZoomingAnimation ? TopToolbarCoordinator.TAB_SWITCHER_MODE_GTS_ANIMATION_DURATION_MS : TopToolbarCoordinator.TAB_SWITCHER_MODE_NORMAL_ANIMATION_DURATION_MS;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java index 5ae5b28..839d28ed 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -406,7 +406,8 @@ toolbarContainer, mActivity.getCompositorViewHolder().getInvalidator(), urlFocusChangedCallback, mTabThemeColorProvider, mTabObscuringHandler, mShareDelegateSupplier, bottomToolbarVisibilitySupplier, - mIdentityDiscController, mButtonDataProviders, mActivityTabProvider); + mIdentityDiscController, mButtonDataProviders, mActivityTabProvider, + mScrimCoordinator); if (!mActivity.supportsAppMenu()) { mToolbarManager.getToolbar().disableMenuButton(); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java index fa3fcdc..0951e26 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoHistoryLeakageTest.java
@@ -23,6 +23,7 @@ import org.chromium.base.test.params.ParameterSet; import org.chromium.base.test.params.ParameterizedRunner; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -157,6 +158,7 @@ @Test @LargeTest @UseMethodParameter(AllTypesToAllTypes.class) + @DisabledTest(message = "Flaky crbug.com/1064273") public void testTabNavigationHistoryDoNotLeakBetweenActivities( String activityType1, String activityType2) throws TimeoutException { ActivityType activity1 = ActivityType.valueOf(activityType1);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java new file mode 100644 index 0000000..5b8cde8 --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoPermissionLeakageTest.java
@@ -0,0 +1,262 @@ +// Copyright 2020 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.chrome.browser.incognito; + +import static android.support.test.espresso.action.ViewActions.click; +import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist; +import static android.support.test.espresso.assertion.ViewAssertions.matches; +import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static android.support.test.espresso.matcher.ViewMatchers.withText; + +import static org.hamcrest.core.StringContains.containsString; + +import android.support.test.InstrumentationRegistry; +import android.support.test.espresso.Espresso; +import android.support.test.espresso.NoMatchingViewException; +import android.support.test.filters.LargeTest; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.RunWith; + +import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameter; +import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate; +import org.chromium.base.test.params.ParameterProvider; +import org.chromium.base.test.params.ParameterSet; +import org.chromium.base.test.params.ParameterizedRunner; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; +import org.chromium.chrome.browser.customtabs.CustomTabIncognitoManager; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.ActivityType; +import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils.TestParams; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.test.ChromeActivityTestRule; +import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; +import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; +import org.chromium.content_public.browser.test.util.JavaScriptUtils; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.device.geolocation.LocationProviderOverrider; +import org.chromium.device.geolocation.MockLocationProvider; +import org.chromium.net.test.EmbeddedTestServer; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeoutException; + +/** + * This test class checks permission leakage between all different + * pairs of Activity types with a constraint that one of the + * interacting activity must be either Incognito Tab or Incognito CCT. + */ +@RunWith(ParameterizedRunner.class) +@UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) +@EnableFeatures({ChromeFeatureList.CCT_INCOGNITO}) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +public class IncognitoPermissionLeakageTest { + private String mPermissionTestPage; + private EmbeddedTestServer mTestServer; + + private static final String PERMISSION_HTML_PATH = + "/content/test/data/android/geolocation.html"; + + @Rule + public ChromeActivityTestRule<ChromeTabbedActivity> mChromeActivityTestRule = + new ChromeActivityTestRule<>(ChromeTabbedActivity.class); + + @Rule + public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule(); + + @Rule + public TestRule mProcessor = new Features.InstrumentationProcessor(); + + @Before + public void setUp() { + mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); + mPermissionTestPage = mTestServer.getURL(PERMISSION_HTML_PATH); + mChromeActivityTestRule.startMainActivityOnBlankPage(); + + // Permission related settings. + LocationSettingsTestUtil.setSystemLocationSettingEnabled(true); + LocationProviderOverrider.setLocationProviderImpl(new MockLocationProvider()); + } + + @After + public void tearDown() { + TestThreadUtils.runOnUiThreadBlocking( + () -> IncognitoDataTestUtils.closeTabs(mChromeActivityTestRule)); + IncognitoDataTestUtils.finishActivities(); + mTestServer.stopAndDestroyServer(); + } + + private void requestLocationPermission(Tab tab) throws TimeoutException { + JavaScriptUtils.executeJavaScriptAndWaitForResult( + tab.getWebContents(), "initiate_getCurrentPosition()"); + } + + private void assertDialogIsShown() throws NoMatchingViewException { + Espresso.onView(withId(R.id.text)).check(matches(withText(containsString("location")))); + } + + private void assertDialogIsNotShown() throws NoMatchingViewException { + Espresso.onView(withId(R.id.text)).check(doesNotExist()); + } + + private void grantPermission() { + Espresso.onView(withText(containsString("Allow"))).perform(click()); + } + + private void blockPermission() { + Espresso.onView(withText(containsString("Block"))).perform(click()); + } + + public static class RegularAndIncognito implements ParameterProvider { + @Override + public List<ParameterSet> getParameters() { + List<ParameterSet> result = new ArrayList<>(); + result.addAll(new TestParams.IncognitoToRegular().getParameters()); + result.addAll(new TestParams.RegularToIncognito().getParameters()); + return result; + } + } + + @Test + @LargeTest + @UseMethodParameter(RegularAndIncognito.class) + public void testAllowPermissionDoNotLeakBetweenRegularAndIncognito( + String activityType1, String activityType2) throws Exception { + ActivityType activity1 = ActivityType.valueOf(activityType1); + ActivityType activity2 = ActivityType.valueOf(activityType2); + + // Request permission here and accept it. + Tab tab1 = activity1.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + requestLocationPermission(tab1); + assertDialogIsShown(); + grantPermission(); + + // Get permission here from second activity. + Tab tab2 = activity2.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + + requestLocationPermission(tab2); + // Permission is asked again. + assertDialogIsShown(); + } + + @Test + @LargeTest + @UseMethodParameter(TestParams.IncognitoToIncognito.class) + public void testAllowPermissionDoNotLeakFromIncognitoToIncognito( + String incognitoActivityType1, String incognitoActivityType2) throws Exception { + ActivityType incognitoActivity1 = ActivityType.valueOf(incognitoActivityType1); + ActivityType incognitoActivity2 = ActivityType.valueOf(incognitoActivityType2); + + // Request permission here and accept it. + Tab tab1 = incognitoActivity1.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + requestLocationPermission(tab1); + assertDialogIsShown(); + grantPermission(); + + // Get permission here from second activity. + Tab tab2 = incognitoActivity2.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + + requestLocationPermission(tab2); + // Incognito CCTs with isolated profiles should not inherit permissions from other sessions. + if (CustomTabIncognitoManager.hasIsolatedProfile()) { + // Permission is asked again, therefore the previous permission wasn't inherited. + assertDialogIsShown(); + } else { + assertDialogIsNotShown(); + } + } + + @Test + @LargeTest + @UseMethodParameter(TestParams.IncognitoToIncognito.class) + public void testBlockPermissionDoNotLeakFromIncognitoToIncognito( + String incognitoActivityType1, String incognitoActivityType2) throws Exception { + ActivityType incognitoActivity1 = ActivityType.valueOf(incognitoActivityType1); + ActivityType incognitoActivity2 = ActivityType.valueOf(incognitoActivityType2); + + // Request permission here and accept it. + Tab tab1 = incognitoActivity1.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + requestLocationPermission(tab1); + assertDialogIsShown(); + blockPermission(); + + // Get permission here from second activity. + Tab tab2 = incognitoActivity2.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + + // Incognito CCTs with isolated profiles should not inherit permissions from other sessions. + if (CustomTabIncognitoManager.hasIsolatedProfile()) { + // Permission is asked again, therefore the previous permission wasn't inherited. + assertDialogIsShown(); + } else { + assertDialogIsNotShown(); + } + } + + @Test + @LargeTest + @UseMethodParameter(TestParams.RegularToIncognito.class) + public void testBlockPermissionLeakFromRegularToIncognito( + String regularActivityType, String incognitoActivityType) throws Exception { + ActivityType regularActivity = ActivityType.valueOf(regularActivityType); + ActivityType incognitoActivity = ActivityType.valueOf(incognitoActivityType); + + // Request permission here and accept it. + Tab tab1 = regularActivity.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + requestLocationPermission(tab1); + assertDialogIsShown(); + blockPermission(); + + // Get permission here from second activity. + Tab tab2 = incognitoActivity.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + + // Dialog is not shown again to the new tab as the permission was blocked for this site in + // regular. + requestLocationPermission(tab2); + assertDialogIsNotShown(); + } + + @Test + @LargeTest + @UseMethodParameter(TestParams.IncognitoToRegular.class) + public void testBlockPermissionDoNotLeakFromIncognitoToRegular( + String incognitoActivityType, String regularActivityType) throws Exception { + ActivityType incognitoActivity = ActivityType.valueOf(incognitoActivityType); + ActivityType regularActivity = ActivityType.valueOf(regularActivityType); + + // Request permission here and accept it. + Tab tab1 = incognitoActivity.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + requestLocationPermission(tab1); + assertDialogIsShown(); + blockPermission(); + + // Get permission here from second activity. + Tab tab2 = regularActivity.launchUrl( + mChromeActivityTestRule, mCustomTabActivityTestRule, mPermissionTestPage); + + // Dialog is shown again to the new tab and the permission is therefore not leaked. + requestLocationPermission(tab2); + assertDialogIsShown(); + } +} \ No newline at end of file
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java index 5d5633b..aec2fabf 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java
@@ -66,7 +66,6 @@ import org.chromium.chrome.browser.suggestions.SiteSuggestion; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.chrome.browser.widget.ScrimView; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.util.ChromeRenderTestRule; @@ -77,6 +76,7 @@ import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; import org.chromium.chrome.test.util.browser.suggestions.mostvisited.FakeMostVisitedSites; +import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.test.util.Criteria; @@ -216,12 +216,14 @@ @Feature({"NewTabPage", "FeedNewTabPage", "RenderTest"}) @ParameterAnnotations.UseMethodParameter(InterestFeedParams.class) public void testRender_FocusFakeBox(boolean interestFeedEnabled) throws Exception { - ScrimView scrimView = mActivityTestRule.getActivity().getScrim(); - scrimView.disableAnimationForTesting(true); + ScrimCoordinator scrimCoordinator = mActivityTestRule.getActivity() + .getRootUiCoordinatorForTesting() + .getScrimCoordinatorForTesting(); + scrimCoordinator.disableAnimationForTesting(true); onView(withId(R.id.search_box)).perform(click()); ChromeRenderTestRule.sanitize(mNtp.getView().getRootView()); mRenderTestRule.render(mNtp.getView().getRootView(), "focus_fake_box"); - scrimView.disableAnimationForTesting(false); + scrimCoordinator.disableAnimationForTesting(false); } @DisabledTest(message = "https://crbug.com/898165")
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java index 1ff8912..9fde69c2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestJourneyLoggerTest.java
@@ -1107,7 +1107,8 @@ "https://android.com/pay", AppPresence.NO_APPS, FactorySpeed.SLOW_FACTORY); mPaymentRequestTestRule.openPageAndClickNodeAndWait( "androidPayBuy", mPaymentRequestTestRule.getShowFailed()); - mPaymentRequestTestRule.expectResultContains(new String[] {"Payment method not supported"}); + mPaymentRequestTestRule.expectResultContains( + new String[] {"The payment method", "not supported"}); // Make sure that no journey metrics were logged. Assert.assertEquals(0,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java index cd4bf2ed..a747865 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestMetricsTest.java
@@ -329,7 +329,8 @@ "https://android.com/pay", AppPresence.NO_APPS, FactorySpeed.SLOW_FACTORY); mPaymentRequestTestRule.openPageAndClickNodeAndWait( "androidPayBuy", mPaymentRequestTestRule.getShowFailed()); - mPaymentRequestTestRule.expectResultContains(new String[] {"Payment method not supported"}); + mPaymentRequestTestRule.expectResultContains( + new String[] {"The payment method", "not supported"}); // Make sure that it is not logged as an abort. mPaymentRequestTestRule.assertOnlySpecificAbortMetricLogged(-1 /* none */); @@ -369,7 +370,8 @@ public void testMetrics_NoSupportedPaymentMethod() throws TimeoutException { mPaymentRequestTestRule.openPageAndClickNodeAndWait( "noSupported", mPaymentRequestTestRule.getShowFailed()); - mPaymentRequestTestRule.expectResultContains(new String[] {"Payment method not supported"}); + mPaymentRequestTestRule.expectResultContains( + new String[] {"The payment method", "not supported"}); // Make sure that it is not logged as an abort. mPaymentRequestTestRule.assertOnlySpecificAbortMetricLogged(-1 /* none */);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestModifierTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestModifierTest.java index 18680da0..6aeb908d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestModifierTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestModifierTest.java
@@ -36,6 +36,6 @@ public void testNoCrash() throws TimeoutException { mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"Payment method not supported"}); + new String[] {"The payment method", "not supported"}); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestPaymentAppTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestPaymentAppTest.java index 336b61d..5f3ec0c3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestPaymentAppTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestPaymentAppTest.java
@@ -46,7 +46,7 @@ public void testNoSupportedPaymentMethods() throws TimeoutException { mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"show() rejected", "Payment method not supported"}); + new String[] {"show() rejected", "The payment method", "not supported"}); } /** @@ -61,7 +61,7 @@ AppPresence.NO_APPS, FactorySpeed.FAST_FACTORY); mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"show() rejected", "Payment method not supported"}); + new String[] {"show() rejected", "The payment method", "not supported"}); } /** @@ -76,7 +76,7 @@ AppPresence.NO_APPS, FactorySpeed.SLOW_FACTORY); mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"show() rejected", "Payment method not supported"}); + new String[] {"show() rejected", "The payment method", "not supported"}); } /** If the factory creates more payment apps after the UI has been dismissed, don't crash. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerExpandablePaymentHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerExpandablePaymentHandlerTest.java index 70b4b43..6af783e3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerExpandablePaymentHandlerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerExpandablePaymentHandlerTest.java
@@ -146,7 +146,7 @@ public void testNoSupportedPaymentMethods() throws TimeoutException { mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"show() rejected", "Payment method not supported"}); + new String[] {"show() rejected", "The payment method", "not supported"}); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerPaymentAppTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerPaymentAppTest.java index 2e38b9c..ddfd9c1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerPaymentAppTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestServiceWorkerPaymentAppTest.java
@@ -146,7 +146,7 @@ public void testNoSupportedPaymentMethods() throws TimeoutException { mPaymentRequestTestRule.openPageAndClickBuyAndWait(mPaymentRequestTestRule.getShowFailed()); mPaymentRequestTestRule.expectResultContains( - new String[] {"show() rejected", "Payment method not supported"}); + new String[] {"show() rejected", "The payment method", "not supported"}); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowPromiseUnsupportedTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowPromiseUnsupportedTest.java index d28f8519..ded44c6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowPromiseUnsupportedTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestShowPromiseUnsupportedTest.java
@@ -43,6 +43,6 @@ public void testReject() throws TimeoutException { mRule.openPageAndClickNodeAndWait("buy", mRule.getShowFailed()); mRule.expectResultContains( - new String[] {"NotSupportedError: Payment method not supported"}); + new String[] {"NotSupportedError: The payment method", "not supported"}); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/IdentityDiscControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/IdentityDiscControllerTest.java index 24af97f..56dd7ad 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/IdentityDiscControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/IdentityDiscControllerTest.java
@@ -15,6 +15,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -46,6 +47,7 @@ @Test @MediumTest + @DisabledTest(message = "Flaky crbug.com/1064269") public void testIdentityDiscWithNavigation() { // User is signed in. SigninTestUtil.addAndSignInTestAccount();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java index df4931c0..65daa83 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java
@@ -4,6 +4,11 @@ package org.chromium.chrome.browser.toolbar; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; @@ -13,6 +18,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Restriction; @@ -26,6 +32,7 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.OmniboxTestUtils; +import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; @@ -81,6 +88,32 @@ @Test @MediumTest + public void testOmniboxScrim() { + ChromeActivity activity = mActivityTestRule.getActivity(); + ToolbarManager toolbarManager = activity.getToolbarManager(); + ScrimCoordinator scrimCoordinator = + activity.getRootUiCoordinatorForTesting().getScrimCoordinatorForTesting(); + scrimCoordinator.disableAnimationForTesting(true); + + assertNull("The scrim should be null.", scrimCoordinator.getViewForTesting()); + assertFalse("All tabs should not currently be obscured.", + activity.getTabObscuringHandler().areAllTabsObscured()); + + ThreadUtils.runOnUiThreadBlocking(() -> toolbarManager.setUrlBarFocus(true, 0)); + + assertNotNull("The scrim should not be null.", scrimCoordinator.getViewForTesting()); + assertTrue("All tabs should currently be obscured.", + activity.getTabObscuringHandler().areAllTabsObscured()); + + ThreadUtils.runOnUiThreadBlocking(() -> toolbarManager.setUrlBarFocus(false, 0)); + + assertNull("The scrim should be null.", scrimCoordinator.getViewForTesting()); + assertFalse("All tabs should not currently be obscured.", + activity.getTabObscuringHandler().areAllTabsObscured()); + } + + @Test + @MediumTest public void testNTPNavigatesToErrorPageOnDisconnectedNetwork() { EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); @@ -91,7 +124,7 @@ // Load new tab page. mActivityTestRule.loadUrl(UrlConstants.NTP_URL); Assert.assertEquals(UrlConstants.NTP_URL, tab.getUrlString()); - Assert.assertFalse(isErrorPage(tab)); + assertFalse(isErrorPage(tab)); // Stop the server and also disconnect the network. testServer.stopAndDestroyServer(); @@ -100,7 +133,7 @@ mActivityTestRule.loadUrl(testUrl); Assert.assertEquals(testUrl, tab.getUrlString()); - Assert.assertTrue(isErrorPage(tab)); + assertTrue(isErrorPage(tab)); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java index 89d6f7a..5a442ee4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java
@@ -67,6 +67,13 @@ options.setSourceLanguage("en"); options.setTargetLanguage("es"); Assert.assertFalse(options.optionsChanged()); + + // Same target language as source + Assert.assertTrue(options.setTargetLanguage("en")); + + // Same source and target + Assert.assertTrue(options.setTargetLanguage("es")); + Assert.assertTrue(options.setSourceLanguage("es")); } @Test @@ -76,18 +83,10 @@ TranslateOptions options = TranslateOptions.create( "en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false, null); - // Same target language as source - Assert.assertFalse(options.setTargetLanguage("en")); - Assert.assertFalse(options.optionsChanged()); - // Target language does not exist Assert.assertFalse(options.setTargetLanguage("aaa")); Assert.assertFalse(options.optionsChanged()); - // Same source and target - Assert.assertFalse(options.setSourceLanguage("es")); - Assert.assertFalse(options.optionsChanged()); - // Source language does not exist Assert.assertFalse(options.setSourceLanguage("bbb")); Assert.assertFalse(options.optionsChanged());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java index 8a82f1e..80b3ab5 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java
@@ -7,6 +7,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; +import static org.chromium.chrome.browser.vr.XrTestFramework.VR_SKIA_GOLD_CORPUS; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; @@ -54,7 +55,7 @@ @Rule public RenderTestRule mRenderTestRule = - new RenderTestRule("components/test/data/permission_dialogs/render_tests"); + new RenderTestRule.SkiaGoldBuilder().setCorpus(VR_SKIA_GOLD_CORPUS).build(); private VrBrowserTestFramework mVrBrowserTestFramework;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNativeUiTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNativeUiTest.java index 51df427..8fffa668 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNativeUiTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNativeUiTest.java
@@ -7,6 +7,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.NATIVE_URLS_OF_INTEREST; import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; +import static org.chromium.chrome.browser.vr.XrTestFramework.VR_SKIA_GOLD_CORPUS; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; import android.graphics.PointF; @@ -57,7 +58,7 @@ @Rule public RenderTestRule mRenderTestRule = - new RenderTestRule("components/test/data/vr_browser_ui/render_tests"); + new RenderTestRule.SkiaGoldBuilder().setCorpus(VR_SKIA_GOLD_CORPUS).build(); private VrBrowserTestFramework mVrBrowserTestFramework;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNavigationTest.java index 4e59384..c39f497a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNavigationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserNavigationTest.java
@@ -8,6 +8,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; +import static org.chromium.chrome.browser.vr.XrTestFramework.VR_SKIA_GOLD_CORPUS; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; @@ -77,7 +78,7 @@ @Rule public RenderTestRule mRenderTestRule = - new RenderTestRule("components/test/data/vr_browser_ui/render_tests"); + new RenderTestRule.SkiaGoldBuilder().setCorpus(VR_SKIA_GOLD_CORPUS).build(); private WebXrVrTestFramework mWebXrVrTestFramework; private VrBrowserTestFramework mVrBrowserTestFramework;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserWebInputEditingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserWebInputEditingTest.java index 5bf71e57..4d3de53 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserWebInputEditingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserWebInputEditingTest.java
@@ -9,6 +9,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_CHECK_INTERVAL_SHORT_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; +import static org.chromium.chrome.browser.vr.XrTestFramework.VR_SKIA_GOLD_CORPUS; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM_OR_STANDALONE; import android.graphics.PointF; @@ -60,7 +61,7 @@ @Rule public RenderTestRule mRenderTestRule = - new RenderTestRule("components/test/data/vr_browser_video/render_tests"); + new RenderTestRule.SkiaGoldBuilder().setCorpus(VR_SKIA_GOLD_CORPUS).build(); private VrBrowserTestFramework mVrBrowserTestFramework;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/XrTestFramework.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/XrTestFramework.java index 3c330e1..d9d46f9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/XrTestFramework.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/XrTestFramework.java
@@ -62,6 +62,8 @@ public static final int POLL_TIMEOUT_LONG_MS = 10000; public static final boolean DEBUG_LOGS = false; + public static final String VR_SKIA_GOLD_CORPUS = "android-vr-render-tests"; + // We need to make sure the port is constant, otherwise the URL changes between test runs, which // is really bad for image diff tests. There's nothing special about this port other than that // it shouldn't be in use by anything.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/jsdialog/VrBrowserJavaScriptModalDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/jsdialog/VrBrowserJavaScriptModalDialogTest.java index 6b5afcc..fc0bea0c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/jsdialog/VrBrowserJavaScriptModalDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/jsdialog/VrBrowserJavaScriptModalDialogTest.java
@@ -7,6 +7,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.PAGE_LOAD_TIMEOUT_S; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; +import static org.chromium.chrome.browser.vr.XrTestFramework.VR_SKIA_GOLD_CORPUS; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import android.support.test.filters.MediumTest; @@ -46,7 +47,7 @@ @Rule public RenderTestRule mRenderTestRule = - new RenderTestRule("components/test/data/js_dialogs/render_tests"); + new RenderTestRule.SkiaGoldBuilder().setCorpus(VR_SKIA_GOLD_CORPUS).build(); private ChromeTabbedActivity mActivity; private VrBrowserTestFramework mVrBrowserTestFramework;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java index 3095544..978a3ba 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ScrimTest.java
@@ -4,11 +4,7 @@ package org.chromium.chrome.browser.widget; -import static org.hamcrest.Matchers.lessThan; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; import android.support.test.filters.SmallTest; import android.view.View; @@ -18,22 +14,17 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.chromium.base.MathUtils; import org.chromium.base.ThreadUtils; 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.chrome.R; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; -import org.chromium.chrome.browser.omnibox.UrlBar; import org.chromium.chrome.browser.widget.ScrimView.ScrimObserver; import org.chromium.chrome.browser.widget.ScrimView.ScrimParams; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.OmniboxTestUtils; import org.chromium.content_public.browser.test.util.CriteriaHelper; import java.util.concurrent.TimeoutException; @@ -97,35 +88,6 @@ assertScrimVisibility(false); } - @Test - @SmallTest - @Feature({"Scrim"}) - @DisabledTest(message = "crbug.com/877774") - public void testOmniboxScrim() { - assertScrimVisibility(false); - assertFalse("Nothing should be obscuring the tab.", isViewObscuringAllTabs()); - assertEquals("The scrim alpha should be 0.", 0f, mScrim.getAlpha(), MathUtils.EPSILON); - - final UrlBar urlBar = (UrlBar) mActivityTestRule.getActivity().findViewById(R.id.url_bar); - ThreadUtils.runOnUiThreadBlocking(() -> OmniboxTestUtils.toggleUrlBarFocus(urlBar, true)); - waitForScrimVisibilityChange(true); - - assertScrimVisibility(true); - assertTrue("A view should be obscuring the tab.", isViewObscuringAllTabs()); - assertThat("The scrim alpha should not be 0.", 0f, lessThan(mScrim.getAlpha())); - - ThreadUtils.runOnUiThreadBlocking(() -> OmniboxTestUtils.toggleUrlBarFocus(urlBar, false)); - waitForScrimVisibilityChange(false); - - assertScrimVisibility(false); - assertFalse("Nothing should be obscuring the tab.", isViewObscuringAllTabs()); - assertEquals("The scrim alpha should be 0.", 0f, mScrim.getAlpha(), MathUtils.EPSILON); - } - - private boolean isViewObscuringAllTabs() { - return mActivityTestRule.getActivity().getTabObscuringHandler().areAllTabsObscured(); - } - /** * Assert that the scrim is the desired visibility. * @param visible Whether the scrim should be visible.
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/OWNERS b/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/OWNERS new file mode 100644 index 0000000..1393b4b --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/OWNERS
@@ -0,0 +1 @@ +file://chrome/android/java/src/org/chromium/chrome/browser/cryptids/OWNERS \ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRendererUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRendererUnitTest.java new file mode 100644 index 0000000..9ca637fc --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/cryptids/ProbabilisticCryptidRendererUnitTest.java
@@ -0,0 +1,176 @@ +// Copyright 2020 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.chrome.browser.cryptids; + +import android.support.test.filters.MediumTest; +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.base.test.BaseRobolectricTestRunner; + +import java.util.Random; + +/** + * Unit tests for ProbabilisticCryptidRenderer. + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class ProbabilisticCryptidRendererUnitTest { + private static final long PERIOD_LENGTH = 60 * 60 * 24 * 1000; // Arbitrary value of 1 day + private static final int MAX_PROBABILITY = 200000; // Arbitrary value of 20% + private static final int NUM_RUNS = 10000; // How many runs to use for aggregator tests. + private static final int TOLERANCE = + (int) Math.round(.01 * NUM_RUNS); // 1% TOLERANCE for aggregator tests. + + // Simple method-level unit tests + + @Test + @SmallTest + public void testCalculateProbability() { + int probDuringMoratorium = ProbabilisticCryptidRenderer.calculateProbability( + /* lastRenderTimestamp = */ 0, + /* currentTimestamp = */ 1, + /* renderingMoratoriumLength = */ 100, + /* rampUpLength = */ 100, + /* maxProbability = */ MAX_PROBABILITY); + Assert.assertEquals(0, probDuringMoratorium); + + int probEarlyRampup = ProbabilisticCryptidRenderer.calculateProbability( + /* lastRenderTimestamp = */ 0, + /* currentTimestamp = */ 125, + /* renderingMoratoriumLength = */ 100, + /* rampUpLength = */ 100, + /* maxProbability = */ MAX_PROBABILITY); + // 125 is 25% between 100 and 200 + Assert.assertEquals((int) Math.round(MAX_PROBABILITY * .25), probEarlyRampup); + + int probLateRampup = ProbabilisticCryptidRenderer.calculateProbability( + /* lastRenderTimestamp = */ 0, + /* currentTimestamp = */ 180, + /* renderingMoratoriumLength = */ 100, + /* rampUpLength = */ 100, + /* maxProbability = */ MAX_PROBABILITY); + // 180 is 80% between 100 and 200 + Assert.assertEquals((int) Math.round(MAX_PROBABILITY * .8), probLateRampup); + + int probPostRampup = ProbabilisticCryptidRenderer.calculateProbability( + /* lastRenderTimestamp = */ 0, + /* currentTimestamp = */ 300, + /* renderingMoratoriumLength = */ 100, + /* rampUpLength = */ 100, + /* maxProbability = */ MAX_PROBABILITY); + Assert.assertEquals(MAX_PROBABILITY, probPostRampup); + } + + // Aggregator tests: these tests run |NUM_RUNS| invocations of shouldUseCryptidRendering to + // verify that the number of trues returned is consistent with our assumptions about how often + // this should happen, within |TOLERANCE|. + + private static class FakeProbabilisticCrpytidRenderer extends ProbabilisticCryptidRenderer { + public FakeProbabilisticCrpytidRenderer(long lastRenderDeltaFromNow) { + mLastRenderTimestamp = System.currentTimeMillis() + lastRenderDeltaFromNow; + } + + @Override + protected long getLastRenderTimestampMillis() { + return mLastRenderTimestamp; + } + + @Override + protected long getRenderingMoratoriumLengthMillis() { + return PERIOD_LENGTH; + } + + @Override + protected long getRampUpLengthMillis() { + return PERIOD_LENGTH; + } + + @Override + protected int getMaxProbability() { + return MAX_PROBABILITY; + } + + @Override + protected int getRandom() { + return mRandom.nextInt(ProbabilisticCryptidRenderer.DENOMINATOR); + } + + private long mLastRenderTimestamp; + private Random mRandom = new Random(7); // Seeded random to reduce test flakiness. + } + + /* + * Runs NUM_RUNS instances of this method and returns the number of true returns. + */ + private int shouldUseCryptidRenderingTestHelper(long lastRenderDeltaFromNow) { + ProbabilisticCryptidRenderer render = + new FakeProbabilisticCrpytidRenderer(lastRenderDeltaFromNow); + int numTrueRuns = 0; + for (int i = 0; i < NUM_RUNS; i++) { + numTrueRuns += render.shouldUseCryptidRendering() ? 1 : 0; + } + return numTrueRuns; + } + + @Test + @MediumTest + public void testShouldUseCryptidRenderingInMoratorium() { + // Last render was 0 millis ago, so expect exactly 0 true values. + int result = shouldUseCryptidRenderingTestHelper(0); + Assert.assertEquals(0, result); + } + + @Test + @MediumTest + public void testShouldUseCryptidRenderingEarlyRampUp() { + // Last render was moratiorium length + 25% of ramp-up length, or 1.25 PERIOD_LENGTHs, ago. + long delta = Math.round(-1 * 1.25 * PERIOD_LENGTH); + int expectedHits = (int) Math.round( + .25 * MAX_PROBABILITY * NUM_RUNS / ProbabilisticCryptidRenderer.DENOMINATOR); + int result = shouldUseCryptidRenderingTestHelper(delta); + int error = Math.abs(expectedHits - result); + Assert.assertTrue( + String.format( + "Number of hits %d was outside acceptable range %d - %d (target was %d)", + result, expectedHits - TOLERANCE, expectedHits + TOLERANCE, expectedHits), + error < TOLERANCE); + } + + @Test + @MediumTest + public void testShouldUseCryptidRenderingLateRampUp() { + // Last render was moratiorium length + 80% of ramp-up length, or 1.8 PERIOD_LENGTHs, ago. + long delta = Math.round(-1 * 1.8 * PERIOD_LENGTH); + int expectedHits = (int) Math.round( + .8 * MAX_PROBABILITY * NUM_RUNS / ProbabilisticCryptidRenderer.DENOMINATOR); + int result = shouldUseCryptidRenderingTestHelper(delta); + int error = Math.abs(expectedHits - result); + Assert.assertTrue( + String.format( + "Number of hits %d was outside acceptable range %d - %d (target was %d)", + result, expectedHits - TOLERANCE, expectedHits + TOLERANCE, expectedHits), + error < TOLERANCE); + } + + @Test + @MediumTest + public void testShouldUseCryptidRenderingPostRampUp() { + // Last render was moratiorium length + 120% of ramp-up length, or 2.2 PERIOD_LENGTHs, ago. + long delta = Math.round(-1 * 2.2 * PERIOD_LENGTH); + int expectedHits = MAX_PROBABILITY * NUM_RUNS / ProbabilisticCryptidRenderer.DENOMINATOR; + int result = shouldUseCryptidRenderingTestHelper(delta); + int error = Math.abs(expectedHits - result); + Assert.assertTrue( + String.format( + "Number of hits %d was outside acceptable range %d - %d (target was %d)", + result, expectedHits - TOLERANCE, expectedHits + TOLERANCE, expectedHits), + error < TOLERANCE); + } +}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java index d73204a..7305372 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java
@@ -129,6 +129,26 @@ @Test @SmallTest + public void handleSearchEngineChoice_ignoredWhenDefaultSearchManaged() { + doReturn(true).when(mTemplateUrlService).isDefaultSearchManaged(); + SearchEngineChoiceNotification.receiveSearchEngineChoiceRequest(); + SharedPreferencesManager prefs = SharedPreferencesManager.getInstance(); + assertFalse(prefs.contains(ChromePreferenceKeys.SEARCH_ENGINE_CHOICE_PRESENTED_VERSION)); + + SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, null); + + assertFalse( + "When search engine settings are controlled by policy, the call should be ignored.", + prefs.contains(ChromePreferenceKeys.SEARCH_ENGINE_CHOICE_PRESENTED_VERSION)); + + assertEquals(0, + ShadowRecordHistogram.getHistogramValueCountForTesting( + "Android.SearchEngineChoice.Events", + SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN)); + } + + @Test + @SmallTest public void handleSearchEngineChoice_performedFirstTime() { SearchEngineChoiceNotification.receiveSearchEngineChoiceRequest(); SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/DEPS b/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/DEPS new file mode 100644 index 0000000..31186c4 --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ +"+chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/Profile.java", +] \ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplierTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplierTest.java new file mode 100644 index 0000000..7ee09a1b --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorProfileSupplierTest.java
@@ -0,0 +1,111 @@ +// Copyright 2020 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.chrome.browser.tabmodel; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import org.chromium.base.Callback; +import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.chrome.browser.profiles.Profile; + +/** + * Unit tests for {@link TabModelSelectorProfileSupplierTest}. + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class TabModelSelectorProfileSupplierTest { + @Mock + TabModelSelector mTabModelSelector; + @Mock + TabModel mTabModel; + @Mock + TabModel mIncognitoTabModel; + @Mock + Profile mProfile; + @Mock + Profile mIncognitoProfile; + @Mock + Callback<Profile> mProfileCallback1; + @Mock + Callback<Profile> mProfileCallback2; + + ObservableSupplierImpl<TabModelSelector> mTabModelSelectorSupplier = + new ObservableSupplierImpl<>(); + + TabModelSelectorProfileSupplier mSupplier; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mSupplier = new TabModelSelectorProfileSupplier(mTabModelSelectorSupplier); + doReturn(true).when(mIncognitoTabModel).isIncognito(); + doReturn(true).when(mIncognitoProfile).isOffTheRecord(); + doReturn(mTabModel).when(mTabModelSelector).getCurrentModel(); + } + + @Test + public void testInitialTabModelHasNoProfile_initializedLater() { + mTabModelSelectorSupplier.set(mTabModelSelector); + mSupplier.onTabModelSelected(mTabModel, null); + Assert.assertNull(mSupplier.get()); + + doReturn(mProfile).when(mTabModel).getProfile(); + mSupplier.onTabStateInitialized(); + Assert.assertEquals(mProfile, mSupplier.get()); + } + + @Test + public void testObserversFired() { + mSupplier.addObserver(mProfileCallback1); + mSupplier.addObserver(mProfileCallback2); + + doReturn(mTabModel).when(mTabModelSelector).getCurrentModel(); + doReturn(mProfile).when(mTabModel).getProfile(); + mTabModelSelectorSupplier.set(mTabModelSelector); + mSupplier.onTabModelSelected(mTabModel, null); + + verify(mProfileCallback1, times(1)).onResult(mProfile); + verify(mProfileCallback2, times(1)).onResult(mProfile); + + doReturn(mIncognitoProfile).when(mTabModel).getProfile(); + mSupplier.onTabModelSelected(mTabModel, null); + + verify(mProfileCallback1, times(1)).onResult(mIncognitoProfile); + verify(mProfileCallback2, times(1)).onResult(mIncognitoProfile); + } + + @Test + public void tesIncognitoProfileForceCreated() { + doReturn(null).when(mIncognitoTabModel).getProfile(); + doReturn(mProfile).when(mTabModel).getProfile(); + doReturn(mIncognitoProfile).when(mProfile).getOffTheRecordProfile(); + mSupplier.onTabModelSelected(mIncognitoTabModel, mTabModel); + + Assert.assertEquals(mIncognitoProfile, mSupplier.get()); + } + + @Test + public void testDestroy() { + mSupplier.destroy(); + // There's nothing to tear down before the tab model selector is initialized. + verify(mTabModelSelector, never()).removeObserver(mSupplier); + + mTabModelSelectorSupplier.set(mTabModelSelector); + mSupplier.destroy(); + verify(mTabModelSelector).removeObserver(mSupplier); + } +} \ No newline at end of file
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index d19e7d0e..6a768d7 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-83.0.4091.0_rc-r1-merged.afdo.bz2 \ No newline at end of file +chromeos-chrome-amd64-83.0.4091.0_rc-r2-merged.afdo.bz2 \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_as.xtb b/chrome/app/resources/chromium_strings_as.xtb index cd67bbf..83f7af7 100644 --- a/chrome/app/resources/chromium_strings_as.xtb +++ b/chrome/app/resources/chromium_strings_as.xtb
@@ -45,6 +45,7 @@ <translation id="2886012850691518054">ঐচ্ছিক: স্বয়ংক্ৰিয়ভাৱে Googleলৈ ব্যৱহাৰৰ পৰিসংখ্যা আৰু ক্ৰেশ্ব ৰিপ'ৰ্ট পঠিয়াই Chromiumক উন্নত কৰাত সহায় কৰক।</translation> <translation id="2910007522516064972">&Chromiumৰ বিষয়ে</translation> <translation id="2977470724722393594">Chromium একেবাৰে শেহতীয়া অৱস্থাত আছে</translation> +<translation id="2983934633046890458">Chromiumএ পাছৱর্ডসমূহ সম্পাদনা কৰিবলৈ চেষ্টা কৰি আছে।</translation> <translation id="3032706164202344641">Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে। পাছত আকৌ চেষ্টা কৰক।</translation> <translation id="3032787606318309379">Chromiumত যোগ কৰি থকা হৈছে...</translation> <translation id="3068515742935458733">Googleলৈ ক্ৰেশ্ব ৰিপ‘ৰ্ট আৰু <ph name="UMA_LINK" /> পঠিয়াই Chromiumক উন্নত কৰাত সহায় কৰক</translation> @@ -112,6 +113,7 @@ <translation id="5479196819031988440">Chromium OSএ এই পৃষ্ঠাটো খুলিব নোৱাৰে।</translation> <translation id="5480860683791598150">আপোনাৰ অৱস্থান এই ছাইটটোৰ সৈতে শ্বেয়াৰ কৰিবলৈ Chromiumএ আপোনাৰ অৱস্থান এক্সেছ কৰাৰ আৱশ্যক</translation> <translation id="549669000822060376">Chromiumএ শেহতীয়া ছিষ্টেম আপডে’ট ইনষ্টল কৰালৈ কিছুসময় অপেক্ষা কৰক।</translation> +<translation id="5496810170689441661">Chromiumএ পাছৱর্ডসমূহ সম্পাদনা কৰিবলৈ চেষ্টা কৰি আছে। এই কার্যৰ বাবে অনুমতি দিবলৈ আপোনাৰ Windowsৰ পাছৱৰ্ডটো টাইপ কৰক।</translation> <translation id="5623402015214259806">{0,plural, =0{Chromiumৰ এটা আপডে'ট আছে}=1{Chromiumৰ এটা আপডে'ট আছে}one{Chromiumৰ এটা আপডে’ট # দিনৰ বাবে উপলব্ধ}other{Chromiumৰ এটা আপডে’ট # দিনৰ বাবে উপলব্ধ}}</translation> <translation id="5631814766731275228">Chromiumৰ নাম আৰু ছবি</translation> <translation id="5634636535844844681">Chromiumৰ বাবে Windows 7 বা তাতোকৈ উন্নত সংস্কৰণৰ আৱশ্যক।</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb index 688aaa0..74aea23 100644 --- a/chrome/app/resources/chromium_strings_bn.xtb +++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -43,7 +43,7 @@ <translation id="2886012850691518054">ঐচ্ছিক: অটোমেটিক Google-এ ব্যবহার পরিসংখ্যান এবং ক্র্যাশ রিপোর্ট পাঠিয়ে Chromium-কে আরও ভালো করতে সাহায্য করুন৷</translation> <translation id="2910007522516064972">&Chromium সম্পর্কে</translation> <translation id="2977470724722393594">Chromium আপ-টু-ডেট আছে</translation> -<translation id="2983934633046890458">Chromium পাসওয়ার্ড এডিট করার চেষ্টা করছে।</translation> +<translation id="2983934633046890458">Chromium আপনার পাসওয়ার্ড এডিট করার অনুমতি চাইছে।</translation> <translation id="3032706164202344641">Chromium আপনার পাসওয়ার্ড চেক করতে পারছে না। পরে আবার চেষ্টা করুন।</translation> <translation id="3032787606318309379">Chromium-এ জুড়ছে...</translation> <translation id="3068515742935458733">Google-এ <ph name="UMA_LINK" /> ও ক্র্যাশ রিপোর্ট পাঠিয়ে Chromium আরও ভালো করতে সাহায্য করুন</translation> @@ -111,7 +111,7 @@ <translation id="5479196819031988440">Chromium OS এই পৃষ্ঠাটি খুলতে পারবে না।</translation> <translation id="5480860683791598150">এই সাইটটির সাথে আপনার লোকেশন শেয়ার করার জন্য Chromium কে আপনার লোকেশনের তথ্যে অ্যাক্সেস দিতে হবে</translation> <translation id="549669000822060376">Chromium যখন সিস্টেম আপডেটগুলিকে ইনস্টল করে তখন দয়া করে অপেক্ষা করুন৷</translation> -<translation id="5496810170689441661">Chromium পাসওয়ার্ড এডিট করার চেষ্টা করছে। অনুমতি দিতে আপনার Windows পাসওয়ার্ড টাইপ করুন।</translation> +<translation id="5496810170689441661">Chromium আপনার পাসওয়ার্ড এডিট করার অনুমতি চাইছে। অনুমতি দিতে আপনার Windows পাসওয়ার্ড টাইপ করুন।</translation> <translation id="5623402015214259806">{0,plural, =0{Chromium-এর একটি আপডেট উপলভ্য আছে}=1{Chromium-এর একটি আপডেট উপলভ্য আছে}one{Chromium-এর একটি আপডেট # দিন ধরে উপলভ্য আছে}other{Chromium-এর একটি আপডেট # দিন ধরে উপলভ্য আছে}}</translation> <translation id="5631814766731275228">Chromium এর নাম এবং ছবি</translation> <translation id="5634636535844844681">Chromium এর জন্য Windows 7 বা উচ্চতর সংস্করণ প্রয়োজন।</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb index 0dc9eb2..909ce08 100644 --- a/chrome/app/resources/chromium_strings_eu.xtb +++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -17,7 +17,7 @@ <translation id="1774152462503052664">Onartu Chromium atzeko planoan abiaraztea</translation> <translation id="1779356040007214683">Chromium seguruagoa izan dadin, zuk jakin gabe gehitu izan dituzten eta <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dendan zerrendatu gabe dauden luzapen batzuk desgaitu ditugu.</translation> <translation id="1808667845054772817">Instalatu berriro Chromium</translation> -<translation id="1881322772814446296">Kontu kudeatu batekin hasten ari zara saioa eta kontuaren administratzaileari zure Chromium profila kontrolatzeko ahalmena ematera zoaz. Chromium aplikazioan dituzun datuak, esaterako, aplikazioak, laster-markak, historia, pasahitzak eta beste ezarpen batzuk behin betiko lotuko zaizkio <ph name="USER_NAME" /> erabiltzaileari. Google kontuetako Panelaren bidez ezabatu ahalko dituzu datu horiek, baina ezingo dituzu beste kontu batekin lotu. <ph name="LEARN_MORE" /></translation> +<translation id="1881322772814446296">Kontu kudeatu batekin hasten ari zara saioa eta kontuaren administratzaileari zure Chromium profila kontrolatzeko ahalmena ematera zoaz. Chromium aplikazioan dituzun datuak, esaterako, aplikazioak, laster-markak, historia, pasahitzak eta beste ezarpen batzuk betiko lotuko zaizkio <ph name="USER_NAME" /> erabiltzaileari. Google kontuetako Panelaren bidez ezabatu ahalko dituzu datu horiek, baina ezingo dituzu beste kontu batekin lotu. <ph name="LEARN_MORE" /></translation> <translation id="1911747963917069754">Chromium-ek ezin ditu egiaztatu pasahitz guztiak. Saiatu berriro 24 orduren buruan.</translation> <translation id="1911763535808217981">Aukera hau desaktibatzen baduzu, Google-ren webguneetan saioa hasi ahalko duzu (adibidez, Gmail-en) Chromium-en saioa hasi beharrik gabe</translation> <translation id="1929939181775079593">Chromium-ek ez du eranzuten. Berrabiarazi nahi duzu?</translation> @@ -103,7 +103,7 @@ <translation id="4994636714258228724">Gaitu zure burua Chromium-en</translation> <translation id="5277894862589591112">Aldaketak aplikatzeko, berrabiarazi Chromium</translation> <translation id="5310059007469274549">Chromium-ek ezin ditu egiaztatu pasahitzak, gehiegi baitaude</translation> -<translation id="5358375970380395591">Kontu kudeatu batekin hasten ari zara saioa eta kontuaren administratzaileari zure Chromium profila kontrolatzeko ahalmena ematera zoaz. Chromium aplikazioan dituzun datuak, esaterako, aplikazioak, laster-markak, historia, pasahitzak eta beste ezarpen batzuk behin betiko lotuko zaizkio <ph name="USER_NAME" /> erabiltzaileari. Google kontuetako Panelaren bidez ezabatu ahalko dituzu datu horiek, baina ezingo dituzu beste kontu batekin lotu. <ph name="LEARN_MORE" /></translation> +<translation id="5358375970380395591">Kontu kudeatu batekin hasten ari zara saioa eta kontuaren administratzaileari zure Chromium profila kontrolatzeko ahalmena ematera zoaz. Chromium aplikazioan dituzun datuak, esaterako, aplikazioak, laster-markak, historia, pasahitzak eta beste ezarpen batzuk betiko lotuko zaizkio <ph name="USER_NAME" /> erabiltzaileari. Google kontuetako Panelaren bidez ezabatu ahalko dituzu datu horiek, baina ezingo dituzu beste kontu batekin lotu. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Chromium eguneratzen (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="538767207339317086">Baimendu Chromium-en saioa hastea</translation> <translation id="5398878173008909840">Chromium arakatzailearen bertsio berria erabilgarri dago.</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index f90deac..0c678ad 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -109,7 +109,7 @@ <translation id="5479196819031988440">מערכת ההפעלה של Chromium אינה יכול לפתוח את הדף הזה.</translation> <translation id="5480860683791598150">Chromium זקוק לגישה למיקום שלך כדי לשתף אותו עם האתר הזה</translation> <translation id="549669000822060376">המתן בזמן ש-Chromium מתקין את עדכוני המערכת האחרונים.</translation> -<translation id="5496810170689441661">Chromium מנסה לערוך את הסיסמאות. כדי לאפשר למערכת לעשות זאת, יש להזין את הסיסמה שלך ל-Windows.</translation> +<translation id="5496810170689441661">Chromium מנסה לערוך את הסיסמאות. כדי לאפשר זאת, יש להזין את הסיסמה שלך ל-Windows.</translation> <translation id="5623402015214259806">{0,plural, =0{יש עדכון ל-Chromium}=1{יש עדכון ל-Chromium}two{עדכון של Chromium זמין כבר # ימים}many{עדכון של Chromium זמין כבר # ימים}other{עדכון של Chromium זמין כבר # ימים}}</translation> <translation id="5631814766731275228">שם ותמונה ב-Chromium</translation> <translation id="5634636535844844681">כדי להשתמש ב-Chromium יש צורך ב-Windows מגירסה 7 ואילך.</translation>
diff --git a/chrome/app/resources/chromium_strings_ne.xtb b/chrome/app/resources/chromium_strings_ne.xtb index 61bc6435..1bfaf89 100644 --- a/chrome/app/resources/chromium_strings_ne.xtb +++ b/chrome/app/resources/chromium_strings_ne.xtb
@@ -111,7 +111,7 @@ <translation id="5479196819031988440">Chromium OS ले यो पृष्ठ खोल्न सक्दैन</translation> <translation id="5480860683791598150">Chromium लाई यो साइटसँग तपाईंको स्थान आदान प्रदान गर्न तपाईंको स्थानमाथिको पहुँच आवश्यक पर्छ</translation> <translation id="549669000822060376">Chromium ले नवीनतम सिस्टम अपडेट स्थापित गर्दै गर्दा प्रतिक्षा गर्नुहोस्।</translation> -<translation id="5496810170689441661">Chromium ले पासवर्डहरू सम्पादन गर्ने प्रयास गरिरहेको छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्।</translation> +<translation id="5496810170689441661">Chromium ले पासवर्डहरू बदल्ने प्रयास गरिरहेको छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="5623402015214259806">{0,plural, =0{Chromium को अद्यावधिक उपलब्ध छ}=1{Chromium को अद्यावधिक उपलब्ध छ}other{Chromium को अद्यावधिक # दिनदेखि उपलब्ध भएको छ}}</translation> <translation id="5631814766731275228">Chromium प्रोफाइलको नाम र तस्बिर</translation> <translation id="5634636535844844681">Chromium लाई Windows 7 वा सो भन्दा पछाडिका संस्करणको आवश्यकता पर्छ।</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index d3627e2..b8e4f38 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Hierdie uitbreiding vereis geen spesiale toestemmings nie.</translation> <translation id="1616298854599875024">Kan nie uitbreiding "<ph name="IMPORT_NAME" />" invoer nie, want dit is nie 'n gedeelde module nie</translation> <translation id="1618268899808219593">Hulpsentrum</translation> +<translation id="1620307519959413822">Verkeerde wagwoord. Probeer weer of klik Het Wagwoord Vergeet om dit terug te stel.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Die prente is nie tans beskikbaar nie. Herkoppel asseblief aan die internet om die muurpapierversamelings te sien.</translation> <translation id="1627276047960621195">Lêerbeskrywers</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Hardewarehersiening</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Maak volskerm oop</translation> +<translation id="1892341345406963517">Hallo, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Ander tale</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> oor</translation> <translation id="1895658205118569222">Skakel af</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Wys instaanbedienerinstellings</translation> <translation id="5215502535566372932">Kies land</translation> <translation id="521582610500777512">Foto is weggegooi</translation> +<translation id="5222403284441421673">Onveilige aflaai geblokkeer</translation> <translation id="5222676887888702881">Meld af</translation> <translation id="52232769093306234">Kon nie pak nie.</translation> <translation id="5225324770654022472">Wys programkortpad</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">Kommunikasies</translation> <translation id="5734697361979786483">Voeg lêerdeling by</translation> <translation id="5736796278325406685">Voer asseblief 'n geldige gebruikernaam in</translation> +<translation id="5739017626473506901">Meld aan om <ph name="USER_NAME" /> te help om 'n skoolrekening by te voeg</translation> <translation id="5739235828260127894">Wag tans vir verifikasie. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Baie groot</translation> <translation id="574209121243317957">Toonhoogte</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-netwerk; koppel tans</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Vra eers (aanbeveel)</translation> +<translation id="8417548266957501132">Ouerwagwoord</translation> <translation id="8417573335434189196">Beskerm jou nie teen gevaarlike webwerwe, aflaaie en uitbreidings nie. Chrome beveel nie hierdie instelling aan nie.</translation> <translation id="8418445294933751433">Wys as oortjie</translation> <translation id="8419098111404128271">Soekresultate vir "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 09e6314..0d81362 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">ይህ ቅጥያ ምንም ልዩ ፈቃዶችን አይፈልግም።</translation> <translation id="1616298854599875024">የ«<ph name="IMPORT_NAME" />» ቅጥያ የተጋራ ሞዱል ስላልሆነ እሱን ማስመጣት አልተቻለም</translation> <translation id="1618268899808219593">የእገዛ ማዕከል</translation> +<translation id="1620307519959413822">የተሳሳተ ይለፍ ቃል። እንደገና ይሞክሩ ወይም የይለፍ ቃልዎን ዳግም ለማስጀመር የይለፍ ቃሌን ረስቼዋለሁን ጠቅ ያድርጉ።</translation> <translation id="1620510694547887537">ካሜራ</translation> <translation id="1623132449929929218">ምስሎቹ አሁን ላይ አይገኙም። የግድግዳ ልጣፎችን ስብስቦች ለማየት እባክዎ ወደ በይነመረብ ዳግም ያገናኙ።</translation> <translation id="1627276047960621195">የፋይል ገላጮች</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">የሃርድዌር ክለሳ</translation> <translation id="1890674179660343635"><span>መታወቂያ፦ </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">ሙሉ ማያ ገጽ ክፈት</translation> +<translation id="1892341345406963517">ሰላም <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">ሌሎች ቋንቋዎች</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> ቀርቷል</translation> <translation id="1895658205118569222">አጥፋ</translation> @@ -3130,6 +3132,7 @@ <translation id="5213891612754844763">የተኪ ቅንብሮችን አሳይ</translation> <translation id="5215502535566372932">አገር ይምረጡ</translation> <translation id="521582610500777512">ፎቶ ተጥሏል</translation> +<translation id="5222403284441421673">ደህንነቱ ያልተጠበቀ ውርድ ታግዷል</translation> <translation id="5222676887888702881">ዘግተህ ውጣ</translation> <translation id="52232769093306234">መጠቅለል አልተሳካም።</translation> <translation id="5225324770654022472">የመተግበሪያዎች አቋራጮችን አሳይ</translation> @@ -3528,6 +3531,7 @@ <translation id="5734362860645681824">ተግባቦት</translation> <translation id="5734697361979786483">ፋይል አጋራን ያክሉ</translation> <translation id="5736796278325406685">እባክዎ የሚሠራ የተጠቃሚ ስም ያስገቡ</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> የትምህርት መለያ እንዲያክሉ ለማገዝ ወደ መለያ ይግቡ</translation> <translation id="5739235828260127894">ማረጋገጫን በመጠበቅ ላይ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="5739458112391494395">በጣም ትልቅ</translation> <translation id="574209121243317957">ቅላፄ</translation> @@ -5540,6 +5544,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> አውታረ መረብ፣ በመገናኘት ላይ</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">በመጀመሪያ ጠይቅ (የሚመከር)</translation> +<translation id="8417548266957501132">የወላጅ ይለፍ ቃል</translation> <translation id="8417573335434189196">አደገኛ ከሆኑ የድር ጣቢያዎች፣ ማውረዶች ወይም ቅጥያዎች እርስዎን አይጠብቀዎትም። Chrome ይህን ቅንብር አይመክርም።</translation> <translation id="8418445294933751433">&በትር አሳይ</translation> <translation id="8419098111404128271">የ«<ph name="SEARCH_TEXT" />» ውጤቶችን ይፈልጉ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 66c5de14..ebd4027 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">تحميل</translation> <translation id="1244265436519979884">استعادة Linux قيد التقدم حاليًا</translation> <translation id="1244303850296295656">خطأ في الإضافة</translation> +<translation id="1246158006305844142">ستتم مزامنة التطبيقات والإعدادات على جميع أجهزة "نظام التشغيل Chrome" التي سجّلت الدخول إليها باستخدام حسابك على Google. للوصول إلى خيارات مزامنة المتصفّح، انتقِل إلى <ph name="LINK_BEGIN" />إعدادات Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">هل تريد إزالة اقتراح من الحافظة؟</translation> <translation id="1249643471736608405">تم حظر <ph name="PLUGIN_NAME" /> لأنه متوقّف</translation> <translation id="1251366534849411931">قوس متعرج مفتوح بشكلٍ متوقع: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">لا، شكرًا</translation> <translation id="1525740877599838384">استخدام شبكة Wi-Fi فقط لتحديد الموقع الجغرافي</translation> <translation id="152629053603783244">إعادة تشغيل نظام التشغيل Linux</translation> +<translation id="1526335046150927198">تفعيل التمرير المُسرّع على لوحة اللمس</translation> <translation id="1526560967942511387">مستند بلا عنوان</translation> <translation id="1529891865407786369">مصدر الطاقة</translation> <translation id="1530838837447122178">فتح إعدادات الجهاز للماوس ولوحة اللمس</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">لا تتطلب هذه الإضافة أذونات خاصة.</translation> <translation id="1616298854599875024">تعذَّر استيراد الإضافة "<ph name="IMPORT_NAME" />" لأنها ليست وحدة مشتركة.</translation> <translation id="1618268899808219593">مركز المساعدة</translation> +<translation id="1620307519959413822">كلمة المرور غير صحيحة. يُرجى المحاولة مجددًا أو النقر على "نسيت كلمة المرور" لإعادة ضبطها.</translation> <translation id="1620510694547887537">الكاميرا</translation> <translation id="1623132449929929218">الصور غير متوفِّرة حاليًا. يُرجى إعادة الاتصال بالإنترنت للاطِّلاع على مجموعات الخلفية.</translation> <translation id="1627276047960621195">أدوات وصف الملفات</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">مراجعة الأجهزة</translation> <translation id="1890674179660343635"><span>رقم التعريف: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">فتح في وضع ملء الشاشة</translation> +<translation id="1892341345406963517">مرحبًا <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">لغات أخرى</translation> <translation id="1895252664692693738">يتبقى <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">إيقاف التشغيل</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">تمت استعادة اتصال الشبكة</translation> <translation id="2727633948226935816">لا تذكرني مرة أخرى</translation> <translation id="2727712005121231835">الحجم الفعلي</translation> +<translation id="2729314457178420145">قد يؤدي محو بيانات تصفّح (<ph name="URL" />) أيضًا إلى تسجيل خروجك من Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">الاحتفاظ بنسخة احتياطية من تطبيقات نظام التشغيل Linux وملفاته</translation> <translation id="273093730430620027">هذه الصفحة تحاول الدخول إلى الكاميرا.</translation> <translation id="2731392572903530958">إعادة ف&تح النافذة المغلقة</translation> @@ -1627,7 +1632,7 @@ الوصف: <ph name="LINUX_DESCRIPTION" /></translation> <translation id="3149510190863420837">تطبيقات Chrome</translation> -<translation id="3150693969729403281">تفعيل إعدادات "التحقّق من الأمان" الآن</translation> +<translation id="3150693969729403281">بدء التحقق من الأمان الآن</translation> <translation id="3150927491400159470">تحديث بشكل كامل</translation> <translation id="315116470104423982">بيانات الجوال</translation> <translation id="3151539355209957474">وقت البدء</translation> @@ -1665,7 +1670,7 @@ <translation id="3201422919974259695">ستظهر أجهزة USB المتاحة هنا.</translation> <translation id="3202131003361292969">المسار</translation> <translation id="3202173864863109533">تم كتم صوت علامة التبويب.</translation> -<translation id="3208321278970793882">تطبيق</translation> +<translation id="3208321278970793882">التطبيق</translation> <translation id="3208584281581115441">التحقّق الآن</translation> <translation id="3208703785962634733">لم يتم تأكيده</translation> <translation id="32101887417650595">يتعذّر الاتصال بالطباعة</translation> @@ -1878,7 +1883,7 @@ <translation id="3496213124478423963">تصغير</translation> <translation id="3497560059572256875">مشاركة رسومات الشعار المبتكرة</translation> <translation id="3498215018399854026">لم نتمكن من الوصول إلى أحد والديك في الوقت الحالي. يُرجى إعادة المحاولة مرة أخرى.</translation> -<translation id="3500417806337761827">حدث خطأ أثناء تثبيت المشاركة. سبَق وأن تمّ تثبيت العديد من مشاركات الأنشطة التجارية الصغيرة والمتوسّطة.</translation> +<translation id="3500417806337761827">حدث خطأ أثناء تثبيت المشاركة. سبَق وأن تمّ تثبيت العديد من مشاركات بروتوكول Server Message Block (SMB).</translation> <translation id="3505030558724226696">إبطال الوصول إلى الجهاز</translation> <translation id="3507421388498836150">الأذونات الحالية لـ "<ph name="EXTENSION_NAME" />"</translation> <translation id="3507888235492474624">إعادة فحص أجهزة البلوتوث</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">مزيد من <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">ملفات تعريف الارتباط وبيانات المواقع والمكونات الإضافية الأخرى</translation> <translation id="383891835335927981">لم يتم تكبير أو تصغير أي مواقع ويب</translation> +<translation id="3839509547554145593">تفعيل التمرير المُسرّع للماوس</translation> <translation id="3839516600093027468">حظر <ph name="HOST" /> دائمًا من الاطلاع على الحافظة</translation> <translation id="3841964634449506551">كلمة المرور غير صالحة</translation> <translation id="3842552989725514455">خط Serif</translation> @@ -2556,7 +2562,7 @@ <translation id="4400963414856942668">يمكنك النقر على النجمة لوضع إشارة مرجعية على علامة تبويب.</translation> <translation id="4403775189117163360">اختيار مجلد آخر</translation> <translation id="4404136731284211429">البحث مرة أخرى</translation> -<translation id="4404843640767531781">حظَر أحد الوالدَين تطبيق <ph name="APP_NAME" />. اطلب الإذن من والدك لاستخدام هذا التطبيق.</translation> +<translation id="4404843640767531781">حظَر أحد الوالدَين تطبيق <ph name="APP_NAME" />. يُرجى طلب الإذن لتتمكّن من استخدام هذا التطبيق مرة أخرى.</translation> <translation id="4405117686468554883">jpeg.* وjpg.* وpng.*</translation> <translation id="4408599188496843485">م&ساعدة</translation> <translation id="4409697491990005945">الهوامش</translation> @@ -2772,6 +2778,7 @@ <translation id="4699172675775169585">الصور والملفات المخزنة مؤقتًا</translation> <translation id="4699357559218762027">(يتم تشغيله تلقائيًا)</translation> <translation id="470074695271471509">هل تريد تسجيل الخروج لإتمام العملية؟</translation> +<translation id="4701025263201366865">تسجيل دخول أحد الوالدَين</translation> <translation id="4707302005824653064">يمكن للمدير مراجعة الاستخدام والسجل (<ph name="CUSTODIAN_EMAIL" />) على chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + شهادة المستخدم</translation> <translation id="4708794300267213770">عرض شاشة التأمين عند التنبيه من وضع السكون</translation> @@ -3079,6 +3086,7 @@ <translation id="5139112070765735680">البحث عن <ph name="QUERY_NAME" /> في <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">يُرجى إدخال رقم التعريف الشخصي لمفتاح الأمان. في حال كنت لا تعرف رقم التعريف الشخصي، عليك إعادة ضبط مفتاح الأمان.</translation> <translation id="5139955368427980650">ف&تح</translation> +<translation id="5142793792982256885">سرعة التمرير على لوحة اللمس</translation> <translation id="5142961317498132443">المصادقة</translation> <translation id="5143374789336132547">غيّرت الإضافة "<ph name="EXTENSION_NAME" />" الصفحة التي تظهر عند النقر على زر الصفحة الرئيسية.</translation> <translation id="5143712164865402236">دخول إلى وضع ملء الشاشة</translation> @@ -3124,6 +3132,7 @@ <translation id="5213891612754844763">عرض إعدادات الخادم الوكيل</translation> <translation id="5215502535566372932">اختيار البلد</translation> <translation id="521582610500777512">تم تجاهل الصورة</translation> +<translation id="5222403284441421673">تم حظر عملية تنزيل غير آمنة.</translation> <translation id="5222676887888702881">تسجيل الخروج</translation> <translation id="52232769093306234">تعذرت التعبئة.</translation> <translation id="5225324770654022472">إظهار اختصار التطبيقات</translation> @@ -3232,7 +3241,7 @@ <translation id="5353252989841766347">تصدير كلمات المرور من Chrome</translation> <translation id="5355099869024327351">السماح "لمساعد Google" بعرض الإشعارات</translation> <translation id="5355926466126177564">غيّرت الإضافة "<ph name="EXTENSION_NAME" />" الصفحة التي تظهر عند البحث في المربع متعدد الاستخدامات.</translation> -<translation id="535911077628776608">قد يكون <ph name="FILE_NAME" /> خطيرًا، هل تريد إرساله إلى "الحماية المتقدّمة في Google" لفحصه؟ اضغط على Shift+F6 للانتقال إلى منطقة شريط عمليات التنزيل.</translation> +<translation id="535911077628776608">قد يكون <ph name="FILE_NAME" /> خطيرًا، هل تريد إرساله إلى برنامج "الحماية المتقدّمة" من Google لفحصه؟ اضغط على Shift+F6 للانتقال إلى منطقة شريط عمليات التنزيل.</translation> <translation id="5359910752122114278">نتيجة واحدة</translation> <translation id="5360150013186312835">العرض في شريط الأدوات</translation> <translation id="5362741141255528695">حدد ملف المفتاح الخاص.</translation> @@ -3491,7 +3500,7 @@ <translation id="5691511426247308406">العائلة</translation> <translation id="5691772641933328258">لم يتمّ التعرُّف على البصمة</translation> <translation id="5692183275898619210">اكتملت الطباعة</translation> -<translation id="5692875591060376599">الملف الذي تم اختياره غير معروف ويمكن أن يكون ضارًا. هل تريد إرساله إلى "الحماية المتقدّمة في Google" لفحصه؟</translation> +<translation id="5692875591060376599">الملف الذي تم اختياره غير معروف ويمكن أن يكون ضارًا. هل تريد إرساله إلى برنامج "الحماية المتقدّمة" من Google لفحصه؟</translation> <translation id="569425414730375234">جلسة التصفّح المتخفي الحالية: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">الإبلاغ عن إساءة الاستخدام من "<ph name="EXTENSION_NAME" />"</translation> <translation id="5696679855467848181">الملف الحالي بتنسيق PPD قيد الاستخدام: <ph name="PPD_NAME" /></translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">الاتصالات</translation> <translation id="5734697361979786483">إضافة خادم مشاركة الملفات</translation> <translation id="5736796278325406685">يُرجى إدخال اسم مستخدم صالح</translation> +<translation id="5739017626473506901">سجِّل الدخول لمساعدة <ph name="USER_NAME" /> على إضافة حساب مدرسة.</translation> <translation id="5739235828260127894">في انتظار التحقُّق من صحة الاتصال. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation> <translation id="5739458112391494395">كبير جدًا</translation> <translation id="574209121243317957">درجة الصوت</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">أصفر</translation> <translation id="5906655207909574370">أوشك التحديث على الانتهاء! أعِد تشغيل الجهاز لإنهاء التحديث.</translation> <translation id="5906732635754427568">ستتم إزالة البيانات المقترنة بهذا التطبيق من هذا الجهاز.</translation> +<translation id="5908695239556627796">سرعة تمرير الماوس</translation> <translation id="5908769186679515905">حظر مواقع الويب من تشغيل Flash</translation> <translation id="5910363049092958439">حفظ ال&صورة باسم...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> غير متصل</translation> @@ -4784,7 +4795,7 @@ <translation id="7441830548568730290">المستخدمون الآخرون</translation> <translation id="7442465037756169001">جهاز Hangouts Meet جاهز للإعداد.</translation> <translation id="744341768939279100">إنشاء ملف شخصي جديد</translation> -<translation id="744366959743242014">جارِ تحميل البيانات، وقد يستغرق هذا بضع ثوانِ.</translation> +<translation id="744366959743242014">جارٍ تحميل البيانات، وقد تستغرق هذه العملية بضع ثوانِ.</translation> <translation id="7443806024147773267">يمكنك الوصول إلى كلمات المرور عند تسجيل الدخول إلى حسابك على Google.</translation> <translation id="7444983668544353857">إيقاف <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">يمكنك تثبيت التطبيقات تلقائيًا.</translation> @@ -5090,6 +5101,7 @@ <ph name="BEGIN_BOLD" />ملاحظة:<ph name="END_BOLD" /> ستتم إعادة تشغيل النظام أثناء العملية.</translation> <translation id="7828731929332799387">سيؤدي هذا إلى حذف جميع ملفات تعريف الارتباط وبيانات الموقع الإلكتروني المتوفرة في سياقات تابعة لجهات خارجية. هل تريد المواصلة؟</translation> <translation id="7829298379596169484">جارٍ الوصول إلى إدخال الصوت</translation> +<translation id="7829877209233347340">اطلب من أحد الوالدَين تسجيل الدخول لمنح إذن إضافة حساب المدرسة.</translation> <translation id="7830594666202422257">الربط بنظام التشغيل Linux</translation> <translation id="7831491651892296503">حدث خطأ أثناء تهيئة الشبكة</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472">شبكة <ph name="NETWORK_TYPE" />، جارٍ الاتصال</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">السؤال أولاً (موصى به)</translation> +<translation id="8417548266957501132">كلمة مرور الوالدَين</translation> <translation id="8417573335434189196">لا يوفّر التصفُّح الآمن حماية من الإضافات أو عمليات التنزيل أو المواقع الإلكترونية الضارة. ولا يُنصح باستخدام هذا الإعداد في Chrome.</translation> <translation id="8418445294933751433">&العرض في علامة تبويب</translation> <translation id="8419098111404128271">نتائج البحث عن "<ph name="SEARCH_TEXT" />"</translation> @@ -5667,7 +5680,7 @@ <translation id="8608618451198398104">إضافة تذكرة Kerberos</translation> <translation id="8609465669617005112">الانتقال إلى الأعلى</translation> <translation id="8610103157987623234">تنسيق غير صحيح، يُرجى إعادة المحاولة</translation> -<translation id="8612935480510351790">قد يكون <ph name="FILE_NAME" /> خطيرًا، هل تريد إرساله إلى "الحماية المتقدّمة في Google" لفحصه؟</translation> +<translation id="8612935480510351790">قد يكون <ph name="FILE_NAME" /> خطيرًا، هل تريد إرساله إلى برنامج "الحماية المتقدّمة" من Google لفحصه؟</translation> <translation id="8613164732773110792">أحرف صغيرة أو أرقام أو شرطات سفلية أو شرطات فقط</translation> <translation id="8615618338313291042">تطبيق وضع التصفح المتخفي: <ph name="APP_NAME" /></translation> <translation id="8619803522055190423">تظليل القطرات</translation> @@ -5695,7 +5708,7 @@ <translation id="8641606876632989680">في حال تسجيل الدخول باستخدام كلمة مرور محتمَل تعرّضها للاختراق، سيرسل Chrome إشعارات إليك.</translation> <translation id="8642900771896232685">ثانيتان</translation> <translation id="8642947597466641025">لتكبير النص</translation> -<translation id="8643443571868262066">قد يكون <ph name="FILE_NAME" /> خطيرًا. هل تريد إرساله إلى "الحماية المتقدّمة في Google" لفحصه؟</translation> +<translation id="8643443571868262066">قد يكون <ph name="FILE_NAME" /> خطيرًا. هل تريد إرساله إلى برنامج "الحماية المتقدّمة" من Google لفحصه؟</translation> <translation id="8644655801811752511">تعذّرت إعادة ضبط مفتاح الأمان هذا. يمكنك محاولة إعادة ضبط هذا المفتاح فورًا بعد إدخاله.</translation> <translation id="8645354835496065562">مواصلة السماح بالوصول إلى أجهزة الاستشعار</translation> <translation id="8645920082661222035">توقُّع الأحداث الخطيرة قبل حدوثها والتحذير منها</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">قط</translation> <translation id="8808744862003883508">يمكنك الاطّلاع في هذه الصفحة على جميع الإضافات المثبّتة في Chrome.</translation> <translation id="8809147117840417135">أزرق مخضر فاتح</translation> +<translation id="8812593354822910461">سيؤدي محو بيانات تصفّح (<ph name="URL" />) أيضًا إلى تسجيل خروجك من <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">يتعذر تسجيل الدخول إلى <ph name="USERNAME" /></translation> <translation id="8813811964357448561">أوراق</translation> <translation id="8813872945700551674">عليك الحصول على موافقة أحد الوالدَين على "<ph name="EXTENSION_NAME" />".</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">&التوصيف مفعّل</translation> <translation id="9203904171912129171">اختيار جهاز</translation> <translation id="9203962528777363226">أوقف مشرف هذا الجهاز إمكانية إضافة مستخدمين جدد.</translation> +<translation id="9209689095351280025">لا يمكن للمواقع الإلكترونية استخدام ملفات تعريف الارتباط التي تتبع خطواتك على الإنترنت.</translation> <translation id="9211177926627870898">التحديث مطلوب</translation> <translation id="9214520840402538427">عفوًا! لقد انتهت مهلة بدء تشغيل سمات وقت التثبيت. يُرجى الاتصال بممثل الدعم.</translation> <translation id="9214695392875603905">كب كيك</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 15c84a4..b4b9831 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -52,6 +52,7 @@ <translation id="1058262162121953039">PUK</translation> <translation id="1061745542578250838"><ph name="FILE_NAME" />ত সংবেদনশীল সমল আছে আৰু সেয়া অৱৰোধ কৰা হৈছে।</translation> <translation id="1061904396131502319">ডিভাইচ লক হওঁ হওঁ</translation> +<translation id="1064552680598333868">পাছৰবাৰ Linux ৰিষ্টাৰ্ট কৰিলে মাইক্ৰ’ফ’নত কৰা সালসলনিবোৰ কাৰ্যকৰী হ’ব।</translation> <translation id="1067048845568873861">সৃষ্টি কৰা হ’ল</translation> <translation id="1067291318998134776">Linux (বিটা)</translation> <translation id="1067922213147265141">অন্য Google সেৱা</translation> @@ -112,6 +113,7 @@ <translation id="1147991416141538220">এক্সেছ বিচাৰিবলৈ এই ডিভাইচটোৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation> <translation id="1149401351239820326">ম্যাদ উকলা মাহ</translation> <translation id="1150565364351027703">ছানগ্লাছ</translation> +<translation id="1151841030700667295">খোলা থকা কোনো টেবসমূহকে ধৰি সকলো ছাইটৰ পৰা আপোনাক ছাইন আউট কৰোৱা হ’ব।</translation> <translation id="1151917987301063366"><ph name="HOST" />এ ছেন্সৰসমূহলৈ এক্সেছ কৰিবলৈ সদায় অনুমতি দিয়ক</translation> <translation id="1153356358378277386">যোৰা লগোৱা ডিভাইচ</translation> <translation id="1153636665119721804">Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাৰ প্ৰ’গ্ৰাম</translation> @@ -190,6 +192,7 @@ <translation id="1243314992276662751">আপল’ড কৰক</translation> <translation id="1244265436519979884">বর্তমান Linuxক পুনঃস্থাপন কৰা প্ৰক্ৰিয়া চলি আছে</translation> <translation id="1244303850296295656">এক্সটেনশ্বনৰ আসোঁৱাহ</translation> +<translation id="1246158006305844142">আপোনাৰ এপ্ আৰু ছেটিংসমূহ সেই সকলো Chrome OS ডিভাইচত ছিংক কৰা হ’ব য’ত আপুনি নিজৰ Google একাউণ্টেৰে ছাইন ইন কৰি থৈছে। ব্ৰাউজাৰ ছিংক কৰাৰ বিকল্পসমূহৰ বাবে <ph name="LINK_BEGIN" />Chromeৰ ছেটিংসমূহ<ph name="LINK_END" />লৈ যাওক।</translation> <translation id="1246905108078336582">ক্লিপব’ৰ্ডৰ পৰা পৰামৰ্শ আঁতৰাবনে?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" />ক অৱৰোধ কৰা হৈছে কাৰণ ইয়াক অপ্ৰচলিত কৰা হৈছে</translation> <translation id="1251366534849411931">প্ৰত্যাশিত প্ৰাৰম্ভিক কার্লী ব্ৰাচ: <ph name="ERROR_LINE" /></translation> @@ -279,6 +282,7 @@ <translation id="1386387014181100145">নমস্কাৰ,</translation> <translation id="138784436342154190">আৰম্ভণিতে খোল খোৱা ডিফ’ল্ট পৃষ্ঠাটো পুনঃস্থাপন কৰিবনে?</translation> <translation id="1390548061267426325">নিয়মীয়া টেব হিচাপে খোলক</translation> +<translation id="1392232653471491344">Linux ৰিষ্টাৰ্ট কৰা প্ৰয়োজন</translation> <translation id="1393283411312835250">সূৰ্য আৰু মেঘ</translation> <translation id="1393787139683794508">এইটোৱে <ph name="ORIGIN_NAME" />এ ষ্ট’ৰ কৰা সকলো ডেটা আৰু কুকি মচিব।</translation> <translation id="1395730723686586365">আপডে‘টাৰ আৰম্ভ কৰা হৈছে</translation> @@ -307,6 +311,7 @@ <translation id="1420920093772172268">যোৰা লগোৱাৰ অনুমতি দিবলৈ <ph name="TURN_ON_BLUETOOTH_LINK" /></translation> <translation id="1422159345171879700">অসুৰক্ষিত স্ক্ৰিপ্ট ল'ড কৰক</translation> <translation id="1426410128494586442">হয়</translation> +<translation id="142655739075382478"><ph name="APP_NAME" /> অৱৰোধ কৰা হৈছে</translation> <translation id="1426870617281699524">‘পুনৰ চেষ্টা কৰক'ত ক্লিক কৰক আৰু আপোনাৰ কম্পিউটাৰৰ প্ৰম্প্টো গ্ৰহণ কৰক</translation> <translation id="1427269577154060167">দেশ</translation> <translation id="142758023928848008">ষ্টিকী চাবি সক্ষম কৰক (সেইকেইটা একাদিক্ৰমে টাইপ কৰি কীব'ৰ্ডৰ শ্বৰ্টকাট সম্পাদন কৰিবলৈ)</translation> @@ -345,6 +350,7 @@ <translation id="1476607407192946488">&ভাষাৰ ছেটিং</translation> <translation id="1478340334823509079">সবিশেষ: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">ইনষ্টল কৰাৰ সুবিধাটো সক্ষম কৰা হোৱা নাই</translation> +<translation id="1481537595330271162">ডিস্কৰ আকাৰ সলনি কৰাত আসোঁৱাহ হৈছে</translation> <translation id="1482626744466814421">এই টেবটো বুকমার্ক কৰক...</translation> <translation id="1483493594462132177">পঠিয়াওক</translation> <translation id="1484979925941077974">ছাইটটোৱে ব্লুটুথ ব্যৱহাৰ কৰি আছে</translation> @@ -383,6 +389,7 @@ <translation id="1524563461097350801">নালাগে, ধন্যবাদ</translation> <translation id="1525740877599838384">অৱস্থান নির্ধাৰণ কৰিবলৈ কেৱল ৱাই-ফাই ব্যৱহাৰ কৰক</translation> <translation id="152629053603783244">Linux ৰিষ্টাৰ্ট কৰক</translation> +<translation id="1526335046150927198">টাচ্পেড স্ক্ৰ’ল এক্সিলাৰেশ্বন সক্ষম কৰক</translation> <translation id="1526560967942511387">শিৰোনামবিহীন নথি</translation> <translation id="1529891865407786369">পাৱাৰৰ উৎস</translation> <translation id="1530838837447122178">মাউছ আৰু টাচ্চ্পেড ডিভাইচৰ ছেটিংসমূহ খোলক</translation> @@ -602,6 +609,7 @@ <translation id="1805822111539868586">ভিউসমূহ নিৰীক্ষণ কৰক</translation> <translation id="1805888043020974594">প্ৰিণ্ট ছার্ভাৰ</translation> <translation id="1805967612549112634">পিন নিশ্চিত কৰক</translation> +<translation id="1806335016774576568">অন্য এটা খোল খাই থকা এপলৈ সলনি কৰক</translation> <translation id="1809734401532861917">মোৰ বুকমাৰ্ক, সন্ধান ইতিহাস, পাছৱৰ্ড আৰু অন্য ছেটিংসমূহ <ph name="USER_EMAIL_ADDRESS" />ত যোগ কৰক</translation> <translation id="1813278315230285598">সেৱা</translation> <translation id="18139523105317219">EDI পাৰ্টিৰ নাম</translation> @@ -688,6 +696,7 @@ <translation id="1921050530041573580">আপোনাৰ ফ’নটো বার্তাৰ সৈতে যোৰা লগাওক</translation> <translation id="1921584744613111023"><ph name="DPI" /> dpi</translation> <translation id="192494336144674234">ইয়াৰ জৰিয়তে খোলক</translation> +<translation id="1925017091976104802">পে’ষ্ট কৰিবলৈ <ph name="MODIFIER_KEY_DESCRIPTION" /> টিপক</translation> <translation id="1925021887439448749">কাষ্টম ৱেব ঠিকনা দিয়ক</translation> <translation id="1925124445985510535"><ph name="TIME" />ত সুৰক্ষা পৰীক্ষা চলোৱা হৈছে</translation> <translation id="1926339101652878330">এণ্টাৰপ্ৰাইজৰ নীতিয়ে এই ছেটিংসমূহ নিয়ন্ত্ৰণ কৰে। অধিক তথ্যৰ বাবে আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation> @@ -833,6 +842,7 @@ <translation id="2135787500304447609">&ৰখোৱাৰ পৰা আৰম্ভ কৰক</translation> <translation id="2136372518715274136">নতুন পাছৱৰ্ড দিয়ক</translation> <translation id="2136476978468204130">আপুনি দিয়া পাছফ্রেজটো ভুল</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{কুকীসমূহ অৱৰোধ কৰা হৈছে।}=1{কুকীসমূহ অৱৰোধ কৰা হৈছে, ১ টা ব্যতিক্ৰম}one{কুকীসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}other{কুকীসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}}</translation> <translation id="2138398485845393913">"<ph name="DEVICE_NAME" />"ৰ সৈতে সংযোগ কৰাৰ প্ৰক্ৰিয়া এতিয়াও চলি আছে</translation> <translation id="2139545522194199494"><ph name="NETWORK_COUNT" />টা নেটৱৰ্কৰ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, ছিগনেলৰ ক্ষমতা <ph name="SIGNAL_STRENGTH" />%, আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে, সংযোগ কৰক</translation> <translation id="2139919072249842737">ছেট আপ বুটাম</translation> @@ -1000,11 +1010,13 @@ <translation id="2346953515226895098">SODA সেৱা</translation> <translation id="2347644257713614136">Hangouts আৰু শিক্ষাৰ বাবে কাষ্ট কৰা সুবিধাটোৰ ব্যৱহাৰ Googleৰ গোপনীয়তা নীতিয়ে পৰিচালনা কৰে।</translation> <translation id="2348176352564285430">এপ্: <ph name="ARC_PROCESS_NAME" /></translation> +<translation id="234889437187286781">ডেটা ল’ড কৰাত আসোঁৱাহ হৈছে</translation> <translation id="2349896577940037438">যদি আপোনাৰ অতিৰিক্ত ৱেব আৰু এপৰ কার্যকলাপৰ ছেটিংটো অন কৰা হয় তেন্তে এই ডেটাখিনি আপোনাৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে। আপুনি account.google.comলৈ গৈ আপোনাৰ ডেটা চাব পাৰে, সেয়া মচিব পাৰে আৰু আপোনাৰ একাউণ্ট ছেটিংসমূহ সলনি কৰিব পাৰে।</translation> <translation id="2350133097354918058">পুনৰ ল'ড কৰা হৈছে</translation> <translation id="2350182423316644347">এপ্লিকেশ্বন আৰম্ভ কৰি থকা হৈছে...</translation> <translation id="2350796302381711542">সকলো <ph name="PROTOCOL" /> লিংক <ph name="REPLACED_HANDLER_TITLE" />ৰ সলনি <ph name="HANDLER_HOSTNAME" />ক খুলিবলৈ অনুমতি দিবনে?</translation> <translation id="2351266942280602854">ভাষা আৰু ইনপুট</translation> +<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{১ টা বস্তু}one{{NUM_ITEMS} টা বস্তু}other{{NUM_ITEMS} টা বস্তু}}</translation> <translation id="2352662711729498748">< ১ এমবি</translation> <translation id="2352810082280059586">লক স্ক্ৰীণৰ টোকাসমূহ স্বয়ংক্ৰিয়ভাৱে <ph name="LOCK_SCREEN_APP_NAME" />ত ছেভ কৰা হয়। আপোনাৰ সকলোতকৈ শেহতীয়া টোকাটো লক স্ক্ৰীণত থাকিব।</translation> <translation id="2353297238722298836">কেমেৰা আৰু মাইক্ৰ’ফ’নৰ ব্যৱহাৰৰ অনুমতি দিয়া হৈছে</translation> @@ -1038,6 +1050,7 @@ <translation id="2392369802118427583">সক্ৰিয় কৰক</translation> <translation id="2394566832561516196">পৰৱৰ্তী সময়ত পুনৰ ল'ড হ'লে ছেটিংসমূহ মচা যাব।</translation> <translation id="2395616325548404795">আপোনাৰ <ph name="DEVICE_TYPE" /> এণ্টাৰপ্ৰাইজ পৰিচালনাৰ বাবে পঞ্জীয়ন কৰা হ’ল, কিন্তু ইয়াৰ সম্পত্তি আৰু অৱস্থানৰ তথ্য পঠিয়াব পৰা নগ’ল। অনুগ্ৰহ কৰি এই ডিভাইচটোৰ বাবে এই তথ্য আপোনাৰ প্ৰশাসক কনছ’লৰ পৰা মেনুৱেলী দিয়ক।</translation> +<translation id="2396387085693598316">আপোনাৰ প্ৰশাসকে "<ph name="EXTENSION_NAME" />" অৱৰোধ কৰিছে</translation> <translation id="2396783860772170191">৪টা অংকৰ পিনটো দিয়ক (০০০০-৯৯৯৯)</translation> <translation id="2399939490305346086">সুৰক্ষা চাবিৰ ছাইন-ইন ডেটা</translation> <translation id="2400664245143453337">তাৎক্ষণিকভাৱে আপডে’ট কৰাৰ প্ৰয়োজন</translation> @@ -1299,6 +1312,7 @@ <translation id="2725200716980197196">নেটৱর্ক সংযোগ পুনঃস্থাপন কৰা হ’ল</translation> <translation id="2727633948226935816">মোক পুনৰ সোঁৱৰাই নিদিব</translation> <translation id="2727712005121231835">প্ৰকৃত আকাৰ</translation> +<translation id="2729314457178420145">লগতে ব্ৰাউজিঙৰ ডেটাও (<ph name="URL" />) মচক যিয়ে আপোনাক Google.comৰ পৰা ছাইন আউট কৰাব পাৰে। <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux এপ্ আৰু ফাইলসমূহ বেক আপ কৰি থকা হৈছে</translation> <translation id="273093730430620027">এই পৃষ্ঠাটোৱে আপোনাৰ কেমেৰাত এক্সেছ কৰি আছে।</translation> <translation id="2731392572903530958">বন্ধ হৈ থকা ৱিণ্ড’ পুনৰ&খোলক</translation> @@ -1324,6 +1338,7 @@ <translation id="2753677631968972007">ছাইটৰ অনুমতিবোৰ মেনুৱেলী নিয়ন্ত্ৰণ কৰক।</translation> <translation id="2755367719610958252">সাধ্য সুবিধাসমূহ পৰিচালনা কৰক</translation> <translation id="275662540872599901">স্ক্ৰীণ অফ</translation> +<translation id="2757338480560142065">আপুনি ছেভ কৰিবলৈ লোৱা পাছৱৰ্ডটো যাতে আপোনাৰ <ph name="WEBSITE" />ৰ পাছৱৰ্ডটোৰ সৈতে মিলে সেয়া নিশ্চিত কৰক</translation> <translation id="2762441749940182211">কেমেৰা অৱৰোধ কৰা হৈছে</translation> <translation id="2765217105034171413">সৰু</translation> <translation id="2766161002040448006">এগৰাকী অভিভাৱকক সোধক</translation> @@ -1576,6 +1591,7 @@ <translation id="3090819949319990166">বাহ্যিক crx ফাইল <ph name="TEMP_CRX_FILE" />লৈ প্ৰতিলিপি কৰিব নোৱাৰি।</translation> <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" যোৰা লগোৱা হ’ল</translation> <translation id="3092699946856346803">অনুগ্ৰহ কৰি আপোনাৰ ছিমখন ভৰাওক আৰু পুনৰ চেষ্টা কৰক</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{১ টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন অফ কৰা আছে। আপুনি সেইটো আঁতৰাবও পাৰে।}one{{NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন অফ কৰা আছে। আপুনি সেইসমূহ আঁতৰাবও পাৰে।}other{{NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন অফ কৰা আছে। আপুনি সেইসমূহ আঁতৰাবও পাৰে।}}</translation> <translation id="3101709781009526431">তাৰিখ আৰু সময়</translation> <translation id="3103941660000130485">Linux আপগ্ৰে’ড কৰোঁতে আসোঁৱাহ হৈছে</translation> <translation id="310671807099593501">ছাইটটোৱে ব্লুটুথ ব্যৱহাৰ কৰি আছে</translation> @@ -1649,6 +1665,7 @@ <translation id="3201422919974259695">উপলব্ধ ইউএছবি ডিভাইচসমূহ ইয়াত দেখা পোৱা যাব।</translation> <translation id="3202131003361292969">পথ</translation> <translation id="3202173864863109533">এই টেবটোৰ অডিঅ’ মিউট কৰি থকা হৈছে।</translation> +<translation id="3208321278970793882">এপ্</translation> <translation id="3208584281581115441">এতিয়াই পৰীক্ষা কৰক</translation> <translation id="3208703785962634733">নিশ্চিত কৰা নাই</translation> <translation id="32101887417650595">প্ৰিণ্টাৰৰ সৈতে সংযোগ কৰিব নোৱাৰি</translation> @@ -1669,6 +1686,7 @@ <translation id="3239373508713281971"><ph name="APP_NAME" />ৰ বাবে সময়সীমা আঁতৰোৱা হৈছে</translation> <translation id="3241680850019875542">পেক কৰিবলৈ এক্সটেনশ্বনটোৰ ৰুট ডাইৰেক্ট’ৰীটো বাছনি কৰক। কোনো এক্সটেনশ্বন আপডে’ট কৰিবলৈ লগতে পুনৰ ব্যৱহাৰ কৰিবলৈ ব্যক্তিগত মূল ফাইলটো বাছনি কৰক।</translation> <translation id="3244294424315804309">ধ্বনি মিউট কৰিয়েই ৰাখক</translation> +<translation id="3246107497225150582">{0,plural, =1{এদিনৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# দিনৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# দিনৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - নেটৱৰ্কৰ আসোঁৱাহ</translation> <translation id="3248902735035392926">সুৰক্ষা বিষয়টো গুৰুত্বপূৰ্ণ। <ph name="BEGIN_LINK" />এতিয়া আপোনাৰ এক্সটেনশ্বনসমূহ পৰীক্ষা কৰিবলৈ<ph name="END_LINK" /> কিছু সময় খৰচ কৰক</translation> <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation> @@ -1755,6 +1773,7 @@ <translation id="3356580349448036450">সম্পূৰ্ণ হ’ল</translation> <translation id="3359256513598016054">প্ৰমাণপত্ৰৰ নীতিৰ সীমাবদ্ধতা</translation> <translation id="3360297538363969800">প্ৰিণ্টিং কৰিব পৰা নগ’ল। আপোনাৰ প্ৰিণ্টাৰ পৰীক্ষা কৰি পুনৰ চেষ্টা কৰক।</translation> +<translation id="3364986687961713424">আপোনাৰ প্ৰশাসকৰ পৰা: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">হয় Ctrl নহয় Alt ব্যৱহাৰ কৰক</translation> <translation id="3367047597842238025">আপুনি বিচৰা ধৰণেই আপোনাৰ <ph name="DEVICE_TYPE" /> ছেট আপ কৰক আৰু আঙুলিৰ টিপতে সকলো বিস্ময়কৰ সুবিধা বিচাৰি পাওক।</translation> <translation id="3368922792935385530">সংযোগ কৰা হ’ল</translation> @@ -1859,6 +1878,7 @@ <translation id="3496213124478423963">সংকোচন কৰক</translation> <translation id="3497560059572256875">ডুডল শ্বেয়াৰ কৰক</translation> <translation id="3498215018399854026">আপোনাৰ অভিভাৱকৰ সৈতে এই মুহূৰ্তত আমি যোগাযোগ কৰিব নোৱাৰিলোঁ। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।</translation> +<translation id="3500417806337761827">শ্বেয়াৰ মাউণ্ট কৰোঁতে আসোঁৱাহ হৈছে। অতি বেছিসংখ্যক SMB শ্বেয়াৰ ইতিমধ্যে মাউণ্ট কৰা হৈছে।</translation> <translation id="3505030558724226696">ডিভাইচৰ এক্সেছ প্ৰত্যাহাৰ কৰক</translation> <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />"ৰ বাবে বর্তমানৰ অনুমতি</translation> <translation id="3507888235492474624">ব্লুটুথ ডিভাইচ পুনৰ স্কেন কৰক</translation> @@ -1924,6 +1944,7 @@ <translation id="3592260987370335752">&অধিক জানক</translation> <translation id="359283478042092570">দিয়ক</translation> <translation id="3593965109698325041">প্ৰমাণপত্ৰৰ নামৰ সীমাবদ্ধতা</translation> +<translation id="3595381248165458839">আপোনাৰ প্ৰতিষ্ঠানৰ ডিভাইচৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক</translation> <translation id="3596235046596950091">ক্লাউড সেৱাসমূহ সক্ষম কৰক</translation> <translation id="3596414637720633074">ইনক'গনিট'ত তৃতীয় পক্ষৰ কুকিসমূহ অৱৰোধ কৰক</translation> <translation id="3599221874935822507">উঠঙা</translation> @@ -2057,6 +2078,7 @@ <translation id="3742666961763734085">প্ৰতিষ্ঠানৰ সৈতে সংগতি থকা সেই নামটোৰ কোনো ইউনিট বিচাৰি পোৱা নগ’ল। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।</translation> <translation id="3744111561329211289">নেপথ্যত ছিংক কৰা</translation> <translation id="3746127522257263495">Android এপ্সমূহত G Suite for Education একাউণ্ট যোগ কৰাটো সমর্থিত নহয়।</translation> +<translation id="3747039297326604768">Plugin VM খুলিব পৰা নগ’ল</translation> <translation id="3747077776423672805">এপ্সমূহ আঁতৰাবলৈ ছেটিংসমূহ > Google Play Store > Androidৰ অগ্ৰাধিকাৰসমূহ পৰিচালনা কৰক> এপ্সমূহ অথবা এপ্লিকেশ্বন পৰিচালকলৈ যাওক। তাৰ পাছত আপুনি আনইনষ্টল কৰিব খোজা এপ্টোত টিপক (আপুনি এপ্টো বিচাৰিবলৈ সোঁ অথবা বাওঁফাললৈ ছোৱাইপ কৰিব লগা হ’ব পাৰে)। তাৰ পাছত আনইনষ্টল কৰক অথবা অক্ষম কৰকত টিপক।</translation> <translation id="3748026146096797577">সংযোগ কৰা হোৱা নাই</translation> <translation id="3752582316358263300">ঠিক আছে...</translation> @@ -2132,6 +2154,7 @@ <translation id="3827774300009121996">&সম্পূৰ্ণ স্ক্ৰীণ</translation> <translation id="3828029223314399057">বুকমাৰ্কত সন্ধান কৰক</translation> <translation id="3829765597456725595">SMB ফাইল শ্বেয়াৰ</translation> +<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{আপোনাৰ প্ৰশাসকে ১ টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}one{আপোনাৰ প্ৰশাসকে {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}other{আপোনাৰ প্ৰশাসকে {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}}</translation> <translation id="3831436149286513437">Google Driveৰ সন্ধানৰ পৰামৰ্শ</translation> <translation id="383161972796689579">এই ডিভাইচটোৰ গৰাকীয়ে নতুন ব্যৱহাৰকাৰী যোগ কৰাৰ সুবিধাটো অক্ষম কৰিছে</translation> <translation id="3834775135533257713">"<ph name="INSTALLED_APP_NAME" />"ৰ সৈতে বিৰোধ ঘটাৰ বাবে "<ph name="TO_INSTALL_APP_NAME" />"ক যোগ কৰিব পৰা নগ'ল।</translation> @@ -2141,6 +2164,7 @@ <translation id="3838486795898716504">অধিক <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">কুকী, অইন ছাইট আৰু প্লাগইন ডেটা</translation> <translation id="383891835335927981">কোনো ছাইট জুম ইন বা আউট কৰা হোৱা নাই</translation> +<translation id="3839509547554145593">মাউছ স্ক্ৰ’লৰ এক্সিলাৰেশ্বন সক্ষম কৰক</translation> <translation id="3839516600093027468"><ph name="HOST" />এ ক্লিপব’ৰ্ড চোৱাটো সদায় অৱৰোধ কৰক</translation> <translation id="3841964634449506551">অমান্য পাছৱৰ্ড</translation> <translation id="3842552989725514455">চেৰিফ ফণ্ট</translation> @@ -2305,6 +2329,7 @@ <translation id="4047726037116394521">গৃহপৃষ্ঠালৈ যাওক</translation> <translation id="4050225813016893843">বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ পদ্ধতি</translation> <translation id="4052120076834320548">ক্ষুদ্ৰ</translation> +<translation id="4056908315660577142">আপোনাৰ অভিভাৱকে <ph name="APP_NAME" /> Chrome এপ্টোৰ বাবে ছেট কৰা সময়ৰ সীমাত আপুনি উপনীত হৈছে। আপুনি এইটো কাইলৈ <ph name="TIME_LIMIT" />ৰ বাবে ব্যৱহাৰ কৰিব পাৰিব।</translation> <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Storeত চাওক</translation> <translation id="4058647953897694817">ব্লুটুথৰ জৰিয়তে সত্যাপন কৰক</translation> @@ -2436,6 +2461,7 @@ <translation id="424963718355121712">এপে্ প্ৰভাৱ পেলোৱা হ'ষ্টসমূহৰ পৰাই এপ্ পৰিবেশন কৰিব লাগিব</translation> <translation id="4250229828105606438">স্ক্রীণশ্বট</translation> <translation id="4250680216510889253">নহয়</translation> +<translation id="4252035718262427477">ৱেবপৃষ্ঠা, একক ফাইল (ৱেব বাণ্ডল)</translation> <translation id="4252852543720145436">সুৰক্ষিত সমল চিনাক্তকাৰী</translation> <translation id="4252899949534773101">ব্লুটুথ অক্ষম কৰা হ’ল</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - টেবৰ সমল শ্বেয়াৰ কৰা হৈছে</translation> @@ -2531,6 +2557,7 @@ <translation id="4400963414856942668">কোনো এটা টেব বুকমাৰ্ক কৰিবলৈ আপুনি তৰাচিহ্নত ক্লিক কৰিব পাৰে</translation> <translation id="4403775189117163360">অন্য এটা ফ’ল্ডাৰ বাছনি কৰক</translation> <translation id="4404136731284211429">পুনৰ স্কেন কৰক</translation> +<translation id="4404843640767531781">আপোনাৰ অভিভাৱকে <ph name="APP_NAME" /> অৱৰোধ কৰিছে। এই এপ্টো ব্যৱহাৰ কৰিবলৈ আপোনাৰ অভিভাৱকৰ পৰা অনুমতি বিচাৰক।</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">স&হায়</translation> <translation id="4409697491990005945">মাৰ্জিন</translation> @@ -2600,6 +2627,7 @@ <translation id="450099669180426158">ভাৱবোধক চিহ্নৰ আইকন</translation> <translation id="4501530680793980440">আঁতৰোৱাটো নিশ্চিত কৰক</translation> <translation id="4502423230170890588">এই ডিভাইচটোৰ পৰা আঁতৰাওক</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{কুকীসমূহৰ অনুমতি দিয়া হৈছে}=1{কুকীসমূহৰ অনুমতি দিয়া হৈছে, ১ টা ব্যতিক্ৰম}one{কুকীসমূহৰ অনুমতি দিয়া হৈছে, {COUNT} টা ব্যতিক্ৰম}other{কুকীসমূহৰ অনুমতি দিয়া হৈছে, {COUNT} টা ব্যতিক্ৰম}}</translation> <translation id="4504940961672722399">এই আইকনটোত ক্লিক কৰি বা <ph name="EXTENSION_SHORTCUT" />ত টিপি এই এক্সটেনশ্বনটো ব্যৱহাৰ কৰক।</translation> <translation id="4508051413094283164">সকলো ইনক'গনিট' ৱিণ্ড'ত খোলক</translation> <translation id="4508265954913339219">সক্ৰিয় কৰিব পৰা নগ'ল</translation> @@ -2712,6 +2740,7 @@ <translation id="465878909996028221">ব্ৰাউজাৰ পুনৰ্নিৰ্দেশৰ বাবে কেৱল http, https আৰু ফাইলৰ প্ৰট'কলসমূহহে সমৰ্থিত।</translation> <translation id="4659077111144409915">প্ৰাথমিক একাউণ্ট</translation> <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" সংস্কৰণৰ অনুমান কৰা হৈছিল কিন্তু সংস্কৰণটো "<ph name="NEW_ID" />"</translation> +<translation id="4660540330091848931">আকাৰ সলনি কৰি থকা হৈছে</translation> <translation id="4660838440047236328">আপোনাৰ কোঠাটোৰ লে’আউট</translation> <translation id="4661407454952063730">এপ্ ডেটা সর্ম্পকসূচী, বার্তাসমূহ আৰু ফট’সমূহ আদিকে ধৰি এপ্ এটাই ছেভ কৰা যিকোনো ডেটা (বিকাশকৰ্তা ছেটিংসমূহৰ ওপৰত নির্ভৰ কৰি) হ’ব পাৰে।</translation> <translation id="4661931051827810091">নতুন ভাবুকিবোৰ বিচাৰি পোৱাত আৰু ৱেবত থকা সকলো ব্যৱহাৰকাৰীৰ পৰা সেইবোৰ অৱৰোধ কৰাত সহায় কৰিবলৈ আপুনি চোৱা কিছুমান পৃষ্ঠাৰ নামবিহীন URLসমূহ, সীমিত ছিষ্টেমৰ তথ্য আৰু কিছুমান পৃষ্ঠাৰ সমল পঠিয়ায়।</translation> @@ -2743,6 +2772,7 @@ <translation id="4699172675775169585">কেশ্ব প্ৰতিচ্ছবি আৰু ফাইল</translation> <translation id="4699357559218762027">(স্বয়ংক্ৰিয়ভাৱে-লঞ্চ হোৱা)</translation> <translation id="470074695271471509">সম্পূর্ণ কৰিবলৈ ছাইন আপ কৰিবনে?</translation> +<translation id="4701025263201366865">অভিভাৱকৰ ছাইন-ইন</translation> <translation id="4707302005824653064">পৰিচালকে (<ph name="CUSTODIAN_EMAIL" />) ব্যৱহাৰ আৰু ইতিহাসৰ তথ্য chrome.comত পর্যালোচনা কৰিব পাৰে।</translation> <translation id="4707579418881001319">L2TP/IPsec + ব্যৱহাৰকাৰীৰ প্ৰমাণপত্ৰ</translation> <translation id="4708794300267213770">সুপ্ত ম’ডৰ সক্ৰিয় হ’লে লক স্ক্ৰীণ দেখুৱাওক</translation> @@ -2895,6 +2925,7 @@ <translation id="4918086044614829423">গ্ৰহণ কৰক</translation> <translation id="4918221908152712722"><ph name="APP_NAME" /> ইনষ্টল কৰক (ডাউনল’ড কৰাৰ প্ৰয়োজন নাই)</translation> <translation id="4920887663447894854">এই পৃষ্ঠাটোত আপোনাৰ অৱস্থান ট্ৰেক কৰাৰপৰা এই ছাইটবোৰক অৱৰোধ কৰা হৈছে:</translation> +<translation id="49226369361073053">{0,plural, =0{এতিয়াই ডিভাইচটো আপডে’ট কৰক}=1{১ ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# ছেকেণ্ডৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation> <translation id="492299503953721473">Android এপ্বোৰ আঁতৰাওক</translation> <translation id="4923279099980110923">হয়, মই সহায় কৰিব বিচাৰোঁ</translation> <translation id="4924352752174756392">১২x</translation> @@ -3045,9 +3076,11 @@ <translation id="5135085122826131075">"Ok Google" বুলি কৈ আপোনাৰ Assistant এক্সেছ কৰক।</translation> <translation id="5135533361271311778">বুকমাৰ্ক সৃষ্টি কৰিব পৰা নগ‘ল।</translation> <translation id="5137501176474113045">এই বস্তুটো মচক</translation> +<translation id="5138982052046316113">Linux ডিস্কৰ আকাৰ সলনি কৰক</translation> <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> সন্ধান</translation> <translation id="5139823398361067371">আপোনাৰ সুৰক্ষা চাবিৰ পিনটো দিয়ক। আপুনি যদি পিনটো নাজানে, আপুনি সুৰক্ষা চাবিটো ৰিছেট কৰিব লাগিব।</translation> <translation id="5139955368427980650">&খোলক</translation> +<translation id="5142793792982256885">টাচ্পেড স্ক্র’লৰ গতিবেগ</translation> <translation id="5142961317498132443">বিশ্বাসযোগ্যতাৰ প্ৰমাণীকৰণ</translation> <translation id="5143374789336132547">আপুনি গৃহ বুটামটো টিপিলে কোনটো পৃষ্ঠা দেখুওৱা হ’ব, সেয়া "<ph name="EXTENSION_NAME" />" এক্সটেনশ্বনে সলনি কৰিছে।</translation> <translation id="5143712164865402236">পূৰ্ণ স্ক্ৰীণলৈ যাওক</translation> @@ -3201,6 +3234,7 @@ <translation id="5353252989841766347">Chromeৰ পৰা পাছৱর্ড আমদানি কৰক</translation> <translation id="5355099869024327351">আপোনাৰ জাননীসমূহ প্ৰদর্শন কৰিবলৈ Assistantক অনুমতি দিয়ক</translation> <translation id="5355926466126177564">আপুনি Omniboxৰ পৰা সন্ধান কৰাৰ সময়ত কি পৃষ্ঠা প্ৰদর্শন কৰা হ’ব সেয়া এক্সটেনশ্বন "<ph name="EXTENSION_NAME" />"এ সলনি কৰিলে।</translation> +<translation id="535911077628776608"><ph name="FILE_NAME" /> বিপজ্জনক হ’ব পাৰে। স্কেন কৰিবলৈ Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাটোলৈ পঠিয়াবনে? ডাউনল’ড বাৰৰ ক্ষেত্ৰলৈ যাবলৈ শ্বিফ্ট+F6 টিপক।</translation> <translation id="5359910752122114278">১ টা ফলাফল</translation> <translation id="5360150013186312835">টুলবাৰত দেখুৱাওক</translation> <translation id="5362741141255528695">চাবিৰ ব্যক্তিগত ফাইল বাছনি কৰক।</translation> @@ -3339,6 +3373,7 @@ <translation id="5539221284352502426">আপুনি দিয়া পাছৱর্ডটো ছার্ভাৰে অগ্ৰাহ্য কৰিছে। সম্ভাব্য কাৰণ: পাছৱৰ্ডটো যথেষ্ট চুটি। পাছৱর্ডটোত সংখ্যা বা চিহ্ন অন্তর্ভুক্ত হ'ব লাগিব। পাছৱর্ডটো পূর্বৱর্তী পাছৱর্ডসমূহতকৈ পৃথক হ'ব লাগিব।</translation> <translation id="5541694225089836610">আপোনাৰ প্ৰশাসকে এই কার্যটো অক্ষম কৰিছে</translation> <translation id="5542132724887566711">প্ৰ’ফাইল</translation> +<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" />ৰ বাবে আপুনি তৎক্ষণাৎ এই ডিভাইচটো আপডে’ট কৰা আৱশ্যক।</translation> <translation id="5542750926112347543"><ph name="DOMAIN" />ৰ কুকি অৱৰোধ কৰা হৈছে</translation> <translation id="5542949973455282971"><ph name="CARRIER_NAME" />ৰ সৈতে সংযোগ কৰি থকা হৈছে</translation> <translation id="5543983818738093899">স্থিতিৰ বাবে পৰীক্ষা কৰি থকা হৈছে...</translation> @@ -3383,6 +3418,7 @@ <translation id="5593357315997824387">মোৰ ফাইলসমূহ ছিংক কৰক</translation> <translation id="5595152862129936745">বহু দূৰত আছে</translation> <translation id="5595485650161345191">ঠিকনা সম্পাদনা কৰক</translation> +<translation id="5595727715083333657">আপোনাৰ কণ্টেইনাৰটোৱে ইয়াৰ আকাৰ সলনি কৰাটো সমৰ্থন নকৰে। Linux (বিটা)ৰ বাবে পূর্বে আৱণ্টন কৰা ঠাইখিনি মিলাবলৈ বেক আপ লওক আৰু তাৰ পাছত এটা নতুন কণ্টেইনাৰত পুনঃস্থাপন কৰক।</translation> <translation id="5596627076506792578">অধিক বিকল্প</translation> <translation id="5600706100022181951">আপডে’টটো ম’বাইল ডেটাৰ <ph name="UPDATE_SIZE_MB" /> এম.বি. ব্যৱহাৰ কৰি ডাউনল’ড কৰা হ’ব। আপুনি অব্যাহত ৰাখিবলৈ বিচাৰেনে?</translation> <translation id="5601503069213153581">পিন</translation> @@ -3455,6 +3491,7 @@ <translation id="5691511426247308406">পৰিয়াল</translation> <translation id="5691772641933328258">ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব পৰা নগ’ল</translation> <translation id="5692183275898619210">প্ৰিণ্টিং সম্পূর্ণ হৈছে</translation> +<translation id="5692875591060376599">বাছনি কৰা ফাইলটো অজ্ঞাত আৰু ই বিপজ্জনক হ’ব পাৰে। স্কেন কৰিবলৈ Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাটোলৈ পঠিয়াবনে?</translation> <translation id="569425414730375234">বৰ্তমানৰ ইনক’গনিট’ ছেশ্বন: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">"<ph name="EXTENSION_NAME" />" সম্পর্কীয় দুৰ্ব্যৱহাৰৰ অভিযোগ দিয়ক</translation> <translation id="5696679855467848181">বৰ্তমান ব্যৱহৃত হৈ থকা PPD ফাইল: <ph name="PPD_NAME" /></translation> @@ -3605,6 +3642,7 @@ <translation id="5901630391730855834">হালধীয়া</translation> <translation id="5906655207909574370">প্ৰায় আপ টু ডে’ট! আপডে’ট কৰা সম্পূৰ্ণ কৰিবলৈ আপোনাৰ ডিভাইচটো ৰিষ্টার্ট কৰক।</translation> <translation id="5906732635754427568">এই এপ্টোৰ সৈতে জড়িত ডেটা এই ডিভাইচটোৰ পৰা আঁতৰোৱা হ’ব।</translation> +<translation id="5908695239556627796">মাউছ স্ক্ৰ’লৰ গতিবেগ</translation> <translation id="5908769186679515905">ছাইটসমূহে Flash চলোৱা কার্য অৱৰোধ কৰক</translation> <translation id="5910363049092958439">এইবুলি প্ৰতিচ্ছবি ছে&ভ কৰক...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> অফলাইন হৈ আছে</translation> @@ -3665,6 +3703,7 @@ <translation id="5976160379964388480">অন্য</translation> <translation id="5978277834170881274">&সাধাৰণ বানান পৰীক্ষক ব্যৱহাৰ কৰক</translation> <translation id="5979084224081478209">পাছৱৰ্ডবোৰ পৰীক্ষা কৰক</translation> +<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{আপুনি ১ টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}one{আপুনি {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}other{আপুনি {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}}</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" />লৈ &অনুবাদ কৰক</translation> <translation id="5979469435153841984">কোনো এটা পৃষ্ঠা বুকমাৰ্ক কৰিবলৈ ঠিকনাৰ বাৰত থকা তৰাচিহ্নত ক্লিক কৰক</translation> <translation id="5984222099446776634">শেহতীয়াকৈ চোৱা</translation> @@ -3915,6 +3954,7 @@ <translation id="6309510305002439352">মাইক্ৰ'ফ'ন অফ কৰা হ'ল</translation> <translation id="6311220991371174222">আপোনাৰ প্ৰফাইল খোলোঁতে কিবা ভুল হোৱাৰ বাবে Chrome আৰম্ভ কৰিব নোৱাৰি। Chrome ৰিষ্টার্ট কৰিবলৈ চেষ্টা কৰক।</translation> <translation id="6312403991423642364">অজ্ঞাত নেটৱর্কৰ আসোঁৱাহ</translation> +<translation id="6312567056350025599">{NUM_DAYS,plural, =1{১ দিন পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}one{{NUM_DAYS} দিন পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}other{{NUM_DAYS} দিন পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}}</translation> <translation id="6312638141433622592">সমর্থিত হ'লে, প্ৰবন্ধসমূহ ৰীডাৰ ম’ডত দেখুৱাবলৈ চুপাৰিছ কৰক</translation> <translation id="6313641880021325787">VRৰ পৰা বাহিৰ হওক</translation> <translation id="6314819609899340042">আপুনি এই <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইচটোত ডিবাগ কৰাৰ সুবিধাবোৰ সক্ষম কৰিলে।</translation> @@ -3930,6 +3970,7 @@ <translation id="6325191661371220117">স্বয়ংক্ৰিয়ভাৱে লঞ্চ হোৱা সুবিধাটো অক্ষম কৰক</translation> <translation id="6326175484149238433">Chromeৰ পৰা আঁতৰাওক</translation> <translation id="6326855256003666642">সক্রিয় ৰখাৰ সংখ্যা</translation> +<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" />ৰ বাবে আপুনি নির্ধাৰিত সময়সীমা পাৰ হোৱাৰ পূর্বে এই ডিভাইচটো আপডে’ট কৰাটো আৱশ্যক।</translation> <translation id="6327785803543103246">ৱেব প্ৰক্সিৰ স্বয়ংক্রিয় চিনাক্তকৰণ</translation> <translation id="6333064448949140209">ডিবাগ কৰাৰ বাবে Google লৈ ফাইল পঠিওৱা হ’ব</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" />ৰ বাবে এটা নতুন প্ৰ’ফাইল সৃষ্টি কৰক</translation> @@ -3956,11 +3997,13 @@ <translation id="6366190659675876144">মানক সুৰক্ষা</translation> <translation id="636850387210749493">এন্টাৰপ্ৰাইজৰ পঞ্জীয়ন</translation> <translation id="6370021412472292592">মেনিফেষ্ট ল’ড কৰিব পৰা নগ’ল।</translation> +<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{পাছৱৰ্ড সলনি কৰক}one{পাছৱৰ্ডসমূহ সলনি কৰক}other{পাছৱৰ্ডসমূহ সলনি কৰক}}</translation> <translation id="6374077068638737855">আইচৱিজল</translation> <translation id="6374469231428023295">আকৌ চেষ্টা কৰক</translation> <translation id="6377268785556383139">’<ph name="SEARCH_TEXT" />’ৰ বাবে পোৱা ১টা ফলাফল</translation> <translation id="6380143666419481200">গ্ৰহণ কৰি অব্যাহত ৰাখক</translation> <translation id="6384275966486438344">আপোনাৰ সন্ধানৰ ছেটিংসমূহ ইয়ালৈ সলনি কৰক: <ph name="SEARCH_HOST" /></translation> +<translation id="6385149369087767061">ইণ্টাৰনেটৰ লগত সংযোগ কৰি আকৌ চেষ্টা কৰক</translation> <translation id="6385543213911723544">ছাইটসমূহে কুকী ডেটা ছেভ কৰিব আৰু পঢ়িব পাৰে</translation> <translation id="6386099547750337629">যদি এয়া অপ্ৰত্যাশিত, অনুগ্ৰহ কৰি সহায়তা কেন্দ্ৰৰ সৈতে যোগাযোগ কৰক।</translation> <translation id="6387674443318562538">উলম্বভাৱে বিভাজন কৰক</translation> @@ -4038,6 +4081,7 @@ <translation id="6478248366783946499">বিপজ্জনক ফাইলটো ৰাখিবনে?</translation> <translation id="6483485061007832714">ডাউনল’ড কৰা ফাইল খোলক</translation> <translation id="6483805311199035658"><ph name="FILE" /> খুলি থকা হৈছে...</translation> +<translation id="6485092675191826776">Plugin VMৰ অনুজ্ঞাপত্ৰৰ ম্যাদ উকলিল</translation> <translation id="6488384360522318064">ভাষা বাছনি কৰক</translation> <translation id="648927581764831596">উপলব্ধ নহয়</translation> <translation id="6490471652906364588">USB-C ডিভাইচ (সোঁফালৰ পর্ট)</translation> @@ -4225,6 +4269,7 @@ <translation id="6762833852331690540">অন আছে</translation> <translation id="6767566652486411142">অন্য এটা ভাষা বাছনি কৰক...</translation> <translation id="6767639283522617719">ড’মেইনটোত যোগদান কৰিব নোৱাৰি। সংস্থাৰ ইউনিটৰ বাবে ছেটিংসমূহ শুদ্ধ বুলি নিশ্চিত কৰক।</translation> +<translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" />এ আপুনি এই ডিভাইচটো আপডে’ট কৰাটো চুপাৰিছ কৰে।</translation> <translation id="6769712124046837540">প্ৰিণ্টাৰ যোগ কৰি থকা হৈছে...</translation> <translation id="6770602306803890733">আপোনাৰ লগতে ৱেবত থকা প্ৰত্যেকজনৰ বাবে সুৰক্ষা উন্নত কৰে</translation> <translation id="6770664076092644100">NFCৰ মাধ্যমেৰে সত্যাপন কৰক</translation> @@ -4357,6 +4402,7 @@ <translation id="6943836128787782965">HTTP বিফল হ’ল</translation> <translation id="6945221475159498467">বাছনি কৰক</translation> <translation id="694592694773692225">এই পৃষ্ঠাটোত ৰিডাইৰেক্টৰ সুবিধা অৱৰোধ কৰা আছে।</translation> +<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{১ টা হেক হোৱা পাছৱৰ্ড}one{{NUM_PASSWORDS} টা হেক হোৱা পাছৱৰ্ড}other{{NUM_PASSWORDS} টা হেক হোৱা পাছৱৰ্ড}}</translation> <translation id="6949434160682548041">পাছৱর্ড (ঐচ্ছিক)</translation> <translation id="6950627417367801484">এপসমূহ পুনঃস্থাপন কৰক</translation> <translation id="6950943362443484797">আমি আপোনৰ বাবে সেই এপ্টো ইনষ্টল কৰিম</translation> @@ -4441,6 +4487,7 @@ <translation id="7053983685419859001">অৱৰোধ কৰক</translation> <translation id="7055152154916055070">পুনৰ নির্দেশ কৰাটো অৱৰোধ কৰা হৈছে</translation> <translation id="7056526158851679338">ডিভাইচ &নিৰীক্ষণ কৰক</translation> +<translation id="7057184853669165321">{NUM_MINS,plural, =1{১ মিনিট পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}one{{NUM_MINS} মিনিট পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}other{{NUM_MINS} মিনিট পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}}</translation> <translation id="7057767408836081338">এপ্ ডেটা আহৰণ কৰিব পৰা নগ’ল, যি হ’লেও এপ্টো চলাবলৈ চেষ্টা কৰি থকা হৈছে…</translation> <translation id="7059858479264779982">স্বয়ংক্ৰিয়ভাৱে লঞ্চ হ’বলৈ ছেট কৰক</translation> <translation id="7059893117020417984">ব্যক্তিগতভাৱে ব্ৰাউজ কৰিবলৈ বিন্দু আইকন মেনুত ক্লিক কৰি এখন ইনক'গনিট' ৱিণ্ড' খোলক</translation> @@ -4683,6 +4730,7 @@ <translation id="7371006317849674875">আৰম্ভণিৰ সময়</translation> <translation id="7371490947952970241">আপুনি এই ডিভাইচটোত মূল অৱস্থানৰ ছেটিংটো অফ ৰাখি অৱস্থান অফ কৰিব পাৰে। আপুনি অৱস্থানৰ ছেটিংসমূহত অৱস্থানৰ বাবে ৱাই-ফাই, ম’বাইল নেটৱৰ্ক আৰু ছেন্সৰসমূহ ব্যৱহাৰ কৰাটো অফ কৰিবও পাৰে।</translation> <translation id="7375053625150546623">EAP</translation> +<translation id="7375235221357833624">{0,plural, =1{এঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# ঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# ঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation> <translation id="7376553024552204454">গতি কৰিলে মাউছৰ কাৰ্ছৰ হাইলাইট কৰক</translation> <translation id="7377451353532943397">ছেন্সৰৰ এক্সেছ অৱৰোধ কৰাটো অব্যাহত ৰাখক</translation> <translation id="73786666777299047">Chrome Web Store খোলক</translation> @@ -4700,6 +4748,7 @@ <translation id="7400418766976504921">URL</translation> <translation id="7400839060291901923">আপোনাৰ <ph name="PHONE_NAME" />ত সংযোগ ছেট আপ কৰক</translation> <translation id="7401778920660465883">এই বাৰ্তাটো বাতিল কৰক</translation> +<translation id="7405938989981604410">{NUM_HOURS,plural, =1{১ ঘণ্টা পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}one{{NUM_HOURS} ঘণ্টা পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}other{{NUM_HOURS} ঘণ্টা পূর্বে সুৰক্ষা পৰীক্ষা চলোৱা হৈছিল}}</translation> <translation id="740624631517654988">পপ-আপ অৱৰোধ কৰা হ’ল</translation> <translation id="7407430846095439694">আমদানি কৰক আৰু সংযুক্ত কৰক</translation> <translation id="7407504355934009739">অধিকাংশ লোকে এই ছাইটটোৰ জাননীসমূহ অৱৰোধ কৰে</translation> @@ -4730,6 +4779,7 @@ <translation id="7441830548568730290">অন্য ব্যৱহাৰকাৰী</translation> <translation id="7442465037756169001">আপোনাৰ Hangouts Meetৰ হাৰ্ডৱেৰ ছেট আপ কৰিবলৈ সাজু আছে।</translation> <translation id="744341768939279100">কোনো নতুন প্ৰ’ফাইল সৃষ্টি কৰক</translation> +<translation id="744366959743242014">ডেটা ল’ড কৰি থকা হৈছে, ইয়াৰ বাবে আৰু কেইছেকেণ্ডমান সময় লাগিব পাৰে।</translation> <translation id="7443806024147773267">আপুনি আপোনাৰ Google একাউণ্টত ছাইন ইন হৈ থাকিলে নিজৰ পাছৱৰ্ডসমূহ এক্সেছ কৰক</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> অক্ষম কৰক</translation> <translation id="7448430327655618736">এপ্সমূহ স্বয়ংক্ৰিয়ভাৱে ইনষ্টল কৰক</translation> @@ -4765,6 +4815,7 @@ <translation id="7489761397368794366">আপোনাৰ ডিভাইচৰ পৰা কল কৰক</translation> <translation id="749028671485790643">প্ৰ'ফাইল <ph name="VALUE" /></translation> <translation id="7490813197707563893">MAC ঠিকনা</translation> +<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{১ টা কুকী}one{{NUM_COOKIES} টা কুকী}other{{NUM_COOKIES} টা কুকী}}</translation> <translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> এক্সটেনশ্বনে পাছৱৰ্ড আৰু ক্ৰেডিট কাৰ্ডৰ নম্বৰৰ দৰে ব্যক্তিগত ডেটাক সামৰি আপুনি টাইপ কৰা সকলো পাঠ সংগ্ৰহ কৰিব পাৰে৷ আপুনি এই এক্সটেনশ্বন ব্যৱহাৰ কৰিব বিচাৰেনে?</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">আপোনাৰ পুৰণা পাছৱৰ্ড পাহৰিলে নেকি?</translation> @@ -4785,10 +4836,14 @@ <translation id="7513029293694390567">ষ্ট’ৰ কৰি থোৱা ক্ৰিডেনশ্বিয়েল ব্যৱহাৰ কৰি ৱেবছাইটত স্বয়ংক্রিয়ভাৱে ছাইন ইন কৰক। যদি অক্ষম কৰি ৰখা হয় তেন্তে প্ৰতিবাৰ কোনো ৱেবছাইটত ছাইন ইন কৰাৰ সময়ত আপোনাক নিশ্চিত কৰিবলৈ কোৱা হ’ব।</translation> <translation id="7514239104543605883">আপোনাৰ ডিভাইচটোলৈ প্ৰতিলিপি কৰক</translation> <translation id="7514365320538308">ডাউনল'ড কৰক</translation> +<translation id="751523031290522286">প্ৰশাসকে <ph name="APP_NAME" /> অৱৰোধ কৰিছে। এই এপ্টো ব্যৱহাৰ কৰিবলৈ প্ৰশাসকৰ পৰা অনুমতি বিচাৰক।</translation> +<translation id="7516981202574715431"><ph name="APP_NAME" /> পজ কৰা হৈছে</translation> +<translation id="7517063221058203587">{0,plural, =1{১ মিনিটৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# মিনিটৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# মিনিটৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation> <translation id="7520766081042531487">ইনক’গনিট’ পর্টেল: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">"Ok Google" বুলি কওক</translation> <translation id="7525067979554623046">সৃষ্টি কৰক</translation> +<translation id="7526658513669652747">{NUM_DOWNLOADS,plural, =1{আৰু ১ টা}one{আৰু {NUM_DOWNLOADS} টা}other{আৰু {NUM_DOWNLOADS} টা}}</translation> <translation id="7529411698175791732">আপোনাৰ ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰক। তথাপিও যদি সমস্যাটো থাকেই, ছাইন আউট কৰি পুনৰ ছাইন ইন কৰি চাওক।</translation> <translation id="7530016656428373557">চ্চাৰ্জ খৰচ হোৱাৰ হাৰ ৱাট এককত</translation> <translation id="7531779363494549572">ছেটিংসমূহ > এপ্ আৰু জাননী > জাননী-লৈ যাওক</translation> @@ -4955,6 +5010,7 @@ <translation id="7765158879357617694">আঁতৰাওক</translation> <translation id="7766807826975222231">ভ্ৰমণৰ অভিজ্ঞতা লওক</translation> <translation id="7766838926148951335">অনুমতিসমূহ গ্ৰহণ কৰক</translation> +<translation id="7768770796815395237">সলনি কৰক</translation> <translation id="7769672763586021400">ম’ডেল আইডি:</translation> <translation id="7770651108375708429">ৱাই-ফাইৰ সংযোগ বিচ্ছিন্ন কৰক</translation> <translation id="7771452384635174008">লে’ইআউট</translation> @@ -5027,6 +5083,7 @@ <ph name="BEGIN_BOLD" />টোকা:<ph name="END_BOLD" /> প্ৰক্ৰিয়াটো চলি থাকোতে ছিষ্টেমটো ৰিবুট হ‘ব।</translation> <translation id="7828731929332799387">এইটোৱে তৃতীয় পক্ষৰ প্ৰসংগত উপলব্ধ সকলো কুকি আৰু ছাইটৰ ডেটা মচিব। আপুনি অব্যাহত ৰাখিবলৈ বিচাৰেনে?</translation> <translation id="7829298379596169484">অডিঅ’ ইনপুট এক্সেছ কৰি আছে</translation> +<translation id="7829877209233347340">বিদ্যালয়ৰ এটা একাউণ্ট যোগ দিয়াৰ অনুমতি দিবলৈ এগৰাকী অভিভাৱকক ছাইন ইন কৰিবলৈ কওক</translation> <translation id="7830594666202422257">Linuxৰ সৈতে সংযোগ কৰক</translation> <translation id="7831491651892296503">নেটৱৰ্ক কনফিগাৰ কৰাত আসোঁৱাহ</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5390,6 +5447,7 @@ <translation id="8286963743045814739">আপুনি এখন ইনকগনিট‘ ৱিণ্ড‘ ব্যৱহাৰ কৰি ব্যক্তিগতভাৱে ব্ৰাউজ কৰিব পাৰে</translation> <translation id="8287902281644548111">API কল/URLৰ দ্বাৰা সন্ধান কৰক</translation> <translation id="8288032458496410887"><ph name="APP" /> আনইনষ্টল কৰক ...</translation> +<translation id="8289128870594824098">ডিস্কৰ আকাৰ</translation> <translation id="8291967909914612644">গৃহ প্ৰদানকাৰী দেশ</translation> <translation id="8294431847097064396">উৎস</translation> <translation id="8297006494302853456">দুৰ্বল</translation> @@ -5601,6 +5659,7 @@ <translation id="8608618451198398104">এটা Kerberos টিকেট যোগ কৰক</translation> <translation id="8609465669617005112">ওপৰলৈ নিয়ক</translation> <translation id="8610103157987623234">অশুদ্ধ ফর্মেট, অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক</translation> +<translation id="8612935480510351790"><ph name="FILE_NAME" /> বিপজ্জনক হ’ব পাৰে। স্কেন কৰিবলৈ Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাটোলৈ পঠিয়াবনে?</translation> <translation id="8613164732773110792">কেৱল সৰুফলাৰ বৰ্ণ, অংক, আণ্ডাৰস্ক’ৰ অথবা ডেশ্বসমূহ</translation> <translation id="8615618338313291042">ইনক’গনিট’ এপ্: <ph name="APP_NAME" /></translation> <translation id="8619803522055190423">ছাঁযুক্ত আখৰ</translation> @@ -5628,6 +5687,7 @@ <translation id="8641606876632989680">আপুনি কোনো হেক কৰা পাছৱৰ্ডৰ জৰিয়তে ছাইন ইন কৰিলে Chromeএ আপোনাক জাননী দিব</translation> <translation id="8642900771896232685">২ছেকেণ্ড</translation> <translation id="8642947597466641025">পাঠৰ আকাৰ ডাঙৰ কৰক</translation> +<translation id="8643443571868262066"><ph name="FILE_NAME" /> বিপজ্জনক হ’ব পাৰে। স্কেন কৰিবলৈ Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাটোলৈ পঠিয়াবনে?</translation> <translation id="8644655801811752511">এই সুৰক্ষা চাবিটো ৰিছেট কৰিব নোৱাৰি। চাবিটো ভৰোৱাৰ লগে লগে সেইটো ৰিছেট কৰি চাওক।</translation> <translation id="8645354835496065562">ছেন্সৰৰ এক্সেছ প্ৰদান কৰা কার্য অব্যাহত ৰাখক</translation> <translation id="8645920082661222035">বিপজ্জনক ঘটনাবোৰৰ সম্পর্কে অনুমান কৰে আৰু সেইবোৰ ঘটাৰ পূর্বে আপোনাক সকীয়নি দিয়ে</translation> @@ -5776,6 +5836,7 @@ <translation id="8808686172382650546">মেকুৰী</translation> <translation id="8808744862003883508">এই পৃষ্ঠাখনত আপুনি Chromeত ইনষ্টল হৈ থকা সকলো এক্সটেনশ্বন চাব পাৰে।</translation> <translation id="8809147117840417135">পাতল নীলা</translation> +<translation id="8812593354822910461">লগতে ব্ৰাউজিঙৰ ডেটাও (<ph name="URL" />) মচক যিয়ে আপোনাক <ph name="DOMAIN" />ৰ পৰা ছাইন আউট কৰাব। <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />ত ছাইন ইন কৰিব নোৱাৰি</translation> <translation id="8813811964357448561">কাগজৰ সংখ্যা</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" অনুমোদন জনাবলৈ এগৰাকী অভিভাৱক বিচাৰক</translation> @@ -6048,6 +6109,7 @@ <translation id="9169931577761441333"><ph name="APP_NAME" />ক গৃহ স্ক্ৰীণত যোগ কৰক</translation> <translation id="9170848237812810038">&আনডু কৰক</translation> <translation id="9170884462774788842">আপোনাৰ কম্পিউটাৰৰ অন্য এটা প্ৰ’গামে যোগ কৰা থীমে Chromeৰ কার্যপ্ৰণালী সলনি কৰিব পাৰে।</translation> +<translation id="917350715406657904">আপোনাৰ অভিভাৱকে <ph name="APP_NAME" />ৰ বাবে ছেট কৰা সীমাত আপুনি উপনীত হৈছে। আপুনি এইটো কাইলৈ <ph name="TIME_LIMIT" />ৰ বাবে ব্যৱহাৰ কৰিব পাৰিব।</translation> <translation id="9173995187295789444">ব্লুটুথ ডিভাইচ স্কেন কৰি থকা হৈছে...</translation> <translation id="9174401638287877180">ব্যৱহাৰ আৰু ডায়গনষ্টিক ডেটা পঠিয়াওক। Googleলৈ স্বয়ংক্ৰিয়ভাৱে ডাইগনষ্টিক, ডিভাইচ আৰু এপ্ ব্যৱহাৰৰ ডেটা পঠিয়াই আপোনাৰ শিশুৰ Android ব্যৱহাৰৰ অভিজ্ঞতা উন্নত কৰক। এই ডেটাখনি আপোনাৰ শিশুক চিনাক্ত কৰিবলৈ ব্যৱহাৰ কৰা নহয় আৰু ই ছিষ্টেম আৰু এপৰ স্থিৰতা আৰু অন্য উন্নয়নত সহায় কৰিব। কিছুমান একত্ৰিত ডেটাই Google এপ্ আৰু Android বিকাশকৰ্তাৰ দৰে অংশীদাৰকো সহায় কৰিব। যদি আপোনাৰ শিশুৰ বাবে অতিৰিক্ত ৱেব আৰু এপৰ কার্যকলাপ অন কৰা হয়, তেন্তে এই ডেটা তেওঁৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে।</translation> <translation id="917510707618656279">কোনো ছাইটে ব্লুটুথ ডিভাইচসমূহ এক্সেছ কৰিবলৈ বিচাৰিলে সোধক</translation> @@ -6064,6 +6126,7 @@ <translation id="9203398526606335860">&প্ৰ’ফিলিং সক্ষম কৰা হৈছে</translation> <translation id="9203904171912129171">এটা ডিভাইচ বাছনি কৰক</translation> <translation id="9203962528777363226">এই ডিভাইচৰ প্ৰশাসকে নতুন ব্যৱহাৰকাৰী যোগ কৰা সুবিধাটো অক্ষম কৰিছে</translation> +<translation id="9209689095351280025">ছাইটসমূহে আপোনাক সমগ্ৰ ৱেবত ট্ৰেক কৰা কুকিসমূহ ব্যৱহাৰ কৰিব নোৱাৰে</translation> <translation id="9211177926627870898">আপডে'টৰ প্ৰয়োজন</translation> <translation id="9214520840402538427">আমি দুঃখিত! ইনষ্টল কৰা সময়ৰ এট্রিবিউট আৰম্ভ কৰাৰ সময় সমাপ্ত হ’ল। আপোনাৰ সহায়ক প্ৰতিনিধিৰ সৈতে যোগাযোগ কৰক।</translation> <translation id="9214695392875603905">কাপকে’ক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index cb1e389..9ca66901 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -190,6 +190,7 @@ <translation id="1243314992276662751">Yükləyin</translation> <translation id="1244265436519979884">Linux hazırda bərpa edilir</translation> <translation id="1244303850296295656">Artırma xətası</translation> +<translation id="1246158006305844142">Tətbiqlər və ayarlarınız Google hesabınız ilə daxil olduğunuz bütün Chrome ƏS cihazlarında sinxronlaşdırılacaq. Brauzerin sinxronlaşdırma seçimləri üçün <ph name="LINK_BEGIN" />Chrome ayarları<ph name="LINK_END" /> bölməsinə keçin.</translation> <translation id="1246905108078336582">Təklif mübadilə buferindən silinsin?</translation> <translation id="1249643471736608405">İstifadə vaxtının bitməsinə görə <ph name="PLUGIN_NAME" /> blok edildi</translation> <translation id="1251366534849411931">Sol fiqurlu mötərizə gözlənilir: <ph name="ERROR_LINE" /></translation> @@ -389,6 +390,7 @@ <translation id="1524563461097350801">Xeyr, təşəkkürlər</translation> <translation id="1525740877599838384">Məkanı müəyyən etmək üçün yalnız Wi-Fi istifadə edin</translation> <translation id="152629053603783244">Linux'u yenidən başladın</translation> +<translation id="1526335046150927198">Taçpedin sürüşdürmə sürətini aktivləşdirin</translation> <translation id="1526560967942511387">Başlıqsız Sənəd</translation> <translation id="1529891865407786369">Enerji mənbəyi</translation> <translation id="1530838837447122178">Maus və taçped cihaz ayarlarını açın</translation> @@ -455,6 +457,7 @@ <translation id="1616206807336925449">Bu artırma xüsusi icazələr tələb etmir.</translation> <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" artırmasını import etmək olmur, çünki o paylaşılmış modul deyil</translation> <translation id="1618268899808219593">Yardım mərkəzi</translation> +<translation id="1620307519959413822">Yanlış parol. Yenidən cəhd edin və ya sıfırlamaq üçün "Parolu unutmuşam" seçiminə klikləyin.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Şəkillər hazırda əlçatan deyil. Kolleksiyalara baxmaq üçün yenidən internetə qoşulun.</translation> <translation id="1627276047960621195">Fayl Açıqlayıcıları</translation> @@ -673,6 +676,7 @@ <translation id="1887850431809612466">Avadanlıq versiyası</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Tam ekran açın</translation> +<translation id="1892341345406963517">Salam <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Digər dillərdə</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> qalır</translation> <translation id="1895658205118569222">Söndürün</translation> @@ -1308,6 +1312,7 @@ <translation id="2725200716980197196">Şəbəkə bağlantısı bərpa edildi</translation> <translation id="2727633948226935816">Daha yadıma salmayın</translation> <translation id="2727712005121231835">Aktual Ölçü</translation> +<translation id="2729314457178420145">Həmçinin baxış datasını (<ph name="URL" />) silin, bunun nəticəsində Google.com ünvanından çıxa bilərsiniz. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux tətbiq və faylları yedəklənir</translation> <translation id="273093730430620027">Bu səhifə kameranıza daxil olur.</translation> <translation id="2731392572903530958">Qapadılmış Pəncərəni yenidən açın</translation> @@ -2159,6 +2164,7 @@ <translation id="3838486795898716504">Daha çox <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Kuki və digər sayt və plagin data</translation> <translation id="383891835335927981">Heç bir sayt yaxınlaşdırılmayıb və ya uzaqlaşdırılmayıb</translation> +<translation id="3839509547554145593">Siçanın sürüşdürmə sürətini aktivləşdirin</translation> <translation id="3839516600093027468">Həmişə <ph name="HOST" /> hostunun buferi görməsini blok edin</translation> <translation id="3841964634449506551">Parol yanlışdır</translation> <translation id="3842552989725514455">Serif şrifti</translation> @@ -2768,6 +2774,7 @@ <translation id="4699172675775169585">Keşlənmiş şəkillər və fayllar</translation> <translation id="4699357559218762027">(avto-başlatma)</translation> <translation id="470074695271471509">Tamamlamaq üçün hesabdan çıxılsın?</translation> +<translation id="4701025263201366865">Valideyn girişi</translation> <translation id="4707302005824653064">İstifadə və tarixçə (<ph name="CUSTODIAN_EMAIL" />) on chrome.com saytındakı menecer tərəfindən nəzərdən keçirilə bilər.</translation> <translation id="4707579418881001319">L2TP/IPsec + istifadəçi sertifikatı</translation> <translation id="4708794300267213770">Oyanarkən ekran kilidi göstərilsin</translation> @@ -3075,6 +3082,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Axtarış</translation> <translation id="5139823398361067371">Təhlükəsizlik açarı üçün PIN daxil edin. PIN-i bilmirsinizsə, təhlükəsizlik açarını sıfırlamalısınız.</translation> <translation id="5139955368427980650">Açın</translation> +<translation id="5142793792982256885">Taçpedin sürüşdürmə sürəti</translation> <translation id="5142961317498132443">İdentifikasiya</translation> <translation id="5143374789336132547">"<ph name="EXTENSION_NAME" />" artırması əsas səhifə düyməsinə kliklədiyiniz zaman hansı səhifənin göstərildiyini dəyişdi.</translation> <translation id="5143712164865402236">Tam Ekrana Daxil Olun</translation> @@ -3120,6 +3128,7 @@ <translation id="5213891612754844763">Proksi ayarlarını göstərin</translation> <translation id="5215502535566372932">Ölkə seçin</translation> <translation id="521582610500777512">Fotoşəkil kənarlaşdırıldı</translation> +<translation id="5222403284441421673">Təhlükəli endirmə blok edildi</translation> <translation id="5222676887888702881">Hesabdan çıxın</translation> <translation id="52232769093306234">Qablaşdırma alınmadı.</translation> <translation id="5225324770654022472">Tətbiqlərin qısayolunu göstərin</translation> @@ -3518,6 +3527,7 @@ <translation id="5734362860645681824">Əlaqələr</translation> <translation id="5734697361979786483">Fayl paylaşımı əlavə edin</translation> <translation id="5736796278325406685">Etibarlı istifadəçi adı daxil edin</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> adlı istifadəçiyə məktəb hesabı əlavə etməkdə yardım etmək üçün daxil olun</translation> <translation id="5739235828260127894">Doğrulama gözlənilir. <ph name="LINK_BEGIN" />Ətraflı məlumat.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Çox böyük</translation> <translation id="574209121243317957">Pitç</translation> @@ -3637,6 +3647,7 @@ <translation id="5901630391730855834">Sarı</translation> <translation id="5906655207909574370">Güncəllənmək üzrədir! Güncəlləməni tamamlamaq üçün cihazı yenidən başladın.</translation> <translation id="5906732635754427568">Bu tətbiqlə bağlı data cihazdan silinəcək.</translation> +<translation id="5908695239556627796">Siçanın sürüşdürmə sürəti</translation> <translation id="5908769186679515905">Saytları Fləş işlətməyə qarşı blok edin</translation> <translation id="5910363049092958439">Şəklin saxlanma formatı:</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> oflayndır</translation> @@ -5082,6 +5093,7 @@ <ph name="BEGIN_BOLD" />Qeyd:<ph name="END_BOLD" /> Əməliyyat zamanı sistem yenidən işə başlayacaq.</translation> <translation id="7828731929332799387">Bu zaman üçüncü tərəf kontekstlərində əlçatan olan bütün kuki və sayt datası silinəcək. Davam etmək istəyirsiniz?</translation> <translation id="7829298379596169484">Audio daxiletmə əldə olunur</translation> +<translation id="7829877209233347340">Məktəb hesabı əlavə etmək icazəsi verməsi üçün valideyndən daxil olmasını istəyin</translation> <translation id="7830594666202422257">Linux'a qoşulun</translation> <translation id="7831491651892296503">Şəbəkə konfiqurasiya xətası</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5520,6 +5532,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> şəbəkəsi, qoşulur</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Öncə soruşun (tövsiyə olunur)</translation> +<translation id="8417548266957501132">Valideyn parolu</translation> <translation id="8417573335434189196">Sizi təhlükəli veb sayt, endirmə və ya artırmalardan qorumur. Chrome bu ayarlamanı tövsiyə etmir.</translation> <translation id="8418445294933751433">Panel kimi göstərin</translation> <translation id="8419098111404128271">"<ph name="SEARCH_TEXT" />" üçün axtarış nəticələri</translation> @@ -5832,6 +5845,7 @@ <translation id="8808686172382650546">Pişik</translation> <translation id="8808744862003883508">Bu səhifədə Chrome'da quraşdırılmış bütün artırmaları görə bilərsiniz.</translation> <translation id="8809147117840417135">Açıq-firuzəyi</translation> +<translation id="8812593354822910461">Həmçinin baxış datasını (<ph name="URL" />) silin, bunun nəticəsində <ph name="DOMAIN" /> ünvanından çıxacaqsınız. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> istifadəçi adına daxil ola bilməz</translation> <translation id="8813811964357448561">kağız vərəq</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" təsdiq etməsi üçün valideyninizə müraciət edin</translation> @@ -6121,6 +6135,7 @@ <translation id="9203398526606335860">&Profilləşdirmə aktivdir</translation> <translation id="9203904171912129171">Cihaz seçin</translation> <translation id="9203962528777363226">Bu cihazın administratoru yeni istifadəçilərin əlavə edilməsini qadağan edib</translation> +<translation id="9209689095351280025">Saytlar vebdə sizi izləyən kukilərdən istifadə edə bilmir</translation> <translation id="9211177926627870898">Güncəlləmə tələb olunur</translation> <translation id="9214520840402538427">Heheey! Quraşdırma vaxtı atributlarının işəsalınma vaxtı keçdi. Dəstək təmsilçinizlə əlaqə saxlayın.</translation> <translation id="9214695392875603905">Kapkeyk</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 9c67710..e7ef95ecd 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Запампаваць</translation> <translation id="1244265436519979884">Ідзе аднаўленне кантэйнера Linux</translation> <translation id="1244303850296295656">Памылка пашырэння</translation> +<translation id="1246158006305844142">Праграмы і налады будуць сінхранізавацца на ўсіх прыладах Chrome OS, з якіх вы ўвайшлі ва Уліковы запіс Google. Параметры сінхранізацыі браўзера можна выбраць у <ph name="LINK_BEGIN" />наладах Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Выдаліць прапанову з буфера абмену?</translation> <translation id="1249643471736608405">Убудова "<ph name="PLUGIN_NAME" />" заблакіравана, бо яна састарэлая</translation> <translation id="1251366534849411931">Чакалася пачатковая фігурная дужка: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Не, дзякуй</translation> <translation id="1525740877599838384">Вызначаць месцазнаходжанне толькі праз Wi-Fi</translation> <translation id="152629053603783244">Перазапусціць Linux</translation> +<translation id="1526335046150927198">Уключыць паскарэнне прагорткі сэнсарнай панэллю</translation> <translation id="1526560967942511387">Дакумент без назвы</translation> <translation id="1529891865407786369">Крыніца сілкавання</translation> <translation id="1530838837447122178">Адкрыць налады мышы і сэнсарнай панэлі</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Пашырэнне не патрабуе спецыяльных дазволаў.</translation> <translation id="1616298854599875024">Не ўдалося імпартаваць пашырэнне "<ph name="IMPORT_NAME" />": гэта не абагулены модуль</translation> <translation id="1618268899808219593">Да&ведачны цэнтр</translation> +<translation id="1620307519959413822">Няправільны пароль. Паўтарыце спробу або націсніце на словы "Забылі пароль?", каб скінуць яго.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Відарысы пакуль што недаступныя. Каб паглядзець калекцыі шпалер, падключыцеся да інтэрнэту.</translation> <translation id="1627276047960621195">Дэскрыптары файлаў</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Версія апаратнага забеспячэння</translation> <translation id="1890674179660343635"><span>Ідэнтыфікатар: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Адкрыць у поўнаэкранным рэжыме</translation> +<translation id="1892341345406963517">Вітаем, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Іншыя мовы</translation> <translation id="1895252664692693738">Засталося: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Завяршэнне працы</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Падключэнне да сеткі адноўлена</translation> <translation id="2727633948226935816">Больш не напамінаць</translation> <translation id="2727712005121231835">Фактычны памер</translation> +<translation id="2729314457178420145">Таксама выдаліць гісторыю праглядаў сайта (<ph name="URL" />). (Гэта можа прывесці да выхаду з уліковага запісу на дамене Google.com.) <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Ідзе рэзервовае капіраванне файлаў і праграм Linux</translation> <translation id="273093730430620027">Гэта старонка выкарыстоўвае камеру.</translation> <translation id="2731392572903530958">Паў&торна адкрыць закрытае акно</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Яшчэ адна старонка "<ph name="PAGE_TITLE" />"</translation> <translation id="3838543471119263078">Файлы cookies і іншыя даныя сайтаў і ўбудоў</translation> <translation id="383891835335927981">Маштаб на сайтах не змяняўся</translation> +<translation id="3839509547554145593">Уключыць паскарэнне прагорткі мышшу</translation> <translation id="3839516600093027468">Заўсёды блакіраваць хосту <ph name="HOST" /> доступ да буфера абмену</translation> <translation id="3841964634449506551">Пароль няправільны</translation> <translation id="3842552989725514455">Шрыфт з засечкамі</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Відарысы і файлы ў кэшы</translation> <translation id="4699357559218762027">(аўтаматычны запуск)</translation> <translation id="470074695271471509">Выйсці, каб завяршыць?</translation> +<translation id="4701025263201366865">Уваход для бацькоў</translation> <translation id="4707302005824653064">Выкарыстанне і гісторыя могуць праглядацца менеджарам (<ph name="CUSTODIAN_EMAIL" />) на chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + сертыфікат карыстальніка</translation> <translation id="4708794300267213770">Паказваць экран блакіроўкі пры абуджэнні ад сну</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680">Пошук па запыце "<ph name="QUERY_NAME" />" на сайце <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Увядзіце PIN-код для ключа бяспекі. Калі вы не ведаеце PIN-код, спатрэбіцца скінуць налады ключа бяспекі.</translation> <translation id="5139955368427980650">&Адкрыць</translation> +<translation id="5142793792982256885">Хуткасць прагорткі сэнсарнай панэллю</translation> <translation id="5142961317498132443">Аўтэнтыфікацыя</translation> <translation id="5143374789336132547">Пашырэнне "<ph name="EXTENSION_NAME" />" змяніла старонку, якая паказваецца пры націсканні кнопкі галоўнай старонкі.</translation> <translation id="5143712164865402236">Уключыць поўнаэкранны рэжым</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Паказаць налады проксі-сервера</translation> <translation id="5215502535566372932">Выберыце краіну</translation> <translation id="521582610500777512">Фота было адхілена</translation> +<translation id="5222403284441421673">Небяспечная спампоўка заблакіравана</translation> <translation id="5222676887888702881">Выйсці</translation> <translation id="52232769093306234">Памылка запакоўвання.</translation> <translation id="5225324770654022472">Паказваць ярлык праграм</translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Размовы</translation> <translation id="5734697361979786483">Дадаць файлаабменнік</translation> <translation id="5736796278325406685">Увядзіце сапраўднае імя карыстальніка</translation> +<translation id="5739017626473506901">Каб дапамагчы дзіцяці (<ph name="USER_NAME" />) дадаць навучальны ўліковы запіс, увайдзіце</translation> <translation id="5739235828260127894">Чаканне спраўджання. <ph name="LINK_BEGIN" />Даведацца больш<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Вельмі вялікі</translation> <translation id="574209121243317957">Вышыня голасу</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Жоўты</translation> <translation id="5906655207909574370">Амаль гатова! Каб завяршыць абнаўленне, перазапусціце прыладу.</translation> <translation id="5906732635754427568">Даныя, звязаныя з гэтай праграмай, будуць выдалены з гэтай прылады.</translation> +<translation id="5908695239556627796">Хуткасць прагорткі мышшу</translation> <translation id="5908769186679515905">Забараніць сайтам запускаць Flash</translation> <translation id="5910363049092958439">За&хаваць відарыс як...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> па-за сеткай</translation> @@ -4274,7 +4285,7 @@ <translation id="6762833852331690540">Уключана</translation> <translation id="6767566652486411142">Выбраць іншую мову...</translation> <translation id="6767639283522617719">Не ўдаецца далучыцца да дамена. Праверце правільнасць налад арганізацыйнай адзінкі.</translation> -<translation id="6769557323306147204">Арганізацыя "<ph name="ORGANIZATION_NAME" />" рэкамендуе вам абнавіць праграмнае забеспячэнне на гэтай прыладзе</translation> +<translation id="6769557323306147204">Арганізацыя "<ph name="ORGANIZATION_NAME" />" рэкамендуе вам абнавіць праграмнае забеспячэнне на гэтай прыладзе.</translation> <translation id="6769712124046837540">Дадаецца прынтар...</translation> <translation id="6770602306803890733">Павышае бяспеку для вас і іншых карыстальнікаў у інтэрнэце</translation> <translation id="6770664076092644100">Спраўдзіць праз NFC</translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Заўвага:<ph name="END_BOLD" /> пасля запуску гэтага працэсу сістэма перазагрузіцца.</translation> <translation id="7828731929332799387">Будуць выдалены ўсе файлы cookie і даныя сайтаў, даступныя ў старонніх кантэкстах. Працягнуць?</translation> <translation id="7829298379596169484">Выкарыстоўваецца доступ да аўдыяўваходу</translation> +<translation id="7829877209233347340">Папрасіце кагосьці з бацькоў увайсці і дазволіць дадаць навучальны ўліковы запіс</translation> <translation id="7830594666202422257">Падключыць да Linux</translation> <translation id="7831491651892296503">Памылка наладжвання сеткі</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472">Тып сеткі – <ph name="NETWORK_TYPE" />, ідзе падключэнне</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Спачатку запытваць (рэкамендуецца)</translation> +<translation id="8417548266957501132">Бацькоўскі пароль</translation> <translation id="8417573335434189196">Не абараняе ад небяспечных вэб-сайтаў, спамповак і пашырэнняў. Chrome не рэкамендуе гэту наладу.</translation> <translation id="8418445294933751433">&Паказаць як укладку</translation> <translation id="8419098111404128271">Вынікі пошуку па запыце "<ph name="SEARCH_TEXT" />"</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">Кот</translation> <translation id="8808744862003883508">На гэтай старонцы можна бачыць усе ўсталяваныя ў Chrome пашырэнні.</translation> <translation id="8809147117840417135">Светла-бірузовы</translation> +<translation id="8812593354822910461">Таксама выдаліць гісторыю праглядаў сайта (<ph name="URL" />). (Гэта прывядзе да выхаду з уліковага запісу на дамене <ph name="DOMAIN" />.) <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Не ўдаецца ўвайсці ва ўліковы запіс <ph name="USERNAME" /></translation> <translation id="8813811964357448561">аркуш паперы</translation> <translation id="8813872945700551674">Для ўхвалення пашырэння "<ph name="EXTENSION_NAME" />" звярніцеся да бацькоў.</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">&Прафіліраванне ўключана</translation> <translation id="9203904171912129171">Выберыце прыладу</translation> <translation id="9203962528777363226">Адміністратар гэтай прылады выключыў магчымасць дадаваць новых карыстальнікаў</translation> +<translation id="9209689095351280025">Сайты не могуць выкарыстоўваць файлы cookie для адсочвання вас у інтэрнэце</translation> <translation id="9211177926627870898">Патрабуецца абнаўленне</translation> <translation id="9214520840402538427">Памылка! Была пратэрмінавана ініцыялізацыя атрыбутаў installation-time ("усталяванне-час"). Звярніцеся ў службу падтрымкі.</translation> <translation id="9214695392875603905">Кекс</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 87eb643..0fbe0e5 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1944,7 +1944,7 @@ <translation id="3592260987370335752">&Научете повече</translation> <translation id="359283478042092570">Влизане</translation> <translation id="3593965109698325041">Ограничения за името на сертификата</translation> -<translation id="3595381248165458839">Свържете се с администратора на устройства за организацията си</translation> +<translation id="3595381248165458839">Свържете се с администратора на устройства за организацията ви</translation> <translation id="3596235046596950091">Активиране на услугите в облака</translation> <translation id="3596414637720633074">Блокиране на „бисквитките“ на трети страни в режим „инкогнито“</translation> <translation id="3599221874935822507">Повдигната</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 040cfb6..5a1c893 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">আপলোড</translation> <translation id="1244265436519979884">বর্তমানে Linux ফিরিয়ে আনার কাজ চলছে</translation> <translation id="1244303850296295656">এক্সটেনশন সমস্যা</translation> +<translation id="1246158006305844142">আপনার Google অ্যাকাউন্ট দিয়ে করা সমস্ত Chrome OS ডিভাইসে আপনার অ্যাপ এবং সেটিংস সিঙ্ক হয়ে যাবে। ব্রাউজার সিঙ্ক করার বিকল্পের জন্য, <ph name="LINK_BEGIN" />Chrome সেটিংসে যান<ph name="LINK_END" />।</translation> <translation id="1246905108078336582">ক্লিপবোর্ড থেকে সাজেশন সরাতে চান?</translation> <translation id="1249643471736608405">বন্ধ করে দেওয়া হয়েছে বলে <ph name="PLUGIN_NAME" /> ব্লক করা হয়েছে</translation> <translation id="1251366534849411931">প্রত্যাশিত শুরুর সেকেন্ড ব্র্যাকেট: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">না থাক</translation> <translation id="1525740877599838384">লোকেশন নির্ধারণ করার জন্য ওয়াই-ফাই ব্যবহার করুন</translation> <translation id="152629053603783244">Linux রিস্টার্ট করুন</translation> +<translation id="1526335046150927198">টাচপ্যাড স্ক্রল অ্যাক্সিলারেশন চালু করুন</translation> <translation id="1526560967942511387">শিরোনামহীন ডকুমেন্ট</translation> <translation id="1529891865407786369">বিদ্যুতের উৎস</translation> <translation id="1530838837447122178">মাউস এবং টাচপ্যাড ডিভাইস সেটিংস খুলুন</translation> @@ -843,7 +845,7 @@ <translation id="2135787500304447609">&পুনঃসূচনা</translation> <translation id="2136372518715274136">নতুন পাসওয়ার্ড লিখুন</translation> <translation id="2136476978468204130">আপনার লেখা পাসফ্রেজটি ভুল</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{কুকি ব্লক করা আছে।}=1{১টি সাইটের কুকি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}one{{COUNT}টি সাইটের কুকি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}other{{COUNT}টি সাইটের কুকি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{কুকি ব্লক করা আছে।}=1{১টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}one{{COUNT}টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}other{{COUNT}টি ছাড়া বাকি সব সাইটের কুকি ব্লক করা আছে}}</translation> <translation id="2138398485845393913">"<ph name="DEVICE_NAME" />" এর সাথে এখনও সংযোগ করা হচ্ছে</translation> <translation id="2139545522194199494"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, সিগন্যাল: <ph name="SIGNAL_STRENGTH" />%, আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে, কানেক্ট করুন</translation> <translation id="2139919072249842737">সেট-আপ করার বোতাম</translation> @@ -1312,6 +1314,7 @@ <translation id="2725200716980197196">নেটওয়ার্ক সংযোগ পুনঃস্থাপিত হয়েছে</translation> <translation id="2727633948226935816">আমাকে আবার মনে করাবেন না</translation> <translation id="2727712005121231835">আসল আকার</translation> +<translation id="2729314457178420145">এছাড়াও ব্রাউজিং ডেটা (<ph name="URL" />) মুছে দিলে আপনি হয়ত Google.com থেকে সাইন-আউট হয়ে যাবেন। <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux অ্যাপ ও ফাইল ব্যাক-আপ নেওয়া হচ্ছে</translation> <translation id="273093730430620027">এই পৃষ্ঠাটি আপনার ক্যামেরা অ্যাক্সেস করছে৷</translation> <translation id="2731392572903530958">বন্ধ হওয়া উইল্ডো পুনরায়&খুলুন</translation> @@ -2163,6 +2166,7 @@ <translation id="3838486795898716504">আরও <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">কুকিজ এবং অন্যান্য সাইট এবং প্লাগ-ইন ডেটা</translation> <translation id="383891835335927981">কোনো সাইটের জুম বাড়ানো বা কমানো হয়নি</translation> +<translation id="3839509547554145593">মাউস স্ক্রল অ্যাক্সিলারেশন চালু করুন</translation> <translation id="3839516600093027468">ক্লিপবোর্ড দেখা থেকে <ph name="HOST" /> কে সবসময় ব্লক করুন</translation> <translation id="3841964634449506551">ভুল পাসওয়ার্ড লেখা হয়েছে</translation> <translation id="3842552989725514455">Serif হরফ</translation> @@ -2627,7 +2631,7 @@ <translation id="450099669180426158">বিস্ময়বোধক চিহ্ন আইকন</translation> <translation id="4501530680793980440">সরানো নিশ্চিত করুন</translation> <translation id="4502423230170890588">এই ডিভাইস থেকে সরান</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{কুকি ব্যবহার করার অনুমতি দেওয়া আছে}=1{১টি সাইট ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}one{{COUNT}টি সাইট ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}other{{COUNT}টি সাইট ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{কুকি ব্যবহার করার অনুমতি দেওয়া আছে}=1{১টি ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}one{{COUNT}টি ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}other{{COUNT}টি ছাড়া বাকি সব সাইটকে কুকি ব্যবহার করার অনুমতি দেওয়া আছে}}</translation> <translation id="4504940961672722399">এই আইকনে ক্লিক করে বা <ph name="EXTENSION_SHORTCUT" /> টিপে এই এক্সটেনশনটি ব্যবহার করুন৷</translation> <translation id="4508051413094283164">সবগুলি ছদ্মবেশী উইন্ডোতে খুলুন</translation> <translation id="4508265954913339219">সক্রিয়করণ ব্যর্থ</translation> @@ -2773,6 +2777,7 @@ <translation id="4699172675775169585">ক্যাশে করা ছবি এবং ফাইলগুলি</translation> <translation id="4699357559218762027">(স্বয়ংক্রিয়ভাবে- লঞ্চ হয়েছে)</translation> <translation id="470074695271471509">প্রসেসটি সম্পূর্ণ করার জন্য সাইন-আউট করতে চান?</translation> +<translation id="4701025263201366865">অভিভাবকের সাইন-ইন</translation> <translation id="4707302005824653064">chrome.com এ পরিচালক (<ph name="CUSTODIAN_EMAIL" />) ব্যবহার এবং ইতিহাস পর্যালোচনা করতে পারেন৷</translation> <translation id="4707579418881001319">L2TP/IPসেকে + ব্যবহারকারীর সার্টিফিকেট</translation> <translation id="4708794300267213770">নিদ্রা মোড থেকে জাগার সময় লক স্ক্রিন দেখান</translation> @@ -3080,6 +3085,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> সার্চ</translation> <translation id="5139823398361067371">আপনার 'নিরাপত্তা কী'-এর পিন লিখুন। পিন না জানা থাকলে, আপনাকে নিরাপত্তা কী রিসেট করতে হবে।</translation> <translation id="5139955368427980650">&খুলুন</translation> +<translation id="5142793792982256885">টাচপ্যাড স্ক্রল স্পিড</translation> <translation id="5142961317498132443">প্রমাণীকরণ</translation> <translation id="5143374789336132547">আপনি হোম বোতাম ক্লিক করলে কোন পৃষ্ঠা দেখানো হবে তা <ph name="EXTENSION_NAME" /> এক্সটেনশনটি পরিবর্তন করেছে।</translation> <translation id="5143712164865402236">পূর্ণ স্ক্রিনে প্রবেশ করুন</translation> @@ -3643,6 +3649,7 @@ <translation id="5901630391730855834">হলুদ</translation> <translation id="5906655207909574370">প্রায় আপ-টু-ডেট হয়েছে! আপডেট শেষ করতে আপনার ডিভাইস আবার চালু করুন।</translation> <translation id="5906732635754427568">এই অ্যাপ্লিকেশান সংশ্লিষ্ট ডেটা এই ডিভাইস থেকে সরিয়ে ফেলা হবে।</translation> +<translation id="5908695239556627796">মাউস স্ক্রল স্পিড</translation> <translation id="5908769186679515905">সাইটগুলিকে Flash চালানোর বিষয়ে অবরুদ্ধ করুন</translation> <translation id="5910363049092958439">এই ভাবে ছবি সেভ করুন...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> এখন অফলাইন</translation> @@ -3999,7 +4006,7 @@ <translation id="6366190659675876144">স্ট্যান্ডার্ড সুরক্ষা</translation> <translation id="636850387210749493">এন্টারপ্রাইজ নথিভুক্তিকরণ</translation> <translation id="6370021412472292592">ম্যানিফেস্ট লোড করা যাবে না।</translation> -<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{পাসওয়ার্ড পরিবর্তন করুন}one{পাসওয়ার্ডগুলি পরিবর্তন করুন}other{পাসওয়ার্ডগুলি পরিবর্তন করুন}}</translation> +<translation id="6371486244597785139">{NUM_PASSWORDS,plural, =1{পাসওয়ার্ড পরিবর্তন করুন}one{পাসওয়ার্ড পরিবর্তন করুন}other{পাসওয়ার্ডগুলি পরিবর্তন করুন}}</translation> <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374469231428023295">আবার চেষ্টা করুন</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />'-এর জন্য ১টি ফলাফল</translation> @@ -4033,7 +4040,7 @@ <translation id="6414888972213066896">এই পৃষ্ঠাটিতে যাওয়া ঠিক হবে কিনা সেই বিষয়ে আপনি আপনার অভিভাবকের অনুমতি নিন৷</translation> <translation id="6415900369006735853">আপনার ফোনের মাধ্যমে ইন্টারনেটে কানেক্ট করুন</translation> <translation id="6416743254476733475">আপনার কম্পিউটারে অনুমতি দিন বা ব্লক করুন।</translation> -<translation id="6417265370957905582">Google অ্যাসিস্ট্যান্ট</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> এর পূর্বে ইনস্টল করা সংস্করণে ফিরিয়ে নিয়ে যাওয়া হচ্ছে</translation> <translation id="6418481728190846787">সমস্ত অ্যাপ্লিকেশানের অ্যাক্সেস স্থায়ীভাবে সরান</translation> <translation id="6418511932144861495">জরুরী আপডেট ইনস্টল করুন</translation> @@ -4821,7 +4828,7 @@ <translation id="7489761397368794366">আপনার ডিভাইস থেকে কল করুন</translation> <translation id="749028671485790643">ব্যক্তি <ph name="VALUE" /></translation> <translation id="7490813197707563893">MAC ঠিকানা</translation> -<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{১টি কুকি}one{{NUM_COOKIES}টি সাইটের কুকি}other{{NUM_COOKIES}টি সাইটের কুকি}}</translation> +<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{১টি সাইটের কুকি}one{{NUM_COOKIES}টি সাইটের কুকি}other{{NUM_COOKIES}টি সাইটের কুকি}}</translation> <translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> এক্সটেনশন হয়ত ব্যক্তিগত ডেটা যেমন পাসওয়ার্ড ও ক্রেডিট কার্ড নম্বরগুলি সহ আপনি যা টাইপ করেন সেসব পাঠ্য সংগ্রহ করতে পারে। আপনি কি এই এক্সটেনশন ব্যবহার করতে চান?</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">আপনার পুরানো পাসওয়ার্ড ভুলে গেছেন?</translation> @@ -5090,6 +5097,7 @@ <ph name="BEGIN_BOLD" />দ্রষ্টব্য:<ph name="END_BOLD" /> এটি করলে সিস্টেম রিবুট করা হবে।</translation> <translation id="7828731929332799387">এটি থার্ড-পার্টি সম্পর্কিত সব কুকিজ এবং সাইট ডেটা মুছে দেবে। আপনি কি চালিয়ে যেতে চান?</translation> <translation id="7829298379596169484">অডিও ইনপুট অ্যাক্সেস করা হচ্ছে</translation> +<translation id="7829877209233347340">স্কুল অ্যাকাউন্ট যোগ করতে অভিভাবককে সাইন-ইন করে অনুমতি দিতে বলুন</translation> <translation id="7830594666202422257">Linux-এ কানেক্ট করুন</translation> <translation id="7831491651892296503">নেটওয়ার্ক কনফিগার করার সময় ত্রুটি</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5843,6 +5851,7 @@ <translation id="8808686172382650546">বিড়াল</translation> <translation id="8808744862003883508">Chrome-এ ইনস্টল করা সব এক্সটেনশন আপনি এই পৃষ্ঠাতে দেখতে পাবেন।</translation> <translation id="8809147117840417135">হালকা নীলাভ সবুজ</translation> +<translation id="8812593354822910461">এছাড়াও ব্রাউজিং ডেটা (<ph name="URL" />) মুছে দিলে আপনি <ph name="DOMAIN" /> থেকে সাইন-আউট হয়ে যাবেন। <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />এ সাইন-ইন করা যাচ্ছে না</translation> <translation id="8813811964357448561">কাগজের পত্রক</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"-এ অনুমোদনের জন্য একজন অভিভাবককে যোগ করুন</translation> @@ -6132,6 +6141,7 @@ <translation id="9203398526606335860">&প্রোফাইলিং সক্ষমিত</translation> <translation id="9203904171912129171">একটি ডিভাইস বেছে নিন</translation> <translation id="9203962528777363226">এই ডিভাইসের প্রশাসক নতুন ব্যবহারকারী জোড়া অক্ষম করেছে</translation> +<translation id="9209689095351280025">যেসব কুকি ওয়েব জুড়ে আপনার অ্যাক্টিভিটি ট্র্যাক করে, সাইট সেগুলি ব্যবহার করতে পারবে না</translation> <translation id="9211177926627870898">আপডেট করা প্রয়োজন</translation> <translation id="9214520840402538427">ওহো! প্রারম্ভিক ইনস্টলেশন-সময়ের বৈশিষ্ট্যাবলীর সময় ফুরিয়েছে৷ দয়া করে আপনার সহায়ক প্রতিনিধির সঙ্গে যোগাযোগ করুন৷</translation> <translation id="9214695392875603905">কাপ কেক</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 7f584e0..eb10e60a 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Za ovu ekstenziju nisu potrebna posebna odobrenja.</translation> <translation id="1616298854599875024">Nije moguće uvesti ekstenziju "<ph name="IMPORT_NAME" />" jer ovo nije dijeljeni modul.</translation> <translation id="1618268899808219593">C&entar za pomoć</translation> +<translation id="1620307519959413822">Pogrešna lozinka. Pokušajte ponovo ili kliknite na Zaboravili ste lozinku da je poništite.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Slike trenutno nisu dostupne. Ponovo se povežite na internet da vidite kolekcije pozadinskih slika.</translation> <translation id="1627276047960621195">Deskriptori fajlova</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Revizija hardvera</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Otvori preko cijelog ekrana</translation> +<translation id="1892341345406963517">Zdravo, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Drugi jezici</translation> <translation id="1895252664692693738">Još <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Isključivanje</translation> @@ -1341,7 +1343,7 @@ <translation id="2753677631968972007">Ručno kontrolirajte odobrenja za web lokacije.</translation> <translation id="2755367719610958252">Upravljajte funkcijama pristupačnosti</translation> <translation id="275662540872599901">ekran je isključen</translation> -<translation id="2757338480560142065">Provjerite je li lozinka koju želite sačuvati ista kao i lozinka za web lokaciju <ph name="WEBSITE" /></translation> +<translation id="2757338480560142065">Provjerite podudara li se lozinka koju želite sačuvati s lozinkom za web lokaciju <ph name="WEBSITE" /></translation> <translation id="2762441749940182211">Kamera je blokirana</translation> <translation id="2765217105034171413">Malo</translation> <translation id="2766161002040448006">Pitaj roditelja</translation> @@ -2335,7 +2337,7 @@ <translation id="4047726037116394521">Odlazak na početnu stranicu</translation> <translation id="4050225813016893843">Metoda autentifikacije</translation> <translation id="4052120076834320548">Malo</translation> -<translation id="4056908315660577142">Dostignuto je vremensko ograničenje koje je tvoj roditelj postavio za Chrome aplikaciju <ph name="APP_NAME" /> Sutra je možeš koristiti <ph name="TIME_LIMIT" />.</translation> +<translation id="4056908315660577142">Dostignuto je vremensko ograničenje koje je tvoj roditelj postavio za Chrome aplikaciju <ph name="APP_NAME" />. Sutra je možeš koristiti <ph name="TIME_LIMIT" />.</translation> <translation id="4057041477816018958"><ph name="SPEED" />, <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Pogledajte u web trgovini</translation> <translation id="4058647953897694817">Potvrdi putem Bluetootha</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Prikaži postavke proksi servera</translation> <translation id="5215502535566372932">Odaberite zemlju</translation> <translation id="521582610500777512">Fotografija je odbačena</translation> +<translation id="5222403284441421673">Nesigurno preuzimanje je blokirano</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="52232769093306234">Pakiranje nije uspjelo.</translation> <translation id="5225324770654022472">Prikaži prečicu do aplikacije</translation> @@ -3241,7 +3244,7 @@ <translation id="5353252989841766347">Izvezite lozinke iz Chromea</translation> <translation id="5355099869024327351">Dozvolite Asistentu da prikaže vaša obavještenja</translation> <translation id="5355926466126177564">Proširenje "<ph name="EXTENSION_NAME" />" promijenilo stranicu koja se prikazuje prilikom pretraživanja putem višenamjenskog okvira.</translation> -<translation id="535911077628776608">Fajl <ph name="FILE_NAME" /> može biti opasan. Poslati Googleovoj Naprednoj zaštiti radi skeniranja? Pritisnite Shift + F6 da odete u područje trake preuzetih fajlova.</translation> +<translation id="535911077628776608">Fajl <ph name="FILE_NAME" /> može biti opasan. Poslati Googleovoj Naprednoj zaštiti radi skeniranja? Pritisnite Shift + F6 da odete u područje trake preuzetih fajlova.</translation> <translation id="5359910752122114278">1 rezultat</translation> <translation id="5360150013186312835">Prikaži na alatnoj traci</translation> <translation id="5362741141255528695">Odaberite fajl privatnog ključa.</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Komunikacije</translation> <translation id="5734697361979786483">Dodajte dijeljenje fajlova</translation> <translation id="5736796278325406685">Unesite važeće korisničko ime</translation> +<translation id="5739017626473506901">Prijavite se da <ph name="USER_NAME" /> primi pomoć pri dodavanju školskog računa</translation> <translation id="5739235828260127894">Čeka se potvrda. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Vrlo velik</translation> <translation id="574209121243317957">Visina</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">Mreža <ph name="NETWORK_TYPE" />, povezivanje</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation> +<translation id="8417548266957501132">Lozinka roditelja</translation> <translation id="8417573335434189196">Ne štiti vas od opasnih web lokacija, preuzimanja ili ekstenzija. Chrome ne preporučuje ovu postavku.</translation> <translation id="8418445294933751433">&Prikaži kao karticu</translation> <translation id="8419098111404128271">Rezultati pretraživanja za "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 5ca33c4..92a4e124 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Aquesta extensió no requereix cap permís especial.</translation> <translation id="1616298854599875024">L'extensió <ph name="IMPORT_NAME" /> no es pot importar perquè no és un mòdul compartit</translation> <translation id="1618268899808219593">Centre d'ajuda</translation> +<translation id="1620307519959413822">La contrasenya no és correcta. Torna-ho a provar o fes clic a l'opció Has oblidat la contrasenya? per restablir-la.</translation> <translation id="1620510694547887537">Càmera</translation> <translation id="1623132449929929218">En aquests moments les imatges no estan disponibles. Torna't a connectar a Internet per veure les col·leccions de fons de pantalla.</translation> <translation id="1627276047960621195">Descriptors dels fitxers</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Revisió de maquinari</translation> <translation id="1890674179660343635"><span>Identificador: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Obre en pantalla completa</translation> +<translation id="1892341345406963517">Hola, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Altres idiomes</translation> <translation id="1895252664692693738">Temps restant: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Aturada</translation> @@ -3130,6 +3132,7 @@ <translation id="5213891612754844763">Mostra la configuració del servidor intermediari</translation> <translation id="5215502535566372932">Selecciona un país</translation> <translation id="521582610500777512">La foto s'ha descartat.</translation> +<translation id="5222403284441421673">S'ha bloquejat una baixada no segura</translation> <translation id="5222676887888702881">Tanca la sessió</translation> <translation id="52232769093306234">S'ha produït un error en l'empaquetat.</translation> <translation id="5225324770654022472">Mostra la drecera d'aplicacions @@ -3530,6 +3533,7 @@ <translation id="5734362860645681824">Comunicacions</translation> <translation id="5734697361979786483">Afegeix l'ús compartit de fitxers</translation> <translation id="5736796278325406685">Introdueix un nom d'usuari vàlid</translation> +<translation id="5739017626473506901">Inicia la sessió per ajudar <ph name="USER_NAME" /> a afegir un compte de centre educatiu</translation> <translation id="5739235828260127894">S'està esperant la verificació. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Molt gran</translation> <translation id="574209121243317957">To</translation> @@ -5538,6 +5542,7 @@ <translation id="8408068190360279472">Xarxa <ph name="NETWORK_TYPE" /> (connectant)</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Pregunta-m'ho abans (opció recomanada)</translation> +<translation id="8417548266957501132">Contrasenya del pare o de la mare</translation> <translation id="8417573335434189196">No et protegeix contra llocs web, baixades ni extensions perillosos. Chrome no recomana aquesta opció de configuració.</translation> <translation id="8418445294933751433">&Mostra com a pestanya</translation> <translation id="8419098111404128271">Resultats de la cerca per a "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 0019f56..1dab2c19 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Nahrát</translation> <translation id="1244265436519979884">Probíhá obnovování kontejneru systému Linux</translation> <translation id="1244303850296295656">Chyba rozšíření</translation> +<translation id="1246158006305844142">Vaše aplikace a nastavení se budou synchronizovat do všech zařízení Chrome OS, na kterých jste přihlášeni pomocí svého účtu Google. Možnosti synchronizace prohlížeče naleznete v <ph name="LINK_BEGIN" />nastavení Chromu<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Odstranit návrh ze schránky?</translation> <translation id="1249643471736608405">Plugin <ph name="PLUGIN_NAME" /> byl zablokován, protože jeho podpora byla ukončena</translation> <translation id="1251366534849411931">Je očekávána levá složená závorka: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Ne, díky</translation> <translation id="1525740877599838384">K určování polohy používat pouze Wi-Fi</translation> <translation id="152629053603783244">Restartovat Linux</translation> +<translation id="1526335046150927198">Zapnout zrychlení posouvání touchpadem</translation> <translation id="1526560967942511387">Dokument bez názvu</translation> <translation id="1529891865407786369">Zdroj napájení</translation> <translation id="1530838837447122178">Otevřít nastavení myši a touchpadu</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Toto rozšíření vyžaduje speciální oprávnění.</translation> <translation id="1616298854599875024">Rozšíření <ph name="IMPORT_NAME" /> nelze importovat, protože se nejedná o sdílený modul</translation> <translation id="1618268899808219593">C&entrum nápovědy</translation> +<translation id="1620307519959413822">Nesprávné heslo. Zkuste to znovu nebo heslo resetujte kliknutím na Zapomenuté heslo.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Obrázky aktuálně nejsou k dispozici. Chcete-li zobrazit sbírky tapet, znovu se připojte k internetu.</translation> <translation id="1627276047960621195">Deskriptory souborů</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Revize hardwaru</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Otevřít v režimu celé obrazovky</translation> +<translation id="1892341345406963517">Ahoj, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Ostatní jazyky</translation> <translation id="1895252664692693738">Zbývá: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Vypnout počítač</translation> @@ -843,7 +847,7 @@ <translation id="2135787500304447609">&Obnovit</translation> <translation id="2136372518715274136">Zadejte nové heslo</translation> <translation id="2136476978468204130">Zadaná heslová fráze není správná</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{Soubory cookie jsou blokovány.}=1{Soubory cookie jsou blokovány, 1 výjimka}few{Soubory cookie jsou blokovány, {COUNT} výjimky}many{Soubory cookie jsou blokovány, {COUNT} výjimky}other{Soubory cookie jsou blokovány, {COUNT} výjimek}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{Soubory cookie jsou blokovány.}=1{Soubory cookie jsou blokovány, jedna výjimka}few{Soubory cookie jsou blokovány, {COUNT} výjimky}many{Soubory cookie jsou blokovány, {COUNT} výjimky}other{Soubory cookie jsou blokovány, {COUNT} výjimek}}</translation> <translation id="2138398485845393913">Stále probíhá připojení k zařízení <ph name="DEVICE_NAME" /></translation> <translation id="2139545522194199494">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, síla signálu: <ph name="SIGNAL_STRENGTH" /> %, spravováno administrátorem, připojit</translation> <translation id="2139919072249842737">Tlačítko Nastavit</translation> @@ -1017,7 +1021,7 @@ <translation id="2350182423316644347">Aplikace se inicializuje...</translation> <translation id="2350796302381711542">Chcete obslužnému nástroji <ph name="HANDLER_HOSTNAME" /> povolit otevírat všechny odkazy s protokolem <ph name="PROTOCOL" /> (namísto obslužného nástroje <ph name="REPLACED_HANDLER_TITLE" />)?</translation> <translation id="2351266942280602854">Jazyk a vstup</translation> -<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{1 položka}few{{NUM_ITEMS} položky}many{{NUM_ITEMS} položky}other{{NUM_ITEMS} položek}}</translation> +<translation id="2352495879228166246">{NUM_ITEMS,plural, =1{Jedna položka}few{{NUM_ITEMS} položky}many{{NUM_ITEMS} položky}other{{NUM_ITEMS} položek}}</translation> <translation id="2352662711729498748">< 1 MB</translation> <translation id="2352810082280059586">Poznámky na obrazovce uzamčení se automaticky ukládají do aplikace <ph name="LOCK_SCREEN_APP_NAME" />. Poslední poznámka na obrazovce uzamčení zůstane.</translation> <translation id="2353297238722298836">Kamera a mikrofon jsou povoleny</translation> @@ -1312,6 +1316,7 @@ <translation id="2725200716980197196">Připojení k síti bylo obnoveno</translation> <translation id="2727633948226935816">Již nepřipomínat</translation> <translation id="2727712005121231835">Skutečná velikost</translation> +<translation id="2729314457178420145">Také vymazat údaje o prohlížení (<ph name="URL" />), což může vést k odhlášení z webu Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Zálohování aplikací a souborů systému Linux</translation> <translation id="273093730430620027">Tato stránka používá vaši kameru.</translation> <translation id="2731392572903530958">Znovu ot&evřít zavřené okno</translation> @@ -1590,7 +1595,7 @@ <translation id="3090819949319990166">Obsah externího souboru CRX nelze zkopírovat do souboru <ph name="TEMP_CRX_FILE" />.</translation> <translation id="3090871774332213558">Zařízení „<ph name="DEVICE_NAME" />“ bylo spárováno</translation> <translation id="3092699946856346803">Vložte SIM kartu a zkuste to znovu</translation> -<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Je vypnuto 1 potenciálně škodlivé rozšíření. Můžete ho také odstranit.}few{Jsou vypnuta {NUM_EXTENSIONS} potenciálně škodlivá rozšíření. Můžete je také odstranit.}many{Je vypnuto {NUM_EXTENSIONS} potenciálně škodlivého rozšíření. Můžete je také odstranit.}other{Je vypnuto {NUM_EXTENSIONS} potenciálně škodlivých rozšíření. Můžete je také odstranit.}}</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Je vypnuto jedno potenciálně škodlivé rozšíření. Můžete ho také odstranit.}few{Jsou vypnuta {NUM_EXTENSIONS} potenciálně škodlivá rozšíření. Můžete je také odstranit.}many{Je vypnuto {NUM_EXTENSIONS} potenciálně škodlivého rozšíření. Můžete je také odstranit.}other{Je vypnuto {NUM_EXTENSIONS} potenciálně škodlivých rozšíření. Můžete je také odstranit.}}</translation> <translation id="3101709781009526431">Datum a čas</translation> <translation id="3103941660000130485">Při upgradování Linuxu došlo k chybě</translation> <translation id="310671807099593501">Web používá Bluetooth</translation> @@ -2153,7 +2158,7 @@ <translation id="3827774300009121996">&Celá obrazovka</translation> <translation id="3828029223314399057">Hledat v záložkách</translation> <translation id="3829765597456725595">Sdílené úložiště SMB</translation> -<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Administrátor znovu zapnul 1 potenciálně škodlivé rozšíření}few{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivá rozšíření}many{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivého rozšíření}other{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivých rozšíření}}</translation> +<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Administrátor znovu zapnul jedno potenciálně škodlivé rozšíření}few{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivá rozšíření}many{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivého rozšíření}other{Administrátor znovu zapnul {NUM_EXTENSIONS} potenciálně škodlivých rozšíření}}</translation> <translation id="3831436149286513437">Návrhy vyhledávacích dotazů z Disku Google</translation> <translation id="383161972796689579">Vlastník zařízení zakázal přidávat nové uživatele.</translation> <translation id="3834775135533257713">Aplikaci <ph name="TO_INSTALL_APP_NAME" /> nelze přidat, protože je v konfliktu s aplikací <ph name="INSTALLED_APP_NAME" />.</translation> @@ -2163,6 +2168,7 @@ <translation id="3838486795898716504">Další stránka <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Soubory cookie a další data webů a pluginů</translation> <translation id="383891835335927981">Žádný web nemá nastaveno přiblížení či oddálení zobrazení</translation> +<translation id="3839509547554145593">Zapnout zrychlení posouvání myší</translation> <translation id="3839516600093027468">Webu <ph name="HOST" /> přístup ke schránce vždy blokovat</translation> <translation id="3841964634449506551">Neplatné heslo</translation> <translation id="3842552989725514455">Patkové písmo</translation> @@ -2627,7 +2633,7 @@ <translation id="450099669180426158">Ikona vykřičníku</translation> <translation id="4501530680793980440">Potvrdit odstranění</translation> <translation id="4502423230170890588">Odstranit z tohoto zařízení</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{Soubory cookie jsou povoleny}=1{Soubory cookie jsou povoleny, 1 výjimka}few{Soubory cookie jsou povoleny, {COUNT} výjimky}many{Soubory cookie jsou povoleny, {COUNT} výjimky}other{Soubory cookie jsou povoleny, {COUNT} výjimek}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{Soubory cookie jsou povoleny}=1{Soubory cookie jsou povoleny, jedna výjimka}few{Soubory cookie jsou povoleny, {COUNT} výjimky}many{Soubory cookie jsou povoleny, {COUNT} výjimky}other{Soubory cookie jsou povoleny, {COUNT} výjimek}}</translation> <translation id="4504940961672722399">Toto rozšíření aktivujete kliknutím na tuto ikonu nebo klávesovou zkratkou <ph name="EXTENSION_SHORTCUT" />.</translation> <translation id="4508051413094283164">Otevřít vše v anonymním okně</translation> <translation id="4508265954913339219">Aktivace se nezdařila</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">Obrázky a soubory v mezipaměti</translation> <translation id="4699357559218762027">(spuštěno automaticky)</translation> <translation id="470074695271471509">Odhlásit se a dokončit proces?</translation> +<translation id="4701025263201366865">Přihlášení rodiče</translation> <translation id="4707302005824653064">Využití a historii může zkontrolovat správce (<ph name="CUSTODIAN_EMAIL" />) na webu chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + certifikát uživatele</translation> <translation id="4708794300267213770">Při probuzení z režimu spánku zobrazit obrazovku uzamčení</translation> @@ -2925,7 +2932,7 @@ <translation id="4918086044614829423">Přijmout</translation> <translation id="4918221908152712722">Nainstalujte si aplikaci <ph name="APP_NAME" /> (není potřeba nic stahovat)</translation> <translation id="4920887663447894854">Těmto webům bylo na této stránce zakázáno sledování vaší polohy.</translation> -<translation id="49226369361073053">{0,plural, =0{Ihned zařízení aktualizujte}=1{Do 1 sekundy zařízení aktualizujte}few{Do # sekund zařízení aktualizujte}many{Do # sekundy zařízení aktualizujte}other{Do # sekund zařízení aktualizujte}}</translation> +<translation id="49226369361073053">{0,plural, =0{Ihned zařízení aktualizujte}=1{Do jedné sekundy zařízení aktualizujte}few{Do # sekund zařízení aktualizujte}many{Do # sekundy zařízení aktualizujte}other{Do # sekund zařízení aktualizujte}}</translation> <translation id="492299503953721473">Odstranit aplikace Android</translation> <translation id="4923279099980110923">Ano, chci pomoci</translation> <translation id="4924352752174756392">12×</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, vyhledávání <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Zadejte PIN bezpečnostního klíče. Pokud PIN neznáte, budete bezpečnostní klíč muset resetovat.</translation> <translation id="5139955368427980650">Otevřít</translation> +<translation id="5142793792982256885">Rychlost posouvání touchpadem</translation> <translation id="5142961317498132443">Ověření</translation> <translation id="5143374789336132547">Rozšíření <ph name="EXTENSION_NAME" /> změnilo stránku, která se zobrazí po kliknutí na tlačítko Domovská stránka.</translation> <translation id="5143712164865402236">Celá obrazovka</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">Zobrazit nastavení proxy serveru</translation> <translation id="5215502535566372932">Vyberte zemi</translation> <translation id="521582610500777512">Fotografie byla zahozena</translation> +<translation id="5222403284441421673">Bylo zablokováno nezabezpečené stahování</translation> <translation id="5222676887888702881">Odhlásit se</translation> <translation id="52232769093306234">Zabalení se nezdařilo.</translation> <translation id="5225324770654022472">Zobrazit zástupce aplikací</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">Komunikační příslušenství</translation> <translation id="5734697361979786483">Přidat sdílené úložiště</translation> <translation id="5736796278325406685">Zadejte prosím platné uživatelské jméno</translation> +<translation id="5739017626473506901">Chcete-li uživateli <ph name="USER_NAME" /> pomoci přidat školní účet, přihlaste se</translation> <translation id="5739235828260127894">Čeká na ověření. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Velmi velké</translation> <translation id="574209121243317957">Výška</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">Žlutá</translation> <translation id="5906655207909574370">Aktualizace je téměř hotova! Dokončíte ji restartováním zařízení.</translation> <translation id="5906732635754427568">Data přidružená k této aplikaci z tohoto zařízení budou odstraněna.</translation> +<translation id="5908695239556627796">Rychlost posouvání myší</translation> <translation id="5908769186679515905">Blokovat spouštění obsahu Flash na webech</translation> <translation id="5910363049092958439">Uložit o&brázek jako...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> je offline</translation> @@ -3703,7 +3714,7 @@ <translation id="5976160379964388480">Ostatní</translation> <translation id="5978277834170881274">&Používat základní kontrolu pravopisu</translation> <translation id="5979084224081478209">Zkontrolovat hesla</translation> -<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Znovu jste zapnuli 1 potenciálně škodlivé rozšíření}few{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivá rozšíření}many{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivého rozšíření}other{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivých rozšíření}}</translation> +<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Znovu jste zapnuli jedno potenciálně škodlivé rozšíření}few{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivá rozšíření}many{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivého rozšíření}other{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivých rozšíření}}</translation> <translation id="5979421442488174909">&Přeložit do jazyka <ph name="LANGUAGE" /></translation> <translation id="5979469435153841984">Stránky přidáte do záložek kliknutím na hvězdičku v adresním řádku</translation> <translation id="5984222099446776634">Nedávno navštívené</translation> @@ -3954,7 +3965,7 @@ <translation id="6309510305002439352">Mikrofon je vypnutý</translation> <translation id="6311220991371174222">Chrome nelze spustit, protože při otevírání vašeho profilu došlo k chybě. Zkuste Chrome restartovat.</translation> <translation id="6312403991423642364">Neznámá chyba sítě</translation> -<translation id="6312567056350025599">{NUM_DAYS,plural, =1{Bezpečnostní kontrola proběhla před 1 dnem}few{Bezpečnostní kontrola proběhla před {NUM_DAYS} dny}many{Bezpečnostní kontrola proběhla před {NUM_DAYS} dne}other{Bezpečnostní kontrola proběhla před {NUM_DAYS} dny}}</translation> +<translation id="6312567056350025599">{NUM_DAYS,plural, =1{Bezpečnostní kontrola proběhla před jedním dnem}few{Bezpečnostní kontrola proběhla před {NUM_DAYS} dny}many{Bezpečnostní kontrola proběhla před {NUM_DAYS} dne}other{Bezpečnostní kontrola proběhla před {NUM_DAYS} dny}}</translation> <translation id="6312638141433622592">Nabízet zobrazení článků v režimu čtečky (pokud je podporováno)</translation> <translation id="6313641880021325787">UKONČIT VIRTUÁLNÍ REALITU</translation> <translation id="6314819609899340042">V tomto zařízení <ph name="IDS_SHORT_PRODUCT_NAME" /> jste úspěšně aktivovali funkce ladění.</translation> @@ -4405,7 +4416,7 @@ <translation id="6943836128787782965">Příkaz GET protokolu HTTP se nezdařil.</translation> <translation id="6945221475159498467">Vybrat</translation> <translation id="694592694773692225">Na této stránce bylo zablokováno přesměrování.</translation> -<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{Bylo nalezeno 1 prolomené heslo}few{Byla nalezena {NUM_PASSWORDS} prolomená hesla}many{Bylo nalezeno {NUM_PASSWORDS} prolomeného hesla}other{Bylo nalezeno {NUM_PASSWORDS} prolomených hesel}}</translation> +<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{Bylo nalezeno jedno prolomené heslo}few{Byla nalezena {NUM_PASSWORDS} prolomená hesla}many{Bylo nalezeno {NUM_PASSWORDS} prolomeného hesla}other{Bylo nalezeno {NUM_PASSWORDS} prolomených hesel}}</translation> <translation id="6949434160682548041">Heslo (nepovinné)</translation> <translation id="6950627417367801484">Obnovit aplikace</translation> <translation id="6950943362443484797">Aplikace se sama nainstaluje</translation> @@ -4490,7 +4501,7 @@ <translation id="7053983685419859001">Blokovat</translation> <translation id="7055152154916055070">Bylo zablokováno přesměrování:</translation> <translation id="7056526158851679338">&Zkontrolovat zařízení</translation> -<translation id="7057184853669165321">{NUM_MINS,plural, =1{Bezpečnostní kontrola proběhla před 1 minutou}few{Bezpečnostní kontrola proběhla před {NUM_MINS} minutami}many{Bezpečnostní kontrola proběhla před {NUM_MINS} minuty}other{Bezpečnostní kontrola proběhla před {NUM_MINS} minutami}}</translation> +<translation id="7057184853669165321">{NUM_MINS,plural, =1{Bezpečnostní kontrola proběhla před jednou minutou}few{Bezpečnostní kontrola proběhla před {NUM_MINS} minutami}many{Bezpečnostní kontrola proběhla před {NUM_MINS} minuty}other{Bezpečnostní kontrola proběhla před {NUM_MINS} minutami}}</translation> <translation id="7057767408836081338">Nepodařilo se získat data aplikace, ale stejně zkusíme aplikaci spustit…</translation> <translation id="7059858479264779982">Nastavit na automatické spouštění</translation> <translation id="7059893117020417984">Chcete-li web procházet v soukromí, klikněte na ikonu se třemi tečkami a otevřete anonymní okno.</translation> @@ -4783,7 +4794,7 @@ <translation id="7441830548568730290">Ostatní uživatelé</translation> <translation id="7442465037756169001">Hangouts Meet hardware je připraven k nastavení.</translation> <translation id="744341768939279100">Vytvořit nový profil</translation> -<translation id="744366959743242014">Pobíhá načítání dat. Může trvat několik sekund.</translation> +<translation id="744366959743242014">Probíhá načítání dat. Může trvat několik sekund.</translation> <translation id="7443806024147773267">Mějte hesla k dispozici vždy, když jste přihlášeni k účtu Google</translation> <translation id="7444983668544353857">Deaktivovat <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Automaticky instalovat aplikace</translation> @@ -4819,7 +4830,7 @@ <translation id="7489761397368794366">Zavolat ze zařízení</translation> <translation id="749028671485790643">Osoba <ph name="VALUE" /></translation> <translation id="7490813197707563893">Adresa MAC</translation> -<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 soubor cookie}few{{NUM_COOKIES} soubory cookie}many{{NUM_COOKIES} souboru cookie}other{{NUM_COOKIES} soubory cookie}}</translation> +<translation id="7491963308094506985">{NUM_COOKIES,plural, =1{Jeden soubor cookie}few{{NUM_COOKIES} soubory cookie}many{{NUM_COOKIES} souboru cookie}other{{NUM_COOKIES} soubory cookie}}</translation> <translation id="7493386493263658176">Rozšíření <ph name="EXTENSION_NAME" /> může shromažďovat veškerý text, který napíšete, včetně osobních údajů, jako jsou hesla nebo čísla platebních karet. Chcete toto rozšíření použít?</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> × <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">Zapomněli jste své staré heslo?</translation> @@ -4842,7 +4853,7 @@ <translation id="7514365320538308">Stáhnout</translation> <translation id="751523031290522286">Správce aplikaci <ph name="APP_NAME" /> zablokoval. Chcete-li ji používat, požádejte správce o oprávnění.</translation> <translation id="7516981202574715431">Aplikace <ph name="APP_NAME" /> je pozastavená</translation> -<translation id="7517063221058203587">{0,plural, =1{Do 1 minuty zařízení aktualizujte}few{Do # minut zařízení aktualizujte}many{Do # minuty zařízení aktualizujte}other{Do # minut zařízení aktualizujte}}</translation> +<translation id="7517063221058203587">{0,plural, =1{Do jedné minuty zařízení aktualizujte}few{Do # minut zařízení aktualizujte}many{Do # minuty zařízení aktualizujte}other{Do # minut zařízení aktualizujte}}</translation> <translation id="7520766081042531487">Anonymní portál: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">Řekněte „Ok Google“.</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" /> Systém se během tohoto procesu restartuje.</translation> <translation id="7828731929332799387">Tímto vymažete všechny soubory cookie a data webu dostupná v kontextech třetích stran. Chcete pokračovat?</translation> <translation id="7829298379596169484">Přístup ke zvukovému vstupu</translation> +<translation id="7829877209233347340">Požádejte rodiče, aby se přihlásil a udělil oprávnění k přidání školního účtu</translation> <translation id="7830594666202422257">Připojit k Linuxu</translation> <translation id="7831491651892296503">Chyba při konfiguraci sítě</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5528,6 +5540,7 @@ <translation id="8408068190360279472">Síť: <ph name="NETWORK_TYPE" />, připojování</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Nejprve se dotázat (doporučeno)</translation> +<translation id="8417548266957501132">Heslo rodiče</translation> <translation id="8417573335434189196">Nebudete chráněni před nebezpečnými weby, soubory ke stažení ani rozšířeními. Chrome toto nastavení nedoporučuje.</translation> <translation id="8418445294933751433">Zobrazit jako kartu</translation> <translation id="8419098111404128271">Výsledky vyhledávání pro <ph name="SEARCH_TEXT" /></translation> @@ -5842,6 +5855,7 @@ <translation id="8808686172382650546">Kočka</translation> <translation id="8808744862003883508">Na této stránce naleznete všechna rozšíření nainstalovaná v Chromu.</translation> <translation id="8809147117840417135">Světle tyrkysová</translation> +<translation id="8812593354822910461">Také vymazat údaje o prohlížení (<ph name="URL" />), což může vést k odhlášení z domény <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Přihlášení k účtu <ph name="USERNAME" /> se nezdařilo</translation> <translation id="8813811964357448561">list papíru</translation> <translation id="8813872945700551674">Požádejte rodiče o schválení rozšíření <ph name="EXTENSION_NAME" /></translation> @@ -6114,7 +6128,7 @@ <translation id="9169931577761441333">Přidat aplikaci <ph name="APP_NAME" /> na plochu</translation> <translation id="9170848237812810038">Z&pět</translation> <translation id="9170884462774788842">Jiný program ve vašem počítači nainstaloval motiv, který může měnit funkce Chromu.</translation> -<translation id="917350715406657904">Byl vyčerpán časový limit, který pro <ph name="APP_NAME" /> nastavili rodiče. Zítra ji budeš moci používat <ph name="TIME_LIMIT" />.</translation> +<translation id="917350715406657904">Byl vyčerpán časový limit, který pro aplikaci <ph name="APP_NAME" /> nastavili rodiče. Zítra ji budeš moci používat <ph name="TIME_LIMIT" />.</translation> <translation id="9173995187295789444">Vyhledávání zařízení Bluetooth...</translation> <translation id="9174401638287877180">Odesílat údaje o využití a diagnostice. Pomozte prostředí Android svého dítěte zlepšit tím, že necháte do Googlu automaticky odesílat diagnostické údaje a údaje o využití zařízení a aplikací. Tyto údaje nebudou používány ke zjištění totožnosti dítěte a pomohou nám se zvyšováním stability systému a aplikací a dalšími vylepšeními. Některá souhrnná data budou moci využít také naši partneři, např. vývojáři aplikací pro Android. Pokud má dítě zapnuté dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do jeho účtu Google.</translation> <translation id="917510707618656279">Zeptat se, když chce web získat přístup k zařízením Bluetooth</translation> @@ -6131,6 +6145,7 @@ <translation id="9203398526606335860">&Profilování povoleno</translation> <translation id="9203904171912129171">Vyberte zařízení</translation> <translation id="9203962528777363226">Správce zařízení zakázal přidávat nové uživatele.</translation> +<translation id="9209689095351280025">Weby vás nemohou na internetu sledovat pomocí souborů cookie</translation> <translation id="9211177926627870898">Je nutná aktualizace</translation> <translation id="9214520840402538427">Jejda! Vypršel časový limit inicializace atributů doby instalace. Kontaktujte zástupce podpory.</translation> <translation id="9214695392875603905">Sladký košíček</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index a83566c7..8922bc4 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Denne udvidelse kræver ikke nogen særlige tilladelser.</translation> <translation id="1616298854599875024">Udvidelsen "<ph name="IMPORT_NAME" />" kan ikke importeres, da den ikke er delt</translation> <translation id="1618268899808219593">Hjælp</translation> +<translation id="1620307519959413822">Forkert adgangskode. Prøv igen, eller klik på "Har du glemt din adgangskode?" for at nulstille koden.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Billederne er ikke tilgængelige i øjeblikket. Opret internetforbindelse igen for at se samlingerne med baggrunde.</translation> <translation id="1627276047960621195">Filbeskrivelser</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Hardwarerevision</translation> <translation id="1890674179660343635"><span>Id: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Åbn fuld skærm</translation> +<translation id="1892341345406963517">Hej <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Andre sprog</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> tilbage</translation> <translation id="1895658205118569222">Nedlukning</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Vis proxyindstillinger</translation> <translation id="5215502535566372932">Vælg et land</translation> <translation id="521582610500777512">Billede blev kasseret</translation> +<translation id="5222403284441421673">Download af usikkert indhold er blokeret</translation> <translation id="5222676887888702881">Log ud</translation> <translation id="52232769093306234">Pakning mislykkedes.</translation> <translation id="5225324770654022472">Vis genvejen for apps</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Kommunikation</translation> <translation id="5734697361979786483">Tilføj fildeling</translation> <translation id="5736796278325406685">Angiv et gyldigt brugernavn</translation> +<translation id="5739017626473506901">Log ind for at hjælpe <ph name="USER_NAME" /> med at tilføje en skolekonto</translation> <translation id="5739235828260127894">Venter på bekræftelse. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Meget stor</translation> <translation id="574209121243317957">Toneleje</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-netværk, opretter forbindelse</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Spørg først (anbefales)</translation> +<translation id="8417548266957501132">Forælders adgangskode</translation> <translation id="8417573335434189196">Beskytter dig ikke mod skadelige websites, downloads eller udvidelser. Chrome anbefaler ikke denne indstilling.</translation> <translation id="8418445294933751433">&Vis som fane</translation> <translation id="8419098111404128271">Søgeresultater for "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 90b2d85..1b65246 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Hochladen</translation> <translation id="1244265436519979884">Wiederherstellung für Linux wird gerade ausgeführt</translation> <translation id="1244303850296295656">Erweiterungsfehler</translation> +<translation id="1246158006305844142">Ihre Apps und Einstellungen werden auf allen Chrome OS-Geräten synchronisiert, bei denen Sie mit Ihrem Google-Konto angemeldet sind. <ph name="LINK_BEGIN" />Rufen Sie die Chrome-Einstellungen auf<ph name="LINK_END" />, um die Optionen zur Browsersynchronisation zu sehen.</translation> <translation id="1246905108078336582">Vorschlag aus Zwischenablage entfernen?</translation> <translation id="1249643471736608405">Das Plug-in <ph name="PLUGIN_NAME" /> wurde blockiert, weil es eingestellt wurde</translation> <translation id="1251366534849411931">Erwartete öffnende geschweifte Klammer: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">Nein danke</translation> <translation id="1525740877599838384">Zur Standortbestimmung nur WLAN nutzen</translation> <translation id="152629053603783244">Linux neu starten</translation> +<translation id="1526335046150927198">Scroll-Beschleunigung für Touchpad aktivieren</translation> <translation id="1526560967942511387">Unbenanntes Dokument</translation> <translation id="1529891865407786369">Stromquelle</translation> <translation id="1530838837447122178">Einstellungen für Maus- und Touchpadgeräte öffnen</translation> @@ -1309,6 +1311,7 @@ <translation id="2725200716980197196">Netzwerkverbindung wiederhergestellt</translation> <translation id="2727633948226935816">Nicht mehr erinnern</translation> <translation id="2727712005121231835">Originalgröße</translation> +<translation id="2729314457178420145">Auch Browserdaten (<ph name="URL" />) löschen, wodurch Sie möglicherweise von Google.com abgemeldet werden. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux-Apps und -Dateien werden gesichert</translation> <translation id="273093730430620027">Diese Seite greift auf Ihre Kamera zu.</translation> <translation id="2731392572903530958">Geschlossenes Fenster wieder öffn&en</translation> @@ -2160,6 +2163,7 @@ <translation id="3838486795898716504">Weitere <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies und andere Website- und Plug-in-Daten</translation> <translation id="383891835335927981">Keine Websites wurden vergrößert oder verkleinert</translation> +<translation id="3839509547554145593">Scroll-Beschleunigung für Maus aktivieren</translation> <translation id="3839516600093027468">Immer verhindern, dass <ph name="HOST" /> die Zwischenablage abruft</translation> <translation id="3841964634449506551">Passwort ungültig</translation> <translation id="3842552989725514455">Schriftart Serif</translation> @@ -2771,6 +2775,7 @@ <translation id="4699172675775169585">Bilder und Dateien im Cache</translation> <translation id="4699357559218762027">(wird automatisch gestartet)</translation> <translation id="470074695271471509">Abmelden, um die Einrichtung abzuschließen?</translation> +<translation id="4701025263201366865">Elternanmeldung</translation> <translation id="4707302005824653064">Die Nutzung und der Verlauf sind für den Manager (<ph name="CUSTODIAN_EMAIL" />) unter chrome.com einsehbar.</translation> <translation id="4707579418881001319">L2TP/IPSec + Nutzerzertifikat</translation> <translation id="4708794300267213770">Sperrbildschirm anzeigen, wenn der Ruhemodus beendet wird</translation> @@ -3078,6 +3083,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" />-Suche</translation> <translation id="5139823398361067371">Geben Sie die PIN für Ihren Sicherheitsschlüssel ein. Falls Sie sie nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen.</translation> <translation id="5139955368427980650">Ö&ffnen</translation> +<translation id="5142793792982256885">Scroll-Geschwindigkeit auf dem Touchpad</translation> <translation id="5142961317498132443">Authentifizierung</translation> <translation id="5143374789336132547">Durch die Erweiterung <ph name="EXTENSION_NAME" /> wurde die Seite geändert, die beim Klicken auf die Schaltfläche "Startseite" erscheint.</translation> <translation id="5143712164865402236">Vollbildmodus ein</translation> @@ -3640,6 +3646,7 @@ <translation id="5901630391730855834">Gelb</translation> <translation id="5906655207909574370">Fast fertig! Starten Sie Ihr Gerät neu, um die Aktualisierung abzuschließen.</translation> <translation id="5906732635754427568">Daten, die dieser App zugewiesen sind, werden von diesem Gerät entfernt.</translation> +<translation id="5908695239556627796">Scroll-Geschwindigkeit mit der Maus</translation> <translation id="5908769186679515905">Ausführen von Flash für Websites blockieren</translation> <translation id="5910363049092958439">Bi&ld speichern unter...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ist offline</translation> @@ -5087,6 +5094,7 @@ <ph name="BEGIN_BOLD" />Hinweis<ph name="END_BOLD" />: Das System wird während des Vorgangs neu gestartet.</translation> <translation id="7828731929332799387">Dadurch werden alle Cookies und Websitedaten von Drittanbietern gelöscht. Möchten Sie fortfahren?</translation> <translation id="7829298379596169484">Zugriff auf Audio-Eingang</translation> +<translation id="7829877209233347340">Elternteil bitten, sich anzumelden, um das Hinzufügen eines Kontos einer Bildungseinrichtung zu erlauben</translation> <translation id="7830594666202422257">Mit Linux verbinden</translation> <translation id="7831491651892296503">Fehler bei der Netzwerkkonfiguration</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5840,6 +5848,7 @@ <translation id="8808686172382650546">Katze</translation> <translation id="8808744862003883508">Auf dieser Seite sehen Sie alle in Chrome installierten Erweiterungen.</translation> <translation id="8809147117840417135">Helles Blaugrün</translation> +<translation id="8812593354822910461">Auch Browserdaten (<ph name="URL" />) löschen, wodurch Sie von <ph name="DOMAIN" /> abgemeldet werden. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Anmeldung unter <ph name="USERNAME" /> nicht möglich</translation> <translation id="8813811964357448561">Blatt Papier</translation> <translation id="8813872945700551674">Elternteil um Genehmigung von <ph name="EXTENSION_NAME" /> bitten</translation> @@ -6129,6 +6138,7 @@ <translation id="9203398526606335860">&Profilerstellung aktiviert</translation> <translation id="9203904171912129171">Gerät auswählen</translation> <translation id="9203962528777363226">Der Administrator dieses Geräts hat die Funktion zum Hinzufügen neuer Nutzer deaktiviert.</translation> +<translation id="9209689095351280025">Websites können keine Cookies verwenden, die Ihre Browserdaten über mehrere Websites hinweg erfassen</translation> <translation id="9211177926627870898">Aktualisierung erforderlich</translation> <translation id="9214520840402538427">Hoppla! Bei der Initialisierung der Installationszeit-Attribute ist eine Zeitüberschreitung aufgetreten. Bitte wenden Sie sich an Ihren Support-Mitarbeiter.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index fad13683..5886115 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -311,7 +311,7 @@ <translation id="1420920093772172268"><ph name="TURN_ON_BLUETOOTH_LINK" /> για να επιτρέψετε τη σύζευξη</translation> <translation id="1422159345171879700">Φόρτωση μη ασφαλών σεναρίων</translation> <translation id="1426410128494586442">Ναι</translation> -<translation id="142655739075382478">Αποκλείστηκε <ph name="APP_NAME" /></translation> +<translation id="142655739075382478">Η εφαρμογή <ph name="APP_NAME" /> αποκλείστηκε</translation> <translation id="1426870617281699524">Κάντε κλικ στην επιλογή "Δοκιμάστε ξανά" και αποδεχτείτε την προτροπή στον υπολογιστή σας</translation> <translation id="1427269577154060167">Χώρα</translation> <translation id="142758023928848008">Ενεργοποίηση σταθερών πλήκτρων (για τη χρήση συντομεύσεων πληκτρολογίου πληκτρολογώντας τα διαδοχικά)</translation> @@ -461,6 +461,7 @@ <translation id="1616206807336925449">Αυτή η επέκταση δεν απαιτεί ειδικά δικαιώματα.</translation> <translation id="1616298854599875024">Δεν είναι δυνατή η εισαγωγή της επέκτασης "<ph name="IMPORT_NAME" />", επειδή δεν είναι κοινόχρηστη λειτουργική μονάδα</translation> <translation id="1618268899808219593">Κέντρο βοήθειας</translation> +<translation id="1620307519959413822">Λάθος κωδικός πρόσβασης. Δοκιμάστε ξανά ή κάντε κλικ στην επιλογή Ξεχάσατε τον κωδικό πρόσβασης για επαναφορά.</translation> <translation id="1620510694547887537">Κάμερα</translation> <translation id="1623132449929929218">Οι εικόνες δεν είναι διαθέσιμες προς το παρόν. Συνδεθείτε ξανά στο διαδίκτυο, για να δείτε τις συλλογές ταπετσαριών.</translation> <translation id="1627276047960621195">Περιγραφές αρχείων</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Έκδοση υλικού</translation> <translation id="1890674179660343635"><span>Αναγνωριστικό: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Άνοιγμα πλήρους οθόνης</translation> +<translation id="1892341345406963517">Γεια σας, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Άλλες γλώσσες</translation> <translation id="1895252664692693738">Απομένουν <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Τερματισμός λειτουργίας</translation> @@ -2335,7 +2337,7 @@ <translation id="4047726037116394521">Μετάβαση στην Αρχική σελίδα</translation> <translation id="4050225813016893843">Μέθοδος ελέγχου ταυτότητας</translation> <translation id="4052120076834320548">Πάρα πολύ μικρό</translation> -<translation id="4056908315660577142">Συμπλήρωσες το χρονικό όριο που έχει θέσει ο γονέας σου για την εφαρμογή Chrome <ph name="APP_NAME" />. Μπορείς να τη χρησιμοποιήσεις για <ph name="TIME_LIMIT" /> αύριο.</translation> +<translation id="4056908315660577142">Συμπλήρωσες το χρονικό όριο που έχει θέσει ο γονέας σου για την εφαρμογή Chrome <ph name="APP_NAME" />. Μπορείς να τη χρησιμοποιήσεις πάλι αύριο για <ph name="TIME_LIMIT" />.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Προβολή στο Web Store</translation> <translation id="4058647953897694817">Επαλήθευση μέσω Bluetooth</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Προβολή ρυθμίσεων διακομιστή μεσολάβησης</translation> <translation id="5215502535566372932">Επιλέξτε χώρα</translation> <translation id="521582610500777512">Η φωτογραφία απορρίφτηκε</translation> +<translation id="5222403284441421673">Αποκλεισμός μη ασφαλούς λήψης</translation> <translation id="5222676887888702881">Έξοδος</translation> <translation id="52232769093306234">Η στοίβαξη απέτυχε.</translation> <translation id="5225324770654022472">Εμφάνιση συντόμευσης εφαρμογών</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">Επικοινωνίες</translation> <translation id="5734697361979786483">Προσθήκη κοινής χρήσης αρχείου</translation> <translation id="5736796278325406685">Καταχωρίστε ένα έγκυρο όνομα χρήστη</translation> +<translation id="5739017626473506901">Συνδεθείτε για να βοηθήσετε τον χρήστη <ph name="USER_NAME" /> να προσθέσει έναν σχολικό λογαριασμό</translation> <translation id="5739235828260127894">Αναμονή για επαλήθευση. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Πολύ μεγάλο</translation> <translation id="574209121243317957">Τόνος</translation> @@ -5540,6 +5544,7 @@ <translation id="8408068190360279472">Δίκτυο <ph name="NETWORK_TYPE" />, σύνδεση σε εξέλιξη</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Να γίνεται ερώτηση πρώτα (συνιστάται)</translation> +<translation id="8417548266957501132">Κωδικός πρόσβασης γονέα</translation> <translation id="8417573335434189196">Δεν σας προστατεύει από επικίνδυνους ιστοτόπους, λήψεις ή επεκτάσεις. Το Chrome δεν συνιστά αυτήν τη ρύθμιση.</translation> <translation id="8418445294933751433">&Εμφάνιση ως καρτέλα</translation> <translation id="8419098111404128271">Αποτελέσματα αναζήτησης για "<ph name="SEARCH_TEXT" />"</translation> @@ -6125,7 +6130,7 @@ <translation id="9169931577761441333">Προσθήκη του <ph name="APP_NAME" /> στην Αρχική οθόνη</translation> <translation id="9170848237812810038">Αναί&ρεση</translation> <translation id="9170884462774788842">Κάποιο άλλο πρόγραμμα στον υπολογιστή σας πρόσθεσε ένα θέμα, το οποίο ενδέχεται να αλλάξει τον τρόπο λειτουργίας του Chrome.</translation> -<translation id="917350715406657904">Συμπλήρωσες το χρονικό όριο που έχει θέσει ο γονέας σου για την εφαρμογή <ph name="APP_NAME" />. Μπορείς να τη χρησιμοποιήσεις αύριο για <ph name="TIME_LIMIT" />.</translation> +<translation id="917350715406657904">Συμπλήρωσες το χρονικό όριο που έχει θέσει ο γονέας σου για την εφαρμογή <ph name="APP_NAME" />. Μπορείς να τη χρησιμοποιήσεις πάλι αύριο για <ph name="TIME_LIMIT" />.</translation> <translation id="9173995187295789444">Σάρωση για συσκευές Bluetooth…</translation> <translation id="9174401638287877180">Αποστολή δεδομένων χρήσης και διαγνωστικών. Συμβάλλετε στη βελτίωση της εμπειρίας Android του παιδιού σας με την αυτόματη αποστολή διαγνωστικών δεδομένων και δεδομένων συσκευής και χρήσης εφαρμογών στην Google. Αυτά τα δεδομένα δεν θα χρησιμοποιηθούν για την ταυτοποίηση του παιδιού σας, ενώ θα βοηθήσουν στη βελτίωση σταθερότητας του συστήματος και των εφαρμογών, καθώς και στην παροχή άλλων βελτιώσεων. Επίσης, ορισμένα συγκεντρωτικά δεδομένα θα συμβάλλουν στη βελτίωση των εφαρμογών Google και θα χρησιμοποιηθούν από συνεργάτες της Google, όπως τους προγραμματιστές Android, προκειμένου να βελτιώσουν τις εφαρμογές και τα προϊόντα τους. Εάν είναι ενεργή η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google.</translation> <translation id="917510707618656279">Να γίνεται ερώτηση όταν κάποιος ιστότοπος θέλει να αποκτήσει πρόσβαση σε συσκευές Bluetooth</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 096ef74..4011825 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">This extension requires no special permissions.</translation> <translation id="1616298854599875024">Unable to import extension '<ph name="IMPORT_NAME" />' because it is not a shared module</translation> <translation id="1618268899808219593">Help Centre</translation> +<translation id="1620307519959413822">Wrong password. Try again or click Forgot password to reset it.</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1623132449929929218">The images are currently unavailable. Please reconnect to the Internet to see wallpaper collections.</translation> <translation id="1627276047960621195">File Descriptors</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Hardware revision</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Open full screen</translation> +<translation id="1892341345406963517">Hi <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Other languages</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> left</translation> <translation id="1895658205118569222">Shutdown</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Show proxy settings</translation> <translation id="5215502535566372932">Select country</translation> <translation id="521582610500777512">Photo was discarded</translation> +<translation id="5222403284441421673">Insecure download blocked</translation> <translation id="5222676887888702881">Sign out</translation> <translation id="52232769093306234">Packing failed.</translation> <translation id="5225324770654022472">Show apps shortcut</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Communications</translation> <translation id="5734697361979786483">Add file share</translation> <translation id="5736796278325406685">Please enter a valid username</translation> +<translation id="5739017626473506901">Sign in to help <ph name="USER_NAME" /> add a school account</translation> <translation id="5739235828260127894">Waiting for verification. <ph name="LINK_BEGIN" />Find out more<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Very large</translation> <translation id="574209121243317957">Pitch</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> network, connecting</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Ask first (recommended)</translation> +<translation id="8417548266957501132">Parent password</translation> <translation id="8417573335434189196">Does not protect you against dangerous websites, downloads or extensions. Chrome does not recommend this setting.</translation> <translation id="8418445294933751433">&Show as tab</translation> <translation id="8419098111404128271">Search results for '<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index f2c5e0b9..81c9cc50 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Cargar</translation> <translation id="1244265436519979884">El restablecimiento de Linux está en curso</translation> <translation id="1244303850296295656">Error de extensión</translation> +<translation id="1246158006305844142">Se sincronizarán tus apps y opciones de configuración en todos los dispositivos con el Sistema operativo Chrome en los que hayas accedido con tu Cuenta de Google. Para ver las opciones de sincronización del navegador, ve a la <ph name="LINK_BEGIN" />configuración de Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">¿Quieres quitar la sugerencia del portapapeles?</translation> <translation id="1249643471736608405">Se bloqueó <ph name="PLUGIN_NAME" /> porque dejó de estar disponible</translation> <translation id="1251366534849411931">Llave de apertura esperada: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">No, gracias</translation> <translation id="1525740877599838384">Usar solo Wi-Fi para determinar la ubicación</translation> <translation id="152629053603783244">Reiniciar Linux</translation> +<translation id="1526335046150927198">Habilitar la aceleración de desplazamiento en el panel táctil</translation> <translation id="1526560967942511387">Documento sin título</translation> <translation id="1529891865407786369">Fuente de alimentación</translation> <translation id="1530838837447122178">Abrir configuración del mouse y el panel táctil</translation> @@ -840,7 +842,7 @@ <translation id="2135787500304447609">&Reanudar</translation> <translation id="2136372518715274136">Ingresa la nueva contraseña</translation> <translation id="2136476978468204130">La frase de contraseña que ingresaste es incorrecta</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{Las cookies están bloqueadas.}=1{Se bloquearon las cookies; hay 1 excepción}other{Se bloquearon; {COUNT} excepciones}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{Se bloquearon las cookies.}=1{Se bloquearon las cookies; hay 1 excepción}other{Se bloquearon las cookies; hay {COUNT} excepciones}}</translation> <translation id="2138398485845393913">La conexión a "<ph name="DEVICE_NAME" />" sigue en curso</translation> <translation id="2139545522194199494">Red <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, intensidad de la señal: <ph name="SIGNAL_STRENGTH" />%, administrada por tu administrador, conectar</translation> <translation id="2139919072249842737">Botón de configuración</translation> @@ -1310,6 +1312,7 @@ <translation id="2725200716980197196">Conexión de red restaurada</translation> <translation id="2727633948226935816">No volver a recordarme</translation> <translation id="2727712005121231835">Tamaño real</translation> +<translation id="2729314457178420145">También quiero borrar los datos de navegación (<ph name="URL" />), lo que posiblemente me haga salir de Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Creando la copia de seguridad de las apps y los archivos de Linux</translation> <translation id="273093730430620027">Esta página está accediendo a la cámara.</translation> <translation id="2731392572903530958">Volv&er a abrir una ventana cerrada</translation> @@ -2161,6 +2164,7 @@ <translation id="3838486795898716504">Más <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies y otros datos de sitios y de complementos</translation> <translation id="383891835335927981">No se configuró el zoom para ningún sitio</translation> +<translation id="3839509547554145593">Habilitar la aceleración de desplazamiento del mouse</translation> <translation id="3839516600093027468">Nunca permitir que <ph name="HOST" /> vea el portapapeles</translation> <translation id="3841964634449506551">La contraseña no es válida</translation> <translation id="3842552989725514455">Fuente Serif</translation> @@ -2772,6 +2776,7 @@ <translation id="4699172675775169585">Imágenes y archivos almacenados en caché</translation> <translation id="4699357559218762027">(con inicio automático)</translation> <translation id="470074695271471509">¿Quieres salir de tu cuenta para terminar?</translation> +<translation id="4701025263201366865">Se requiere el acceso del padre o la madre</translation> <translation id="4707302005824653064">El administrador (<ph name="CUSTODIAN_EMAIL" />) puede revisar el uso y el historial en chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + certificado de usuario</translation> <translation id="4708794300267213770">Mostrar la pantalla bloqueada al salir del modo de suspensión</translation> @@ -3079,6 +3084,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, búsqueda de <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Ingresa el PIN para tu llave de seguridad. Si no lo conoces, restablece la llave.</translation> <translation id="5139955368427980650">&Abrir</translation> +<translation id="5142793792982256885">Velocidad de desplazamiento del panel táctil</translation> <translation id="5142961317498132443">Autenticación</translation> <translation id="5143374789336132547">La extensión "<ph name="EXTENSION_NAME" />" cambió la página que se muestra al hacer clic en el botón Página prinicpal.</translation> <translation id="5143712164865402236">Ingresar a pantalla completa</translation> @@ -3232,7 +3238,7 @@ <translation id="5353252989841766347">Exportar contraseñas desde Chrome</translation> <translation id="5355099869024327351">Permite que el Asistente te muestre notificaciones</translation> <translation id="5355926466126177564">La extensión "<ph name="EXTENSION_NAME" />" cambió la página que se muestra al llevar a cabo búsquedas desde el cuadro multifunción.</translation> -<translation id="535911077628776608">Es posible que el archivo <ph name="FILE_NAME" /> sea peligroso. ¿Quieres enviarlo al programa de Protección Avanzada de Google para que lo analicemos? Presiona mayúscula + F6 para ir al área de la barra de descargas.</translation> +<translation id="535911077628776608">Es posible que el archivo <ph name="FILE_NAME" /> sea peligroso. ¿Quieres enviarlo al Programa de protección avanzada de Google para que lo analicemos? Presiona mayúscula + F6 para ir al área de la barra de descargas.</translation> <translation id="5359910752122114278">1 resultado</translation> <translation id="5360150013186312835">Mostrar en la barra de herramientas</translation> <translation id="5362741141255528695">Seleccionar archivo de clave privada.</translation> @@ -3490,7 +3496,7 @@ <translation id="5691511426247308406">Familia</translation> <translation id="5691772641933328258">No se reconoció la huella digital</translation> <translation id="5692183275898619210">Se completó la impresión</translation> -<translation id="5692875591060376599">El archivo seleccionado es desconocido y puede ser peligroso. ¿Quieres enviarlo al programa de Protección Avanzada de Google para que lo analicemos?</translation> +<translation id="5692875591060376599">El archivo seleccionado es desconocido y puede ser peligroso. ¿Quieres enviarlo al Programa de protección avanzada de Google para que lo analicemos?</translation> <translation id="569425414730375234">Sesión actual en modo Incógnito: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">Informar abuso de "<ph name="EXTENSION_NAME" />"</translation> <translation id="5696679855467848181">Archivo PPD actualmente en uso: <ph name="PPD_NAME" /></translation> @@ -3641,6 +3647,7 @@ <translation id="5901630391730855834">Amarillo</translation> <translation id="5906655207909574370">El dispositivo está casi actualizado. Reinícialo para completar la actualización.</translation> <translation id="5906732635754427568">Los datos asociados a esta app se quitarán de este dispositivo.</translation> +<translation id="5908695239556627796">Velocidad de desplazamiento del mouse</translation> <translation id="5908769186679515905">Bloquear la ejecución de Flash en los sitios</translation> <translation id="5910363049092958439">Gu&ardar imagen como...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> está sin conexión</translation> @@ -5088,6 +5095,7 @@ <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation> <translation id="7828731929332799387">Esta acción borrará todas las cookies y datos de sitios disponibles en contextos de terceros. ¿Quieres continuar?</translation> <translation id="7829298379596169484">Accediendo a la entrada de audio</translation> +<translation id="7829877209233347340">Pídele a tu padre o madre que acceda a su cuenta a fin de otorgarte permiso para agregar la cuenta de una institución educativa</translation> <translation id="7830594666202422257">Conectar a Linux</translation> <translation id="7831491651892296503">Se produjo un error cuando se configuraba la red</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5693,7 +5701,7 @@ <translation id="8641606876632989680">Chrome te notificará cuando accedas con una contraseña hackeada</translation> <translation id="8642900771896232685">2 segundos</translation> <translation id="8642947597466641025">Aumentar el tamaño del texto</translation> -<translation id="8643443571868262066">Es posible que el archivo <ph name="FILE_NAME" /> sea peligroso. ¿Quieres enviarlo al programa de Protección Avanzada de Google para que lo analicemos?</translation> +<translation id="8643443571868262066">Es posible que el archivo <ph name="FILE_NAME" /> sea peligroso. ¿Quieres enviarlo al Programa de protección avanzada de Google para que lo analicemos?</translation> <translation id="8644655801811752511">No se puede restablecer esta llave de seguridad. Intenta restablecerla inmediatamente después de insertarla.</translation> <translation id="8645354835496065562">Seguir permitiendo el acceso a los sensores</translation> <translation id="8645920082661222035">Predice y te advierte sobre eventos peligrosos antes de que ocurran.</translation> @@ -5842,6 +5850,7 @@ <translation id="8808686172382650546">Gato</translation> <translation id="8808744862003883508">En esta página, podrás ver todas las extensiones instaladas en Chrome.</translation> <translation id="8809147117840417135">Verde azulado claro</translation> +<translation id="8812593354822910461">También quiero borrar los datos de navegación (<ph name="URL" />), lo que me hará salir de <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">No se puede acceder a <ph name="USERNAME" /></translation> <translation id="8813811964357448561">hoja de papel</translation> <translation id="8813872945700551674">Haz que tu padre o madre aprueben "<ph name="EXTENSION_NAME" />"</translation> @@ -6131,6 +6140,7 @@ <translation id="9203398526606335860">&Perfiles activados</translation> <translation id="9203904171912129171">Seleccionar un dispositivo</translation> <translation id="9203962528777363226">El administrador de este dispositivo ha inhabilitado a nuevos usuarios para evitar que se agreguen.</translation> +<translation id="9209689095351280025">Los sitios no pueden usar cookies para rastrearte en la Web</translation> <translation id="9211177926627870898">Actualización necesaria</translation> <translation id="9214520840402538427">¡Vaya! Se ha agotado el tiempo de la inicialización de los atributos de tiempo de instalación. Comunícate con el representante de asistencia.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 9d963ea..c66b450 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Subir</translation> <translation id="1244265436519979884">Hay una restauración de Linux en curso</translation> <translation id="1244303850296295656">Error de extensión</translation> +<translation id="1246158006305844142">Tus aplicaciones y ajustes se sincronizarán en todos los dispositivos Chrome OS en los que hayas iniciado sesión con tu cuenta de Google. Para ver las opciones de sincronización del navegador, ve a la <ph name="LINK_BEGIN" />configuración de Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">¿Quieres quitar la sugerencia del portapapeles?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> se ha bloqueado porque está obsoleto</translation> <translation id="1251366534849411931">Falta una llave de apertura: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">No, gracias</translation> <translation id="1525740877599838384">Usar solo redes Wi‑Fi para determinar la ubicación</translation> <translation id="152629053603783244">Reiniciar Linux</translation> +<translation id="1526335046150927198">Habilitar aceleración de desplazamiento del panel táctil</translation> <translation id="1526560967942511387">Documento sin título</translation> <translation id="1529891865407786369">Fuente de alimentación</translation> <translation id="1530838837447122178">Abrir la configuración del ratón y del panel táctil</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Esta extensión no requiere permisos especiales.</translation> <translation id="1616298854599875024">No se ha podido importar la extensión "<ph name="IMPORT_NAME" />" porque no es un módulo compartido</translation> <translation id="1618268899808219593">C&entro de ayuda</translation> +<translation id="1620307519959413822">La contraseña no es correcta. Vuelve a intentarlo o haz clic en He olvidado la contraseña para restablecerla.</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1623132449929929218">Las imágenes no están disponibles en este momento. Vuelve a conectarte a Internet para ver colecciones de fondos de pantalla.</translation> <translation id="1627276047960621195">Descriptores de archivo</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Revisión de hardware</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Abrir en pantalla completa</translation> +<translation id="1892341345406963517">Hola, <ph name="PARENT_NAME" />:</translation> <translation id="189358972401248634">Otros idiomas</translation> <translation id="1895252664692693738">Tiempo restante: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Cierre del navegador</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Conexión de red restaurada</translation> <translation id="2727633948226935816">No volver a recordármelo</translation> <translation id="2727712005121231835">Tamaño real</translation> +<translation id="2729314457178420145">Borrar también los datos de navegación (<ph name="URL" />), lo que puede hacer que se cierre tu sesión en Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Creando copia de seguridad de las aplicaciones y archivos de Linux</translation> <translation id="273093730430620027">Esta página está accediendo a la cámara</translation> <translation id="2731392572903530958">Volv&er a abrir ventana cerrada</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Más <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies y otros datos de sitios y complementos</translation> <translation id="383891835335927981">No se ha ampliado ni reducido ningún sitio web</translation> +<translation id="3839509547554145593">Habilitar aceleración de desplazamiento del ratón</translation> <translation id="3839516600093027468">No permitir nunca que <ph name="HOST" /> vea el portapapeles</translation> <translation id="3841964634449506551">La contraseña no es válida</translation> <translation id="3842552989725514455">Fuente Serif</translation> @@ -2774,6 +2780,7 @@ <translation id="4699172675775169585">Archivos e imágenes almacenados en caché</translation> <translation id="4699357559218762027">(con inicio automático)</translation> <translation id="470074695271471509">¿Quieres cerrar sesión para terminar?</translation> +<translation id="4701025263201366865">Inicio de sesión del padre o de la madre</translation> <translation id="4707302005824653064">El administrador (<ph name="CUSTODIAN_EMAIL" />) puede consultar los datos de uso y del historial a través de chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + Certificado de usuario</translation> <translation id="4708794300267213770">Mostrar la pantalla de bloqueo al activar el dispositivo</translation> @@ -3081,6 +3088,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, búsqueda de <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Introduce el PIN de tu llave de seguridad. Si no sabes cuál es el PIN, tendrás que restablecer la llave de seguridad.</translation> <translation id="5139955368427980650">&Abrir</translation> +<translation id="5142793792982256885">Velocidad de desplazamiento del panel táctil</translation> <translation id="5142961317498132443">Autenticación</translation> <translation id="5143374789336132547">La extensión <ph name="EXTENSION_NAME" /> ha cambiado la página que se muestra al hacer clic en el botón Página de inicio.</translation> <translation id="5143712164865402236">Activar pantalla completa</translation> @@ -3126,6 +3134,7 @@ <translation id="5213891612754844763">Mostrar configuración de proxy</translation> <translation id="5215502535566372932">Selecciona un país</translation> <translation id="521582610500777512">Se ha descartado la foto</translation> +<translation id="5222403284441421673">Se ha bloqueado una descarga no segura</translation> <translation id="5222676887888702881">Cerrar sesión</translation> <translation id="52232769093306234">No se ha podido comprimir.</translation> <translation id="5225324770654022472">Mostrar acceso directo de aplicaciones</translation> @@ -3524,6 +3533,7 @@ <translation id="5734362860645681824">Comunicaciones</translation> <translation id="5734697361979786483">Añadir sistema de archivos compartidos</translation> <translation id="5736796278325406685">Introduce un nombre de usuario válido</translation> +<translation id="5739017626473506901">Inicia sesión para ayudar a <ph name="USER_NAME" /> a añadir una cuenta de centro educativo</translation> <translation id="5739235828260127894">Esperando verificación. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" />.</translation> <translation id="5739458112391494395">Muy grande</translation> <translation id="574209121243317957">Tono</translation> @@ -3643,6 +3653,7 @@ <translation id="5901630391730855834">Amarillo</translation> <translation id="5906655207909574370">El dispositivo está casi actualizado. Reinícialo para completar la actualización.</translation> <translation id="5906732635754427568">Los datos asociados a esta aplicación se eliminarán de este dispositivo.</translation> +<translation id="5908695239556627796">Velocidad de desplazamiento del ratón</translation> <translation id="5908769186679515905">Impedir que los sitios web ejecuten Flash</translation> <translation id="5910363049092958439">Guar&dar imagen como...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> no tiene conexión</translation> @@ -5090,6 +5101,7 @@ <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation> <translation id="7828731929332799387">Se eliminarán todas las cookies y los datos de sitios web disponibles en contextos de terceros. ¿Quieres continuar?</translation> <translation id="7829298379596169484">Accediendo a la entrada de audio</translation> +<translation id="7829877209233347340">Pídele a tu padre o a tu madre que inicie sesión para permitir que se añada una cuenta de centro educativo</translation> <translation id="7830594666202422257">Conectar a Linux</translation> <translation id="7831491651892296503">No se ha podido configurar la red</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472">Red <ph name="NETWORK_TYPE" />, conectando</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Preguntar antes (recomendado)</translation> +<translation id="8417548266957501132">Contraseña parental</translation> <translation id="8417573335434189196">No te protege frente a descargas, extensiones ni sitios web peligrosos. Chrome no recomienda esta opción.</translation> <translation id="8418445294933751433">Mo&strar como pestaña</translation> <translation id="8419098111404128271">Resultados de búsqueda de "<ph name="SEARCH_TEXT" />"</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">Gato</translation> <translation id="8808744862003883508">En esta página aparecen todas las extensiones instaladas en Chrome.</translation> <translation id="8809147117840417135">Turquesa claro</translation> +<translation id="8812593354822910461">Borrar también los datos de navegación (<ph name="URL" />), lo que cerrará tu sesión en <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">No se puede iniciar sesión como <ph name="USERNAME" /></translation> <translation id="8813811964357448561">hoja de papel</translation> <translation id="8813872945700551674">Ve a buscar a tu padre o a tu madre para que apruebe "<ph name="EXTENSION_NAME" />"</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">&Perfiles habilitados</translation> <translation id="9203904171912129171">Selecciona un dispositivo</translation> <translation id="9203962528777363226">El administrador de este dispositivo ha desactivado la opción de añadir nuevos usuarios.</translation> +<translation id="9209689095351280025">Los sitios web no pueden usar cookies para hacer un seguimiento de tu actividad en la Web.</translation> <translation id="9211177926627870898">Actualización necesaria</translation> <translation id="9214520840402538427">¡Vaya! Se ha agotado el tiempo de la inicialización de los atributos de tiempo de instalación. Ponte en contacto con el representante del servicio de asistencia.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 5730e95e..0f984360 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Selle laienduse jaoks pole erilube vaja.</translation> <translation id="1616298854599875024">Laiendust „<ph name="IMPORT_NAME" />” ei saa importida, kuna see pole jagatud moodul</translation> <translation id="1618268899808219593">A&bikeskus</translation> +<translation id="1620307519959413822">Vale parool. Proovige uuesti või klõpsake parooli lähtestamiseks valikul Unustasin parooli.</translation> <translation id="1620510694547887537">Kaamera</translation> <translation id="1623132449929929218">Pildid ei ole praegu saadaval. Taustapiltide kogude vaatamiseks looge uuesti Interneti-ühendus.</translation> <translation id="1627276047960621195">Faili deskriptorid</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Riistvara redaktsioon</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Ava täisekraanil</translation> +<translation id="1892341345406963517">Tere, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Teised keeled</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> jäänud</translation> <translation id="1895658205118569222">Sulgemine</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Kuva puhverserveri seaded</translation> <translation id="5215502535566372932">Valige riik</translation> <translation id="521582610500777512">Fotost loobuti</translation> +<translation id="5222403284441421673">Ebaturvaline allalaadimine blokeeriti</translation> <translation id="5222676887888702881">Logi välja</translation> <translation id="52232769093306234">Pakkimine ebaõnnestus.</translation> <translation id="5225324770654022472">Kuva rakenduste otsetee</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Vestlusteenused</translation> <translation id="5734697361979786483">Lisa failide võrguhoidla</translation> <translation id="5736796278325406685">Sisestage kehtiv kasutajanimi</translation> +<translation id="5739017626473506901">Logige sisse, et aidata kasutajal <ph name="USER_NAME" /> lisada koolikonto</translation> <translation id="5739235828260127894">Kinnitamise ootel. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Väga suur</translation> <translation id="574209121243317957">Helikõrgus</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-võrk, ühendamine</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Esmalt küsi (soovitatav)</translation> +<translation id="8417548266957501132">Vanema parool</translation> <translation id="8417573335434189196">Ei kaitse teid ohtlike veebisaitide, allalaadimiste ega laienduste eest. Chrome ei soovita seda seadet.</translation> <translation id="8418445294933751433">&Kuva vahelehena</translation> <translation id="8419098111404128271">Päringu „<ph name="SEARCH_TEXT" />” otsingutulemused</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index fcc915c..19c510cf 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -113,7 +113,7 @@ <translation id="1147991416141538220">Atzitzeko baimena eskatzeko, jarri gailuaren administratzailearekin harremanetan.</translation> <translation id="1149401351239820326">Iraungitze-hilabetea</translation> <translation id="1150565364351027703">Eguzkitako betaurrekoak</translation> -<translation id="1151841030700667295">Webgune guztietako saioa amaituko da, baita irekita dauden fitxetakoa ere.</translation> +<translation id="1151841030700667295">Webgune guztietan amaituko da saioa, baita irekita dauden fitxetan ere.</translation> <translation id="1151917987301063366">Eman beti sentsoreak erabiltzeko baimena <ph name="HOST" /> ostalariari</translation> <translation id="1153356358378277386">Parekatutako gailuak</translation> <translation id="1153636665119721804">Google-ren Babes aurreratua programa</translation> @@ -192,6 +192,7 @@ <translation id="1243314992276662751">Kargatu</translation> <translation id="1244265436519979884">Linux-en edukiontzia leheneratzen</translation> <translation id="1244303850296295656">Luzapenaren errorea</translation> +<translation id="1246158006305844142">Aplikazioak eta ezarpenak Chrome OS darabilten gailu guztietan sinkronizatuko dira, Google-ko kontuarekin saioa hasita badaukazu haietan. Arakatzailea sinkronizatzeko aukerak ikusteko, joan <ph name="LINK_BEGIN" />Chrome-ren ezarpenetara<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Iradokizuna arbeletik kendu nahi duzu?</translation> <translation id="1249643471736608405">Blokeatu egin da <ph name="PLUGIN_NAME" /> zaharkituta dagoelako</translation> <translation id="1251366534849411931">Ezkerreko giltza behar da: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Ez, eskerrik asko</translation> <translation id="1525740877599838384">Erabili soilik wifi-sarea kokapena zehazteko</translation> <translation id="152629053603783244">Berrabiarazi Linux</translation> +<translation id="1526335046150927198">Gaitu ukipen-panelarekin gora/behera bizkorrago egiteko aukera</translation> <translation id="1526560967942511387">Titulurik gabeko dokumentua</translation> <translation id="1529891865407786369">Energia-iturria</translation> <translation id="1530838837447122178">Ireki saguaren eta ukipen-panelaren ezarpenak</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Luzapen honek ez du baimen berezirik behar.</translation> <translation id="1616298854599875024">Ezin izan da inportatu "<ph name="IMPORT_NAME" />" luzapena, ez baita partekatutako modulua</translation> <translation id="1618268899808219593">&Laguntza-zentroa</translation> +<translation id="1620307519959413822">Pasahitza ez da zuzena. Saiatu berriro, edo sakatu "Pasahitza ahaztu zaizu?" eta berrezarri pasahitza.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Irudiak ez daude erabilgarri. Horma-paperen bildumak ikusteko, konektatu berriro Internetera.</translation> <translation id="1627276047960621195">Fitxategien azalpenak</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Hardwarearen berrikuspena</translation> <translation id="1890674179660343635"><span>IDa:</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Ireki pantaila osoan</translation> +<translation id="1892341345406963517">Kaixo, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Beste hizkuntzak</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> gelditzen dira</translation> <translation id="1895658205118569222">Itzali</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Sareko konexioa berrezarri da</translation> <translation id="2727633948226935816">Ez gogorarazi berriro</translation> <translation id="2727712005121231835">Benetako tamaina</translation> +<translation id="2729314457178420145">Garbitu arakatze-datuak ere (<ph name="URL" />); Google.com webguneko saioa ixtea eragin dezake horrek. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux-eko aplikazio eta fitxategien babeskopia egiten</translation> <translation id="273093730430620027">Orria zure kamera atzitzen ari da.</translation> <translation id="2731392572903530958">Ir&eki berriro leihoa</translation> @@ -1338,7 +1343,7 @@ <translation id="2753677631968972007">Kontrolatu eskuz webgunearen baimenak.</translation> <translation id="2755367719610958252">Kudeatu erabilerraztasun-eginbideak</translation> <translation id="275662540872599901">pantaila itzalita dago</translation> -<translation id="2757338480560142065">Ziurtatu gordetzen ari zaren pasahitza bat datorrela <ph name="WEBSITE" /> webguneko pasahitzarekin</translation> +<translation id="2757338480560142065">Ziurtatu gordetzera zoazen pasahitza bat datorrela <ph name="WEBSITE" /> webguneko pasahitzarekin</translation> <translation id="2762441749940182211">Kamera blokeatuta dago</translation> <translation id="2765217105034171413">Txikia</translation> <translation id="2766161002040448006">Galdetu guraso bati</translation> @@ -1591,7 +1596,7 @@ <translation id="3090819949319990166">Ezin da kanpoko crx fitxategia <ph name="TEMP_CRX_FILE" /> fitxategian kopiatu.</translation> <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" parekatu da</translation> <translation id="3092699946856346803">Sartu SIM txartela eta saiatu berriro</translation> -<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Luzapen kaltegarri bat desaktibatu egin da. Kendu ere egin dezakezu.}other{{NUM_EXTENSIONS} luzapen kaltegarri desaktibatu egin dira. Kendu ere egin ditzakezu.}}</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Luzapen kaltegarri bat desaktibatu da. Kendu ere egin dezakezu.}other{{NUM_EXTENSIONS} luzapen kaltegarri desaktibatu dira. Kendu ere egin ditzakezu.}}</translation> <translation id="3101709781009526431">Data eta ordua</translation> <translation id="3103941660000130485">Errore bat gertatu da Linux bertsio-berritzean</translation> <translation id="310671807099593501">Webgunea Bluetooth konexioa erabiltzen ari da</translation> @@ -1878,7 +1883,7 @@ <translation id="3496213124478423963">Txikitu</translation> <translation id="3497560059572256875">Partekatu doodle-a</translation> <translation id="3498215018399854026">Ezin izan gara jarri harremanetan zure arduradunarekin. Saiatu berriro.</translation> -<translation id="3500417806337761827">Errore bat gertatu da partekatzea muntatzean. ETEen partekatze gehiegi daude jada muntatuta.</translation> +<translation id="3500417806337761827">Errore bat gertatu da partekatzea muntatzean. SMBko partekatze gehiegi daude jada muntatuta.</translation> <translation id="3505030558724226696">Baliogabetu gailurako sarbidea</translation> <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />" luzapenak dituen baimenak</translation> <translation id="3507888235492474624">Bilatu berriro Bluetooth bidezko gailuak</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> orriaren jarraipena</translation> <translation id="3838543471119263078">Cookieak eta webgune nahiz pluginen bestelako datuak</translation> <translation id="383891835335927981">Ez da aplikatu zoomik inongo webgunetan</translation> +<translation id="3839509547554145593">Gaitu saguarekin gora/behera bizkorrago egiteko aukera</translation> <translation id="3839516600093027468">Blokeatu beti <ph name="HOST" /> webguneari arbela ikusteko aukera</translation> <translation id="3841964634449506551">Pasahitzak ez du balio</translation> <translation id="3842552989725514455">Serif letra</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Cachean gordetako irudiak eta fitxategiak</translation> <translation id="4699357559218762027">(automatikoki abiarazia)</translation> <translation id="470074695271471509">Saioa amaitu nahi duzu prozesua amaitzeko?</translation> +<translation id="4701025263201366865">Gurasoen saio-hasiera</translation> <translation id="4707302005824653064">Kudeatzaileak (<ph name="CUSTODIAN_EMAIL" />) erabilera eta historia ikuska ditzake chrome.com helbidean.</translation> <translation id="4707579418881001319">L2TP/IPsec + erabiltzaile-ziurtagiria</translation> <translation id="4708794300267213770">Inaktibo egoeratik irtetean, erakutsi pantaila blokeatua</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680">Bilatu "<ph name="QUERY_NAME" />" <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> erabilita</translation> <translation id="5139823398361067371">Idatzi segurtasun-giltzaren PIN kodea. PIN kodea ez badakizu, segurtasun-giltza berrezarri egin beharko duzu.</translation> <translation id="5139955368427980650">Ir&eki</translation> +<translation id="5142793792982256885">Ukipen-panelarekin gora/behera egiteko abiadura</translation> <translation id="5142961317498132443">Autentifikazioa</translation> <translation id="5143374789336132547"><ph name="EXTENSION_NAME" /> luzapenak aldatu egin du Hasiera botoia sakatzean agertzen den orria.</translation> <translation id="5143712164865402236">Sartu pantaila osoko moduan</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Erakutsi proxy-ezarpenak</translation> <translation id="5215502535566372932">Hautatu herrialdea</translation> <translation id="521582610500777512">Argazkia baztertu da</translation> +<translation id="5222403284441421673">Segurua ez den deskarga bat blokeatu da</translation> <translation id="5222676887888702881">Amaitu saioa</translation> <translation id="52232769093306234">Ezin izan da paketatu.</translation> <translation id="5225324770654022472">Erakutsi aplikazioen lasterbidea</translation> @@ -3420,7 +3429,7 @@ <translation id="5593357315997824387">Sinkronizatu fitxategiak</translation> <translation id="5595152862129936745">Oso urrun</translation> <translation id="5595485650161345191">Editatu helbidea</translation> -<translation id="5595727715083333657">Edukiontziak ez du onartzen tamainaz aldatzea. Linux-ek (Beta) aldez aurretik esleituta duen biltegiratze-tamaina doitzeko, egin babeskopia bat eta, ondoren, leheneratu edukiontzi berri batean.</translation> +<translation id="5595727715083333657">Edukiontziak ez du onartzen tamainaz aldatzea. Linux-ek (Beta) aldez aurretik esleituta duen biltegiratze-tamaina doitzeko, egin babeskopia bat eta, ondoren, lehenera ezazu edukiontzi berri batean.</translation> <translation id="5596627076506792578">Aukera gehiago</translation> <translation id="5600706100022181951">Datu-konexioaren <ph name="UPDATE_SIZE_MB" /> MB erabilita deskargatuko da eguneratzea. Aurrera egin nahi duzu?</translation> <translation id="5601503069213153581">PIN kodea</translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Komunikazioak</translation> <translation id="5734697361979786483">Gehitu fitxategiak partekatzeko sareko gailua</translation> <translation id="5736796278325406685">Idatzi balio duen erabiltzaile-izen bat</translation> +<translation id="5739017626473506901">Hasi saioa <ph name="USER_NAME" /> erabiltzaileak eskolako kontua gehi dezan</translation> <translation id="5739235828260127894">Egiaztapenaren zain. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Oso handia</translation> <translation id="574209121243317957">Tonua</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Horia</translation> <translation id="5906655207909574370">Ia amaitu dugu! Eguneratzen amaitzeko, berrabiarazi gailua.</translation> <translation id="5906732635754427568">Aplikazio honekin erlazionatutako datu guztiak kenduko dira gailu honetatik.</translation> +<translation id="5908695239556627796">Saguarekin gora/behera egiteko abiadura</translation> <translation id="5908769186679515905">Ez utzi webguneei Flash abiarazten</translation> <translation id="5910363049092958439">Gor&de irudia honela…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ez dago konektatuta</translation> @@ -3849,7 +3860,7 @@ <translation id="6160625263637492097">Eman autentifikatzeko ziurtagiriak</translation> <translation id="6163363155248589649">&Normala</translation> <translation id="6163522313638838258">Zabaldu guztiak…</translation> -<translation id="6164005077879661055">Erabiltzaile gainbegiratuarekin erlazionatutako fitxategi eta datu lokal guztiak behin betiko ezabatuko dira erabiltzaile gainbegiratua kentzean. Hala ere, erabiltzaile gainbegiratuak bisitatu dituen webguneak eta bere ezarpenak ikusten jarraitu ahal izango du kudeatzaileak <ph name="MANAGEMENT_URL" /> webgunean.</translation> +<translation id="6164005077879661055">Erabiltzaile gainbegiratuarekin erlazionatutako fitxategi eta datu lokal guztiak betiko ezabatuko dira erabiltzaile gainbegiratua kentzean. Hala ere, erabiltzaile gainbegiratuak bisitatu dituen webguneak eta bere ezarpenak ikusten jarraitu ahal izango du kudeatzaileak <ph name="MANAGEMENT_URL" /> webgunean.</translation> <translation id="6165508094623778733">Lortu informazio gehiago</translation> <translation id="6166185671393271715">Inportatu pasahitzak Chrome-ra</translation> <translation id="6169040057125497443">Egiaztatu mikrofonoa.</translation> @@ -4842,7 +4853,7 @@ <translation id="7513029293694390567">Hasi saioa automatikoki webguneetan gordetako kredentzialekin. Eginbidea desgaituta badago, zeu zarela berresteko eskatuko dizu webgune batean saioa hasten duzun bakoitzean.</translation> <translation id="7514239104543605883">Kopiatu zure gailuan</translation> <translation id="7514365320538308">Deskargatu</translation> -<translation id="751523031290522286">Administratzaileak <ph name="APP_NAME" /> aplikazioa blokeatu du. Eskatu baimena aplikazio hau erabiltzeko.</translation> +<translation id="751523031290522286">Administratzaileak <ph name="APP_NAME" /> aplikazioa blokeatu du. Eska iezaiozu baimena aplikazio hau erabiltzeko.</translation> <translation id="7516981202574715431"><ph name="APP_NAME" /> pausatuta dago</translation> <translation id="7517063221058203587">{0,plural, =1{Eguneratu gailua minutu bateko epean}other{Eguneratu gailua # minutuko epean}}</translation> <translation id="7520766081042531487">Ezkutuko moduaren ataria: <ph name="SUBFRAME_SITE" /></translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Oharra:<ph name="END_BOLD" /> sistema berrabiarazi egingo da prozesuan zehar.</translation> <translation id="7828731929332799387">Cookie eta webguneen datu guztiak ezabatuko ditu hirugarrenen testuinguruetatik. Aurrera egin nahi duzu?</translation> <translation id="7829298379596169484">Audio-sarrera atzitzen</translation> +<translation id="7829877209233347340">Eskatu guraso bati saioa hasteko, eskolako kontu bat gehitzeko baimena eman diezazun</translation> <translation id="7830594666202422257">Konektatu Linux-era</translation> <translation id="7831491651892296503">Errore bat gertatu da sarea konfiguratzean</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> sarea. Konektatzen.</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Galdetu lehenbizi (gomendatua)</translation> +<translation id="8417548266957501132">Gurasoaren pasahitza</translation> <translation id="8417573335434189196">Ez zaitu babesten webgune, deskarga eta luzapen kaltegarrien aurka. Chrome-k ez du gomendatzen ezarpen hau.</translation> <translation id="8418445294933751433">&Erakutsi fitxa gisa</translation> <translation id="8419098111404128271">"<ph name="SEARCH_TEXT" />" bilaketaren emaitzak</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">Katua</translation> <translation id="8808744862003883508">Chrome-n instalatuta dauden luzapen guztiak ikus ditzakezu orri honetan.</translation> <translation id="8809147117840417135">Anil argia</translation> +<translation id="8812593354822910461">Garbitu arakatze-datuak ere (<ph name="URL" />); <ph name="DOMAIN" /> webguneko saioa ixtea eragin dezake horrek. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Ezin da hasi saioa <ph name="USERNAME" /> kontuan</translation> <translation id="8813811964357448561">paper-orria</translation> <translation id="8813872945700551674">Eskatu guraso bati "<ph name="EXTENSION_NAME" />" onartzeko</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">&Profilen sorrera gaituta</translation> <translation id="9203904171912129171">Hautatu gailua</translation> <translation id="9203962528777363226">Gailuaren administratzaileak erabiltzaile berriak gehitzeko aukera desgaitu du</translation> +<translation id="9209689095351280025">Webguneek ezin dituzte erabili sarean jarraipena egiten dizuten cookieak</translation> <translation id="9211177926627870898">Eguneratu egin behar da</translation> <translation id="9214520840402538427">Instalazioko atributuak abiarazteko denbora-muga gainditu da. Jarri harremanetan laguntza emateko ordezkariarekin.</translation> <translation id="9214695392875603905">Pasteltxoa</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index a58634e..c3dae04f 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">بارگذاری</translation> <translation id="1244265436519979884">درحالحاضر بازیابی Linux درحال انجام است</translation> <translation id="1244303850296295656">خطای افزونه</translation> +<translation id="1246158006305844142">برنامهها و تنظیماتتان در همه دستگاههای «سیستمعامل Chrome» که با حساب Google خود در آنها به سیستم وارد شدهاید همگامسازی خواهد شد. برای گزینههای همگامسازی مرورگر، به <ph name="LINK_BEGIN" />تنظیمات Chrome<ph name="LINK_END" /> بروید.</translation> <translation id="1246905108078336582">پیشنهاد از بریدهدان حذف شود؟</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> چون منسوخ شده است، مسدود شد</translation> <translation id="1251366534849411931">اینجا باید آکولاد باز باشد: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">نه، متشکرم</translation> <translation id="1525740877599838384">فقط از Wi-Fi برای تعیین مکان استفاده شود</translation> <translation id="152629053603783244">بازراهاندازی Linux</translation> +<translation id="1526335046150927198">فعال کردن شتاب پیمایش صفحه لمسی</translation> <translation id="1526560967942511387">سند بدون عنوان</translation> <translation id="1529891865407786369">منبع نیرو:</translation> <translation id="1530838837447122178">باز کردن تنظیمات موشواره و صفحه لمسی دستگاه</translation> @@ -456,6 +458,7 @@ <translation id="1616206807336925449">این برنامه افزودنی به مجوز خاصی نیاز ندارد.</translation> <translation id="1616298854599875024">نمیتوان افزونه «<ph name="IMPORT_NAME" />» را وارد کرد زیرا مدول همرسانیشدهای نیست.</translation> <translation id="1618268899808219593">مرکز را&هنمایی</translation> +<translation id="1620307519959413822">گذرواژه نادرست است. دوباره امتحان کنید یا روی «گذرواژه را فراموش کردهاید» کلیک کنید تا آن را بازنشانی کنید.</translation> <translation id="1620510694547887537">دوربین</translation> <translation id="1623132449929929218">درحالحاضر تصاویر دردسترس نیستند. برای دیدن مجموعههای کاغذدیواری دوباره به اینترنت متصل شوید.</translation> <translation id="1627276047960621195">توصیفگرهای فایل</translation> @@ -674,6 +677,7 @@ <translation id="1887850431809612466">بازبینی سختافزار</translation> <translation id="1890674179660343635"><span>شناسه: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">باز کردن تمام صفحه</translation> +<translation id="1892341345406963517">سلام <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">زبانهای دیگر</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> باقی مانده</translation> <translation id="1895658205118569222">بسته شدن</translation> @@ -1310,6 +1314,7 @@ <translation id="2725200716980197196">اتصال به شبکه بازیابی شد</translation> <translation id="2727633948226935816">دوباره به من یادآوری نشود</translation> <translation id="2727712005121231835">اندازه واقعی</translation> +<translation id="2729314457178420145">دادههای محصول مرور (<ph name="URL" />) را نیز پاک میکند که این کار ممکن است شما را از سیستم Google.com خارج کند. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">درحال پشتیبانگیری از برنامهها و فایلهای Linux</translation> <translation id="273093730430620027">این صفحه به دوربین شما دسترسی دارد.</translation> <translation id="2731392572903530958">با&ز کردن مجدد پنجره بسته</translation> @@ -2161,6 +2166,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> بیشتر</translation> <translation id="3838543471119263078">کوکیها و دادههای افزایه و سایتهای دیگر</translation> <translation id="383891835335927981">هیچ سایتی بزرگنمایی یا کوچکنمایی نشده است</translation> +<translation id="3839509547554145593">فعال کردن شتاب پیمایش موشواره</translation> <translation id="3839516600093027468">دسترسی <ph name="HOST" /> به بریدهدان همیشه مسدود باشد</translation> <translation id="3841964634449506551">گذرواژه نامعتبر است</translation> <translation id="3842552989725514455">قلم Serif</translation> @@ -2772,6 +2778,7 @@ <translation id="4699172675775169585">تصاویر و فایلهای قرار گرفته در حافظه پنهان</translation> <translation id="4699357559218762027">(اجرای خودکار)</translation> <translation id="470074695271471509">برای پایان این فرآیند، از سیستم خارج میشوید؟</translation> +<translation id="4701025263201366865">ورود ولی به سیستم</translation> <translation id="4707302005824653064">استفاده و سابقه میتواند توسط مدیر (<ph name="CUSTODIAN_EMAIL" />) در chrome.com بازدید شود.</translation> <translation id="4707579418881001319">L2TP/IPSec + گواهی کاربر</translation> <translation id="4708794300267213770">نمایش صفحه قفل هنگام بیدار شدن از حالت خواب</translation> @@ -3079,6 +3086,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />، جستجوی <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">پین کلید امنیتی را وارد کنید. اگر پین را نمیدانید، باید کلید امنیتی را بازنشانی کنید.</translation> <translation id="5139955368427980650">&بازکردن</translation> +<translation id="5142793792982256885">سرعت پیمایش صفحه لمسی</translation> <translation id="5142961317498132443">احراز هویت</translation> <translation id="5143374789336132547">افزونه «<ph name="EXTENSION_NAME" />»، صفحهای را با کلیک روی دکمه صفحه اصلی نمایش داده میشود، تغییر داده است.</translation> <translation id="5143712164865402236">رفتن به حالت تمام صفحه</translation> @@ -3124,6 +3132,7 @@ <translation id="5213891612754844763">نمایش تنظیمات پروکسی</translation> <translation id="5215502535566372932">کشور را انتخاب کنید</translation> <translation id="521582610500777512">عکس صرف نظر شد</translation> +<translation id="5222403284441421673">بارگیری ناامن مسدود شد</translation> <translation id="5222676887888702881">خروج از سیستم</translation> <translation id="52232769093306234">بستهبندی نشد.</translation> <translation id="5225324770654022472">نمایش میانبر برنامهها</translation> @@ -3522,6 +3531,7 @@ <translation id="5734362860645681824">ارتباطات</translation> <translation id="5734697361979786483">افزودن دستگاه ذخیرهسازی متصل به شبکه</translation> <translation id="5736796278325406685">لطفاً نام کاربری معتبری وارد کنید.</translation> +<translation id="5739017626473506901">به سیستم وارد شوید تا بتوانید به <ph name="USER_NAME" /> در افزودن حساب محل تحصیل کمک کنید</translation> <translation id="5739235828260127894">در انتظار تأیید. <ph name="LINK_BEGIN" />بیشتر بدانید.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">خیلی بزرگ</translation> <translation id="574209121243317957">زیروبمی صدا</translation> @@ -3641,6 +3651,7 @@ <translation id="5901630391730855834">زرد</translation> <translation id="5906655207909574370">تقریباً بهروز شده است! برای تمام کردن بهروزرسانی، دستگاهتان را دوباره راهاندازی کنید.</translation> <translation id="5906732635754427568">دادههای مرتبط با این برنامه از این دستگاه پاک میشوند.</translation> +<translation id="5908695239556627796">سرعت پیمایش موشواره</translation> <translation id="5908769186679515905">اجرای Flash در سایتها مسدود شود</translation> <translation id="5910363049092958439">ذ&خیره فایل تصویری بهعنوان...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> آفلاین است</translation> @@ -5088,6 +5099,7 @@ <ph name="BEGIN_BOLD" />نکته:<ph name="END_BOLD" /> سیستم هنگام پردازش راهاندازی مجدد میشود.</translation> <translation id="7828731929332799387">با این کار همه کوکیها و دادههای سایت موجود در بافتهای شخص ثالث حذف میشود. میخواهید ادامه دهید؟</translation> <translation id="7829298379596169484">در حال دسترسی به ورودی صوتی</translation> +<translation id="7829877209233347340">از ولی خود بخواهید به سیستم وارد شود و با افزودن حساب محل تحصیل موافقت کند</translation> <translation id="7830594666202422257">اتصال به Linux</translation> <translation id="7831491651892296503">خطا در پیکربندی شبکه</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5528,6 +5540,7 @@ <translation id="8408068190360279472">شبکه <ph name="NETWORK_TYPE" />، درحال اتصال</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">ابتدا سؤال شود (توصیه میشود)</translation> +<translation id="8417548266957501132">گذرواژه ولی</translation> <translation id="8417573335434189196">دربرابر وبسایتها، بارگیریها، یا افزونههای خطرناک از شما محافظت نمیکند. Chrome این تنظیم را توصیه نمیکند.</translation> <translation id="8418445294933751433">&نمایش بهصورت برگه</translation> <translation id="8419098111404128271">نتایج جستجو برای «<ph name="SEARCH_TEXT" />»</translation> @@ -5842,6 +5855,7 @@ <translation id="8808686172382650546">گربه</translation> <translation id="8808744862003883508">در این صفحه میتوانید همه افزونههای نصبشده در Chrome را ببینید.</translation> <translation id="8809147117840417135">سبز دودی روشن</translation> +<translation id="8812593354822910461">دادههای محصول مرور (<ph name="URL" />) را نیز پاک میکند که این کار شما را از سیستم <ph name="DOMAIN" /> خارج خواهد کرد. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">ورود به سیستم <ph name="USERNAME" /> امکانپذیر نیست</translation> <translation id="8813811964357448561">صفحه کاغذ</translation> <translation id="8813872945700551674">از یکی از والدین بخواهید «<ph name="EXTENSION_NAME" />» را تأیید کند</translation> @@ -6131,6 +6145,7 @@ <translation id="9203398526606335860">&نمایه سازی فعال شد</translation> <translation id="9203904171912129171">انتخاب دستگاه</translation> <translation id="9203962528777363226">سرپرست این دستگاه امکان افزوده شدن کاربران جدید را غیرفعال کرده است</translation> +<translation id="9209689095351280025">سایتها نمیتوانند از کوکیهایی که شما را در وب ردیابی میکند استفاده کنند</translation> <translation id="9211177926627870898">بهروزرسانی لازم است</translation> <translation id="9214520840402538427">متأسفیم! مهلت مقداردهی اولیه از ویژگیهای زمان نصب به پایان رسیده است. لطفاً با نماینده پشتیبانی خود تماس بگیرید.</translation> <translation id="9214695392875603905">کیک فنجانی</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 876f404e..45368c1c 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Tämä laajennus ei vaadi erityisiä käyttöoikeuksia.</translation> <translation id="1616298854599875024">Laajennusta <ph name="IMPORT_NAME" /> ei voi tuoda, koska se ei ole jaettu moduuli.</translation> <translation id="1618268899808219593">Ohj&ekeskus</translation> +<translation id="1620307519959413822">Väärä salasana. Yritä uudelleen tai nollaa se valitsemalla Unohtunut salasana.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Kuvia ei ole tällä hetkellä saatavilla. Muodosta internetyhteys uudelleen nähdäksesi taustakuvakokoelmat.</translation> <translation id="1627276047960621195">Tiedostokuvaajat</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Laitteistoversio</translation> <translation id="1890674179660343635"><span>Tunnus:</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Avaa koko näytössä</translation> +<translation id="1892341345406963517">Hei <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Muut kielet</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> jäljellä</translation> <translation id="1895658205118569222">Sulkeminen</translation> @@ -2630,7 +2632,7 @@ <translation id="450099669180426158">Huutomerkkikuvake</translation> <translation id="4501530680793980440">Vahvista poisto</translation> <translation id="4502423230170890588">Poista tältä laitteelta</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{Evästeet sallitaan}=1{Evästeet sallitaan, 1 poikkeus}other{Evästeet sallitaan, {COUNT} poikkeusta}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{Evästeet on sallittu}=1{Evästeet on sallittu, 1 poikkeus}other{Evästeet on sallittu, {COUNT} poikkeusta}}</translation> <translation id="4504940961672722399">Käytä laajennusta klikkaamalla tätä kuvaketta tai painamalla <ph name="EXTENSION_SHORTCUT" />.</translation> <translation id="4508051413094283164">Avaa kaikki incognito-ikkunassa</translation> <translation id="4508265954913339219">Aktivointi epäonnistui</translation> @@ -3130,6 +3132,7 @@ <translation id="5213891612754844763">Näytä välityspalvelinasetukset</translation> <translation id="5215502535566372932">Valitse maa</translation> <translation id="521582610500777512">Kuva hylättiin</translation> +<translation id="5222403284441421673">Suojaamaton lataus estetty</translation> <translation id="5222676887888702881">Kirjaudu ulos</translation> <translation id="52232769093306234">Pakkaus epäonnistui.</translation> <translation id="5225324770654022472">Näytä sovellusten oikopolku</translation> @@ -3423,7 +3426,7 @@ <translation id="5593357315997824387">Synkronoi tiedostoni</translation> <translation id="5595152862129936745">Erittäin kaukana</translation> <translation id="5595485650161345191">Osoitteen muokkaus</translation> -<translation id="5595727715083333657">Säilö ei tue koon muuttamista. Jos haluat muuttaa sen tilan määrää, joka on varattu ennakkoon Linuxille (Beta), varmuuskopioi ja palauta sitten uuteen säilöön.</translation> +<translation id="5595727715083333657">Säilö ei tue koon muuttamista. Jos haluat muuttaa sen tilan määrää, joka on varattu ennakkoon Linuxille (Beta), luo varmuuskopio ja palauta se sitten uuteen säilöön.</translation> <translation id="5596627076506792578">Lisäasetukset</translation> <translation id="5600706100022181951">Päivityksen lataukseen käytetään <ph name="UPDATE_SIZE_MB" /> Mt mobiilidataa. Haluatko jatkaa?</translation> <translation id="5601503069213153581">PIN-koodi</translation> @@ -3528,6 +3531,7 @@ <translation id="5734362860645681824">Äänilaitteet</translation> <translation id="5734697361979786483">Lisää tiedostonjako</translation> <translation id="5736796278325406685">Anna kelvollinen käyttäjänimi</translation> +<translation id="5739017626473506901">Kirjaudu sisään, niin <ph name="USER_NAME" /> voi lisätä koulutilin avullasi</translation> <translation id="5739235828260127894">Odotetaan vahvistusta. <ph name="LINK_BEGIN" />Lisätietoja<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Hyvin suuri</translation> <translation id="574209121243317957">Äänenkorkeus</translation> @@ -4850,7 +4854,7 @@ <translation id="7514365320538308">Lataa</translation> <translation id="751523031290522286"><ph name="APP_NAME" /> on järjestelmänvalvojan estämä. Pyydä järjestelmänvalvojalta lupaa käyttää tätä sovellusta.</translation> <translation id="7516981202574715431"><ph name="APP_NAME" /> on keskeytetty</translation> -<translation id="7517063221058203587">{0,plural, =1{Päivitä laite 1 sekunnin kuluessa}other{Päivitä laite # sekunnin kuluessa}}</translation> +<translation id="7517063221058203587">{0,plural, =1{Päivitä laite 1 minuutin kuluessa}other{Päivitä laite # minuutin kuluessa}}</translation> <translation id="7520766081042531487">Incognito-portaali: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7522255036471229694">Sano ”Ok Google”.</translation> @@ -5537,6 +5541,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> verkko, yhdistetään</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Kysy ensin (suositus)</translation> +<translation id="8417548266957501132">Vanhemman salasana</translation> <translation id="8417573335434189196">Ei suojaa sinua vaarallisilta sivustoilta, latauksilta tai laajennuksilta. Chrome ei suosittele tätä asetusta.</translation> <translation id="8418445294933751433">&Näytä välilehtenä</translation> <translation id="8419098111404128271">Tulokset haulle <ph name="SEARCH_TEXT" /></translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index f49c8fd5..f2afd822 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">I-upload</translation> <translation id="1244265436519979884">Kasalukuyang isinasagawa ang pag-restore ng Linux</translation> <translation id="1244303850296295656">Error sa extension</translation> +<translation id="1246158006305844142">Magsi-sync ang iyong mga app at setting sa lahat ng Chrome OS device kung saan ka naka-sign in gamit ang Google account mo. Para sa mga opsyon sa pag-sync ng browser, pumunta sa<ph name="LINK_BEGIN" />mga setting ng Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Alisin ang suhestyon mula sa clipboard?</translation> <translation id="1249643471736608405">Na-block ang <ph name="PLUGIN_NAME" /> dahil hindi na ito ginagamit</translation> <translation id="1251366534849411931">Inaasahang opening curly brace: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Hindi, Salamat na lang</translation> <translation id="1525740877599838384">Wi-Fi lang ang gamitin upang matukoy ang lokasyon</translation> <translation id="152629053603783244">I-restart ang Linux</translation> +<translation id="1526335046150927198">I-enable ang pag-accelerate sa pag-scroll ng touchpad</translation> <translation id="1526560967942511387">Walang pamagat na Dokumento</translation> <translation id="1529891865407786369">Pinagmumulan ng kuryente</translation> <translation id="1530838837447122178">Buksan ang mga setting ng mouse at touchpad device</translation> @@ -1313,6 +1315,7 @@ <translation id="2725200716980197196">Naipanumbalik ang connectivity ng network</translation> <translation id="2727633948226935816">Huwag akong paalalahanang muli</translation> <translation id="2727712005121231835">Actual Size</translation> +<translation id="2729314457178420145">I-clear din ang data mula sa pag-browse (<ph name="URL" />) na posibleng mag-sign out sa iyo sa Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Bina-back-up ang mga app at file ng Linux</translation> <translation id="273093730430620027">Ina-access ng pahinang ito ang iyong camera.</translation> <translation id="2731392572903530958">M&uling Buksan ang Nakasarang Window</translation> @@ -2164,6 +2167,7 @@ <translation id="3838486795898716504">Higit pang <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies at iba pang data ng site at plugin</translation> <translation id="383891835335927981">Walang site na na-zoom in o na-zoom out</translation> +<translation id="3839509547554145593">I-enable ang pag-accelerate sa pag-scroll ng mouse</translation> <translation id="3839516600093027468">Palaging i-block ang <ph name="HOST" /> sa pagtingin sa clipboard</translation> <translation id="3841964634449506551">Di-wasto ang password</translation> <translation id="3842552989725514455">Serif font</translation> @@ -2775,6 +2779,7 @@ <translation id="4699172675775169585">Mga naka-cache na larawan at file</translation> <translation id="4699357559218762027">(awtomatikong inilunsad)</translation> <translation id="470074695271471509">Mag-sign out para tapusin?</translation> +<translation id="4701025263201366865">Pag-sign in ng magulang</translation> <translation id="4707302005824653064">Masusuri ng tagapamahalang si ( <ph name="CUSTODIAN_EMAIL" /> ) ang paggamit at history sa chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + certificate ng user</translation> <translation id="4708794300267213770">Ipakita ang lock screen kapag pinagana mula sa pag-sleep</translation> @@ -3082,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Paghahanap sa <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Ilagay ang PIN para sa iyong security key. Kung hindi mo alam ang PIN, kakailanganin mong i-reset ang security key.</translation> <translation id="5139955368427980650">&Buksan</translation> +<translation id="5142793792982256885">Bilis ng pag-scroll ng touchpad</translation> <translation id="5142961317498132443">Pag-authenticate</translation> <translation id="5143374789336132547">Binago ng extension na "<ph name="EXTENSION_NAME" />" ang ipinapakitang page kapag na-click mo ang button ng Home.</translation> <translation id="5143712164865402236">Pumasok sa Full Screen</translation> @@ -3644,6 +3650,7 @@ <translation id="5901630391730855834">Dilaw</translation> <translation id="5906655207909574370">Halos napapanahon na! I-restart ang iyong device upang tapusin ang pag-a-update.</translation> <translation id="5906732635754427568">Aalisin sa device na ito ang data na nauugnay sa app na ito.</translation> +<translation id="5908695239556627796">Bilis ng pag-scroll ng mouse</translation> <translation id="5908769186679515905">I-block ang mga site sa pagpapatakbo ng Flash</translation> <translation id="5910363049092958439">I-sa&ve ang Imahe Bilang...</translation> <translation id="5910726859585389579">Offline ang <ph name="DEVICE_TYPE" /></translation> @@ -5091,6 +5098,7 @@ <ph name="BEGIN_BOLD" />Tandaan:<ph name="END_BOLD" /> Mare-reboot ang system sa panahon ng proseso.</translation> <translation id="7828731929332799387">Ide-delete nito ang lahat ng cookies at data ng site na available sa mga konteksto ng third party. Gusto mo bang magpatuloy?</translation> <translation id="7829298379596169484">Ina-access ang input ng audio</translation> +<translation id="7829877209233347340">Hilingin sa magulang na mag-sign in para magbigay ng pahintulot na magdagdag ng pampaaralang account</translation> <translation id="7830594666202422257">Ikonekta sa Linux</translation> <translation id="7831491651892296503">Nagkaroon ng error sa pag-configure sa network</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5846,6 +5854,7 @@ <translation id="8808686172382650546">Pusa</translation> <translation id="8808744862003883508">Makikita mo sa page na ito ang lahat ng extension na naka-install sa Chrome.</translation> <translation id="8809147117840417135">Light teal</translation> +<translation id="8812593354822910461">I-clear din ang data mula sa pag-browse (<ph name="URL" />) na posibleng mag-sign out sa iyo sa <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Hindi makapag-sign in sa <ph name="USERNAME" /></translation> <translation id="8813811964357448561">piraso ng papel</translation> <translation id="8813872945700551674">Ipaapruba sa magulang ang "<ph name="EXTENSION_NAME" />"</translation> @@ -6136,6 +6145,7 @@ <translation id="9203398526606335860">&Pinagana ang pag-profile</translation> <translation id="9203904171912129171">Pumili ng device</translation> <translation id="9203962528777363226">Hindi pinagana ng administrator ng device na ito ang pagdaragdag ng mga bagong user</translation> +<translation id="9209689095351280025">Ang mga site ay hindi makakagamit ng cookies na sumusubaybay sa iyo sa buong web</translation> <translation id="9211177926627870898">Kailangang i-update</translation> <translation id="9214520840402538427">Oops! Nag-time out ang pagpapasimula sa mga katangian ng pag-install at panahon. Mangyaring makipag-ugnay sa iyong kinatawan ng suporta.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 2da93e9..57219b2 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Cette extension fonctionne sans autorisation spéciale.</translation> <translation id="1616298854599875024">Impossible d'importer l'extension « <ph name="IMPORT_NAME" /> », car il ne s'agit pas d'un module partagé</translation> <translation id="1618268899808219593">Centre d'aide</translation> +<translation id="1620307519959413822">Mot de passe incorrect. Réessayez ou cliquez sur Mot de passe oublié pour le réinitialiser.</translation> <translation id="1620510694547887537">Caméra</translation> <translation id="1623132449929929218">Les images ne sont pas disponibles pour l'instant. Veuillez vous reconnecter à Internet pour afficher les collections de fonds d'écran.</translation> <translation id="1627276047960621195">Descripteurs de fichier</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Révision du matériel</translation> <translation id="1890674179660343635"><span>Identifiant : </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Ouvrir en mode plein écran.</translation> +<translation id="1892341345406963517">Bonjour <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Autres langues</translation> <translation id="1895252664692693738">Il reste <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Arrêt</translation> @@ -1342,7 +1344,7 @@ <translation id="2753677631968972007">Gérer manuellement les autorisations des sites.</translation> <translation id="2755367719610958252">Gérer les fonctionnalités d'accessibilité</translation> <translation id="275662540872599901">écran désactivé</translation> -<translation id="2757338480560142065">Assurez-vous que le mot de passe que vous enregistrez correspond à celui pour <ph name="WEBSITE" />.</translation> +<translation id="2757338480560142065">Assurez-vous que le mot de passe que vous enregistrez correspond à celui pour <ph name="WEBSITE" /></translation> <translation id="2762441749940182211">La caméra est bloquée</translation> <translation id="2765217105034171413">Petit</translation> <translation id="2766161002040448006">Demande à un parent</translation> @@ -1595,7 +1597,7 @@ <translation id="3090819949319990166">Impossible de copier un fichier crx externe dans <ph name="TEMP_CRX_FILE" />.</translation> <translation id="3090871774332213558">« <ph name="DEVICE_NAME" /> » associé à votre appareil.</translation> <translation id="3092699946856346803">Veuillez insérer votre carte SIM et réessayer</translation> -<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{Une extension potentiellement nuisible est désactivée. Vous pouvez également la supprimer.}one{{NUM_EXTENSIONS} extension potentiellement nuisible est désactivée. Vous pouvez également la supprimer.}other{{NUM_EXTENSIONS} extensions potentiellement nuisibles sont désactivées. Vous pouvez également les supprimer.}}</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 extension potentiellement nuisible est désactivée. Vous pouvez également la supprimer.}one{{NUM_EXTENSIONS} extension potentiellement nuisible est désactivée. Vous pouvez également la supprimer.}other{{NUM_EXTENSIONS} extensions potentiellement nuisibles sont désactivées. Vous pouvez également les supprimer.}}</translation> <translation id="3101709781009526431">Date et heure</translation> <translation id="3103941660000130485">Une erreur s'est produite lors de la mise à niveau de Linux</translation> <translation id="310671807099593501">Le site utilise le Bluetooth</translation> @@ -2158,7 +2160,7 @@ <translation id="3827774300009121996">&Plein écran</translation> <translation id="3828029223314399057">Rechercher dans les favoris</translation> <translation id="3829765597456725595">Partage de fichiers SMB</translation> -<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Votre administrateur a réactivé une extension potentiellement nuisible}one{Votre administrateur a réactivé {NUM_EXTENSIONS} extension potentiellement nuisible}other{Votre administrateur a réactivé {NUM_EXTENSIONS} extensions potentiellement nuisibles}}</translation> +<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Votre administrateur a réactivé 1 extension potentiellement nuisible}one{Votre administrateur a réactivé {NUM_EXTENSIONS} extension potentiellement nuisible}other{Votre administrateur a réactivé {NUM_EXTENSIONS} extensions potentiellement nuisibles}}</translation> <translation id="3831436149286513437">Suggestions de recherche dans Google Disque</translation> <translation id="383161972796689579">Le propriétaire de cet appareil a désactivé la fonctionnalité d'ajout de nouveaux utilisateurs.</translation> <translation id="3834775135533257713">Impossible d'ajouter l'application « <ph name="TO_INSTALL_APP_NAME" /> », car elle crée un conflit avec « <ph name="INSTALLED_APP_NAME" /> ».</translation> @@ -3134,6 +3136,7 @@ <translation id="5213891612754844763">Afficher les paramètres de mandataire</translation> <translation id="5215502535566372932">Sélectionnez un pays</translation> <translation id="521582610500777512">La photo a été supprimée.</translation> +<translation id="5222403284441421673">Téléchargement non sécurisé bloqué</translation> <translation id="5222676887888702881">Déconnexion</translation> <translation id="52232769093306234">Échec de l'emballage.</translation> <translation id="5225324770654022472">Afficher le raccourci des applications</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">Communications</translation> <translation id="5734697361979786483">Ajouter un partage de fichier</translation> <translation id="5736796278325406685">Veuillez entrer un nom d'utilisateur valide</translation> +<translation id="5739017626473506901">Connectez-vous pour aider <ph name="USER_NAME" /> à ajouter un compte scolaire</translation> <translation id="5739235828260127894">En attente de vérification. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Très grand</translation> <translation id="574209121243317957">Timbre de la voix</translation> @@ -3713,7 +3717,7 @@ <translation id="5976160379964388480">Autres</translation> <translation id="5978277834170881274">&Utiliser le correcteur orthographique de base</translation> <translation id="5979084224081478209">Vérifier les mots de passe</translation> -<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Vous avez réactivé une extension potentiellement nuisible}one{Vous avez réactivé {NUM_EXTENSIONS} extension potentiellement nuisible}other{Vous avez réactivé {NUM_EXTENSIONS} extensions potentiellement nuisibles}}</translation> +<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Vous avez réactivé 1 extension potentiellement nuisible}one{Vous avez réactivé {NUM_EXTENSIONS} extension potentiellement nuisible}other{Vous avez réactivé {NUM_EXTENSIONS} extensions potentiellement nuisibles}}</translation> <translation id="5979421442488174909">&Traduire en <ph name="LANGUAGE" /></translation> <translation id="5979469435153841984">Pour ajouter des pages aux favoris, cliquez sur l'étoile située dans la barre d'adresse</translation> <translation id="5984222099446776634">Dossiers récents</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">Réseau <ph name="NETWORK_TYPE" />; connexion en cours…</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Demander d'abord (recommandé)</translation> +<translation id="8417548266957501132">Mot de passe du parent</translation> <translation id="8417573335434189196">Ce mode ne vous protège pas contre les téléchargements, les extensions ni les sites Web dangereux. Chrome ne recommande pas ce paramètre.</translation> <translation id="8418445294933751433">Afficher dan&s un onglet</translation> <translation id="8419098111404128271">Résultats de recherche pour « <ph name="SEARCH_TEXT" /> »</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index f83c032..0187a4e 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Importer</translation> <translation id="1244265436519979884">Restauration Linux…</translation> <translation id="1244303850296295656">Erreur au niveau des extensions.</translation> +<translation id="1246158006305844142">Vos applications et paramètres seront synchronisés sur tous les appareils Chrome OS où vous êtes connecté à votre compte Google. Pour les options de synchronisation du navigateur, accédez aux <ph name="LINK_BEGIN" />paramètres Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Supprimer la suggestion du presse-papiers ?</translation> <translation id="1249643471736608405">Le plug-in "<ph name="PLUGIN_NAME" />" a été bloqué, car il est obsolète</translation> <translation id="1251366534849411931">Accolade ouvrante attendue : <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Non, merci</translation> <translation id="1525740877599838384">N'utiliser que le Wi-Fi pour déterminer la position</translation> <translation id="152629053603783244">Redémarrer Linux</translation> +<translation id="1526335046150927198">Activer l'accélération du défilement sur le pavé tactile</translation> <translation id="1526560967942511387">Document sans titre</translation> <translation id="1529891865407786369">Source d'alimentation</translation> <translation id="1530838837447122178">Accéder aux paramètres de la souris et du pavé tactile</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Cette extension ne nécessite aucune autorisation spéciale.</translation> <translation id="1616298854599875024">Impossible d'importer l'extension <ph name="IMPORT_NAME" />, car il ne s'agit pas d'un module partagé</translation> <translation id="1618268899808219593">C&entre d'aide</translation> +<translation id="1620307519959413822">Mot de passe incorrect. Réessayez ou cliquez sur "Mot de passe oublié" pour le réinitialiser.</translation> <translation id="1620510694547887537">Appareil photo</translation> <translation id="1623132449929929218">Les images ne sont actuellement pas disponibles. Veuillez vous reconnecter pour afficher les collections de fonds d'écran.</translation> <translation id="1627276047960621195">Descripteurs de fichiers</translation> @@ -610,7 +613,7 @@ <translation id="1805822111539868586">Examiner les vues</translation> <translation id="1805888043020974594">Serveur d'impression</translation> <translation id="1805967612549112634">Confirmer le code</translation> -<translation id="1806335016774576568">Passer à une autre application</translation> +<translation id="1806335016774576568">Passer à une autre application ouverte</translation> <translation id="1809734401532861917">Ajouter mes favoris, mon historique, mes mots de passe et d'autres paramètres au compte <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Services</translation> <translation id="18139523105317219">Nom de partie EDI</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Version du matériel</translation> <translation id="1890674179660343635"><span>Identifiant</span> : <ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Ouvrir en mode plein écran</translation> +<translation id="1892341345406963517">Bonjour <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Autres langues</translation> <translation id="1895252664692693738">Il reste <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Arrêt.</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">La connectivité du réseau a été rétablie</translation> <translation id="2727633948226935816">Ne plus afficher ce rappel</translation> <translation id="2727712005121231835">Taille réelle</translation> +<translation id="2729314457178420145">Effacer également les données de navigation (<ph name="URL" />), ce qui risque de vous déconnecter de Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Sauvegarder des applications et fichiers Linux</translation> <translation id="273093730430620027">Cette page a accès à votre caméra</translation> <translation id="2731392572903530958">&Rouvrir la fenêtre fermée</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Plus de pages <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies et autres données de site et de plug-in</translation> <translation id="383891835335927981">Vous n'avez fait de zoom avant ou arrière sur aucun site</translation> +<translation id="3839509547554145593">Activer l'accélération du défilement avec la souris</translation> <translation id="3839516600093027468">Toujours empêcher <ph name="HOST" /> de voir le contenu du presse-papiers</translation> <translation id="3841964634449506551">Mot de passe non valide</translation> <translation id="3842552989725514455">Police Serif</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Images et fichiers en cache</translation> <translation id="4699357559218762027">(lancée automatiquement)</translation> <translation id="470074695271471509">Voulez-vous ensuite vous déconnecter ?</translation> +<translation id="4701025263201366865">Connexion d'un parent</translation> <translation id="4707302005824653064">Les données relatives à l'utilisation et à l'historique peuvent être examinées par le gestionnaire (<ph name="CUSTODIAN_EMAIL" />) sur le site chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + Certificat utilisateur</translation> <translation id="4708794300267213770">Afficher l'écran de verrouillage en sortant du mode veille</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, recherche dans <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Saisissez le code de votre clé de sécurité. Si vous ne le connaissez pas, vous devez réinitialiser la clé de sécurité.</translation> <translation id="5139955368427980650">&Ouvrir</translation> +<translation id="5142793792982256885">Vitesse de défilement sur le pavé tactile</translation> <translation id="5142961317498132443">Authentification</translation> <translation id="5143374789336132547">L'extension <ph name="EXTENSION_NAME" /> a modifié la page affichée lorsque vous cliquez sur le bouton Accueil.</translation> <translation id="5143712164865402236">Activer le mode plein écran</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Afficher les paramètres de proxy</translation> <translation id="5215502535566372932">Sélectionnez un pays</translation> <translation id="521582610500777512">La photo a été supprimée.</translation> +<translation id="5222403284441421673">Téléchargement non sécurisé bloqué</translation> <translation id="5222676887888702881">Déconnexion</translation> <translation id="52232769093306234">Échec de la compression.</translation> <translation id="5225324770654022472">Afficher le raccourci des applications</translation> @@ -3526,6 +3535,7 @@ <translation id="5734362860645681824">Communications</translation> <translation id="5734697361979786483">Ajouter un partage de fichiers</translation> <translation id="5736796278325406685">Veuillez saisir un nom d'utilisateur valide</translation> +<translation id="5739017626473506901">Connectez-vous pour aider <ph name="USER_NAME" /> à ajouter un compte scolaire</translation> <translation id="5739235828260127894">En attente de validation. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Très grande</translation> <translation id="574209121243317957">Ton</translation> @@ -3645,6 +3655,7 @@ <translation id="5901630391730855834">Jaune</translation> <translation id="5906655207909574370">Mise à jour presque terminée. Pour la finaliser, veuillez redémarrer votre appareil.</translation> <translation id="5906732635754427568">Les données associées à cette application seront supprimées de cet appareil.</translation> +<translation id="5908695239556627796">Vitesse de défilement avec la souris</translation> <translation id="5908769186679515905">Interdire aux sites d'exécuter Flash</translation> <translation id="5910363049092958439">En&registrer l'image sous...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> est hors connexion</translation> @@ -4844,7 +4855,7 @@ <translation id="7514239104543605883">Copier sur votre appareil</translation> <translation id="7514365320538308">Télécharger</translation> <translation id="751523031290522286"><ph name="APP_NAME" /> est bloqué par l'administrateur. Vous avez besoin de son autorisation pour l'utiliser.</translation> -<translation id="7516981202574715431"><ph name="APP_NAME" /> est mis en pause</translation> +<translation id="7516981202574715431">L'appli <ph name="APP_NAME" /> est mise en pause</translation> <translation id="7517063221058203587">{0,plural, =1{Mettre à jour l'appareil d'ici 1 minute}one{Update device within # minutes}other{Mettre à jour l'appareil d'ici # minutes}}</translation> <translation id="7520766081042531487">Portail de navigation privée : <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> @@ -5092,6 +5103,7 @@ <ph name="BEGIN_BOLD" />Remarque<ph name="END_BOLD" /> : Le système redémarre au cours de ce processus.</translation> <translation id="7828731929332799387">Cette action supprimera l'ensemble des cookies et données de sites disponibles dans des contextes tiers. Voulez-vous continuer ?</translation> <translation id="7829298379596169484">Accès à l'entrée audio en cours…</translation> +<translation id="7829877209233347340">Demande à l'un de tes parents de t'autoriser à ajouter un compte scolaire</translation> <translation id="7830594666202422257">Connecter à Linux</translation> <translation id="7831491651892296503">Erreur lors de la configuration du réseau</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5532,6 +5544,7 @@ <translation id="8408068190360279472">Réseau <ph name="NETWORK_TYPE" /> : connexion…</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Demander d'abord (recommandé)</translation> +<translation id="8417548266957501132">Mot de passe du parent</translation> <translation id="8417573335434189196">Ce mode ne vous protège pas contre les téléchargements, les extensions ou les sites Web dangereux. Chrome ne recommande pas ce paramètre.</translation> <translation id="8418445294933751433">Afficher dan&s un onglet</translation> <translation id="8419098111404128271">Résultats de recherche pour "<ph name="SEARCH_TEXT" />"</translation> @@ -5846,6 +5859,7 @@ <translation id="8808686172382650546">Chat</translation> <translation id="8808744862003883508">Sur cette page, vous pouvez consulter toutes les extensions installées dans Chrome.</translation> <translation id="8809147117840417135">Turquoise clair</translation> +<translation id="8812593354822910461">Effacer également les données de navigation (<ph name="URL" />), ce qui vous déconnectera de <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Impossible de se connecter au compte <ph name="USERNAME" /></translation> <translation id="8813811964357448561">feuille de papier</translation> <translation id="8813872945700551674">Demande à l'un de tes parents d'approuver l'extension "<ph name="EXTENSION_NAME" />"</translation> @@ -6135,6 +6149,7 @@ <translation id="9203398526606335860">&Profilage activé</translation> <translation id="9203904171912129171">Sélectionner un appareil</translation> <translation id="9203962528777363226">L'administrateur de cet appareil a désactivé la fonctionnalité d'ajout de nouveaux utilisateurs</translation> +<translation id="9209689095351280025">Les sites ne peuvent pas utiliser de cookies pour suivre votre activité sur le Web</translation> <translation id="9211177926627870898">Mise à jour requise</translation> <translation id="9214520840402538427">Petit problème… Le délai alloué à l'initialisation des attributs de temps d'installation a expiré. Veuillez contacter le service d'assistance.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 46c2cf0..de7e521 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -113,7 +113,7 @@ <translation id="1147991416141538220">Para solicitar acceso, ponte en contacto co administrador deste dispositivo.</translation> <translation id="1149401351239820326">Mes de caducidade</translation> <translation id="1150565364351027703">Lentes de sol</translation> -<translation id="1151841030700667295">Pecharase sesión en todos os sitios, mesmo nas pestanas abertas.</translation> +<translation id="1151841030700667295">Pecharase a túa sesión en todos os sitios, mesmo nas pestanas abertas.</translation> <translation id="1151917987301063366">Permitir sempre a <ph name="HOST" /> acceder aos sensores</translation> <translation id="1153356358378277386">Dispositivos sincronizados</translation> <translation id="1153636665119721804">Programa Protección avanzada de Google</translation> @@ -192,6 +192,7 @@ <translation id="1243314992276662751">Cargar</translation> <translation id="1244265436519979884">Estase restaurando Linux</translation> <translation id="1244303850296295656">Erro de extensión</translation> +<translation id="1246158006305844142">As túas aplicacións e opcións de configuración sincronizaranse en todos os dispositivos Chrome OS nos que teñas a sesión iniciada na túa Conta de Google. Para ver as opción de sincronización do navegador, accede á <ph name="LINK_BEGIN" />configuración de Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Queres quitar a suxestión do portapapeis?</translation> <translation id="1249643471736608405">O complemento <ph name="PLUGIN_NAME" /> bloqueouse porque quedou obsoleto</translation> <translation id="1251366534849411931">Falta unha chave de apertura: <ph name="ERROR_LINE" /></translation> @@ -390,6 +391,7 @@ <translation id="1524563461097350801">Non, grazas</translation> <translation id="1525740877599838384">Utilizar só a wifi para determinar a localización</translation> <translation id="152629053603783244">Reiniciar Linux</translation> +<translation id="1526335046150927198">Activar aceleración de desprazamento do panel táctil</translation> <translation id="1526560967942511387">Documento sen título</translation> <translation id="1529891865407786369">Fonte de alimentación</translation> <translation id="1530838837447122178">Abrir a configuración do rato e do panel táctil do dispositivo</translation> @@ -1312,6 +1314,7 @@ <translation id="2725200716980197196">Conectividade da rede restaurada</translation> <translation id="2727633948226935816">Non volver lembrar</translation> <translation id="2727712005121231835">Tamaño real</translation> +<translation id="2729314457178420145">Borrar tamén os datos de navegación (<ph name="URL" />), o que pode provocar que peches sesión en Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Realizando copias de seguranza de aplicacións e ficheiros de Linux</translation> <translation id="273093730430620027">Esta páxina está accedendo á túa cámara.</translation> <translation id="2731392572903530958">R&eabrir ventá pechada</translation> @@ -1877,7 +1880,7 @@ <translation id="3496213124478423963">Afastar</translation> <translation id="3497560059572256875">Compartir doodle</translation> <translation id="3498215018399854026">Non se puido contactar cos teus pais neste momento. Téntao de novo.</translation> -<translation id="3500417806337761827">Produciuse un erro ao montar o recurso compartido. Xa hai demasiados recursos compartidos SMB montados.</translation> +<translation id="3500417806337761827">Produciuse un erro ao montar o recurso compartido. Xa hai montados demasiados recursos compartidos SMB.</translation> <translation id="3505030558724226696">Revogar o acceso ao dispositivo</translation> <translation id="3507421388498836150">Permisos actuais para "<ph name="EXTENSION_NAME" />"</translation> <translation id="3507888235492474624">Volver buscar dispositivos Bluetooth</translation> @@ -2163,6 +2166,7 @@ <translation id="3838486795898716504">Máis <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies e outros datos de sitios e plugins</translation> <translation id="383891835335927981">Non se achegou nin se afastou o zoom en ningún sitio</translation> +<translation id="3839509547554145593">Activar aceleración de desprazamento do rato</translation> <translation id="3839516600093027468">Impedir sempre que o host <ph name="HOST" /> vexa o contido do portapapeis</translation> <translation id="3841964634449506551">O contrasinal non é válido</translation> <translation id="3842552989725514455">Tipo de letra Serif</translation> @@ -2330,7 +2334,7 @@ <translation id="4047726037116394521">Ir á páxina de inicio</translation> <translation id="4050225813016893843">Método de autenticación</translation> <translation id="4052120076834320548">Minúsculo</translation> -<translation id="4056908315660577142">Chegaches ao límite que definiu teu pai ou túa nai para a aplicación de Chrome <ph name="APP_NAME" />. Podes utilizala durante <ph name="TIME_LIMIT" /> mañá.</translation> +<translation id="4056908315660577142">Chegaches ao límite que definiu teu pai ou túa nai para a aplicación de Chrome <ph name="APP_NAME" />. Mañá poderás utilizala durante <ph name="TIME_LIMIT" />.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> (<ph name="RECEIVED_AMOUNT" />)</translation> <translation id="4057896668975954729">Ver na tenda</translation> <translation id="4058647953897694817">Verificación mediante Bluetooth</translation> @@ -2774,6 +2778,7 @@ <translation id="4699172675775169585">Imaxes e ficheiros almacenados na memoria caché</translation> <translation id="4699357559218762027">(iniciada automaticamente)</translation> <translation id="470074695271471509">Queres pechar sesión para rematar?</translation> +<translation id="4701025263201366865">Inicio de sesión do pai ou da nai</translation> <translation id="4707302005824653064">O administrador pode revisar o uso e o historial (<ph name="CUSTODIAN_EMAIL" />) en chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + certificado de usuario</translation> <translation id="4708794300267213770">Mostrar pantalla de bloqueo ao activarse despois da suspensión</translation> @@ -3081,6 +3086,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, busca con <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Escribe o PIN da túa chave de seguranza. Se non o sabes, terás que restablecela.</translation> <translation id="5139955368427980650">&Abrir</translation> +<translation id="5142793792982256885">Velocidade de desprazamento do panel táctil</translation> <translation id="5142961317498132443">Autenticación</translation> <translation id="5143374789336132547">A extensión "<ph name="EXTENSION_NAME" />" cambiou a páxina que se mostra ao facer clic no botón Inicio.</translation> <translation id="5143712164865402236">Acceder á pantalla completa</translation> @@ -3643,6 +3649,7 @@ <translation id="5901630391730855834">Amarelo</translation> <translation id="5906655207909574370">A actualización case rematou. Reinicia o dispositivo para finalizala.</translation> <translation id="5906732635754427568">Os datos asociados con esta aplicación quitaranse deste dispositivo.</translation> +<translation id="5908695239556627796">Velocidade de desprazamento do rato</translation> <translation id="5908769186679515905">Non permitir que os sitios executen Flash</translation> <translation id="5910363049092958439">Gar&dar imaxe como...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> está sen conexión</translation> @@ -5090,6 +5097,7 @@ <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> O sistema reiniciarase durante o proceso.</translation> <translation id="7828731929332799387">Ao realizar esta acción, eliminaranse todas as cookies e os datos dos sitios de terceiros. Queres continuar?</translation> <translation id="7829298379596169484">Accedendo á entrada de audio</translation> +<translation id="7829877209233347340">Pídelle a teu pai ou a túa nai que inicie sesión e che dea permiso para engadir unha conta de centro educativo</translation> <translation id="7830594666202422257">Conectar a Linux</translation> <translation id="7831491651892296503">Produciuse un erro ao configurar a rede</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5843,6 +5851,7 @@ <translation id="8808686172382650546">Gato</translation> <translation id="8808744862003883508">Nesta páxina podes ver todas as extensións instaladas en Chrome.</translation> <translation id="8809147117840417135">Verde azulado claro</translation> +<translation id="8812593354822910461">Borrar tamén os datos de navegación (<ph name="URL" />), o que pode provocar que peches sesión en <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Non se pode iniciar a sesión de <ph name="USERNAME" /></translation> <translation id="8813811964357448561">folla de papel</translation> <translation id="8813872945700551674">Busca a teu pai ou túa nai para que aprobe "<ph name="EXTENSION_NAME" />"</translation> @@ -6132,6 +6141,7 @@ <translation id="9203398526606335860">Creación de &perfís activada</translation> <translation id="9203904171912129171">Seleccionar un dispositivo</translation> <translation id="9203962528777363226">O administrador deste dispositivo impediu que se engadisen novos usuarios</translation> +<translation id="9209689095351280025">Os sitios non poden usar cookies para seguirte pola Web</translation> <translation id="9211177926627870898">Actualización obrigatoria</translation> <translation id="9214520840402538427">Esgotouse o tempo de inicio dos atributos de tempo de instalación. Ponte en contacto co representante do servizo de asistencia.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index c11dbd3..39abd94 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -457,6 +457,7 @@ <translation id="1616206807336925449">આ એક્સટેન્શનને કોઈ વિશિષ્ટ પરવાનગીઓની જરૂર નથી.</translation> <translation id="1616298854599875024">એક્સટેંશન "<ph name="IMPORT_NAME" />" આયાત કરવામાં અસમર્થ કારણ કે તે કોઈ શેર કરેલ મૉડ્યૂલ નથી</translation> <translation id="1618268899808219593">સ&હાય કેન્દ્ર</translation> +<translation id="1620307519959413822">ખોટો પાસવર્ડ. ફરી પ્રયાસ કરો અથવા તેને રીસેટ કરવા માટે 'પાસવર્ડ ભૂલી ગયા' પર ક્લિક કરો.</translation> <translation id="1620510694547887537">કૅમેરો</translation> <translation id="1623132449929929218">હાલમાં છબીઓ ઉપલબ્ધ નથી. વૉલપેપરના સંગ્રહો જોવા માટે, કૃપા કરીને ઇન્ટરનેટ સાથે ફરીથી કનેક્ટ કરો.</translation> <translation id="1627276047960621195">ફાઇલ વર્ણનકર્તા</translation> @@ -675,6 +676,7 @@ <translation id="1887850431809612466">હાર્ડવેર પુનરાવર્તન</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">પૂર્ણ સ્ક્રીન ખોલો</translation> +<translation id="1892341345406963517">નમસ્કાર <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">અન્ય ભાષાઓ</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> બાકી</translation> <translation id="1895658205118569222">બંધ કરો</translation> @@ -3129,6 +3131,7 @@ <translation id="5213891612754844763">પ્રૉક્સી સેટિંગ બતાવો</translation> <translation id="5215502535566372932">દેશ પસંદ કરો</translation> <translation id="521582610500777512">ફોટો નિકાળવામાં આવ્યો હતો</translation> +<translation id="5222403284441421673">બ્લૉક કરેલા અસુરક્ષિત ડાઉનલોડ</translation> <translation id="5222676887888702881">સાઇન આઉટ</translation> <translation id="52232769093306234">પૅકિંગ નિષ્ફળ થયું.</translation> <translation id="5225324770654022472">ઍપ્લિકેશનો શોર્ટકટ બતાવો</translation> @@ -3528,6 +3531,7 @@ <translation id="5734362860645681824">સંચાર</translation> <translation id="5734697361979786483">ફાઇલ શેર ઉમેરો</translation> <translation id="5736796278325406685">કૃપા કરીને એક માન્ય વપરાશકર્તાનામ દાખલ કરો</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" />ને સ્કૂલ એકાઉન્ટ ઉમેરવામાં સહાય કરવા માટે સાઇન ઇન કરો</translation> <translation id="5739235828260127894">ચકાસણીની રાહ જોઈ રહ્યાં છીએ. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation> <translation id="5739458112391494395">બહુ મોટું</translation> <translation id="574209121243317957">પિચ</translation> @@ -5531,6 +5535,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> નેટવર્ક, કનેક્ટ કરી રહ્યું છે</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">પહેલા પૂછો (ભલામણ કરેલ)</translation> +<translation id="8417548266957501132">માતાપિતાનો પાસવર્ડ</translation> <translation id="8417573335434189196">જોખમકારક વેબસાઇટ, ડાઉનલોડ અને એક્સ્ટેંશન સામે તમારું રક્ષણ કરતું નથી. Chrome આ સેટિંગનો ઉપયોગ કરવાનો સુઝાવ આપતું નથી.</translation> <translation id="8418445294933751433">ટૅબ તરીકે &બતાવો</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' માટે શોધ પરિણામ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index c4ad103..60aa7fe 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -454,6 +454,7 @@ <translation id="1616206807336925449">इस एक्सटेंशन को किसी विशेष अनुमति की आवश्यकता नहीं है.</translation> <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" एक्सटेंशन को आयात नहीं किया जा सका, क्योंकि वह एक शेयर किया गया मॉड्यूल नहीं है</translation> <translation id="1618268899808219593">&सहायता केंद्र</translation> +<translation id="1620307519959413822">पासवर्ड गलत है. फिर से कोशिश करें या इसे रीसेट करने के लिए 'पासवर्ड भूल गए हैं' पर क्लिक करें.</translation> <translation id="1620510694547887537">कैमरा</translation> <translation id="1623132449929929218">इमेज फ़िलहाल उपलब्ध नहीं हैं. वॉलपेपर के संग्रह देखने के लिए कृपया इंटरनेट से फिर से कनेक्ट करें.</translation> <translation id="1627276047960621195">फ़ाइल वर्णनकर्ता</translation> @@ -670,6 +671,7 @@ <translation id="1887850431809612466">हार्डवेयर पुनरीक्षण</translation> <translation id="1890674179660343635"><span>आईडी: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">पूरी स्क्रीन खोलें</translation> +<translation id="1892341345406963517">नमस्ते <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">अन्य भाषाएं</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> बाकी है</translation> <translation id="1895658205118569222">बंद करें</translation> @@ -3074,6 +3076,7 @@ <translation id="5213891612754844763">प्रॉक्सी सेटिंग दिखाएं</translation> <translation id="5215502535566372932">देश चुनें</translation> <translation id="521582610500777512">फ़ोटो को छोड़ दिया गया था</translation> +<translation id="5222403284441421673">डाउनलोड हो रही असुरक्षित फ़ाइल ब्लॉक की गई</translation> <translation id="5222676887888702881">साइन आउट करें</translation> <translation id="52232769093306234">पैक नहीं किया जा सका.</translation> <translation id="5225324770654022472">ऐप्स शॉर्टकट दिखाएं</translation> @@ -3469,6 +3472,7 @@ <translation id="5734362860645681824">संचार</translation> <translation id="5734697361979786483">फ़ाइल शेयर जोड़ें</translation> <translation id="5736796278325406685">कृपया कोई मान्य उपयोगकर्ता नाम डालें</translation> +<translation id="5739017626473506901">साइन इन करके, स्कूल वाला खाता जोड़ने में <ph name="USER_NAME" /> की मदद करें</translation> <translation id="5739235828260127894">पुष्टि होने का इंतज़ार किया जा रहा है. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation> <translation id="5739458112391494395">बहुत बड़ा</translation> <translation id="574209121243317957">पिच</translation> @@ -5447,6 +5451,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> नेटवर्क, कनेक्ट हो रहा है</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">पहले पूछें (सुझाया गया)</translation> +<translation id="8417548266957501132">पैरंट का पासवर्ड</translation> <translation id="8417573335434189196">इस मोड में आपको नुकसान पहुंचाने वाली वेबसाइटों, डाउनलोड या एक्सटेंशन से सुरक्षा नहीं मिलती. Chrome, इस सेटिंग का इस्तेमाल करने का सुझाव नहीं देता है.</translation> <translation id="8418445294933751433">टैब के रूप में &दिखाएं</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' के खोज नतीजे</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index f7f77204..b6b4f5ea 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">To proširenje ne zahtijeva nikakva posebna dopuštenja.</translation> <translation id="1616298854599875024">Nije moguće uvesti proširenje "<ph name="IMPORT_NAME" />" jer nije dijeljeni modul</translation> <translation id="1618268899808219593">Centar za pomoć</translation> +<translation id="1620307519959413822">Zaporka je pogrešna. Pokušajte ponovo ili kliknite "Zaboravili ste zaporku?" da biste poništili zaporku.</translation> <translation id="1620510694547887537">Fotoaparat</translation> <translation id="1623132449929929218">Slike trenutačno nisu dostupne. Ponovo se povežite s internetom da biste pregledali zbirke pozadina.</translation> <translation id="1627276047960621195">Deskriptori datoteke</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Hardverska revizija</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Otvori cijeli zaslon</translation> +<translation id="1892341345406963517">Pozdrav, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Drugi jezici</translation> <translation id="1895252664692693738">Još <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Isključivanje</translation> @@ -845,7 +847,7 @@ <translation id="2135787500304447609">&Nastavi</translation> <translation id="2136372518715274136">Unesite novu zaporku</translation> <translation id="2136476978468204130">Šifra koju ste unijeli nije točna</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{Kolačići su blokirani.}=1{Kolačići su blokirani, jedna iznimka}one{Kolačići su blokirani, {COUNT} iznimka}few{Kolačići su blokirani, {COUNT} iznimke}other{Kolačići su blokirani, {COUNT} iznimki}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{Kolačići su blokirani.}=1{Kolačići su blokirani, jedna iznimka}one{Kolačići su blokirani, {COUNT} iznimka}few{Kolačići su blokirani, {COUNT} iznimke}other{Kolačići su blokirani, {COUNT} iznimaka}}</translation> <translation id="2138398485845393913">Povezivanje s uređajem "<ph name="DEVICE_NAME" />" još je u tijeku</translation> <translation id="2139545522194199494">Mreža <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja administrator, povežite</translation> <translation id="2139919072249842737">Gumb za postavljanje</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Prikaži postavke proxyja</translation> <translation id="5215502535566372932">Odaberite zemlju</translation> <translation id="521582610500777512">Fotografija je odbačena</translation> +<translation id="5222403284441421673">Nesigurno preuzimanje blokirano</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="52232769093306234">Pakiranje nije uspjelo.</translation> <translation id="5225324770654022472">Prikaži prečac za aplikacije</translation> @@ -3241,7 +3244,7 @@ <translation id="5353252989841766347">Izvoz zaporki iz Chromea</translation> <translation id="5355099869024327351">Dopustite Asistentu da vam prikazuje obavijesti</translation> <translation id="5355926466126177564">Proširenje "<ph name="EXTENSION_NAME" />" promijenilo stranicu koja se prikazuje prilikom pretraživanja putem višenamjenskog okvira.</translation> -<translation id="535911077628776608">Datoteka <ph name="FILE_NAME" /> možda je opasna. Poslati na Google naprednu zaštitu radi pregleda? Pritisnite Shift + F6 nekoliko puta da biste se pomaknuli na područje trake preuzimanja.</translation> +<translation id="535911077628776608">Datoteka <ph name="FILE_NAME" /> možda je opasna. Želite li upotrijebiti Googleovu naprednu zaštitu za pregled datoteke? Pritisnite Shift + F6 nekoliko puta da biste se pomaknuli na područje trake preuzimanja.</translation> <translation id="5359910752122114278">Jedan rezultat</translation> <translation id="5360150013186312835">Prikaži na alatnoj traci</translation> <translation id="5362741141255528695">Odaberite datoteku s osobnim ključem.</translation> @@ -3426,7 +3429,7 @@ <translation id="5593357315997824387">Sinkroniziraj moje datoteke</translation> <translation id="5595152862129936745">Vrlo daleko</translation> <translation id="5595485650161345191">Uređivanje adrese</translation> -<translation id="5595727715083333657">Vaš spremnik ne podržava promjenu veličine. Da biste prilagodili količinu prostora koji je unaprijed dodijeljen Linuxu (Beta), stvorite sigurnosnu kopiju i vratite je u novom spremniku.</translation> +<translation id="5595727715083333657">Vaš spremnik ne podržava promjenu veličine. Da biste prilagodili količinu prostora koji je unaprijed dodijeljen Linuxu (Beta), izradite sigurnosnu kopiju i vratite je u novom spremniku.</translation> <translation id="5596627076506792578">Više opcija</translation> <translation id="5600706100022181951">Za preuzimanje ažuriranja iskoristit će se <ph name="UPDATE_SIZE_MB" /> MB mobilnih podataka. Želite li nastaviti?</translation> <translation id="5601503069213153581">PIN</translation> @@ -3499,7 +3502,7 @@ <translation id="5691511426247308406">Obitelj</translation> <translation id="5691772641933328258">Otisak prsta nije prepoznat</translation> <translation id="5692183275898619210">Ispis je dovršen</translation> -<translation id="5692875591060376599">Odabrana datoteka nije poznata i može biti opasna. Poslati na Google naprednu zaštitu radi pregleda?</translation> +<translation id="5692875591060376599">Odabrana datoteka nije poznata i može biti opasna. Želite li upotrijebiti Googleovu naprednu zaštitu za pregled datoteke?</translation> <translation id="569425414730375234">Trenutačna anonimna sesija: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">Prijavi zloupotrebu za proširenje "<ph name="EXTENSION_NAME" />"</translation> <translation id="5696679855467848181">Trenutačna PPD datoteka u upotrebi: <ph name="PPD_NAME" /></translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Komunikacije</translation> <translation id="5734697361979786483">Dodaj dijeljenje datoteka</translation> <translation id="5736796278325406685">Unesite važeće korisničko ime</translation> +<translation id="5739017626473506901">Prijavite se tako da <ph name="USER_NAME" /> može dodati školski račun</translation> <translation id="5739235828260127894">Čeka se potvrda. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Vrlo velik</translation> <translation id="574209121243317957">Visina glasa</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> mreža, povezivanje</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation> +<translation id="8417548266957501132">Roditeljeva zaporka</translation> <translation id="8417573335434189196">Ne štiti vas od opasnih web-lokacija, preuzimanja i proširenja. Chrome ne preporučuje ovu postavku.</translation> <translation id="8418445294933751433">&Prikaži kao karticu</translation> <translation id="8419098111404128271">Rezultati pretraživanja za "<ph name="SEARCH_TEXT" />"</translation> @@ -5676,7 +5681,7 @@ <translation id="8608618451198398104">Dodajte Kerberosov tiket</translation> <translation id="8609465669617005112">Premjesti gore</translation> <translation id="8610103157987623234">Format nije točan. Pokušajte ponovo.</translation> -<translation id="8612935480510351790">Datoteka <ph name="FILE_NAME" /> možda je opasna. Poslati na Google naprednu zaštitu radi pregleda?</translation> +<translation id="8612935480510351790">Datoteka <ph name="FILE_NAME" /> možda je opasna. Želite li upotrijebiti Googleovu naprednu zaštitu za pregled datoteke?</translation> <translation id="8613164732773110792">Samo mala slova, brojke, podvlake ili crtice</translation> <translation id="8615618338313291042">Anonimna aplikacija: <ph name="APP_NAME" /></translation> <translation id="8619803522055190423">Sjena</translation> @@ -5704,7 +5709,7 @@ <translation id="8641606876632989680">Chrome će vas obavijestiti kada se prijavite ugroženom zaporkom</translation> <translation id="8642900771896232685">Dvije sekunde</translation> <translation id="8642947597466641025">Uvećaj tekst</translation> -<translation id="8643443571868262066">Datoteka <ph name="FILE_NAME" /> možda je opasna. Poslati na Google naprednu zaštitu radi pregleda?</translation> +<translation id="8643443571868262066">Datoteka <ph name="FILE_NAME" /> možda je opasna. Želite li upotrijebiti Googleovu naprednu zaštitu za pregled datoteke?</translation> <translation id="8644655801811752511">Taj se sigurnosni ključ ne može vratiti na zadano. Pokušajte vratiti ključ na zadano odmah nakon što ga umetnete.</translation> <translation id="8645354835496065562">Nastavi dopuštati pristup senzorima</translation> <translation id="8645920082661222035">Predviđa opasne događaje i upozorava vas na njih prije nego što se dogode</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index b21837e0..7005f19 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Feltöltés</translation> <translation id="1244265436519979884">Folyamatban van a Linux helyreállítása</translation> <translation id="1244303850296295656">Bővítménnyel kapcsolatos hiba</translation> +<translation id="1246158006305844142">Az Ön alkalmazásai és beállításai szinkronizálódnak minden olyan Chrome OS-eszközön, amelyen Google-fiókjával van bejelentkezve. A böngésző szinkronizálási beállításait a <ph name="LINK_BEGIN" />Chrome-beállításokban<ph name="LINK_END" /> találja.</translation> <translation id="1246905108078336582">Eltávolítja a javaslatot a vágólapról?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> letiltva, mert megszüntették</translation> <translation id="1251366534849411931">Hiányzó nyitó kapcsos zárójel: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Köszönöm, nem</translation> <translation id="1525740877599838384">Csak a Wi-Fi használata a tartózkodási hely megállapításához</translation> <translation id="152629053603783244">Linux újraindítása</translation> +<translation id="1526335046150927198">A érintőpadon való görgetés gyorsításának engedélyezése</translation> <translation id="1526560967942511387">Név nélküli dokumentum</translation> <translation id="1529891865407786369">Áramforrás</translation> <translation id="1530838837447122178">Az egér és az érintőpad beállításainak megnyitása</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">A bővítmény nem igényel különleges engedélyeket.</translation> <translation id="1616298854599875024">A(z) „<ph name="IMPORT_NAME" />” bővítményt nem lehetett importálni, mivel az nem megosztott modul</translation> <translation id="1618268899808219593">Súgó</translation> +<translation id="1620307519959413822">Hibás jelszó. Próbálja újra, vagy a jelszó újbóli beállításához kattintson az „Elfelejtette a jelszavát?” linkre.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">A képek jelenleg nem állnak rendelkezésre. Kapcsolódjon az internethez, ha szeretné megtekinteni a háttérképgyűjteményeket.</translation> <translation id="1627276047960621195">Fájlleírók</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Hardver ellenőrzése</translation> <translation id="1890674179660343635"><span>Azonosító: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Megnyitás teljes képernyőn</translation> +<translation id="1892341345406963517">Üdvözöljük, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Más nyelvek</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> maradt</translation> <translation id="1895658205118569222">Kikapcsolás</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">A hálózati kapcsolat helyreállt</translation> <translation id="2727633948226935816">Ne emlékeztessen újra</translation> <translation id="2727712005121231835">Valós méret</translation> +<translation id="2729314457178420145">A böngészési adatok (<ph name="URL" />) törlésével együtt, ami kiléptetheti a google.com webhelyéről. <ph name="LEARN_MORE" />.</translation> <translation id="2730029791981212295">Linux-alkalmazások és -fájlok biztonsági mentése</translation> <translation id="273093730430620027">Ez az oldal hozzáfér az Ön kamerájához.</translation> <translation id="2731392572903530958">Bezárt ablak újram&egnyitása</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Továbbiak: <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookie-k, illetve webhelyek és beépülő modulok egyéb adatai</translation> <translation id="383891835335927981">Nincs nagyított vagy kicsinyített webhely</translation> +<translation id="3839509547554145593">Az egérrel való görgetés gyorsításának engedélyezése</translation> <translation id="3839516600093027468">A vágólap megtekintésének állandó tiltása a(z) <ph name="HOST" /> számára</translation> <translation id="3841964634449506551">A jelszó érvénytelen</translation> <translation id="3842552989725514455">Talpas betűtípus</translation> @@ -2774,6 +2780,7 @@ <translation id="4699172675775169585">A gyorsítótárban szereplő képek és fájlok</translation> <translation id="4699357559218762027">(automatikusan indított)</translation> <translation id="470074695271471509">Kijelentkezik a befejezéshez?</translation> +<translation id="4701025263201366865">Szülői bejelentkezés</translation> <translation id="4707302005824653064">A kezelő (<ph name="CUSTODIAN_EMAIL" />) a chrome.com webhelyen áttekintheti a használatot és az előzményeket.</translation> <translation id="4707579418881001319">L2TP/IPSec + felhasználói tanúsítvány</translation> <translation id="4708794300267213770">Lezárási képernyő megjelenítése, az alvó módból történő felébresztéskor</translation> @@ -3081,6 +3088,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" />-keresés</translation> <translation id="5139823398361067371">Adja meg a biztonsági kulcs PIN-kódját. Ha nem tudja a PIN-kódot, vissza kell állítania a biztonsági kulcsot.</translation> <translation id="5139955368427980650">&Megnyitás</translation> +<translation id="5142793792982256885">Érintőpad görgetési sebessége</translation> <translation id="5142961317498132443">Hitelesítés</translation> <translation id="5143374789336132547">A(z) <ph name="EXTENSION_NAME" /> bővítmény módosította, hogy melyik oldal jelenjen meg a Kezdőlap gombra kattintáskor.</translation> <translation id="5143712164865402236">Teljes képernyő</translation> @@ -3126,6 +3134,7 @@ <translation id="5213891612754844763">Proxybeállítások megjelenítése</translation> <translation id="5215502535566372932">Ország kiválasztása</translation> <translation id="521582610500777512">A fotót elvetették</translation> +<translation id="5222403284441421673">Nem biztonságos letöltés letiltva</translation> <translation id="5222676887888702881">Kijelentkezés</translation> <translation id="52232769093306234">Sikertelen csomagolás.</translation> <translation id="5225324770654022472">Alkalmazások parancsikon megjelenítése</translation> @@ -3526,6 +3535,7 @@ <translation id="5734362860645681824">Kommunikáció</translation> <translation id="5734697361979786483">Fájlmegosztás hozzáadása</translation> <translation id="5736796278325406685">Érvényes felhasználónevet adjon meg</translation> +<translation id="5739017626473506901">Jelentkezzen be <ph name="USER_NAME" /> iskolai fiókjának hozzáadásához</translation> <translation id="5739235828260127894">Várakozás az ellenőrzésre. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation> <translation id="5739458112391494395">Nagyon nagy</translation> <translation id="574209121243317957">Hangmagasság</translation> @@ -3645,6 +3655,7 @@ <translation id="5901630391730855834">Sárga</translation> <translation id="5906655207909574370">Már majdnem naprakész! Indítsa újra az eszközt a frissítés befejezéséhez.</translation> <translation id="5906732635754427568">Az alkalmazáshoz kapcsolódó adatok törlődnek erről az eszközről.</translation> +<translation id="5908695239556627796">Egér görgetési sebessége</translation> <translation id="5908769186679515905">A Flash futtatásának tiltása a webhelyeken</translation> <translation id="5910363049092958439">Ké&p mentése másként...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> – offline</translation> @@ -5092,6 +5103,7 @@ <ph name="BEGIN_BOLD" />Megjegyzés:<ph name="END_BOLD" /> A rendszer újraindul a folyamat során.</translation> <translation id="7828731929332799387">Ezzel törli a harmadik felek kontextusaiban rendelkezésre álló cookie-kat és webhelyadatokat. Biztosan folytatja?</translation> <translation id="7829298379596169484">Hozzáférés a hangbemenethez</translation> +<translation id="7829877209233347340">Kérd meg az egyik szülődet, hogy jelentkezzen be, és adjon engedélyt iskolai fiók hozzáadásához</translation> <translation id="7830594666202422257">Csatlakoztatás Linuxhoz</translation> <translation id="7831491651892296503">Hiba történt a hálózat konfigurálásakor</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5532,6 +5544,7 @@ <translation id="8408068190360279472">Hálózat: <ph name="NETWORK_TYPE" />. Csatlakozás…</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Kérdezzen rá (ajánlott)</translation> +<translation id="8417548266957501132">Szülői jelszó</translation> <translation id="8417573335434189196">Nem védi meg Önt a veszélyes webhelyek, letöltések vagy bővítmények ellen. A Chrome nem javasolja ennek a beállításnak az aktiválását.</translation> <translation id="8418445294933751433">&Megjelenítés lapként</translation> <translation id="8419098111404128271">Keresési találatok a következőre: <ph name="SEARCH_TEXT" /></translation> @@ -5846,6 +5859,7 @@ <translation id="8808686172382650546">Macska</translation> <translation id="8808744862003883508">Ezen az oldalon található a Chrome böngészőbe telepített összes bővítmény.</translation> <translation id="8809147117840417135">Világos pávakék</translation> +<translation id="8812593354822910461">A böngészési adatok (<ph name="URL" />) törlésével együtt, ami kiléptetheti a(z) <ph name="DOMAIN" /> webhelyéről. <ph name="LEARN_MORE" />.</translation> <translation id="8813698869395535039">Nem lehet bejelentkezni a következő fiókba: <ph name="USERNAME" /></translation> <translation id="8813811964357448561">papírlap</translation> <translation id="8813872945700551674">Szülői jóváhagyás kérése a következőhöz: <ph name="EXTENSION_NAME" /></translation> @@ -6135,6 +6149,7 @@ <translation id="9203398526606335860">&Profilozás bekapcsolva</translation> <translation id="9203904171912129171">Válassza ki a kívánt eszközt</translation> <translation id="9203962528777363226">Az eszköz rendszergazdája letiltotta az új felhasználók hozzáadását</translation> +<translation id="9209689095351280025">A webhelyek nem tudnak olyan cookie-kat használni, amelyek nyomon követik tevékenységeit az interneten.</translation> <translation id="9211177926627870898">Frissítés szükséges</translation> <translation id="9214520840402538427">Hoppá! A telepítés alatti attribútumok inicializálásakor időtúllépés történt. Kérjük, lépjen kapcsolatba az ügyfélszolgálattal.</translation> <translation id="9214695392875603905">Muffin</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 38b969c..3c37fd9 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Տվյալ ընդլայնումը չի պահանջում հատուկ թույլտվություն:</translation> <translation id="1616298854599875024">Անհնար է ներմուծել «<ph name="IMPORT_NAME" />» ընդլայնումը, քանի որ այն ընդհանուր մոդուլ չէ</translation> <translation id="1618268899808219593">Օ&գնության կենտրոն</translation> +<translation id="1620307519959413822">Գաղտնաբառը սխալ է: Մուտքագրեք այն նորից կամ սեղմեք «Մոռացել եմ գաղտնաբառը»:</translation> <translation id="1620510694547887537">Տեսախցիկ</translation> <translation id="1623132449929929218">Պատկերներն այժմ անհասանելի են: Պաստառների հավաքածուները տեսնելու համար նորից միացեք համացանցին:</translation> <translation id="1627276047960621195">Ֆայլի նկարագրություն</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Սարքի տարբերակը</translation> <translation id="1890674179660343635"><span>ID` </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Բացել լիաէկրան ռեժիմում</translation> +<translation id="1892341345406963517">Ողջույն, <ph name="PARENT_NAME" />:</translation> <translation id="189358972401248634">Այլ լեզուներ</translation> <translation id="1895252664692693738">Մնացել է <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Աշխատանքի ավարտ</translation> @@ -3134,6 +3136,7 @@ <translation id="5213891612754844763">Ցուցադրել միջնորդ սերվերի կարգավորումները</translation> <translation id="5215502535566372932">Ընտրեք երկիրը</translation> <translation id="521582610500777512">Լուսանկարը ջնջվել է</translation> +<translation id="5222403284441421673">Վտանգավոր ներբեռնումն արգելափակված է</translation> <translation id="5222676887888702881">Դուրս գրվել</translation> <translation id="52232769093306234">Չհաջողվեց սեղմել։</translation> <translation id="5225324770654022472">Ցուցադրել հավելվածների դյուրանցումը</translation> @@ -3429,7 +3432,7 @@ <translation id="5593357315997824387">Համաժամացնել իմ ֆայլերը</translation> <translation id="5595152862129936745">Շատ հեռու է</translation> <translation id="5595485650161345191">Փոխել հասցեն</translation> -<translation id="5595727715083333657">Ձեր կոնտեյները չի աջակցում սկավառակի չափի փոխումը։ Լինուքսին (բետա) նախապես հատկացվող տարածքի ծավալը փոխելու համար ստեղծեք սկավառակի պահուստային տարբերակը և վերականգնեք այն նոր կոնտեյներում։</translation> +<translation id="5595727715083333657">Ձեր կոնտեյները չի աջակցում սկավառակի չափի փոխումը։ Լինուքսին (բետա) նախապես հատկացվող տարածքի ծավալը փոխելու համար պահուստավորեք սկավառակը և վերականգնեք այն նոր կոնտեյներում։</translation> <translation id="5596627076506792578">Լրացուցիչ ընտրանքներ</translation> <translation id="5600706100022181951">Թարմացումը ներբեռնելու համար անհրաժեշտ կլինի <ph name="UPDATE_SIZE_MB" /> բջջային ինտերնետ թրաֆիկ։ Շարունակե՞լ։</translation> <translation id="5601503069213153581">PIN</translation> @@ -3534,6 +3537,7 @@ <translation id="5734362860645681824">Հաղորդակցում</translation> <translation id="5734697361979786483">Ավելացնել ցանցային պահեստ</translation> <translation id="5736796278325406685">Մուտքագրեք վավեր օգտանուն</translation> +<translation id="5739017626473506901">Մուտք գործեք, որպեսզի օգնեք <ph name="USER_NAME" />-ին ուսումնական հաշիվ ավելացնել</translation> <translation id="5739235828260127894">Պահանջվում է հաստատում: <ph name="LINK_BEGIN" />Մանրամասն<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Շատ մեծ</translation> <translation id="574209121243317957">Ձայնի մակարդակը</translation> @@ -5540,6 +5544,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ցանց, միացում…</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Նախ հարցնել (հանձնարարելի)</translation> +<translation id="8417548266957501132">Ծնողի գաղտնաբառ</translation> <translation id="8417573335434189196">Չի պաշտպանում վտանգավոր կայքերից, ընդլայնումներից և ներբեռնումներից։ Chrome-ը խորհուրդ չի տալիս օգտագործել այս կարգավորումը։</translation> <translation id="8418445294933751433">&Ցույց տալ որպես ներդիր</translation> <translation id="8419098111404128271">«<ph name="SEARCH_TEXT" />»-ի որոնման արդյունքներ</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index c8fb798..c0bd7fa 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Upload</translation> <translation id="1244265436519979884">Pemulihan Linux saat ini sedang berlangsung</translation> <translation id="1244303850296295656">Kesalahan ekstensi</translation> +<translation id="1246158006305844142">Aplikasi dan setelan Anda akan disinkronkan di semua perangkat Chrome OS tempat Anda login dengan Akun Google. Untuk opsi sinkronisasi browser, buka <ph name="LINK_BEGIN" />setelan Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Hapus saran dari papan klip?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> diblokir karena sudah tidak tersedia</translation> <translation id="1251366534849411931">Sepertinya ada kurung kurawal terbuka: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Lain Kali</translation> <translation id="1525740877599838384">Hanya gunakan Wi-Fi untuk menentukan lokasi</translation> <translation id="152629053603783244">Mulai ulang Linux</translation> +<translation id="1526335046150927198">Aktifkan akselerasi scroll touchpad</translation> <translation id="1526560967942511387">Dokumen Tanpa Judul</translation> <translation id="1529891865407786369">Sumber listrik</translation> <translation id="1530838837447122178">Buka setelan perangkat touchpad dan mouse</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Ekstensi ini tidak memerlukan izin khusus.</translation> <translation id="1616298854599875024">Tidak dapat mengimpor ekstensi "<ph name="IMPORT_NAME" />" karena bukan modul yang dibagikan</translation> <translation id="1618268899808219593">Pusat Bantuan</translation> +<translation id="1620307519959413822">Sandi salah. Coba lagi atau klik Lupa sandi untuk mereset sandi.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Gambar saat ini tidak tersedia. Sambungkan kembali ke internet untuk melihat koleksi wallpaper.</translation> <translation id="1627276047960621195">Deskriptor File</translation> @@ -610,7 +613,7 @@ <translation id="1805822111539868586">Periksa tampilan</translation> <translation id="1805888043020974594">Server cetak</translation> <translation id="1805967612549112634">Konfirmasi PIN</translation> -<translation id="1806335016774576568">Alihkan ke aplikasi lain yang aktif</translation> +<translation id="1806335016774576568">Alihkan ke aplikasi lain yang terbuka</translation> <translation id="1809734401532861917">Tambahkan bookmark, histori, sandi, dan setelan saya lainnya ke <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Layanan</translation> <translation id="18139523105317219">EDI Party Name</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Revisi hardware</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Buka layar penuh</translation> +<translation id="1892341345406963517">Hai <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Bahasa lain</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> lagi</translation> <translation id="1895658205118569222">Mati</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Konektivitas jaringan dipulihkan</translation> <translation id="2727633948226935816">Jangan ingatkan saya lagi</translation> <translation id="2727712005121231835">Ukuran Sebenarnya</translation> +<translation id="2729314457178420145">Hapus juga data penjelajahan (<ph name="URL" />) yang mungkin akan membuat Anda logout dari Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Mencadangkan aplikasi dan file Linux</translation> <translation id="273093730430620027">Halaman ini mengakses kamera Anda.</translation> <translation id="2731392572903530958">Buka K&embali Jendela yang Tertutup</translation> @@ -2162,6 +2167,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> Lainnya</translation> <translation id="3838543471119263078">Cookie serta data plugin dan situs lainnya</translation> <translation id="383891835335927981">Tidak ada situs yang telah diperbesar atau diperkecil</translation> +<translation id="3839509547554145593">Aktifkan akselerasi scroll mouse</translation> <translation id="3839516600093027468">Selalu blokir <ph name="HOST" /> dari melihat papan klip</translation> <translation id="3841964634449506551">Sandi tidak valid</translation> <translation id="3842552989725514455">Font Serif</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">Gambar dan file dalam cache</translation> <translation id="4699357559218762027">(diluncurkan otomatis)</translation> <translation id="470074695271471509">Logout untuk menyelesaikan?</translation> +<translation id="4701025263201366865">Login orang tua</translation> <translation id="4707302005824653064">Penggunaan dan histori dapat ditinjau oleh pengelola (<ph name="CUSTODIAN_EMAIL" />) di chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + sertifikat pengguna</translation> <translation id="4708794300267213770">Tampilkan layar kunci saat keluar dari mode tidur</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, Penelusuran <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Masukkan PIN untuk kunci keamanan Anda. Jika tidak mengetahui PIN-nya, Anda perlu menyetel ulang kunci keamanan.</translation> <translation id="5139955368427980650">&Buka</translation> +<translation id="5142793792982256885">Kecepatan scroll touchpad</translation> <translation id="5142961317498132443">Autentikasi</translation> <translation id="5143374789336132547">Ekstensi "<ph name="EXTENSION_NAME" />" telah mengubah halaman apa yang ditampilkan saat Anda mengeklik tombol Beranda.</translation> <translation id="5143712164865402236">Masuk Layar Penuh</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">Tampilkan setelan proxy</translation> <translation id="5215502535566372932">Pilih negara</translation> <translation id="521582610500777512">Foto dibuang</translation> +<translation id="5222403284441421673">Download tidak aman diblokir</translation> <translation id="5222676887888702881">Logout</translation> <translation id="52232769093306234">Pengemasan gagal.</translation> <translation id="5225324770654022472">Tampilkan pintasan aplikasi</translation> @@ -3418,7 +3427,7 @@ <translation id="5593357315997824387">Sinkronkan file saya</translation> <translation id="5595152862129936745">Sangat jauh</translation> <translation id="5595485650161345191">Edit alamat</translation> -<translation id="5595727715083333657">Kontainer Anda tidak mendukung fitur ubah ukuran. Untuk menyesuaikan jumlah ruang yang telah dialokasikan sebelumnya untuk Linux (Beta), cadangkan lalu pulihkan ke dalam kontainer baru.</translation> +<translation id="5595727715083333657">Container Anda tidak mendukung fitur ubah ukuran. Untuk menyesuaikan jumlah ruang yang telah dialokasikan sebelumnya untuk Linux (Beta), cadangkan lalu pulihkan ke dalam container baru.</translation> <translation id="5596627076506792578">Opsi lainnya</translation> <translation id="5600706100022181951">Update akan didownload menggunakan data seluler sebesar <ph name="UPDATE_SIZE_MB" /> MB. Ingin melanjutkan?</translation> <translation id="5601503069213153581">PIN</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">Komunikasi</translation> <translation id="5734697361979786483">Tambahkan berbagi file</translation> <translation id="5736796278325406685">Masukkan nama pengguna yang valid</translation> +<translation id="5739017626473506901">Login untuk membantu <ph name="USER_NAME" /> menambahkan akun sekolah</translation> <translation id="5739235828260127894">Menunggu verifikasi. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Sangat besar</translation> <translation id="574209121243317957">Tinggi nada</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">Kuning</translation> <translation id="5906655207909574370">Hampir selesai diperbarui! Mulai ulang perangkat untuk menyelesaikan pembaruan.</translation> <translation id="5906732635754427568">Data yang dikaitkan dengan aplikasi ini akan dihapus dari perangkat ini.</translation> +<translation id="5908695239556627796">Kecepatan scroll mouse</translation> <translation id="5908769186679515905">Blokir situs agar tidak menjalankan Flash</translation> <translation id="5910363049092958439">Sim&pan Gambar Sebagai...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> sedang offline</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />Catatan:<ph name="END_BOLD" /> Sistem akan reboot selama proses berlangsung.</translation> <translation id="7828731929332799387">Ini akan menghapus semua cookie dan data situs yang tersedia dalam konteks pihak ketiga. Ingin melanjutkan?</translation> <translation id="7829298379596169484">Mengakses masukan audio</translation> +<translation id="7829877209233347340">Minta orang tua login dan memberikan izin untuk menambahkan akun sekolah</translation> <translation id="7830594666202422257">Sambungkan ke Linux</translation> <translation id="7831491651892296503">Terjadi error saat mengonfigurasi jaringan</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5529,6 +5541,7 @@ <translation id="8408068190360279472">Jaringan <ph name="NETWORK_TYPE" />, menyambungkan</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Tanya dulu (disarankan)</translation> +<translation id="8417548266957501132">Sandi orang tua</translation> <translation id="8417573335434189196">Tidak melindungi Anda terhadap situs, download, atau ekstensi berbahaya. Chrome tidak merekomendasikan setelan ini.</translation> <translation id="8418445294933751433">Tampilkan &sebagai tab</translation> <translation id="8419098111404128271">Hasil penelusuran untuk '<ph name="SEARCH_TEXT" />'</translation> @@ -5843,6 +5856,7 @@ <translation id="8808686172382650546">Kucing</translation> <translation id="8808744862003883508">Pada halaman ini, Anda dapat melihat semua ekstensi yang diinstal di Chrome.</translation> <translation id="8809147117840417135">Hijau kebiruan terang</translation> +<translation id="8812593354822910461">Hapus juga data penjelajahan (<ph name="URL" />) yang akan membuat Anda logout dari <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Tidak dapat masuk ke <ph name="USERNAME" /></translation> <translation id="8813811964357448561">lembaran kertas</translation> <translation id="8813872945700551674">Minta orang tuamu menyetujui "<ph name="EXTENSION_NAME" />"</translation> @@ -6132,6 +6146,7 @@ <translation id="9203398526606335860">&Penyidikan diaktifkan</translation> <translation id="9203904171912129171">Pilih perangkat</translation> <translation id="9203962528777363226">Administrator perangkat ini telah menonaktifkan pengguna baru agar tidak ditambahkan</translation> +<translation id="9209689095351280025">Situs tidak dapat menggunakan cookie yang melacak Anda di seluruh web</translation> <translation id="9211177926627870898">Perlu update</translation> <translation id="9214520840402538427">Uups! Waktu pemulaian atribut waktu pemasangan telah habis. Hubungi perwakilan dukungan Anda.</translation> <translation id="9214695392875603905">Kue mangkok</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index bb3dbac..402630e 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Hlaða inn</translation> <translation id="1244265436519979884">Endurheimt Linux stendur yfir</translation> <translation id="1244303850296295656">Villa í viðbót</translation> +<translation id="1246158006305844142">Forritin þín og stillingarnar verða samstillt í öllum Chrome OS tækjum þar sem þú hefur skráð þig inn með Google reikningnum þínum. Valkostir fyrir samstillingu vafra má finna í <ph name="LINK_BEGIN" />Stillingar Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Fjarlægja tillögu af klippiborði?</translation> <translation id="1249643471736608405">Lokað var á <ph name="PLUGIN_NAME" /> vegna þess að hún er úrelt</translation> <translation id="1251366534849411931">Búist var við opnum slaufusviga: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Nei, takk</translation> <translation id="1525740877599838384">Nota aðeins Wi-Fi til að ákvarða staðsetningu</translation> <translation id="152629053603783244">Endurræsa Linux</translation> +<translation id="1526335046150927198">Kveikja á flettihröðun snertiflatar</translation> <translation id="1526560967942511387">Ónefnt skjal</translation> <translation id="1529891865407786369">Aflgjafi</translation> <translation id="1530838837447122178">Opna stillingar fyrir mús og snertiflöt</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Þessi viðbót þarf engar sérstakar heimildir.</translation> <translation id="1616298854599875024">Ekki er hægt að flytja inn viðbótina „<ph name="IMPORT_NAME" />“ vegna þess að hún er ekki samnýtt eining</translation> <translation id="1618268899808219593">Hjálparmiðstöð</translation> +<translation id="1620307519959413822">Rangt aðgangsorð. Reyndu aftur eða smelltu á „Gleymt aðgangsorð“ til að endurstilla aðgangsorðið.</translation> <translation id="1620510694547887537">Myndavél</translation> <translation id="1623132449929929218">Myndirnar eru ekki tiltækar í augnablikinu. Endurtengjast þarf internetinu til að sjá veggfóðurssöfn.</translation> <translation id="1627276047960621195">Skráarlýsendur</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Útgáfa vélbúnaðar</translation> <translation id="1890674179660343635"><span>Auðkenni: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Opna á öllum skjánum</translation> +<translation id="1892341345406963517">Hæ, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Önnur tungumál</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> eftir</translation> <translation id="1895658205118569222">Slökkva</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Nettengingu komið á aftur</translation> <translation id="2727633948226935816">Ekki minna mig aftur á</translation> <translation id="2727712005121231835">Raunstærð</translation> +<translation id="2729314457178420145">Hreinsaðu einnig vefskoðunargögn (<ph name="URL" />), en það gæti skráð þig út af Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Afritar forrit og skrár Linux</translation> <translation id="273093730430620027">Þessi síða hefur aðgang að myndavélinni.</translation> <translation id="2731392572903530958">Opna lokaðan glugga aftur</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Fleiri <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Fótspor og önnur gögn vefsvæða og viðbóta</translation> <translation id="383891835335927981">Aðdráttur hefur ekki verið aukinn eða minnkaður á neinum vefsvæðum</translation> +<translation id="3839509547554145593">Kveikja á flettihröðun músar</translation> <translation id="3839516600093027468">Koma alltaf í veg fyrir að <ph name="HOST" /> sjái klippiborðið</translation> <translation id="3841964634449506551">Rangt aðgangsorð</translation> <translation id="3842552989725514455">Serif-letur</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Myndir og skrár í skyndiminni</translation> <translation id="4699357559218762027">(ræst sjálfkrafa)</translation> <translation id="470074695271471509">Skrá út til að ljúka?</translation> +<translation id="4701025263201366865">Innskráning foreldris</translation> <translation id="4707302005824653064">Stjórnandi (<ph name="CUSTODIAN_EMAIL" />) getur fylgst með notkun og ferli á chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + notandavottorð</translation> <translation id="4708794300267213770">Sýna lásskjá þegar komið er úr hvíldarstillingu</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> leit</translation> <translation id="5139823398361067371">Sláðu inn PIN-númer fyrir öryggislykilinn. Ef þú veist ekki hvert PIN-númerið er þarftu að endurstilla öryggislykilinn.</translation> <translation id="5139955368427980650">&Opna</translation> +<translation id="5142793792982256885">Flettihraði snertiflatar</translation> <translation id="5142961317498132443">Auðkenning</translation> <translation id="5143374789336132547">Viðbótin „<ph name="EXTENSION_NAME" />“ hefur breytt því hvaða síða birtist þegar þú smellir á heimahnappinn.</translation> <translation id="5143712164865402236">Nota allan skjáinn</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Sýna stillingar staðgengilsþjóns</translation> <translation id="5215502535566372932">Veldu land</translation> <translation id="521582610500777512">Mynd var fleygt</translation> +<translation id="5222403284441421673">Lokað á óöruggt niðurhal</translation> <translation id="5222676887888702881">Skrá út</translation> <translation id="52232769093306234">Ekki tókst að pakka.</translation> <translation id="5225324770654022472">Sýna forritaflýtileið</translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Samskipti</translation> <translation id="5734697361979786483">Bæta samnýttri skráageymslu við</translation> <translation id="5736796278325406685">Sláðu inn gilt notendanafn</translation> +<translation id="5739017626473506901">Skráðu þig inn til að hjálpa <ph name="USER_NAME" /> að bæta við skólareikningi</translation> <translation id="5739235828260127894">Bíður eftir staðfestingu. <ph name="LINK_BEGIN" />Frekari upplýsingar<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Mjög stórt</translation> <translation id="574209121243317957">Tónhæð</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Gulur</translation> <translation id="5906655207909574370">Uppfærslan er næstum tilbúin! Endurræstu tækið til að ljúka uppfærslunni.</translation> <translation id="5906732635754427568">Gögn sem tengjast þessu forriti verða fjarlægð úr tækinu.</translation> +<translation id="5908695239556627796">Flettihraði músar</translation> <translation id="5908769186679515905">Loka fyrir að vefsvæði noti Flash</translation> <translation id="5910363049092958439">&Vista mynd sem...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> er án nettengingar</translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Athugaðu:<ph name="END_BOLD" /> Kerfið mun endurræsa sig í ferlinu.</translation> <translation id="7828731929332799387">Þetta mun eyða öllum fótsporum og vefsvæðisgögnum frá þriðju aðilum. Ertu viss um að þú viljir halda áfram?</translation> <translation id="7829298379596169484">Fær aðgang að hljóðinntaki</translation> +<translation id="7829877209233347340">Biddu foreldri þitt að skrá sig inn og gefa þér heimild til að bæta við skólareikningi</translation> <translation id="7830594666202422257">Tengja við Linux</translation> <translation id="7831491651892296503">Villa við að stilla netkerfi</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-net, tengist</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Spyrja fyrst (ráðlagt)</translation> +<translation id="8417548266957501132">Aðgangsorð foreldris</translation> <translation id="8417573335434189196">Ver þig ekki fyrir hættulegum vefsvæðum, niðurhali eða viðbótum. Chrome mælir ekki með þessari stillingu.</translation> <translation id="8418445294933751433">&Sýna sem flipa</translation> <translation id="8419098111404128271">Leitarniðurstöður fyrir „<ph name="SEARCH_TEXT" />“</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">Köttur</translation> <translation id="8808744862003883508">Þessi síða sýnir allar uppsettar viðbætur í Chrome.</translation> <translation id="8809147117840417135">Ljósgrænblár</translation> +<translation id="8812593354822910461">Hreinsa einnig vefskoðunargögn (<ph name="URL" />), sem skráir þig út af <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Ekki hægt að skrá inn á <ph name="USERNAME" /></translation> <translation id="8813811964357448561">blaðsíða</translation> <translation id="8813872945700551674">Fáðu foreldri til að samþykkja „<ph name="EXTENSION_NAME" />“</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">Kveikt á hegðunarskráningu</translation> <translation id="9203904171912129171">Velja tæki</translation> <translation id="9203962528777363226">Stjórnandi þessa tækis hefur slökkt á því að hægt sé að bæta við nýjum notendum</translation> +<translation id="9209689095351280025">Vefsvæði geta ekki notað fótspor sem rekja virkni þína á vefnum</translation> <translation id="9211177926627870898">Uppfærslu er krafist</translation> <translation id="9214520840402538427">Úbbs! Frumstilling uppsetningareiginda rann út á tíma. Hafðu samband við þjónustufulltrúann þinn.</translation> <translation id="9214695392875603905">Kaka</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index ebef52a..bb83e94 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -282,7 +282,7 @@ <translation id="1386387014181100145">Salve.</translation> <translation id="138784436342154190">Ripristinare la pagina iniziale predefinita?</translation> <translation id="1390548061267426325">Apri in una scheda normale</translation> -<translation id="1392232653471491344">Riavvio di Linux richiesto</translation> +<translation id="1392232653471491344">È necessario riavviare Linux</translation> <translation id="1393283411312835250">Sole e nuvole</translation> <translation id="1393787139683794508">Verranno cancellati tutti i dati e i cookie memorizzati da <ph name="ORIGIN_NAME" />.</translation> <translation id="1395730723686586365">Programma di aggiornamento avviato</translation> @@ -311,7 +311,7 @@ <translation id="1420920093772172268"><ph name="TURN_ON_BLUETOOTH_LINK" /> per consentire l'accoppiamento</translation> <translation id="1422159345171879700">Carica script non sicuri</translation> <translation id="1426410128494586442">Sì</translation> -<translation id="142655739075382478"><ph name="APP_NAME" /> è bloccata</translation> +<translation id="142655739075382478">L'app <ph name="APP_NAME" /> è bloccata</translation> <translation id="1426870617281699524">Fai clic su Riprova e accetta la richiesta sul computer</translation> <translation id="1427269577154060167">Paese</translation> <translation id="142758023928848008">Attiva tasti bloccati (per eseguire scorciatoie da tastiera digitandole in sequenza)</translation> @@ -461,6 +461,7 @@ <translation id="1616206807336925449">Questa estensione non richiede autorizzazioni speciali.</translation> <translation id="1616298854599875024">Impossibile importare l'estensione "<ph name="IMPORT_NAME" />" perché non è un modulo condiviso</translation> <translation id="1618268899808219593">Centro assistenza</translation> +<translation id="1620307519959413822">Password errata. Riprova o fai clic su Password dimenticata per reimpostarla.</translation> <translation id="1620510694547887537">Videocamera</translation> <translation id="1623132449929929218">Le immagini non sono al momento disponibili. Riconnettiti a Internet per visualizzare le raccolte di sfondi.</translation> <translation id="1627276047960621195">Descrittori di file</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Revisione hardware</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Apri a schermo intero</translation> +<translation id="1892341345406963517">Ciao <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Altre lingue</translation> <translation id="1895252664692693738">Tempo rimanente: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Chiusura</translation> @@ -1340,7 +1342,7 @@ <translation id="2753677631968972007">Controlla manualmente le autorizzazioni del sito.</translation> <translation id="2755367719610958252">Gestisci funzioni di accessibilità</translation> <translation id="275662540872599901">schermo spento</translation> -<translation id="2757338480560142065">Assicurati che la password che vuoi salvare corrisponda alla password di <ph name="WEBSITE" /></translation> +<translation id="2757338480560142065">Assicurati che la password che stai salvando corrisponda alla password di <ph name="WEBSITE" /></translation> <translation id="2762441749940182211">Videocamera bloccata</translation> <translation id="2765217105034171413">Piccole</translation> <translation id="2766161002040448006">Rivolgiti a un genitore</translation> @@ -2562,7 +2564,7 @@ <translation id="4400963414856942668">Puoi fare clic sulla stella per aggiungere una scheda ai preferiti</translation> <translation id="4403775189117163360">Scegli una cartella diversa</translation> <translation id="4404136731284211429">Analizza di nuovo</translation> -<translation id="4404843640767531781"><ph name="APP_NAME" /> è stata bloccata da un genitore. Chiedi al tuo genitore l'autorizzazione per poter usare l'app.</translation> +<translation id="4404843640767531781">L'app <ph name="APP_NAME" /> è stata bloccata da un genitore. Chiedi al tuo genitore l'autorizzazione per poterla usare.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">G&uida</translation> <translation id="4409697491990005945">Margini</translation> @@ -3132,6 +3134,7 @@ <translation id="5213891612754844763">Mostra impostazioni proxy</translation> <translation id="5215502535566372932">Seleziona il paese</translation> <translation id="521582610500777512">La foto è stata eliminata</translation> +<translation id="5222403284441421673">Download non sicuro bloccato</translation> <translation id="5222676887888702881">Esci</translation> <translation id="52232769093306234">Compressione non riuscita.</translation> <translation id="5225324770654022472">Mostra scorciatoia app</translation> @@ -3530,6 +3533,7 @@ <translation id="5734362860645681824">Comunicazioni</translation> <translation id="5734697361979786483">Aggiungi condivisione file</translation> <translation id="5736796278325406685">Inserisci un nome utente valido</translation> +<translation id="5739017626473506901">Accedi per aiutare <ph name="USER_NAME" /> ad aggiungere un account della scuola</translation> <translation id="5739235828260127894">In attesa di verifica. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Molto grandi</translation> <translation id="574209121243317957">Tono</translation> @@ -4791,7 +4795,7 @@ <translation id="7441830548568730290">Altri utenti</translation> <translation id="7442465037756169001">L'hardware Hangouts Meet è pronto per la configurazione.</translation> <translation id="744341768939279100">Crea un nuovo profilo</translation> -<translation id="744366959743242014">Il caricamento dei dati potrebbe richiedere alcuni secondi.</translation> +<translation id="744366959743242014">Caricamento dei dati in corso. L'operazione potrebbe richiedere alcuni secondi.</translation> <translation id="7443806024147773267">Puoi avere a disposizione le tue password ogni volta che accedi al tuo Account Google</translation> <translation id="7444983668544353857">Disabilita <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Installare automaticamente le app</translation> @@ -4848,7 +4852,7 @@ <translation id="7513029293694390567">Accedi automaticamente ai siti web utilizzando credenziali memorizzate. Se la funzione non è attiva, ti viene chiesta la conferma prima di ogni accesso ai siti web.</translation> <translation id="7514239104543605883">Copia sul tuo dispositivo</translation> <translation id="7514365320538308">Scarica</translation> -<translation id="751523031290522286"><ph name="APP_NAME" /> è stata bloccata dal tuo amministratore. Chiedi all'amministratore l'autorizzazione per poter usare l'app.</translation> +<translation id="751523031290522286">L'amministratore ha bloccato <ph name="APP_NAME" />. Chiedi all'amministratore l'autorizzazione per poter usare l'app.</translation> <translation id="7516981202574715431"><ph name="APP_NAME" /> in sospeso</translation> <translation id="7517063221058203587">{0,plural, =1{Aggiorna il dispositivo entro 1 minuto}other{Aggiorna il dispositivo entro # minuti}}</translation> <translation id="7520766081042531487">Portale in modalità di navigazione in incognito: <ph name="SUBFRAME_SITE" /></translation> @@ -5537,6 +5541,7 @@ <translation id="8408068190360279472">Rete <ph name="NETWORK_TYPE" />, collegamento in corso</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Chiedi prima (opzione consigliata)</translation> +<translation id="8417548266957501132">Password genitore</translation> <translation id="8417573335434189196">Non ti protegge da estensioni, download o siti web pericolosi. Chrome sconsiglia questa impostazione.</translation> <translation id="8418445294933751433">&Mostra come scheda</translation> <translation id="8419098111404128271">Risultati di ricerca per "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 8a30ac1e..826b1440 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -113,7 +113,7 @@ <translation id="1147991416141538220">כדי לבקש גישה, צריך לפנות למנהל של המכשיר הזה.</translation> <translation id="1149401351239820326">חודש פקיעת התוקף</translation> <translation id="1150565364351027703">משקפי שמש</translation> -<translation id="1151841030700667295">המערכת תוציא אותך מכל האתרים, כולל בכרטיסיות הפתוחות.</translation> +<translation id="1151841030700667295">תבוצע יציאה מכל האתרים, כולל בכרטיסיות פתוחות.</translation> <translation id="1151917987301063366">לאפשר תמיד ל-<ph name="HOST" /> לגשת אל חיישנים</translation> <translation id="1153356358378277386">מכשירים מותאמים</translation> <translation id="1153636665119721804">תוכנית ההגנה המתקדמת של Google</translation> @@ -458,6 +458,7 @@ <translation id="1616206807336925449">אין צורך בהרשאות מיוחדות כדי להשתמש בתוסף זה.</translation> <translation id="1616298854599875024">לא ניתן לייבא את התוסף "<ph name="IMPORT_NAME" />" כי הוא לא מודול משותף</translation> <translation id="1618268899808219593">מרכז עזרה</translation> +<translation id="1620307519959413822">הסיסמה שגויה. אפשר לנסות שוב או ללחוץ על 'שכחת את הסיסמה?' כדי לאפס אותה.</translation> <translation id="1620510694547887537">מצלמה</translation> <translation id="1623132449929929218">התמונות לא זמינות בשלב זה. צריך להתחבר מחדש לאינטרנט כדי להציג את אוספי הטפטים.</translation> <translation id="1627276047960621195">מתארי קבצים</translation> @@ -609,7 +610,7 @@ <translation id="1805822111539868586">בדיקת תצוגות</translation> <translation id="1805888043020974594">שרת הדפסה</translation> <translation id="1805967612549112634">אישור קוד אימות</translation> -<translation id="1806335016774576568">החלפה לאפליקציה פתוחה אחרת</translation> +<translation id="1806335016774576568">מעבר לאפליקציה פתוחה אחרת</translation> <translation id="1809734401532861917">הוספת הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות שלי אל <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">שירותים</translation> <translation id="18139523105317219">שם צד EDI</translation> @@ -676,6 +677,7 @@ <translation id="1887850431809612466">שכתוב חומרה</translation> <translation id="1890674179660343635"><span>מזהה: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">פתח מסך מלא</translation> +<translation id="1892341345406963517">שלום <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">שפות אחרות</translation> <translation id="1895252664692693738">זמן נותר - <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">כיבוי</translation> @@ -1687,7 +1689,7 @@ <translation id="3239373508713281971">מגבלת הזמן של <ph name="APP_NAME" /> הוסרה</translation> <translation id="3241680850019875542">בחר את ספריית הבסיס של התוסף שיש לארוז. כדי לעדכן תוסף, בחר גם את קובץ המפתח הפרטי שבו ניתן להשתמש שוב.</translation> <translation id="3244294424315804309">המשך השתקת הצלילים</translation> -<translation id="3246107497225150582">{0,plural, =1{המכשיר עודכן ביממה האחרונה}two{המכשיר עודכן ב-# הימים האחרונים}many{המכשיר עודכן ב-# הימים האחרונים}other{המכשיר עודכן ב-# הימים האחרונים}}</translation> +<translation id="3246107497225150582">{0,plural, =1{יש לעדכן את המכשיר בתוך יום אחד}two{יש לעדכן את המכשיר בתוך # ימים}many{יש לעדכן את המכשיר בתוך # ימים}other{יש לעדכן את המכשיר בתוך # ימים}}</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - שגיאת רשת</translation> <translation id="3248902735035392926">חשוב להתנהל בצורה בטוחה. כדאי להקדיש כמה רגעים כדי <ph name="BEGIN_LINK" />לבדוק עכשיו את התוספים<ph name="END_LINK" /></translation> <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation> @@ -1879,7 +1881,7 @@ <translation id="3496213124478423963">התרחק</translation> <translation id="3497560059572256875">שיתוף הדודל</translation> <translation id="3498215018399854026">לא הצלחנו ליצור קשר עם ההורה שלך. נסה שוב מאוחר יותר.</translation> -<translation id="3500417806337761827">אירעה שגיאה בעת טעינת השיתוף. כבר נטענו יותר מדי שיתופי SMB.</translation> +<translation id="3500417806337761827">אירעה שגיאה בטעינת השיתוף. כבר נטענו יותר מדי שיתופי SMB.</translation> <translation id="3505030558724226696">בטל גישה למכשירים</translation> <translation id="3507421388498836150">הרשאות נוכחיות של "<ph name="EXTENSION_NAME" />"</translation> <translation id="3507888235492474624">סריקה חוזרת לאיתור מכשירי Bluetooth</translation> @@ -2745,7 +2747,7 @@ <translation id="465878909996028221">בהפניה של דפדפן לכתובת URL אחרת, נתמכים רק הפרוטוקולים http, https ו-file.</translation> <translation id="4659077111144409915">חשבון ראשי</translation> <translation id="4660476621274971848">הגירסה הצפויה היא "<ph name="EXPECTED_VERSION" />", אבל הגירסה הייתה "<ph name="NEW_ID" />"</translation> -<translation id="4660540330091848931">המערכת מבצעת שינוי גודל</translation> +<translation id="4660540330091848931">שינוי הגודל מתבצע</translation> <translation id="4660838440047236328">מבנה החדר שלך.</translation> <translation id="4661407454952063730">נתוני אפליקציות הם כל הנתונים שנשמרים באפליקציות (בהתאם להגדרות של המפתחים), כולל נתונים כמו אנשי קשר, הודעות ותמונות.</translation> <translation id="4661931051827810091">שליחת כתובות URL אנונימיות של חלק מהדפים שביקרת בהם, חלקים מהתוכן של הדפים וכן מידע מוגבל על המערכת, כדי לזהות ולחסום איומים חדשים כנגד כל המשתמשים באינטרנט.</translation> @@ -3131,6 +3133,7 @@ <translation id="5213891612754844763">הצג את ההגדרות של שרת ה-proxy</translation> <translation id="5215502535566372932">יש לבחור מדינה</translation> <translation id="521582610500777512">התצלום נמחק</translation> +<translation id="5222403284441421673">נחסמה הורדה לא מאובטחת</translation> <translation id="5222676887888702881">יציאה</translation> <translation id="52232769093306234">האריזה נכשלה.</translation> <translation id="5225324770654022472">הצג קיצורי יישומים</translation> @@ -3239,7 +3242,7 @@ <translation id="5353252989841766347">ייצוא סיסמאות מ-Chrome</translation> <translation id="5355099869024327351">מתן הרשאה ל-Assistant להציג הודעות</translation> <translation id="5355926466126177564">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג כשאתה מבצע חיפוש מסרגל הכתובות.</translation> -<translation id="535911077628776608">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לבדיקה באמצעות ההגנה המתקדמת של Google? אפשר להקיש על Shift+F6 כדי לעבור לאזור סרגל ההורדות.</translation> +<translation id="535911077628776608">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לסריקה באמצעות ההגנה המתקדמת של Google? אפשר להקיש על Shift+F6 כדי לעבור לאזור סרגל ההורדות.</translation> <translation id="5359910752122114278">תוצאה אחת</translation> <translation id="5360150013186312835">הצג בסרגל הכלים</translation> <translation id="5362741141255528695">בחר קובץ מפתח פרטי.</translation> @@ -3497,7 +3500,7 @@ <translation id="5691511426247308406">משפחה</translation> <translation id="5691772641933328258">טביעת האצבע לא זוהתה</translation> <translation id="5692183275898619210">ההדפסה הושלמה</translation> -<translation id="5692875591060376599">הקובץ שנבחר אינו מזוהה ועלול להיות מסוכן. האם לשלוח אותו לבדיקה באמצעות ההגנה המתקדמת של Google?</translation> +<translation id="5692875591060376599">הקובץ שנבחר אינו מזוהה ועלול להיות מסוכן. האם לשלוח אותו לסריקה באמצעות ההגנה המתקדמת של Google?</translation> <translation id="569425414730375234">סשן אנונימי נוכחי: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">דיווח על ניצול לרעה על-ידי "<ph name="EXTENSION_NAME" />"</translation> <translation id="5696679855467848181">קובץ PPD נוכחי בשימוש: <ph name="PPD_NAME" /></translation> @@ -3529,6 +3532,7 @@ <translation id="5734362860645681824">תקשורת</translation> <translation id="5734697361979786483">הוספת התקן רשת לשיתוף קבצים</translation> <translation id="5736796278325406685">הזן שם משתמש חוקי</translation> +<translation id="5739017626473506901">כדי לעזור בהוספת חשבון בית ספרי של <ph name="USER_NAME" />, עליך לבצע כניסה למערכת</translation> <translation id="5739235828260127894">בהמתנה לאימות. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> <translation id="5739458112391494395">גדול מאוד</translation> <translation id="574209121243317957">גובה צליל</translation> @@ -4741,7 +4745,7 @@ <translation id="7371006317849674875">שעת התחלה</translation> <translation id="7371490947952970241">כדי לכבות את המיקום, אפשר להשבית את ההגדרה הראשית של המיקום במכשיר הזה. בהגדרות המיקום אפשר גם להשבית את האפשרות להסתמך על Wi-Fi, רשתות סלולריות וחיישנים כדי לקבוע את המיקום.</translation> <translation id="7375053625150546623">EAP</translation> -<translation id="7375235221357833624">{0,plural, =1{המכשיר התעדכן בשעה האחרונה}two{המכשיר התעדכן ב-# השעות האחרונות}many{המכשיר התעדכן ב-# השעות האחרונות}other{המכשיר התעדכן ב-# השעות האחרונות}}</translation> +<translation id="7375235221357833624">{0,plural, =1{יש לעדכן את המכשיר בתוך שעה אחת}two{יש לעדכן את המכשיר בתוך # שעות}many{יש לעדכן את המכשיר בתוך # שעות}other{יש לעדכן את המכשיר בתוך # שעות}}</translation> <translation id="7376553024552204454">הדגש את סמן העכבר כשהסמן בתנועה</translation> <translation id="7377451353532943397">המשך חסימת הגישה לחיישנים</translation> <translation id="73786666777299047">פתח את חנות האינטרנט של Chrome</translation> @@ -5462,7 +5466,7 @@ <translation id="8286963743045814739">אפשר לגלוש בפרטיות בעזרת חלון גלישה בסתר</translation> <translation id="8287902281644548111">חיפוש לפי קריאה ל-API/כתובת URL</translation> <translation id="8288032458496410887">הסרת <ph name="APP" />...</translation> -<translation id="8289128870594824098">גודל דיסק</translation> +<translation id="8289128870594824098">גודל כונן</translation> <translation id="8291967909914612644">המדינה של הספק הביתי</translation> <translation id="8294431847097064396">מקור</translation> <translation id="8297006494302853456">חלש</translation> @@ -5538,6 +5542,7 @@ <translation id="8408068190360279472">רשת <ph name="NETWORK_TYPE" />, מתבצעת התחברות</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">שאל תחילה (מומלץ)</translation> +<translation id="8417548266957501132">סיסמת הורה</translation> <translation id="8417573335434189196">במצב הזה המערכת לא מגינה עליך מפני אתרים, הורדות ותוספים מסוכנים. ההגדרה הזו לא מומלצת על-ידי Chrome.</translation> <translation id="8418445294933751433">&הצג ככרטיסייה</translation> <translation id="8419098111404128271">תוצאות לחיפוש "<ph name="SEARCH_TEXT" />"</translation> @@ -5675,7 +5680,7 @@ <translation id="8608618451198398104">הוספת כרטיס Kerberos</translation> <translation id="8609465669617005112">הזז למעלה</translation> <translation id="8610103157987623234">פורמט לא נכון, צריך לנסות שוב</translation> -<translation id="8612935480510351790">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לבדיקה באמצעות ההגנה המתקדמת של Google?</translation> +<translation id="8612935480510351790">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לסריקה באמצעות ההגנה המתקדמת של Google?</translation> <translation id="8613164732773110792">אותיות קטנות, ספרות, תווי קו תחתון או תווי קו מפריד בלבד</translation> <translation id="8615618338313291042">יישום גלישה בסתר: <ph name="APP_NAME" /></translation> <translation id="8619803522055190423">הטלת צללית</translation> @@ -5703,7 +5708,7 @@ <translation id="8641606876632989680">אם מערכת Chrome תזהה שנכנסת עם סיסמה שנחשפה, היא תתריע לך על כך</translation> <translation id="8642900771896232685">שתי שניות</translation> <translation id="8642947597466641025">הגדל טקסט</translation> -<translation id="8643443571868262066">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לבדיקה באמצעות ההגנה המתקדמת של Google?</translation> +<translation id="8643443571868262066">הקובץ <ph name="FILE_NAME" /> עשוי להיות מסוכן. האם לשלוח אותו לסריקה באמצעות ההגנה המתקדמת של Google?</translation> <translation id="8644655801811752511">לא ניתן לאפס את מפתח האבטחה הזה. צריך לנסות לאפס אותו מיד אחרי החיבור.</translation> <translation id="8645354835496065562">המשך התרת הגישה לחיישנים</translation> <translation id="8645920082661222035">המערכת חוזה אירועים מסוכנים ומזהירה אותך לגביהם לפני שהם מתרחשים</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 36a845a6..e9fae64e 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -113,7 +113,7 @@ <translation id="1147991416141538220">アクセスをリクエストするには、このデバイスの管理者にご連絡ください。</translation> <translation id="1149401351239820326">有効期限(月)</translation> <translation id="1150565364351027703">サングラス</translation> -<translation id="1151841030700667295">開いているすべてのタブで、すべてのサイトからログアウトします。</translation> +<translation id="1151841030700667295">タブで表示中のサイトも含め、すべてのサイトからログアウトします。</translation> <translation id="1151917987301063366"><ph name="HOST" /> によるセンサーへのアクセスを常に許可する</translation> <translation id="1153356358378277386">ペア設定されたデバイス</translation> <translation id="1153636665119721804">Google の高度な保護機能プログラム</translation> @@ -192,6 +192,7 @@ <translation id="1243314992276662751">アップロード</translation> <translation id="1244265436519979884">現在、Linux の復元が進行中です</translation> <translation id="1244303850296295656">拡張機能のエラー</translation> +<translation id="1246158006305844142">Google アカウントでログインしているすべての Chrome OS デバイス間でアプリや設定が同期されます。ブラウザの同期オプションについては、<ph name="LINK_BEGIN" />Chrome の設定<ph name="LINK_END" />をご覧ください。</translation> <translation id="1246905108078336582">クリップボードから候補を削除してもよろしいですか?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> はバージョンが古いためブロックされました</translation> <translation id="1251366534849411931">開始の中かっこがありません: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">自動チェックアウトしない</translation> <translation id="1525740877599838384">Wi-Fi のみを使用して現在地を特定する</translation> <translation id="152629053603783244">Linux を再起動</translation> +<translation id="1526335046150927198">タッチパッドのスクロール アクセラレーションを有効にする</translation> <translation id="1526560967942511387">無題のドキュメント</translation> <translation id="1529891865407786369">電源</translation> <translation id="1530838837447122178">マウスとタッチパッドのデバイス設定を開く</translation> @@ -1313,6 +1315,7 @@ <translation id="2725200716980197196">ネットワーク接続を復元しました</translation> <translation id="2727633948226935816">今後表示しない</translation> <translation id="2727712005121231835">実際のサイズ</translation> +<translation id="2729314457178420145">閲覧履歴(<ph name="URL" />)も削除します。これにより、Google.com からログアウトします。<ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux アプリとファイルのバックアップ</translation> <translation id="273093730430620027">このページはカメラにアクセスしています。</translation> <translation id="2731392572903530958">閉じたウインドウを開く(&E)</translation> @@ -2164,6 +2167,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> をもっと見る</translation> <translation id="3838543471119263078">Cookie などのサイトデータやプラグイン データ</translation> <translation id="383891835335927981">拡大縮小値を設定したサイトはありません</translation> +<translation id="3839509547554145593">マウスのスクロール アクセラレーションを有効にする</translation> <translation id="3839516600093027468"><ph name="HOST" /> によるクリップボードへのアクセスを常にブロックする</translation> <translation id="3841964634449506551">パスワードが無効です</translation> <translation id="3842552989725514455">Serif フォント</translation> @@ -2775,6 +2779,7 @@ <translation id="4699172675775169585">キャッシュされた画像とファイル</translation> <translation id="4699357559218762027">(自動起動済み)</translation> <translation id="470074695271471509">ログアウトして終了しますか?</translation> +<translation id="4701025263201366865">保護者のログイン</translation> <translation id="4707302005824653064">管理者(<ph name="CUSTODIAN_EMAIL" />)は chrome.com で利用状況や履歴を確認できます。</translation> <translation id="4707579418881001319">L2TP/IPSec + ユーザー証明書</translation> <translation id="4708794300267213770">スリープから復帰するときにロック画面を表示する</translation> @@ -3082,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />、<ph name="DEFAULT_SEARCH_ENGINE_NAME" /> 検索</translation> <translation id="5139823398361067371">セキュリティ キーの PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットする必要があります。</translation> <translation id="5139955368427980650">開く(&O)</translation> +<translation id="5142793792982256885">タッチパッドのスクロール速度</translation> <translation id="5142961317498132443">認証</translation> <translation id="5143374789336132547">拡張機能「<ph name="EXTENSION_NAME" />」により、ホームボタンをクリックしたときに表示されるページが変更されました。</translation> <translation id="5143712164865402236">全画面表示にする</translation> @@ -3644,6 +3650,7 @@ <translation id="5901630391730855834">黄</translation> <translation id="5906655207909574370">デバイスを再起動して更新を完了してください。</translation> <translation id="5906732635754427568">このアプリに関連付けられているデータはこのデバイスから削除されます。</translation> +<translation id="5908695239556627796">マウスのスクロール速度</translation> <translation id="5908769186679515905">サイトでの Flash の実行をブロックする</translation> <translation id="5910363049092958439">名前を付けて画像を保存(&V)...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> はオフラインです</translation> @@ -5091,6 +5098,7 @@ <ph name="BEGIN_BOLD" />注:<ph name="END_BOLD" /> この処理中、システムの再起動が行われます。</translation> <translation id="7828731929332799387">サードパーティのコンテキストで使用される Cookie とサイトデータがすべて削除されます。続行しますか?</translation> <translation id="7829298379596169484">音声入力にアクセスしています</translation> +<translation id="7829877209233347340">保護者の方に、ログインして学校用アカウントの追加を許可してもらってください。</translation> <translation id="7830594666202422257">Linux に接続</translation> <translation id="7831491651892296503">ネットワークの設定中にエラーが発生しました</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5845,6 +5853,7 @@ <translation id="8808686172382650546">ネコ</translation> <translation id="8808744862003883508">このページには、Chrome にインストールされているすべての拡張機能が表示されます。</translation> <translation id="8809147117840417135">明るい青緑</translation> +<translation id="8812593354822910461">閲覧履歴(<ph name="URL" />)も削除します。これにより、<ph name="DOMAIN" /> からログアウトします。<ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> にログインできません</translation> <translation id="8813811964357448561">枚</translation> <translation id="8813872945700551674">保護者の方に「<ph name="EXTENSION_NAME" />」を承認してもらいましょう</translation> @@ -6134,6 +6143,7 @@ <translation id="9203398526606335860">プロファイル記録の開始(&P)</translation> <translation id="9203904171912129171">デバイスを選択</translation> <translation id="9203962528777363226">このデバイスの管理者は新規ユーザーの追加を無効にしています</translation> +<translation id="9209689095351280025">サイトは Cookie を使用してあなたをウェブ上でトラッキングできません</translation> <translation id="9211177926627870898">更新が必要です</translation> <translation id="9214520840402538427">installation-time 属性の初期化がタイムアウトしました。サポート担当者にお問い合わせください。</translation> <translation id="9214695392875603905">カップケーキ</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index e93b383..25574100 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">ატვირთვა</translation> <translation id="1244265436519979884">ამჟამად მიმდინარეობს Linux აღდგენა</translation> <translation id="1244303850296295656">გაფართოების შეცდომა</translation> +<translation id="1246158006305844142">თქვენი აპები და პარამეტრები სინქრონიზებული იქნება თქვენს ყველა Chrome OS მოწყობილობასთან, რომელზეც შესული ხართ თქვენი Google ანგარიშით. ბრაუზერის სინქრონიზაციის პარამეტრების სანახავად გადადით <ph name="LINK_BEGIN" />Chrome-ის პარამეტრებზე<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">გსურთ შემოთავაზების გაცვლის ბუფერიდან ამოშლა?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> დაიბლოკა, რადგან ის მოძველებულია</translation> <translation id="1251366534849411931">მოსალოდნელი იყო გამხსნელი ფიგურული ფრჩხილი: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">არა, გმადლობთ</translation> <translation id="1525740877599838384">მდებარეობის დასადგენად მხოლოდ Wi-Fi ქსელის გამოყენება</translation> <translation id="152629053603783244">Linux-ის გადატვირთვა</translation> +<translation id="1526335046150927198">სენსორული კლავიატურით გადაადგილების დაჩქარების ჩართვა</translation> <translation id="1526560967942511387">უსათაურო დოკუმენტი</translation> <translation id="1529891865407786369">ელკვების წყარო</translation> <translation id="1530838837447122178">მაუსისა და სენსორული პანელის პარამეტრები</translation> @@ -1312,6 +1314,7 @@ <translation id="2725200716980197196">ქსელური კავშირი აღდგენილია</translation> <translation id="2727633948226935816">აღარ მოხდეს შეხსენება</translation> <translation id="2727712005121231835">ფაქტიური ზომა</translation> +<translation id="2729314457178420145">დათვალიერების მონაცემების (<ph name="URL" />) გასუფთავებაც (შესაძლოა, გამოხვიდეთ Google.com-დან). <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">მიმდინარეობს Linux აპებისა და ფაილების სარეზერვო ასლების შექმნა</translation> <translation id="273093730430620027">ამ გვერდს აქვს წვდომა თქვენს კამერაზე.</translation> <translation id="2731392572903530958">დახურული ფანჯრის ხელახლა &გახსნა</translation> @@ -2163,6 +2166,7 @@ <translation id="3838486795898716504">მეტი <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">ქუქი-ჩანაწერები, ასევე საიტების და დანამატების სხვა მონაცემები</translation> <translation id="383891835335927981">მასშტაბის გადიდება ან შემცირება არცერთ საიტზე არ მოხდარა</translation> +<translation id="3839509547554145593">მაუსით გადაადგილების დაჩქარების ჩართვა</translation> <translation id="3839516600093027468">ყოველთვის აეკრძალოს <ph name="HOST" />-ს გაცვლის ბუფერის ნახვა</translation> <translation id="3841964634449506551">პაროლი არასწორია</translation> <translation id="3842552989725514455">Serif-შრიფტი</translation> @@ -2774,6 +2778,7 @@ <translation id="4699172675775169585">ქეშირებული სურათები და ფაილები</translation> <translation id="4699357559218762027">(ავტომატურად გაშვებული)</translation> <translation id="470074695271471509">გსურთ დასასრულებლად გასვლა?</translation> +<translation id="4701025263201366865">შესვლა მშობლისთვის</translation> <translation id="4707302005824653064">მმართველს (<ph name="CUSTODIAN_EMAIL" />) შეუძლია გადახედოს გამოყენებას და ისტორიას საიტზე chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + მომხმარებლის სერტიფიკატი</translation> <translation id="4708794300267213770">ძილიდან გამოღვიძებისას ჩაკეტილი ეკრანის ჩვენება</translation> @@ -3081,6 +3086,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ძიება</translation> <translation id="5139823398361067371">შეიყვანეთ PIN-კოდი თქვენი უსაფრთხოების გასაღებისთვის. თუ PIN-კოდი არ იცით, მოგიწევთ უსაფრთხოების გასაღების გადაყენება.</translation> <translation id="5139955368427980650">&გახსნა</translation> +<translation id="5142793792982256885">სენსორული პანელით გადაადგილების სიჩქარე</translation> <translation id="5142961317498132443">ავტორიზაცია</translation> <translation id="5143374789336132547">გაფართოებამ „<ph name="EXTENSION_NAME" />“ თქვენ მიერ მთავარი გვერდის ღილაკზე დაწკაპუნებისას ნაჩვენები გვერდი შეცვალა.</translation> <translation id="5143712164865402236">სრულეკრანიან რეჟიმში შესვლა</translation> @@ -3643,6 +3649,7 @@ <translation id="5901630391730855834">ყვითელი</translation> <translation id="5906655207909574370">განახლება თითქმის მზად არის! დასასრულებლად, გადატვირთეთ თქვენი მოწყობილობა.</translation> <translation id="5906732635754427568">ამ აპთან დაკავშირებული მონაცემები ამ მოწყობილობიდან ამოიშლება.</translation> +<translation id="5908695239556627796">მაუსით გადაადგილების სიჩქარე</translation> <translation id="5908769186679515905">საიტებისთვის Flash-ის გაშვების დაბლოკვა</translation> <translation id="5910363049092958439">გამოსახულების შენ&ახვა, როგორც…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ხაზგარეშეა</translation> @@ -5090,6 +5097,7 @@ <ph name="BEGIN_BOLD" />შენიშვნა:<ph name="END_BOLD" /> პროცესის მსვლელობისას სისტემა გადაიტვირთება.</translation> <translation id="7828731929332799387">ეს ქმედება წაშლის ყველა იმ ქუქი-ჩანაწერსა და საიტების მონაცემს, რომელიც ხელმისაწვდომია მესამე მხარის კონტექსტებში. გსურთ გაგრძელება?</translation> <translation id="7829298379596169484">შემომავალ აუდიოზე წვდომა</translation> +<translation id="7829877209233347340">სასწავლებლის ანგარიშის დამატების ნებართვის მოსანიჭებლად სთხოვეთ მშობელს სისტემაში შესვლა</translation> <translation id="7830594666202422257">Linux-თან დაკავშირება</translation> <translation id="7831491651892296503">შეცდომა ქსელის კონფიგურაციისას</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5842,6 +5850,7 @@ <translation id="8808686172382650546">კატა</translation> <translation id="8808744862003883508">ამ გვერდზე შეგიძლიათ იხილოთ Chrome-ში დაინსტალირებული ყველა გაფართოება.</translation> <translation id="8809147117840417135">ღია ფირუზისფერი</translation> +<translation id="8812593354822910461">დათვალიერების მონაცემების (<ph name="URL" />) გასუფთავებაც (შესაძლოა, გამოხვიდეთ <ph name="DOMAIN" />-დან). <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />-ში შესვლა ვერ მოხერხდა</translation> <translation id="8813811964357448561">ფურცელი</translation> <translation id="8813872945700551674">სთხოვეთ მშობელს, დაადასტუროს „<ph name="EXTENSION_NAME" />“</translation> @@ -6131,6 +6140,7 @@ <translation id="9203398526606335860">&პროფილირება ჩართულია</translation> <translation id="9203904171912129171">აირჩიეთ მოწყობილობა</translation> <translation id="9203962528777363226">ამ მოწყობილობის ადმინისტრატორმა გამორთო ახალი მომხმარებლების დამატების შესაძლებლობა</translation> +<translation id="9209689095351280025">საიტები ვერ გამოიყენებს ქუქი-ჩანაწერებს ვებში თქვენთვის თვალის მისადევნებლად</translation> <translation id="9211177926627870898">საჭიროა განახლება</translation> <translation id="9214520840402538427">უპს! დაინსტალირების დროის ატრიბუტების ინიციალიზაცია ამოიწურა. დაუკავშირდით მხარდაჭერის თქვენს წარმომადგენელს.</translation> <translation id="9214695392875603905">კექსი</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index aa46a9b6..e85895e 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Жүктеп салу</translation> <translation id="1244265436519979884">Linux жүйесі қалпына келтірілуде.</translation> <translation id="1244303850296295656">Кеңейтім қатесі</translation> +<translation id="1246158006305844142">Қолданбаларыңыз бен параметрлеріңіз Google есептік жазбасымен кірген барлық Chrome OS құрылғыларында синхрондалады. Браузерді синхрондау опцияларын<ph name="LINK_BEGIN" />Chrome параметрлерінен<ph name="LINK_END" /> қараңыз.</translation> <translation id="1246905108078336582">Ұсыныс буферден өшірілсін бе?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> бөгелді, себебі ол қолданыстын шығарылған.</translation> <translation id="1251366534849411931">Ирек жақша ашылмаған: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">Жоқ, рақмет</translation> <translation id="1525740877599838384">Орынды анықтау үшін тек Wi-Fi желісін қолдану</translation> <translation id="152629053603783244">Linux жүйесін қайта қосу</translation> +<translation id="1526335046150927198">Сенсорлық тақтада айналдыру жылдамдығын арттыруды қосу</translation> <translation id="1526560967942511387">Атаусыз құжат</translation> <translation id="1529891865407786369">Қуат көзі</translation> <translation id="1530838837447122178">Тінтуір жəне сенсорлық тақта құрылғысы параметрлерін ашу</translation> @@ -456,6 +458,7 @@ <translation id="1616206807336925449">Бұл кеңейтім арнайы рұқсаттарды қажет етпейді.</translation> <translation id="1616298854599875024">Бөлісілмеген модуль болғандықтан, "<ph name="IMPORT_NAME" />" кеңейтімін импорттау мүмкін емес.</translation> <translation id="1618268899808219593">А&нықтама орталығы</translation> +<translation id="1620307519959413822">Құпия сөз дұрыс емес. Қайта енгізіп көріңіз немесе оны қайта орнату үшін "Құпия сөзді ұмытып қалдыңыз ба?" түймесін басыңыз.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Суреттер әзірге қолжетімді емес. Тұсқағаз жинақтарын көру үшін интернетке қайта қосылыңыз.</translation> <translation id="1627276047960621195">Файл сипаттауыштары</translation> @@ -674,6 +677,7 @@ <translation id="1887850431809612466">Жабдық нұсқасы</translation> <translation id="1890674179660343635"><span>Идентификатор: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Толық экранда ашу</translation> +<translation id="1892341345406963517">Сәлеметсіз бе, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Басқа тілдер</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> қалды</translation> <translation id="1895658205118569222">Өшіру</translation> @@ -1310,6 +1314,7 @@ <translation id="2725200716980197196">Желілік байланыс қалпына келтірілді</translation> <translation id="2727633948226935816">Енді еске салынбасын</translation> <translation id="2727712005121231835">Нақты өлшемі</translation> +<translation id="2729314457178420145">Браузерді пайдалану деректерін де (<ph name="URL" />) өшіріңіз (Google.com сайтында есептік жазбаңыздан шығарылуыңыз мүмкін). <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux қолданбалары мен файлдарының сақтық көшірмесі жасалуда</translation> <translation id="273093730430620027">Бұл бет камераңызды пайдалануда.</translation> <translation id="2731392572903530958">Жабылған терезені қ&айта ашу</translation> @@ -1588,7 +1593,7 @@ <translation id="3090819949319990166">Сыртқы CRX файлын <ph name="TEMP_CRX_FILE" /> файлына көшіру мүмкін емес.</translation> <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" жұптастырылған</translation> <translation id="3092699946856346803">SIM картаңызды салып, қайталап көріңіз.</translation> -<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 зиянды кеңейтім өшірулі. Оны жоюға да болады.}other{{NUM_EXTENSIONS} зиянды кеңейтім өшірулі. Оларды жоюға да болады.}}</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 зиянды болуы мүмкін кеңейтім өшірулі. Оны жоюға да болады.}other{{NUM_EXTENSIONS} зиянды болуы мүмкін кеңейтім өшірулі. Оларды жоюға да болады.}}</translation> <translation id="3101709781009526431">Күні мен уақыты</translation> <translation id="3103941660000130485">Linux жүйесінің жаңа нұсқасын орнату кезінде қате шықты</translation> <translation id="310671807099593501">Сайт Bluetooth функциясын пайдалануда</translation> @@ -2161,6 +2166,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> атауы қойылған басқа беттер</translation> <translation id="3838543471119263078">Cookie файлдары және басқа сайт пен плагин деректері</translation> <translation id="383891835335927981">Ешқандай сайт ұлғайтылмады не кішірейтілмеді</translation> +<translation id="3839509547554145593">Тінтуірді айналдыру жылдамдығын арттыруды қосу</translation> <translation id="3839516600093027468"><ph name="HOST" /> хостының буферді көруіне әрқашан тыйым салу</translation> <translation id="3841964634449506551">Құпия сөз жарамсыз.</translation> <translation id="3842552989725514455">Serif қаріпі</translation> @@ -2328,7 +2334,7 @@ <translation id="4047726037116394521">Негізгі экранға өту</translation> <translation id="4050225813016893843">Аутентификация әдісі</translation> <translation id="4052120076834320548">Кішкентай</translation> -<translation id="4056908315660577142">Ата-анаңыз <ph name="APP_NAME" /> Chrome қолданбасы үшін белгілеген уақыт шегіне жеттіңіз. Оны ертең <ph name="TIME_LIMIT" /> пайдалана аласыз.</translation> +<translation id="4056908315660577142">Ата-анаңыз <ph name="APP_NAME" /> Chrome қолданбасы үшін белгілеген уақыт шегіне жеттіңіз. Оны ертең <ph name="TIME_LIMIT" /> бойы пайдалана аласыз.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> – <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Дүкенде көру</translation> <translation id="4058647953897694817">Bluetooth арқылы растау</translation> @@ -2556,7 +2562,7 @@ <translation id="4400963414856942668">Қойындыға бетбелгі қою үшін жұлдызды басуыңызға болады.</translation> <translation id="4403775189117163360">Басқа қалта таңдаңыз</translation> <translation id="4404136731284211429">Қайта іздеу</translation> -<translation id="4404843640767531781"><ph name="APP_NAME" /> қолданбасын әкімші бөгеді. Оны пайдалану үшін ата-анаңыздан рұқсат сұраңыз.</translation> +<translation id="4404843640767531781"><ph name="APP_NAME" /> қолданбасын ата-анаңыз бөгеді. Оны пайдалану үшін ата-анаңыздан рұқсат сұраңыз.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">А&нықтама</translation> <translation id="4409697491990005945">Жиектер</translation> @@ -2772,6 +2778,7 @@ <translation id="4699172675775169585">Кэштелген кескіндер мен файлдар</translation> <translation id="4699357559218762027">(автоматты іске қосу)</translation> <translation id="470074695271471509">Аяқтау үшін есептік жазбадан шығасыз ба?</translation> +<translation id="4701025263201366865">Ата-ананың жүйеге кіруі</translation> <translation id="4707302005824653064">Пайдаланылу мен журналды басқарушы chrome.com сайтында (<ph name="CUSTODIAN_EMAIL" />) қарап шыға алады.</translation> <translation id="4707579418881001319">L2TP/IPsec + пайдаланушы сертификаты</translation> <translation id="4708794300267213770">Ұйқы режимінен шығарғанда құлып экранын көрсету</translation> @@ -3079,6 +3086,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Іздеу</translation> <translation id="5139823398361067371">Қауіпсіздік кілтінің PIN кодын енгізіңіз. PIN кодын білмесеңіз, қауіпсіздік кілтін бастапқы күйге қайтаруыңыз керек.</translation> <translation id="5139955368427980650">&Ашу</translation> +<translation id="5142793792982256885">Сенсорлық тақтада айналдыру жылдамдығы</translation> <translation id="5142961317498132443">Аутентификация</translation> <translation id="5143374789336132547">«<ph name="EXTENSION_NAME" />» кеңейтімі Басты түймесін басқан кезде көрсетілетін бетті өзгертті.</translation> <translation id="5143712164865402236">Толық экранға өту</translation> @@ -3124,6 +3132,7 @@ <translation id="5213891612754844763">Прокси-сервер параметрлерін көрсету</translation> <translation id="5215502535566372932">Елді таңдаңыз</translation> <translation id="521582610500777512">Фотосурет алып тасталды</translation> +<translation id="5222403284441421673">Қорғалмаған жүктеп алу әрекеті бөгелді</translation> <translation id="5222676887888702881">Шығу</translation> <translation id="52232769093306234">Қысу сәтсіз болды.</translation> <translation id="5225324770654022472">Қолданбалар таңбашасын көрсету</translation> @@ -3522,6 +3531,7 @@ <translation id="5734362860645681824">Байланыстар</translation> <translation id="5734697361979786483">Файл бөлісу функциясын қосу</translation> <translation id="5736796278325406685">Жарамды пайдаланушы атын енгізіңіз</translation> +<translation id="5739017626473506901">Балаңызға (<ph name="USER_NAME" />) оқу есептік жазбасын енгізуге көмектесіңіз.</translation> <translation id="5739235828260127894">Расталуы керек. <ph name="LINK_BEGIN" />Толығырақ ақпарат<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Тым үлкен</translation> <translation id="574209121243317957">Дыбыс биіктігі</translation> @@ -3641,6 +3651,7 @@ <translation id="5901630391730855834">Сары</translation> <translation id="5906655207909574370">Сәл қалды. Жаңартуды аяқтау үшін құрылғыны қайта іске қосыңыз.</translation> <translation id="5906732635754427568">Бұл қолданбамен байланыстырылған деректер бұл құрылғыдан өшіріледі.</translation> +<translation id="5908695239556627796">Тінтуірді айналдыру жылдамдығы</translation> <translation id="5908769186679515905">Сайттарда Flash қолданбасының іске қосылуын бөгеу</translation> <translation id="5910363049092958439">Кескінді басқаша са&қтау…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> офлайн режимде.</translation> @@ -3953,7 +3964,7 @@ <translation id="6309510305002439352">Микрофон өшірулі</translation> <translation id="6311220991371174222">Профильді ашу кезінде қате кеткендіктен, Chrome іске қосылмады. Оны қайта іске қосып көріңіз.</translation> <translation id="6312403991423642364">Белгісіз желі қатесі</translation> -<translation id="6312567056350025599">{NUM_DAYS,plural, =1{Қауіпсіздік шарасы 1 күн бұрын жасалды.}other{Қауіпсіздік шарасы {NUM_DAYS} күн бұрын жасалды.}}</translation> +<translation id="6312567056350025599">{NUM_DAYS,plural, =1{Қауіпсіздік 1 күн бұрын тексерілді.}other{Қауіпсіздік {NUM_DAYS} күн бұрын тексерілді.}}</translation> <translation id="6312638141433622592">Қолдау көрсетілген кезде, мақалаларды оқушы режимінде оңай көрсетуді ұсыну</translation> <translation id="6313641880021325787">VR РЕЖИМІНЕН ШЫҒУ</translation> <translation id="6314819609899340042"><ph name="IDS_SHORT_PRODUCT_NAME" /> құрылғысындағы түзету мүмкіндіктерін қостыңыз.</translation> @@ -3969,7 +3980,7 @@ <translation id="6325191661371220117">Автоматты іске қосуды өшіру</translation> <translation id="6326175484149238433">Chrome бағдарламасынан жою</translation> <translation id="6326855256003666642">Кеңейтімдер қолданатын процестер саны</translation> -<translation id="632707535499064463">Мерзім аяқталғанға дейін, <ph name="ORGANIZATION_NAME" /> бұл құрылғыны жаңартуы керек.</translation> +<translation id="632707535499064463">Мерзім аяқталғанға дейін, <ph name="ORGANIZATION_NAME" /> бұл құрылғыны жаңартуыңызды сұрайды.</translation> <translation id="6327785803543103246">Вебпрокси-серверді автоматты анықтау</translation> <translation id="6333064448949140209">Қатесі түзетілуі үшін файл Google қызметіне жіберіледі</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> үшін жаңа профиль жасау</translation> @@ -4489,7 +4500,7 @@ <translation id="7053983685419859001">Бөгеу</translation> <translation id="7055152154916055070">Бағыттау функциясына тыйым салынды.</translation> <translation id="7056526158851679338">&Құрылғыларды тексеру</translation> -<translation id="7057184853669165321">{NUM_MINS,plural, =1{Қауіпсіздік шарасы 1 минут бұрын жасалды.}other{Қауіпсіздік шарасы {NUM_MINS} минут бұрын жасалды.}}</translation> +<translation id="7057184853669165321">{NUM_MINS,plural, =1{Қауіпсіздік 1 минут бұрын тексерілді.}other{Қауіпсіздік {NUM_MINS} минут бұрын тексерілді.}}</translation> <translation id="7057767408836081338">Қолданба деректерін алу мүмкін болмады, қолданбаны бәрібір іске қосудамыз…</translation> <translation id="7059858479264779982">Автоматты іске қосуға орнату</translation> <translation id="7059893117020417984">Интернетті құпия шолғыңыз келсе, инкогнито терезесін ашуға болады. Ол үшін нүктелер белгішесінің мәзірін басыңыз</translation> @@ -4751,7 +4762,7 @@ <translation id="7400418766976504921">URL</translation> <translation id="7400839060291901923"><ph name="PHONE_NAME" /> телефоныңыздағы байланысты реттеу</translation> <translation id="7401778920660465883">Хабарды жабу</translation> -<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Қауіпсіздік шарасы 1 сағат бұрын жасалды.}other{Қауіпсіздік шарасы {NUM_HOURS} сағат бұрын жасалды.}}</translation> +<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Қауіпсіздік 1 сағат бұрын тексерілді.}other{Қауіпсіздік {NUM_HOURS} сағат бұрын тексерілді.}}</translation> <translation id="740624631517654988">Қалқымалы терезелерге тыйым салынған</translation> <translation id="7407430846095439694">Импорттау және байланыстыру</translation> <translation id="7407504355934009739">Көптеген адамдар осы сайттың хабарландыруларына тыйым салады.</translation> @@ -5088,6 +5099,7 @@ <ph name="BEGIN_BOLD" />Ескертпе:<ph name="END_BOLD" /> бұл процесс барысында жүйе қайта жүктеледі.</translation> <translation id="7828731929332799387">Бөгде сайттардағы cookie файлдары мен сайт деректерінің барлығы жойылады. Жалғастырғыңыз келе ме?</translation> <translation id="7829298379596169484">Аудио кіріс қолжетімді</translation> +<translation id="7829877209233347340">Ата-анаңыздан кіріп, мектеп есептік жазбасын енгізуге рұқсат беруін сұраңыз.</translation> <translation id="7830594666202422257">Linux жүйесіне жалғану</translation> <translation id="7831491651892296503">Желіні конфигурациялауда қате болды</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5527,6 +5539,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> желісі, жалғануда</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Алдымен сұрау (ең дұрысы)</translation> +<translation id="8417548266957501132">Ата-ана құпия сөзі</translation> <translation id="8417573335434189196">Қауіпті веб-сайттардан, жүктеп алынатын файлдардан не кеңейтімдерден қорғамайды. Chrome бұл параметрді құптамайды.</translation> <translation id="8418445294933751433">&Қойынды ретінде көрсету</translation> <translation id="8419098111404128271">"<ph name="SEARCH_TEXT" />" бойынша іздеу нәтижелері</translation> @@ -5841,6 +5854,7 @@ <translation id="8808686172382650546">Мысық</translation> <translation id="8808744862003883508">Осы бетте Chrome браузеріне орнатылған барлық кеңейтімдерді көресіз.</translation> <translation id="8809147117840417135">Ашық көкшіл жасыл</translation> +<translation id="8812593354822910461">Браузерді пайдалану деректерін де (<ph name="URL" />) өшіріңіз (<ph name="DOMAIN" /> сайтында есептік жазбаңыздан шығарыласыз). <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> есептік жазбасына кіру мүмкін емес</translation> <translation id="8813811964357448561">қағаз парақ</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" кеңейтімін мақұлдау үшін ата-анаңыздан рұқсат алыңыз.</translation> @@ -6130,6 +6144,7 @@ <translation id="9203398526606335860">&Профильдеу қосылған</translation> <translation id="9203904171912129171">Құрылғыны таңдау</translation> <translation id="9203962528777363226">Бұл құрылғының әкімшісі жаңа пайдаланушыларды қосу мүмкіндігін өшірді</translation> +<translation id="9209689095351280025">Сайттар сізді интернетте қадағалайтын cookie файлдарын пайдалана алмайды.</translation> <translation id="9211177926627870898">Жаңарту қажет</translation> <translation id="9214520840402538427">Орнату уақыты атрибуттарын жұмысқа дайындау мерзімі бітті. Қолдау көрсету өкіліне хабарласыңыз.</translation> <translation id="9214695392875603905">Маффин</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index e91a66e..9658c357c 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">ទាញឡើង</translation> <translation id="1244265436519979884">បច្ចុប្បន្ននេះ ការស្ដារ Linux កំពុងដំណើរការ</translation> <translation id="1244303850296295656">កំហុសឆ្គងកម្មវិធីបន្ថែម</translation> +<translation id="1246158006305844142">ការកំណត់ និងកម្មវិធីរបស់អ្នកនឹងធ្វើសមកាលកម្មនៅលើឧបករណ៍ Chrome OS ទាំងអស់ ដែលអ្នកចូលដោយប្រើគណនី Google របស់អ្នក។ សូមចូលទៅកាន់<ph name="LINK_BEGIN" />ការកំណត់ Chrome<ph name="LINK_END" /> សម្រាប់ជម្រើសសមកាលកម្មកម្មវិធីរុករកតាមអ៊ីនធឺណិត។</translation> <translation id="1246905108078336582">លុបការណែនាំចេញពីឃ្លីបបត?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ត្រូវបានទប់ស្កាត់ ដោយសារវាត្រូវបានបញ្ឈប់</translation> <translation id="1251366534849411931">ត្រូវមានឃ្នាបបើក៖ <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">ទេ អរគុណ</translation> <translation id="1525740877599838384">ប្រើតែ Wi-Fi ប៉ុណ្ណោះដើម្បីកំណត់ទីតាំង</translation> <translation id="152629053603783244">ចាប់ផ្ដើម Linux ឡើងវិញ</translation> +<translation id="1526335046150927198">បើកការបង្កើនល្បឿនរំកិលផ្ទាំងប៉ះ</translation> <translation id="1526560967942511387">ឯកសារគ្មានចំណងជើង</translation> <translation id="1529891865407786369">ប្រភពថាមពល</translation> <translation id="1530838837447122178">បើកការកំណត់កណ្តុរ និងឧបករណ៍ផ្ទាំងប៉ះ</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">កម្មវិធីបន្ថែមនេះមិនតម្រូវឲ្យមានការអនុញ្ញាតពិសេសអ្វីទេ។</translation> <translation id="1616298854599875024">មិនអាចនាំចូលកម្មវិធីបន្ថែម "<ph name="IMPORT_NAME" />" បានទេ ដោយសារវាមិនមែនជាម៉ូឌុលដែលបានចែករំលែក</translation> <translation id="1618268899808219593">មជ្ឈមណ្ឌលជំនួយ</translation> +<translation id="1620307519959413822">ពាក្យសម្ងាត់មិនត្រឹមត្រូវទេ។ សូមព្យាយាមម្ដងទៀត ឬចុច "ភ្លេចពាក្យសម្ងាត់" ដើម្បីកំណត់ពាក្យសម្ងាត់នេះឡើងវិញ។</translation> <translation id="1620510694547887537">កាមេរ៉ា</translation> <translation id="1623132449929929218">មិនអាចប្រើរូបភាពនេះនៅពេលនេះ។ សូមភ្ជាប់អ៊ីនធឺណិតឡើងវិញ ដើម្បីមើលបណ្ដុំផ្ទាំងរូបភាព។</translation> <translation id="1627276047960621195">អង្គពិពណ៌នាឯកសារ</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">ការផ្លាស់ប្តូរផ្នែករឹង</translation> <translation id="1890674179660343635"><span>លេខសម្គាល់៖ </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">បើកពេញអេក្រង់</translation> +<translation id="1892341345406963517">សួស្ដី <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">ភាសាផ្សេងទៀត</translation> <translation id="1895252664692693738">នៅសល់ <ph name="TIME_LEFT" /> ទៀត</translation> <translation id="1895658205118569222">បិទ</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">ការភ្ជាប់បណ្តាញត្រូវបានស្តារ</translation> <translation id="2727633948226935816">កុំរំលឹកខ្ញុំម្តងទៀត</translation> <translation id="2727712005121231835">ទំហំពិតប្រាកដ</translation> +<translation id="2729314457178420145">ក៏សម្អាតទិន្នន័យរុករក (<ph name="URL" />) ដែលអាចនាំអ្នកចេញពី Google.com ផងដែរ។ <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">កំពុងបម្រុងទុកកម្មវិធី និងឯកសារ Linux</translation> <translation id="273093730430620027">ទំព័រនេះកំពុងចូលប្រើកាមេរ៉ារបស់អ្នក។</translation> <translation id="2731392572903530958">បើកផ្ទាំងដែលបានបិទឡើងវិញ</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">ច្រើនទៀត <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">ទិន្នន័យខូកឃី និងគេហទំព័រផ្សេងទៀត និងកម្មវិធីជំនួយ</translation> <translation id="383891835335927981">គ្មានទំព័រដែលបានពង្រីក ឬបង្រួមទេ</translation> +<translation id="3839509547554145593">បើកការបង្កើនល្បឿនរំកិលកណ្ដុរ</translation> <translation id="3839516600093027468">ទប់ស្កាត់មិនឱ្យ <ph name="HOST" /> មើលអង្គចងចាំជានិច្ច</translation> <translation id="3841964634449506551">ពាក្យសម្ងាត់មិនត្រឹមត្រូវ</translation> <translation id="3842552989725514455">ពុម្ពអក្សរ Serif</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">រូបភាព និងឯកសារដែលផ្ទុកក្នុងឃ្លាំងសម្ងាត់</translation> <translation id="4699357559218762027">(បានបើកដំណើរស្វ័យប្រវត្តិ)</translation> <translation id="470074695271471509">ចេញពីគណនីដើម្បីបញ្ចប់?</translation> +<translation id="4701025263201366865">ការចូលគណនីដោយមាតាបិតា</translation> <translation id="4707302005824653064">ការប្រើប្រាស់ និងប្រវត្តិអាចត្រូវបានពិនិត្យមើលដោយអ្នកគ្រប់គ្រង (<ph name="CUSTODIAN_EMAIL" />) នៅលើ chrome.com។</translation> <translation id="4707579418881001319">L2TP/IPsec + វិញ្ញាបនប័ត្រអ្នកប្រើ</translation> <translation id="4708794300267213770">បង្ហាញអេក្រង់ចាក់សោនៅពេលភ្ញាក់ពីដំណេក</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, លទ្ធផលស្វែងរកនៅលើ <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">បញ្ចូលកូដ PIN សម្រាប់សោសុវត្ថិភាពរបស់អ្នក។ ប្រសិនបើអ្នកមិនស្គាល់កូដ PIN អ្នកនឹងត្រូវកំណត់សោសុវត្ថិភាពឡើងវិញ។</translation> <translation id="5139955368427980650">បើក</translation> +<translation id="5142793792982256885">ល្បឿនរំកិលផ្ទាំងប៉ះ</translation> <translation id="5142961317498132443">ការផ្ទៀងផ្ទាត់</translation> <translation id="5143374789336132547">កម្មវិធីបន្ថែម "<ph name="EXTENSION_NAME" />" បានប្តូរអ្វីដែលទំព័របានបង្ហាញនៅពេលអ្នកចុចប៊ូតុង ទំព័រដើម។</translation> <translation id="5143712164865402236">ចូលពេញអេក្រង់</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">បង្ហាញការកំណត់ប្រូកស៊ី</translation> <translation id="5215502535566372932">ជ្រើសរើសប្រទេស</translation> <translation id="521582610500777512">រូបភាពត្រូវបានច្រានចោល</translation> +<translation id="5222403284441421673">បានទប់ស្កាត់ការទាញយកដែលគ្មានសុវត្ថិភាព</translation> <translation id="5222676887888702881">ចាកចេញ</translation> <translation id="52232769093306234">មិនអាចវេចខ្ចប់បានទេ។</translation> <translation id="5225324770654022472">បង្ហាញផ្លូវកាត់កម្មវិធី</translation> @@ -3526,6 +3535,7 @@ <translation id="5734362860645681824">ការប្រាស្រ័យទាក់ទង</translation> <translation id="5734697361979786483">បញ្ចូលឧបករណ៍ចែករំលែកឯកសារ</translation> <translation id="5736796278325406685">សូមបញ្ចូលឈ្មោះអ្នកប្រើប្រាស់ដែលត្រឹមត្រូវ</translation> +<translation id="5739017626473506901">ចូលគណនី ដើម្បីជួយ <ph name="USER_NAME" /> ក្នុងការបញ្ចូលគណនីសាលារៀន</translation> <translation id="5739235828260127894">កំពុងរង់ចាំធ្វើការផ្ទៀងផ្ទាត់។ <ph name="LINK_BEGIN" />ស្វែងយល់បន្ថែម<ph name="LINK_END" /></translation> <translation id="5739458112391494395">ធំខ្លាំង</translation> <translation id="574209121243317957">កម្រិតកម្ពស់សូរ</translation> @@ -3645,6 +3655,7 @@ <translation id="5901630391730855834">លឿង</translation> <translation id="5906655207909574370">ការអាប់ដេតជិតបញ្ចប់ហើយ! ចាប់ផ្តើមឧបករណ៍របស់អ្នកឡើងវិញដើម្បីបញ្ចប់ការអាប់ដេត។</translation> <translation id="5906732635754427568">ទិន្នន័យដែលពាក់ព័ន្ធជាមួយកម្មវិធីនេះនឹងត្រូវបានលុបចេញពីឧបករណ៍នេះ។</translation> +<translation id="5908695239556627796">ល្បឿនរំកិលកណ្តុរ</translation> <translation id="5908769186679515905">រារាំងគេហទំព័រមិនឲ្យដំណើរការ Flash</translation> <translation id="5910363049092958439">រក្សាទុករូបភាពជា...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> គ្មានអ៊ីនធឺណិតទេ</translation> @@ -5092,6 +5103,7 @@ <ph name="BEGIN_BOLD" />ចំណាំ៖<ph name="END_BOLD" /> ប្រព័ន្ធនឹងចាប់ផ្ដើមឡើងវិញអំឡុងពេលការដំណើរការ។</translation> <translation id="7828731929332799387">សកម្មភាពនេះនឹងលុបខូគីទាំងអស់ និងទិន្នន័យគេហទំព័រដែលមាននៅក្នុងបរិបទភាគីទីបី។ តើអ្នកចង់បន្តដែរទេ?</translation> <translation id="7829298379596169484">ការចូលប្រើការបញ្ចូលសម្លេង</translation> +<translation id="7829877209233347340">ស្នើសុំឱ្យមាតាបិតាចូលគណនី ដើម្បីផ្ដល់ការអនុញ្ញាតឱ្យបញ្ចូលគណនីសាលារៀន</translation> <translation id="7830594666202422257">ភ្ជាប់ Linux</translation> <translation id="7831491651892296503">មានបញ្ហាក្នុងការកំណត់រចនាសម្ព័ន្ធបណ្តាញ</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5531,6 +5543,7 @@ <translation id="8408068190360279472">បណ្ដាញ <ph name="NETWORK_TYPE" />, កំពុងភ្ជាប់</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">សួរជាមុនសិន (បានណែនាំ)</translation> +<translation id="8417548266957501132">ពាក្យសម្ងាត់របស់មាតាបិតា</translation> <translation id="8417573335434189196">មិនការពារអ្នកពីគេហទំព័រ ការទាញយក ឬកម្មវិធីបន្ថែមដែលមានគ្រោះថ្នាក់ទេ។ Chrome មិនណែនាំឱ្យប្រើការកំណត់នេះទេ។</translation> <translation id="8418445294933751433">បង្ហាញជាផ្ទាំង</translation> <translation id="8419098111404128271">លទ្ធផលស្វែងរកសម្រាប់ '<ph name="SEARCH_TEXT" />'</translation> @@ -5845,6 +5858,7 @@ <translation id="8808686172382650546">ឆ្មា</translation> <translation id="8808744862003883508">នៅលើទំព័រនេះ អ្នកអាចមើលឃើញកម្មវិធីបន្ថែមទាំងអស់ដែលដំឡើងនៅក្នុង Chrome។</translation> <translation id="8809147117840417135">បៃតងស្រាល</translation> +<translation id="8812593354822910461">ក៏សម្អាតទិន្នន័យរុករក (<ph name="URL" />) ដែលនឹងនាំអ្នកចេញពី <ph name="DOMAIN" /> ផងដែរ។ <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">មិនអាចចូល <ph name="USERNAME" /> បានទេ</translation> <translation id="8813811964357448561">ផ្ទាំងក្រដាស</translation> <translation id="8813872945700551674">ស្នើសុំឱ្យមាតាបិតាយល់ព្រមលើ "<ph name="EXTENSION_NAME" />"</translation> @@ -6134,6 +6148,7 @@ <translation id="9203398526606335860">បើកដំណើរការទម្រង់</translation> <translation id="9203904171912129171">ជ្រើសរើសឧបករណ៍</translation> <translation id="9203962528777363226">អ្នកគ្រប់គ្រងឧបករណ៍នេះបានបិទការបន្ថែមអ្នកប្រើថ្មី</translation> +<translation id="9209689095351280025">គេហទំព័រមិនអាចប្រើខូគី ដែលតាមដានអ្នកនៅលើអ៊ីនធឺណិតបានទេ</translation> <translation id="9211177926627870898">តម្រូវឱ្យដំឡើងកំណែ</translation> <translation id="9214520840402538427">អូ! ការចាប់ផ្តើម installation-time attributes បានអស់ពេល។ សូមទំនាក់ទំនងជំនួយការរបស់អ្នក។</translation> <translation id="9214695392875603905">នំខេកតូច</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index bd1e7b7..78db3a0 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">ಅಪ್ಲೋಡ್</translation> <translation id="1244265436519979884">ಪ್ರಸ್ತುತವಾಗಿ Linux ಮರುಸ್ಥಾಪನೆ ಪ್ರಗತಿಯಲ್ಲಿದೆ</translation> <translation id="1244303850296295656">ವಿಸ್ತರಣೆ ದೋಷ</translation> +<translation id="1246158006305844142">ನಿಮ್ಮ Google ಖಾತೆಯೊಂದಿಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದ ಎಲ್ಲಾ Chrome OS ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ. ಬ್ರೌಸರ್ ಸಿಂಕ್ ಆಯ್ಕೆಗಳಿಗಾಗಿ, <ph name="LINK_BEGIN" />Chrome ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ<ph name="LINK_END" /> ಹೋಗಿ.</translation> <translation id="1246905108078336582">ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಿಂದ ಸಲಹೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ತಡೆಹಿಡಿಯಲಾಗಿದೆ, ಹೀಗಾಗಿ ಅದನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="1251366534849411931">ಓಪನಿಂಗ್ ಕರ್ಲಿ ಬ್ರಾಕೆಟ್ ಅನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ: <ph name="ERROR_LINE" /></translation> @@ -392,6 +393,7 @@ <translation id="1524563461097350801">ಬೇಡ</translation> <translation id="1525740877599838384">ಸ್ಥಳವನ್ನು ನಿರ್ಧರಿಸಲು ವೈ-ಫೈ ಮಾತ್ರ ಬಳಸಿ</translation> <translation id="152629053603783244">Linux ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation> +<translation id="1526335046150927198">ವೇಗವರ್ಧಕವನ್ನು ಸ್ಕ್ರಾಲ್ ಮಾಡಲು, ಟಚ್ಪ್ಯಾಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="1526560967942511387">ಶೀರ್ಷಿಕೆರಹಿತ ದಾಖಲೆ</translation> <translation id="1529891865407786369">ಪವರ್ ಮೂಲ</translation> <translation id="1530838837447122178">ಮೌಸ್ ಮತ್ತು ಟಚ್ಪ್ಯಾಡ್ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> @@ -844,7 +846,7 @@ <translation id="2135787500304447609">&ಪುನರಾರಂಭಿಸು</translation> <translation id="2136372518715274136">ಹೊಸ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ</translation> <translation id="2136476978468204130">ನೀವು ನಮೂದಿಸಿದ ಪಾಸ್ಫ್ರೇಸ್ ತಪ್ಪಾಗಿದೆ</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.}=1{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, 1 ಅನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}one{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ಗಳನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}other{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ಗಳನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.}=1{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, 1 ವಿನಾಯಿತಿಯಿದೆ}one{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಯಿದೆ}other{ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಗಳಿವೆ}}</translation> <translation id="2138398485845393913">"<ph name="DEVICE_NAME" />" ಗೆ ಸಂಪರ್ಕವು ಇನ್ನೂ ಪ್ರಗತಿಯಲ್ಲಿದೆ</translation> <translation id="2139545522194199494"><ph name="NETWORK_COUNT" /> ರಲ್ಲಿ <ph name="NETWORK_INDEX" /> ನೆಟ್ವರ್ಕ್, <ph name="NETWORK_NAME" />, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />%, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ, ಕನೆಕ್ಟ್</translation> <translation id="2139919072249842737">ಸೆಟಪ್ ಬಟನ್</translation> @@ -1313,6 +1315,7 @@ <translation id="2725200716980197196">ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕತೆಯನ್ನು ಮರುಸ್ಥಾಪಿಲಾಗಿದೆ</translation> <translation id="2727633948226935816">ಮತ್ತೆ ನನಗೆ ಜ್ಞಾಪಿಸಬೇಡ</translation> <translation id="2727712005121231835">ವಾಸ್ತವಿಕ ಗಾತ್ರ</translation> +<translation id="2729314457178420145">ನಿಮ್ಮನ್ನು Google.com ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡಬಹುದಾದ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು (<ph name="URL" />) ಸಹ ತೆರವುಗೊಳಿಸಿ. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux ಆ್ಯಪ್ಗಳು ಮತ್ತು ಫೈಲ್ಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> <translation id="273093730430620027">ಈ ಪುಟವು ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸುತ್ತಿದೆ.</translation> <translation id="2731392572903530958">ಮು&ಚ್ಚಿದ ವಿಂಡೋವನ್ನು ಮತ್ತೆ ತೆರೆ</translation> @@ -2164,6 +2167,7 @@ <translation id="3838486795898716504">ಇನ್ನಷ್ಟು <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">ಕುಕೀಗಳು ಮತ್ತು ಇತರ ಸೈಟ್ ಹಾಗೂ ಪ್ಲಗಿನ್ ಡೇಟಾ</translation> <translation id="383891835335927981">ಯಾವುದೇ ಸೈಟ್ಗಳನ್ನು ಝೂಮ್ ಇನ್ ಅಥವಾ ಝೂಮ್ ಔಟ್ ಮಾಡಲಾಗಿಲ್ಲ</translation> +<translation id="3839509547554145593">ಮೌಸ್ ಸ್ಕ್ರಾಲ್ ವೇಗವರ್ಧಕವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="3839516600093027468"><ph name="HOST" /> ಕ್ಲಿಪ್ಬೋರ್ಡ್ ನೋಡುವುದನ್ನು ಯಾವಾಗಲೂ ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="3841964634449506551">ಪಾಸ್ವರ್ಡ್ ಅಮಾನ್ಯವಾಗಿದೆ</translation> <translation id="3842552989725514455">Serif ಫಾಂಟ್</translation> @@ -2629,7 +2633,7 @@ <translation id="450099669180426158">ಆಶ್ಚರ್ಯಕರ ಚಿಹ್ನೆಯ ಐಕಾನ್</translation> <translation id="4501530680793980440">ತೆಗೆದುಹಾಕುವಿಕೆಯನ್ನು ದೃಢೀಕರಿಸಿ</translation> <translation id="4502423230170890588">ಈ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕಿ</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ}=1{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, 1 ಅನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}one{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, {COUNT} ಗಳನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}other{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, {COUNT} ಗಳನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ}=1{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, 1 ವಿನಾಯಿತಿಯಿದೆ}one{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಗಳಿವೆ}other{ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ, {COUNT} ವಿನಾಯಿತಿಗಳಿವೆ}}</translation> <translation id="4504940961672722399">ಈ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡುವುದರ ಮೂಲಕ ಅಥವಾ <ph name="EXTENSION_SHORTCUT" /> ಒತ್ತುವುದರ ಮೂಲಕ ಈ ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸಿ.</translation> <translation id="4508051413094283164">ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ</translation> <translation id="4508265954913339219">ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ವಿಫಲವಾಗಿದೆ</translation> @@ -2775,6 +2779,7 @@ <translation id="4699172675775169585">ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ಚಿತ್ರಗಳು ಮತ್ತು ಫೈಲ್ಗಳು</translation> <translation id="4699357559218762027">(ಆಟೋ-ಲಾಂಚ್ ಮಾಡಲಾಗಿದೆ)</translation> <translation id="470074695271471509">ಪೂರ್ಣಗೊಳಿಸಲು ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation> +<translation id="4701025263201366865">ಪೋಷಕರ ಸೈನ್ ಇನ್</translation> <translation id="4707302005824653064">ಬಳಕೆ ಮತ್ತು ಇತಿಹಾಸವನ್ನು chrome.com ನಲ್ಲಿ ನಿರ್ವಾಹಕರು (<ph name="CUSTODIAN_EMAIL" />) ಪರಿಶೀಲಿಸಬಹುದು.</translation> <translation id="4707579418881001319">L2TP/IPSec + ಬಳಕೆದಾರರ ಪ್ರಮಾಣಪತ್ರ</translation> <translation id="4708794300267213770">ನಿದ್ರಾವಸ್ಥೆಯಿಂದ ಹೊರಬರುವಾಗ ಲಾಕ್ ಪರದೆ ತೋರಿಸು</translation> @@ -3083,6 +3088,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ಹುಡುಕಾಟ</translation> <translation id="5139823398361067371">ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಗಾಗಿ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮಗೆ ಪಿನ್ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ಮರುಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.</translation> <translation id="5139955368427980650">&ತೆರೆ</translation> +<translation id="5142793792982256885">ಟಚ್ಪ್ಯಾಡ್ ಸ್ಕ್ರಾಲ್ ವೇಗ</translation> <translation id="5142961317498132443">ಪ್ರಮಾಣೀಕರಣ</translation> <translation id="5143374789336132547">ನೀವು ಹೋಮ್ನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು "<ph name="EXTENSION_NAME" />" ವಿಸ್ತರಣೆಯು ಬದಲಾಯಿಸಿದೆ.</translation> <translation id="5143712164865402236">ಪೂರ್ಣ ಪರದೆಯನ್ನು ನಮೂದಿಸಿ</translation> @@ -3646,6 +3652,7 @@ <translation id="5901630391730855834">ಹಳದಿ</translation> <translation id="5906655207909574370">ಬಹುಪಾಲು ನವೀಕೃತವಾಗಿದೆ! ಅಪ್ಡೇಟ್ ಮಾಡುವುದನ್ನು ಮುಗಿಸಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation> <translation id="5906732635754427568">ಈ ಅಪ್ಲಿಕೇಶನ್ ಜೊತೆಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.</translation> +<translation id="5908695239556627796">ಮೌಸ್ ಸ್ಕ್ರಾಲ್ ವೇಗ</translation> <translation id="5908769186679515905">ಫ್ಲ್ಯಾಷ್ ರನ್ ಮಾಡುವಿಕೆಯಿಂದ ಸೈಟ್ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="5910363049092958439">ಇದರಂತೆ ಇಮೇಜ್ ಉ&ಳಿಸಿ...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ಸಾಧನ ಆಫ್ಲೈನ್ನಲ್ಲಿದೆ</translation> @@ -4035,7 +4042,7 @@ <translation id="6414888972213066896">ಈ ಸೈಟ್ಗೆ ಭೇಟಿ ನೀಡುವುದು ಸರಿಯೇ ಎಂದು ನೀವು ನಿಮ್ಮ ಪೋಷಕರನ್ನು ಕೇಳಿರುವಿರಿ</translation> <translation id="6415900369006735853">ನಿಮ್ಮ ಫೋನ್ನ ಮೂಲಕ ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಗೊಳಿಸಿ</translation> <translation id="6416743254476733475">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಅನುಮತಿಸಿ ಅಥವಾ ನಿರ್ಬಂಧಿಸಿ.</translation> -<translation id="6417265370957905582">Google ಸಹಾಯಕ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> ನ ಹಿಂದೆ ಸ್ಥಾಪಿಸಿದ ಆವೃತ್ತಿಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="6418481728190846787">ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಪ್ರವೇಶವನ್ನು ಶಾಶ್ವತವಾಗಿ ತೆಗೆಯಿರಿ</translation> <translation id="6418511932144861495">ಮಹತ್ವದ ಅಪ್ಡೇಟ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ</translation> @@ -4739,7 +4746,7 @@ <translation id="7371006317849674875">ಪ್ರಾರಂಭ ಸಮಯ</translation> <translation id="7371490947952970241">ಈ ಸಾಧನದಲ್ಲಿ ಮುಖ್ಯ ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆಫ್ ಮಾಡುವ ಮೂಲಕ ನೀವು ಸ್ಥಳವನ್ನು ಆಫ್ ಮಾಡಬಹುದು. ನೀವು ಸ್ಥಳ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ, ಸ್ಥಳಕ್ಕಾಗಿ ವೈ-ಫೈ, ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ಗಳು ಮತ್ತು ಸೆನ್ಸರ್ಗಳ ಬಳಕೆಯನ್ನು ಸಹ ಆಫ್ ಮಾಡಬಹುದು.</translation> <translation id="7375053625150546623">EAP</translation> -<translation id="7375235221357833624">{0,plural, =1{ಒಂದು ಘಂಟೆಯ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}one{# ಘಂಟೆಗಳ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}other{# ಘಂಟೆಗಳ ಒಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}}</translation> +<translation id="7375235221357833624">{0,plural, =1{ಒಂದು ಗಂಟೆಯೊಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}one{# ಗಂಟೆಗಳೊಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}other{# ಗಂಟೆಗಳೊಳಗೆ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ}}</translation> <translation id="7376553024552204454">ಮೌಸ್ ಕರ್ಸರ್ ಅನ್ನು ಸರಿಸುವಾಗ ಹೈಲೈಟ್ ಮಾಡಿ</translation> <translation id="7377451353532943397">ಸೆನ್ಸರ್ ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation> <translation id="73786666777299047">Chrome ವೆಬ್ ಸ್ಟೋರ್ ತೆರೆಯಿರಿ</translation> @@ -4788,7 +4795,7 @@ <translation id="7441830548568730290">ಇತರ ಬಳಕೆದಾರರು</translation> <translation id="7442465037756169001">ನಿಮ್ಮ Hangouts Meet hardware ಸೆಟಪ್ಗೆ ಎಲ್ಲ ರೀತಿಯಲ್ಲಿಯೂ ಸಿದ್ಧವಾಗಿದೆ.</translation> <translation id="744341768939279100">ಹೊಸ ಪ್ರೊಫೈಲ್ ರಚಿಸಿ</translation> -<translation id="744366959743242014">ಡೇಟಾ ಲೋಡ್ ಮಾಡವುದು, ಕೆಲವು ಸೆಕೆಂಡ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.</translation> +<translation id="744366959743242014">ಡೇಟಾ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ, ಇದು ಕೆಲವು ಸೆಕೆಂಡ್ಗಳ ಕಾಲಾವಕಾಶವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.</translation> <translation id="7443806024147773267">ನಿಮ್ಮ Google ಖಾತೆಗೆ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳಿಗೆ ಪ್ರವೇಶ ಪಡೆಯಿರಿ</translation> <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="7448430327655618736">ಆ್ಯಪ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ</translation> @@ -5093,6 +5100,7 @@ <ph name="BEGIN_BOLD" />ಗಮನಿಸಿ:<ph name="END_BOLD" /> ಪ್ರಕ್ರಿಯೆಯು ನಡೆಯುವಾಗ ಸಿಸ್ಟಂ ರೀಬೂಟ್ ಆಗುತ್ತದೆ.</translation> <translation id="7828731929332799387">ಇದು ಮೂರನೇ-ವ್ಯಕ್ತಿ ಸಂದರ್ಭಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಎಲ್ಲಾ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ. ನೀವು ಮುಂದುವರಿಯಲು ಬಯಸುತ್ತೀರಾ?</translation> <translation id="7829298379596169484">ಆಡಿಯೊ ಇನ್ಪುಟ್ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ</translation> +<translation id="7829877209233347340">ಶಾಲಾ ಖಾತೆಯನ್ನು ಸೇರಿಸುವುದಕ್ಕೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅನುಮತಿ ನೀಡುವುದಕ್ಕೆ ಪೋಷಕರಿಗೆ ಹೇಳಿ</translation> <translation id="7830594666202422257">Linux ಗೆ ಸಂಪರ್ಕಿಸಿ</translation> <translation id="7831491651892296503">ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರ್ ಮಾಡುವಲ್ಲಿ ದೋಷ</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5846,6 +5854,7 @@ <translation id="8808686172382650546">ಬೆಕ್ಕು</translation> <translation id="8808744862003883508">Chrome ನಲ್ಲಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿರುವ ಎಲ್ಲಾ ವಿಸ್ತರಣೆಗಳನ್ನು ಈ ಪುಟದಲ್ಲಿ ನೀವು ನೋಡಬಹುದು.</translation> <translation id="8809147117840417135">ತಿಳಿ ಕೆನ್ನೀಲಿ</translation> +<translation id="8812593354822910461">ನಿಮ್ಮನ್ನು <ph name="DOMAIN" /> ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡಬಹುದಾದ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು (<ph name="URL" />) ಸಹ ತೆರವುಗೊಳಿಸಿ. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> <translation id="8813811964357448561">ಕಾಗದದ ಹಾಳೆ</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" ಅನ್ನು ಅನುಮೋದಿಸಲು ಪೋಷಕರ ಬಳಿ ವಿನಂತಿಸಿ</translation> @@ -6136,6 +6145,7 @@ </translation> <translation id="9203904171912129171">ಸಾಧನವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="9203962528777363226">ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರು ಸೇರಿಸುವ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> +<translation id="9209689095351280025">ವೆಬ್ನಾದ್ಯಂತ ನಿಮ್ಮನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಕುಕೀಗಳನ್ನು ವೆಬ್ಸೈಟ್ಗಳು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="9211177926627870898">ಅಪ್ಡೇಟ್ ಅಗತ್ಯವಿದೆ</translation> <translation id="9214520840402538427">ಓಹ್! ಇನ್ಸ್ಟಾಲೇಶನ್-ಟೈಮ್-ಆ್ಯಟ್ರಿಬ್ಯೂಷನ್ ಅವಧಿ ಮುಗಿದಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಬೆಂಬಲ ಪ್ರತಿನಿಧಿಯನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 4a87b33d..6d4f96fc7 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">업로드</translation> <translation id="1244265436519979884">현재 Linux 복원이 진행 중입니다.</translation> <translation id="1244303850296295656">확장 프로그램 오류</translation> +<translation id="1246158006305844142">앱 및 설정은 Google 계정으로 로그인한 모든 Chrome OS 기기와 동기화됩니다. 브라우저 동기화 옵션을 보려면 <ph name="LINK_BEGIN" />Chrome 설정<ph name="LINK_END" />으로 이동하세요.</translation> <translation id="1246905108078336582">클립보드에서 추천 항목을 삭제하시겠습니까?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" />이(가) 지원 중단되어 차단되었습니다.</translation> <translation id="1251366534849411931">열림 중괄호 누락: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">아니요</translation> <translation id="1525740877599838384">위치 파악에 Wi-Fi만 사용</translation> <translation id="152629053603783244">Linux 다시 시작</translation> +<translation id="1526335046150927198">터치패드 스크롤 가속 사용</translation> <translation id="1526560967942511387">제목 없는 문서</translation> <translation id="1529891865407786369">전원</translation> <translation id="1530838837447122178">마우스 및 터치패드 기기 설정 열기</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">이 확장 프로그램은 특별한 권한이 필요하지 않습니다.</translation> <translation id="1616298854599875024">확장 프로그램 '<ph name="IMPORT_NAME" />'은(는) 공유 모듈이 아니므로 가져올 수 없습니다</translation> <translation id="1618268899808219593">고객센터(H)</translation> +<translation id="1620307519959413822">잘못된 비밀번호입니다. 다시 시도하거나 '비밀번호 찾기'를 클릭하여 재설정하세요.</translation> <translation id="1620510694547887537">카메라</translation> <translation id="1623132449929929218">현재 이미지를 사용할 수 없습니다. 배경화면 컬렉션을 확인하려면 인터넷에 다시 연결하세요.</translation> <translation id="1627276047960621195">파일 설명자</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">하드웨어 버전</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">전체화면 열기</translation> +<translation id="1892341345406963517"><ph name="PARENT_NAME" />님, 안녕하세요</translation> <translation id="189358972401248634">다른 언어</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> 남음</translation> <translation id="1895658205118569222">종료</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">네트워크 연결 복원</translation> <translation id="2727633948226935816">다시 표시하지 않음</translation> <translation id="2727712005121231835">실제 크기</translation> +<translation id="2729314457178420145">인터넷 사용 기록(<ph name="URL" />)도 삭제합니다. 이렇게 하면 Google.com에서 로그아웃될 수 있습니다. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux 앱 및 파일 백업 중</translation> <translation id="273093730430620027">카메라에 액세스하는 페이지입니다.</translation> <translation id="2731392572903530958">닫은 창 다시 열기(&E)</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> 더보기</translation> <translation id="3838543471119263078">쿠키, 기타 사이트 및 플러그인 데이터</translation> <translation id="383891835335927981">확대 또는 축소된 사이트가 없음</translation> +<translation id="3839509547554145593">마우스 스크롤 가속 사용</translation> <translation id="3839516600093027468"><ph name="HOST" />에서 클립보드를 볼 수 없도록 항상 차단</translation> <translation id="3841964634449506551">잘못된 비밀번호입니다.</translation> <translation id="3842552989725514455">Serif</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">캐시된 이미지 및 파일</translation> <translation id="4699357559218762027">(자동 실행)</translation> <translation id="470074695271471509">로그아웃하여 완료하시겠습니까?</translation> +<translation id="4701025263201366865">부모 로그인</translation> <translation id="4707302005824653064">chrome.com 페이지에서 관리자(<ph name="CUSTODIAN_EMAIL" />)가 이용 및 방문 기록을 조회할 수 있습니다.</translation> <translation id="4707579418881001319">L2TP/IPSec + 사용자 인증서</translation> <translation id="4708794300267213770">절전 모드 해제 시 잠금 화면 표시</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> 검색</translation> <translation id="5139823398361067371">보안 키의 PIN을 입력하세요. PIN을 모른다면 보안 키를 재설정해야 합니다.</translation> <translation id="5139955368427980650">열기(&O)</translation> +<translation id="5142793792982256885">터치패드 스크롤 속도</translation> <translation id="5142961317498132443">인증</translation> <translation id="5143374789336132547">홈 버튼을 클릭하면 표시되는 페이지가 '<ph name="EXTENSION_NAME" />' 확장 프로그램으로 인해 변경되었습니다.</translation> <translation id="5143712164865402236">전체화면 열기</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">프록시 설정 표시</translation> <translation id="5215502535566372932">국가 선택</translation> <translation id="521582610500777512">사진이 삭제되었습니다.</translation> +<translation id="5222403284441421673">안전하지 않은 다운로드가 차단됨</translation> <translation id="5222676887888702881">로그아웃</translation> <translation id="52232769093306234">압축에 실패했습니다.</translation> <translation id="5225324770654022472">앱 단축키 표시</translation> @@ -3372,7 +3381,7 @@ <translation id="5539221284352502426">입력한 비밀번호가 서버에 의해 거부되었습니다. 가능한 이유는 다음과 같습니다. 비밀번호가 너무 짧습니다. 비밀번호에 숫자 또는 기호가 포함되어야 합니다. 이전 비밀번호와 달라야 합니다.</translation> <translation id="5541694225089836610">관리자가 사용 중지한 작업입니다.</translation> <translation id="5542132724887566711">프로필</translation> -<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" />에서 즉시 기기 업데이트를 요청합니다.</translation> +<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" />에서 즉시 기기를 업데이트할 것을 요청합니다.</translation> <translation id="5542750926112347543"><ph name="DOMAIN" />의 쿠키를 차단함</translation> <translation id="5542949973455282971"><ph name="CARRIER_NAME" />에 연결 중</translation> <translation id="5543983818738093899">상태 확인 중...</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">커뮤니케이션</translation> <translation id="5734697361979786483">파일 공유 추가</translation> <translation id="5736796278325406685">올바른 사용자 이름을 입력하세요.</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" />님이 학교 계정을 추가할 수 있도록 로그인하세요.</translation> <translation id="5739235828260127894">확인을 기다리는 중입니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation> <translation id="5739458112391494395">아주 크게</translation> <translation id="574209121243317957">높낮이</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">노란색</translation> <translation id="5906655207909574370">업데이트가 거의 완료되었습니다. 업데이트를 완료하려면 기기를 다시 시작하세요.</translation> <translation id="5906732635754427568">이 앱과 관련된 데이터가 이 기기에서 삭제됩니다.</translation> +<translation id="5908695239556627796">마우스 스크롤 속도</translation> <translation id="5908769186679515905">사이트에서 Flash를 실행하지 못하도록 차단</translation> <translation id="5910363049092958439">이미지를 다른 이름으로 저장(&V)...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> 기기가 오프라인 상태임</translation> @@ -3970,7 +3981,7 @@ <translation id="6325191661371220117">자동 실행 사용 안함</translation> <translation id="6326175484149238433">Chrome에서 삭제</translation> <translation id="6326855256003666642">프로그램 사용자 수</translation> -<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" />에서 기한 전에 기기 업데이트를 요청합니다.</translation> +<translation id="632707535499064463"><ph name="ORGANIZATION_NAME" />에서 기한 전에 기기를 업데이트할 것을 요청합니다.</translation> <translation id="6327785803543103246">웹 프록시 자동검색</translation> <translation id="6333064448949140209">디버깅을 위해 파일이 Google로 전송됩니다.</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" />의 새 프로필을 만드세요.</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />참고:<ph name="END_BOLD" /> 시스템이 절차 진행 중에 재부팅됩니다.</translation> <translation id="7828731929332799387">타사와 관련하여 제공되는 모든 쿠키 및 사이트 데이터가 삭제됩니다. 계속하시겠습니까?</translation> <translation id="7829298379596169484">오디오 입력 장치에 액세스 중</translation> +<translation id="7829877209233347340">부모님에게 로그인하여 학교 계정을 추가할 권한을 부여해 달라고 요청하세요.</translation> <translation id="7830594666202422257">Linux에 연결</translation> <translation id="7831491651892296503">네트워크를 설정하는 중에 오류가 발생했습니다</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5529,6 +5541,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> 네트워크, 연결 중</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">우선 확인(권장)</translation> +<translation id="8417548266957501132">부모 비밀번호</translation> <translation id="8417573335434189196">위험한 웹사이트, 다운로드 항목 또는 확장 프로그램으로부터 사용자를 보호하지 않습니다. 이 설정은 사용하지 않는 것이 좋습니다.</translation> <translation id="8418445294933751433">탭으로 표시(&S)</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />'에 대한 검색결과</translation> @@ -5843,6 +5856,7 @@ <translation id="8808686172382650546">고양이</translation> <translation id="8808744862003883508">이 페이지에서 Chrome에 설치된 모든 확장 프로그램을 볼 수 있습니다.</translation> <translation id="8809147117840417135">연한 청록색</translation> +<translation id="8812593354822910461">인터넷 사용 기록(<ph name="URL" />)도 삭제합니다. 이렇게 하면 <ph name="DOMAIN" />에서 로그아웃됩니다. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />에 로그인할 수 없음</translation> <translation id="8813811964357448561">장</translation> <translation id="8813872945700551674">부모님에게 ‘<ph name="EXTENSION_NAME" />’ 승인을 요청</translation> @@ -6132,6 +6146,7 @@ <translation id="9203398526606335860">프로파일링 사용(&P)</translation> <translation id="9203904171912129171">기기를 선택하세요.</translation> <translation id="9203962528777363226">이 기기의 관리자가 새로운 사용자를 추가하지 못하도록 설정함</translation> +<translation id="9209689095351280025">사이트가 웹 전반에서 사용자를 추적하는 쿠키를 사용할 수 없습니다.</translation> <translation id="9211177926627870898">업데이트 필요</translation> <translation id="9214520840402538427">설치 시간 속성의 시작 시간이 초과되었습니다. 지원 담당자에게 문의하시기 바랍니다.</translation> <translation id="9214695392875603905">컵케이크</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index cd4d4fb1..001971e 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Жүктөп берүү</translation> <translation id="1244265436519979884">Учурда Linux калыбына келтирилүүдө</translation> <translation id="1244303850296295656">Кеңейтүү катасы</translation> +<translation id="1246158006305844142">Колдонмолор менен жөндөөлөр Google аккаунтуңуз менен кирип турган бардык Chrome OS түзмөктөрүндө шайкештирилет. Серепчини шайкештирүү параметрлерин көрүү үчүн <ph name="LINK_BEGIN" />Chrome жөндөөлөрүнө<ph name="LINK_END" /> өтүңүз.</translation> <translation id="1246905108078336582">Сунуш алмашуу буферинен өчүрүлсүнбү?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> жоюлгандыктан, бөгөттөлдү</translation> <translation id="1251366534849411931">Ачуучу ийри кашаа жетишпейт: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Жок, рахмат</translation> <translation id="1525740877599838384">Жайгашкан жер Wi-Fi аркылуу гана аныкталсын</translation> <translation id="152629053603783244">Linux'ту өчүрүп күйгүзүү</translation> +<translation id="1526335046150927198">Сенсордук такта ылдамдаткычын иштетүү</translation> <translation id="1526560967942511387">Аталышы жок документ</translation> <translation id="1529891865407786369">Кубат булагы</translation> <translation id="1530838837447122178">Түзмөктөгү чычкан жана сенсор жөндөөлөрүн ачуу</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Бул кеңейтүү атайын уруксаттарды талап кылбайт.</translation> <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" кеңейтүүсү импорттолбой жатат, анткени ал бөлүшүлгөн модуль эмес</translation> <translation id="1618268899808219593">Ж&ардам борбору</translation> +<translation id="1620307519959413822">Сырсөз туура эмес. Кайталап көрүңүз же "Сырсөздү унутуп койдум" дегенди басыңыз.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Учурда сүрөттөрдү көрүү мүмкүн эмес. Тушкагаздардын жыйнактарын көрүү үчүн Интернетке кайра туташыңыз.</translation> <translation id="1627276047960621195">Файл сүрөттөгүчтөр</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Жабдыкты оңдоо</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Толук экранда ачуу</translation> +<translation id="1892341345406963517">Салам <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Башка тилдер</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> калды</translation> <translation id="1895658205118569222">Ишти бүтүрүү</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Тармактын туташуу жөндөмдүүлүгү калыбына келтирилди</translation> <translation id="2727633948226935816">Мага экинчи эскертилбесин</translation> <translation id="2727712005121231835">Чыныгы өлчөм</translation> +<translation id="2729314457178420145">Google.com сайтынан чыгарып сала турган серептөө маалыматы да (<ph name="URL" />) тазалансын. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux колдонмолору менен файлдарынын камдык көчүрмөлөрү сакталууда</translation> <translation id="273093730430620027">Бул баракча камераңызды колдонуп жатат.</translation> <translation id="2731392572903530958">Жабылган терезени кай&ра ачуу</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Дагы <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Кукилер жана башка сайт, плагин дайындары</translation> <translation id="383891835335927981">Эч кандай сайттар чоңойтуп/кичирейтилген жок</translation> +<translation id="3839509547554145593">Чычканды ылдамдаткычты иштетүү</translation> <translation id="3839516600093027468"><ph name="HOST" /> башкы түйүнүнө алмашуу буфери эч качан көрсөтүлбөсүн</translation> <translation id="3841964634449506551">Сырсөз туура эмес</translation> <translation id="3842552989725514455">Serif ариби</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Кештелген сүрөттөр жана файлдар</translation> <translation id="4699357559218762027">(авто-ишке киргизилди)</translation> <translation id="470074695271471509">Жөндөөнү бүтүрүү үчүн аккаунттан чыгасызбы?</translation> +<translation id="4701025263201366865">Ата-эненин аккаунтуна кирүү</translation> <translation id="4707302005824653064">Башкаруучу колдонуу статистикасын жана таржымалды (<ph name="CUSTODIAN_EMAIL" />) chrome.com дарегинен карап чыга алат.</translation> <translation id="4707579418881001319">L2TP/IPsec + колдонуучунун тастыктамасы</translation> <translation id="4708794300267213770">Уйкудан ойгонгондо, кулпуланган экранды көрсөтүү</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Издөө</translation> <translation id="5139823398361067371">Коопсуздук ачкычыңыздын PIN кодун киргизиңиз. Эгер PIN кодду билбесеңиз, коопсуздук ачкычын баштапкы абалга келтириңиз.</translation> <translation id="5139955368427980650">&Ачуу</translation> +<translation id="5142793792982256885">Сенсордук такта ылдамдаткычы</translation> <translation id="5142961317498132443">Аныктыгын текшерүү</translation> <translation id="5143374789336132547">"<ph name="EXTENSION_NAME" />" кеңейтүүсү Башкы бет баскычы чыкылдатылганда көрүнө турган бетти өзгөрттү.</translation> <translation id="5143712164865402236">Толук экранга кирүү</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Прокси жөндөөлөрүн көрсөтүү</translation> <translation id="5215502535566372932">Өлкөнү тандоо</translation> <translation id="521582610500777512">Сүрөт жарактан чыгарылды</translation> +<translation id="5222403284441421673">Кооптуу жүктөп алуу бөгөттөлдү</translation> <translation id="5222676887888702881">Чыгуу</translation> <translation id="52232769093306234">Таңгакталбай калды.</translation> <translation id="5225324770654022472">Колдонмолордун кыска жолун көрсөтүү</translation> @@ -3493,7 +3502,7 @@ <translation id="5691511426247308406">Үй-бүлөлүк</translation> <translation id="5691772641933328258">Манжа изи таанылган жок</translation> <translation id="5692183275898619210">Басылып чыгарылды</translation> -<translation id="5692875591060376599">Тандалган файл белгисиз жана ал кооптуу болушу мүмкүн. Google'дун Өркүндөтүлгөн коргоо программасына текшерүү үчүн жөнөтүлсүнбү?</translation> +<translation id="5692875591060376599">Тандалган файл белгисиз жана кооптуу болушу мүмкүн. Google'дун Өркүндөтүлгөн коргоо программасына текшерүү үчүн жөнөтүлсүнбү?</translation> <translation id="569425414730375234">Учурдагы жашыруун режимдеги сеанс: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">"<ph name="EXTENSION_NAME" />" адепсиздиги тууралуу кабарлоо</translation> <translation id="5696679855467848181">Учурда колдонулуп жаткан PPD файлы: <ph name="PPD_NAME" /></translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Байланыштар</translation> <translation id="5734697361979786483">Файлды бөлүшүү жөндөөсүн кошуу</translation> <translation id="5736796278325406685">Жарактуу колдонуучунун атын киргизиңиз</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> аттуу балаңызга мектеп аккаунтун кошууга жардам берүү үчүн аккаунтуңузга кириңиз.</translation> <translation id="5739235828260127894">Ырастоо күтүлүүдө. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Өтө чоң</translation> <translation id="574209121243317957">Тон</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Сары</translation> <translation id="5906655207909574370">Жаңырганы калды! Жаңыртууну аягына чыгаруу үчүн түзмөгүңүздү өчүрүп күйгүзүңүз.</translation> <translation id="5906732635754427568">Бул колдонмого байланыштуу дайындар бул түзмөктөн өчүрүлөт.</translation> +<translation id="5908695239556627796">Чычканды ылдамдаткыч</translation> <translation id="5908769186679515905">Сайттарда Flash'ти иштетүү бөгөттөлсүн</translation> <translation id="5910363049092958439">Сүрөттү төмөнкүдөй сак&тоо…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> оффлайн режиминде</translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Эскертүү:<ph name="END_BOLD" /> Мүчүлүштүктөрдү оңдоо учурунда тутум кайра өчүрүлүп-күйгүзүлөт.</translation> <translation id="7828731929332799387">Бул аракет үчүнчү тараптын булактарындагы бардык cookie файлдарын жана сайттын дайындарын өчүрөт. Улантасызбы?</translation> <translation id="7829298379596169484">Аудио киришти колдонууда</translation> +<translation id="7829877209233347340">Мектеп аккунтун кошууга уруксат берүү үчүн ата-энеңден аккаунтуна кирүүнү суран</translation> <translation id="7830594666202422257">Linux'ка туташтыруу</translation> <translation id="7831491651892296503">Тармакты конфигурациялоо учурунда ката кетти</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5530,6 +5542,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> тармагы, туташууда</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Адегенде суралсын (сунушталат)</translation> +<translation id="8417548266957501132">Ата-эненин сырсөзү</translation> <translation id="8417573335434189196">Кооптуу вебсайттардан, жүктөлүп алынган файлдардан жана кеңейтүүлөрдөн коргобойт. Chrome бул жөндөөнү сунуштабайт.</translation> <translation id="8418445294933751433">&Өтмөк катарында көрсөтүү</translation> <translation id="8419098111404128271">"<ph name="SEARCH_TEXT" />" боюнча табылган натыйжалар</translation> @@ -5844,6 +5857,7 @@ <translation id="8808686172382650546">Мышык</translation> <translation id="8808744862003883508">Бул баракта Chrome'до орнотулган кеңейтүүлөрдүн баарын көрөсүз.</translation> <translation id="8809147117840417135">Мала көгүш жашыл</translation> +<translation id="8812593354822910461"><ph name="DOMAIN" /> сайтынан чыгарып сала турган серептөө маалыматы да (<ph name="URL" />) тазалансын. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> катары кирүү мүмкүн эмес</translation> <translation id="8813811964357448561">кагаз барактары</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" кеңейтүүсүн орнотууга ата-энең уруксат бериши керек</translation> @@ -6133,6 +6147,7 @@ <translation id="9203398526606335860">&Профилдөө иштетилди</translation> <translation id="9203904171912129171">Түзмөк тандоо</translation> <translation id="9203962528777363226">Бул түзмөктүн администратору колдонуучуларды кошуу мүмкүнчүлүгүн өчүрүп койгон.</translation> +<translation id="9209689095351280025">Сайттар Интернеттеги аракеттериңизге көз салган cookie файлдарын колдонушпайт</translation> <translation id="9211177926627870898">Жаңыртуу талап кылынат</translation> <translation id="9214520840402538427">Ой! Орнотуу убакыт аттрибуттарынын демилгеленишин күтүү убакыты аяктады. Кардарларды тейлеген өкүлүңүзгө кайрылыңыз.</translation> <translation id="9214695392875603905">Кекс</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 8430fa5..afec3a9 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -459,6 +459,7 @@ <translation id="1616206807336925449">ສ່ວນຂະຫຍາຍນີ້ບໍ່ຕ້ອງການໃຫ້ມີການອະນຸຍາດພິເສດອັນໃດ.</translation> <translation id="1616298854599875024">ບໍ່ສາມາດນຳເຂົ້າສ່ວນຂະຫຍາຍ "<ph name="IMPORT_NAME" />" ໄດ້ ເພາະວ່າມັນບໍ່ແມ່ນໂມດູນທີ່ໃຊ້ຮ່ວມກັນ</translation> <translation id="1618268899808219593">ສູນຊ່ວຍເຫຼືອ</translation> +<translation id="1620307519959413822">ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງອີກຄັ້ງ ຫຼື ຄລິກລືມລະຫັດຜ່ານເພື່ອຣີເຊັດມັນ.</translation> <translation id="1620510694547887537">ກ້ອງຖ່າຍຮູບ</translation> <translation id="1623132449929929218">ຮູບພາບບໍ່ສາມາດໃຊ້ໄດ້ໃນຕອນນີ້. ກະລຸນາເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຄືນໃໝ່ເພື່ອເບິ່ງຄໍເລັກຊັນຮູບພື້ນຫຼັງ.</translation> <translation id="1627276047960621195">ຕົວອະທິບາຍໄຟລ໌</translation> @@ -677,6 +678,7 @@ <translation id="1887850431809612466">ການປັບປຸງແກ້ໄຂຮາດແວ</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">ເປີດເຕັມໜ້າຈໍ</translation> +<translation id="1892341345406963517">ສະບາຍດີ <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">ພາສາອື່ນໆ</translation> <translation id="1895252664692693738">ຍັງເຫຼືອ <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">ມອດ</translation> @@ -2561,7 +2563,7 @@ <translation id="4400963414856942668">ທ່ານສາມາດຄລິກໃສ່ຮູບດາວເພື່ອບຸກມາກແຖບໃດໜຶ່ງໄວ້</translation> <translation id="4403775189117163360">ເລືອກໂຟນເດີອື່ນ</translation> <translation id="4404136731284211429">ສະແກນອີກ</translation> -<translation id="4404843640767531781">ພໍ່ແມ່ຂອງທ່າບລັອກ <ph name="APP_NAME" /> ໄວ້ ຂໍອະນຸຍາດນຳພໍ່ແມ່ຂອງທ່ານເພື່ອໃຊ້ແອັບນີ້.</translation> +<translation id="4404843640767531781">ພໍ່ແມ່ຂອງທ່ານບລັອກ <ph name="APP_NAME" /> ໄວ້ ຂໍອະນຸຍາດນຳພໍ່ແມ່ຂອງທ່ານເພື່ອໃຊ້ແອັບນີ້.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">ຊ່ວຍເຫຼືອ</translation> <translation id="4409697491990005945">ຂອບເຈ້ຍ</translation> @@ -3131,6 +3133,7 @@ <translation id="5213891612754844763">ສະແດງການຕັ້ງຄ່າພຣັອກຊີ</translation> <translation id="5215502535566372932">ເລືອກປະເທດ</translation> <translation id="521582610500777512">ຮູບຖືກກໍາຈັດຖິ້ມແລ້ວ</translation> +<translation id="5222403284441421673">ບລັອກການດາວໂຫຼດທີ່ບໍ່ປອດໄພໄວ້ແລ້ວ</translation> <translation id="5222676887888702881">ອອກຈາກລະບົບ</translation> <translation id="52232769093306234">ການເກັບຮວມກັນບໍ່ສຳເລັດ.</translation> <translation id="5225324770654022472">ສະແດງທາງລັດແອັບ</translation> @@ -3529,6 +3532,7 @@ <translation id="5734362860645681824">ການສື່ສານ</translation> <translation id="5734697361979786483">ເພີ່ມການແບ່ງປັນໄຟລ໌</translation> <translation id="5736796278325406685">ກະລຸນາປ້ອນຊື່ຜູ້ໃຊ້ທີ່ຖືກຕ້ອງ</translation> +<translation id="5739017626473506901">ເຂົ້າສູ່ລະບົບເພື່ອຊ່ວຍ <ph name="USER_NAME" /> ເພີ່ມບັນຊີໂຮງຮຽນ</translation> <translation id="5739235828260127894">ກຳລັງລໍຖ້າການຢັ້ງຢືນ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation> <translation id="5739458112391494395">ໃຫຍ່ຫຼາຍ</translation> <translation id="574209121243317957">ລະດັບສຽງ</translation> @@ -5535,6 +5539,7 @@ <translation id="8408068190360279472">ເຄືອຂ່າຍ <ph name="NETWORK_TYPE" />, ກຳລັງເຊື່ອມຕໍ່</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">ຖາມກ່ອນ (ແນະນຳໃຫ້)</translation> +<translation id="8417548266957501132">ລະຫັດຜ່ານຂອງພໍ່ແມ່</translation> <translation id="8417573335434189196">ບໍ່ປົກປ້ອງທ່ານຈາກເວັບໄຊ, ການດາວໂຫຼດ ແລະ ສ່ວນຂະຫຍາຍທີ່ເປັນອັນຕະລາຍ. Chrome ບໍ່ແນະນຳການຕັ້ງຄ່ານີ້.</translation> <translation id="8418445294933751433">ສະແດງແຖບ</translation> <translation id="8419098111404128271">ຜົນການຊອກຫາສຳລັບ '<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 68cfe51..9861435 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Šiam plėtiniui nereikalingi jokie specialūs leidimai.</translation> <translation id="1616298854599875024">Nepavyko importuoti plėtinio „<ph name="IMPORT_NAME" />“, nes tai nėra bendrinamas modulis</translation> <translation id="1618268899808219593">P&agalbos centras</translation> +<translation id="1620307519959413822">Netinkamas slaptažodis. Bandykite dar kartą arba spustelėję „Pamiršau slaptažodį“ nustatykite iš naujo.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Vaizdai šiuo metu nepasiekiami. Prisijunkite prie interneto iš naujo ir peržiūrėkite ekrano fonų kolekcijas.</translation> <translation id="1627276047960621195">Failų deskriptoriai</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Aparatinės įrangos taisymas</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Atidaryti visame ekrane</translation> +<translation id="1892341345406963517">Sveiki, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Kitos kalbos</translation> <translation id="1895252664692693738">Liko <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Išjungimas</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Rodyti tarpinio serverio nustatymus</translation> <translation id="5215502535566372932">Pasirinkite šalį</translation> <translation id="521582610500777512">Nuotrauka buvo atmesta</translation> +<translation id="5222403284441421673">Nesaugus atsisiuntimas užblokuotas</translation> <translation id="5222676887888702881">Atsijungti</translation> <translation id="52232769093306234">Nepavyko supakuoti.</translation> <translation id="5225324770654022472">Rodyti spartųjį programų klavišą</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">Ryšiai</translation> <translation id="5734697361979786483">Pridėti failų bendrinimo įrenginį</translation> <translation id="5736796278325406685">Įveskite tinkamą naudotojo vardą</translation> +<translation id="5739017626473506901">Prisijunkite, kad padėtumėte <ph name="USER_NAME" /> pridėti mokyklos paskyrą</translation> <translation id="5739235828260127894">Laukiama patvirtinimo. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Labai didelis</translation> <translation id="574209121243317957">Tonas</translation> @@ -5540,6 +5544,7 @@ <translation id="8408068190360279472">Tinklas: <ph name="NETWORK_TYPE" />, jungiamasi</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Pirmiausia paklausti (rekomenduojama)</translation> +<translation id="8417548266957501132">Vieno iš tėvų slaptažodis</translation> <translation id="8417573335434189196">Neapsaugo jūsų nuo pavojingų svetainių, atsisiuntimų ar plėtinių. „Chrome“ nerekomenduoja šio nustatymo.</translation> <translation id="8418445294933751433">&Rodyti kaip skirtuką</translation> <translation id="8419098111404128271">Paieškos rezultatai pagal užklausą „<ph name="SEARCH_TEXT" />“</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 9655ab21..23e64eb 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Šim paplašinājumam nav nepieciešamas īpašas atļaujas.</translation> <translation id="1616298854599875024">Nevar importēt paplašinājumu <ph name="IMPORT_NAME" />, jo tas nav kopīgots modulis.</translation> <translation id="1618268899808219593">P&alīdzības centrs</translation> +<translation id="1620307519959413822">Parole nav pareiza. Mēģiniet vēlreiz vai noklikšķiniet uz “Aizmirsu paroli”, lai to atiestatītu.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Šobrīd attēli nav pieejami. Lai skatītu fona tapešu kolekcijas, atkārtoti izveidojiet savienojumu ar internetu.</translation> <translation id="1627276047960621195">Failu deskriptori</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Aparatūras pārskatījums</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Atvērt pilnekrāna režīmu</translation> +<translation id="1892341345406963517">Sveiki, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Citas valodas</translation> <translation id="1895252664692693738">Atlikušais laiks: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Izslēgšana</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Rādīt starpniekservera iestatījumus</translation> <translation id="5215502535566372932">Atlasīt valsti</translation> <translation id="521582610500777512">Fotoattēls tika noraidīts.</translation> +<translation id="5222403284441421673">Tika bloķēta nedroša lejupielāde</translation> <translation id="5222676887888702881">Izrakstīties</translation> <translation id="52232769093306234">Neizdevās izveidot pakotni.</translation> <translation id="5225324770654022472">Rādīt lietotņu saīsnes</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Saziņa</translation> <translation id="5734697361979786483">Pievienot failu kopīgošanu</translation> <translation id="5736796278325406685">Lūdzu, ievadiet derīgu lietotājvārdu.</translation> +<translation id="5739017626473506901">Pierakstieties, lai palīdzētu lietotājam <ph name="USER_NAME" /> pievienot mācību iestādes kontu</translation> <translation id="5739235828260127894">Tiek gaidīta verifikācija. <ph name="LINK_BEGIN" />Uzziniet vairāk<ph name="LINK_END" />.</translation> <translation id="5739458112391494395">Ļoti liels</translation> <translation id="574209121243317957">Tonis</translation> @@ -5538,6 +5542,7 @@ <translation id="8408068190360279472">Tīkls: <ph name="NETWORK_TYPE" />, notiek savienojuma izveide</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Vispirms jautāt (ieteicams)</translation> +<translation id="8417548266957501132">Vecāku parole</translation> <translation id="8417573335434189196">Netiek nodrošināta aizsardzība pret bīstamām vietnēm, lejupielādēm un paplašinājumiem. Pārlūkā Chrome netiek ieteikts šis iestatījums.</translation> <translation id="8418445294933751433">Rādīt kā cilni</translation> <translation id="8419098111404128271">Vaicājuma “<ph name="SEARCH_TEXT" />” meklēšanas rezultāti</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index ec19f92..3b46f19 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Оваа наставка не бара специјални дозволи.</translation> <translation id="1616298854599875024">Екстензијата „<ph name="IMPORT_NAME" />" не може да се увезе бидејќи не е споделен модул</translation> <translation id="1618268899808219593">Центар за п&омош</translation> +<translation id="1620307519959413822">Погрешна лозинка. Обидете се повторно или кликнете на „Ја заборавив лозинката“ за да ја ресетирате.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Сликите не се достапни во моментов. Повторно поврзете се на интернет за да ги видите колекциите со тапети.</translation> <translation id="1627276047960621195">Опишувачи на датотеки</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Ревизија на хардвер</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Отвори на цел екран</translation> +<translation id="1892341345406963517">Здраво <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Други јазици</translation> <translation id="1895252664692693738">Уште <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Исклучување</translation> @@ -2335,7 +2337,7 @@ <translation id="4047726037116394521">Одете на почетната страница</translation> <translation id="4050225813016893843">Метод на проверка</translation> <translation id="4052120076834320548">Ситен</translation> -<translation id="4056908315660577142">Го достигна временското ограничување што твојот родител го поставил за апликацијата на Chrome <ph name="APP_NAME" />. Ќе може да ја користиш <ph name="TIME_LIMIT" /> утре.</translation> +<translation id="4056908315660577142">Го достигна временското ограничување што твојот родител го поставил за апликацијата <ph name="APP_NAME" /> на Chrome. Ќе може да ја користиш <ph name="TIME_LIMIT" /> утре.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> – <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Прикажи во продавница</translation> <translation id="4058647953897694817">Потврди преку Bluetooth</translation> @@ -2563,7 +2565,7 @@ <translation id="4400963414856942668">Може да кликнете на ѕвездата за да обележите картичка</translation> <translation id="4403775189117163360">Одберете друга папка</translation> <translation id="4404136731284211429">Скенирај пак</translation> -<translation id="4404843640767531781">Твојот родител ја блокирал <ph name="APP_NAME" />. Побарај дозвола од него за користење на апликацијава.</translation> +<translation id="4404843640767531781">Твојот родител ја блокирал <ph name="APP_NAME" />. Побарај дозвола од родителот за користење на апликацијава.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> <translation id="4408599188496843485">П&омош</translation> <translation id="4409697491990005945">Маргини</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Покажи ги поставките за прокси</translation> <translation id="5215502535566372932">Изберете држава</translation> <translation id="521582610500777512">Се отфрли фотографијата</translation> +<translation id="5222403284441421673">Блокирано е небезбедно преземање</translation> <translation id="5222676887888702881">Одјави се</translation> <translation id="52232769093306234">Пакувањето не успеа.</translation> <translation id="5225324770654022472">Покажи кратенка за апликации</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Комуникации</translation> <translation id="5734697361979786483">Додајте споделување датотеки</translation> <translation id="5736796278325406685">Внесете важечко корисничко име</translation> +<translation id="5739017626473506901">Најавете се за да му помогнете на корисникот <ph name="USER_NAME" /> да додаде училишна сметка</translation> <translation id="5739235828260127894">Се чека потврда. <ph name="LINK_BEGIN" />Дознајте повеќе<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Многу голем</translation> <translation id="574209121243317957">Висина</translation> @@ -4849,7 +4853,7 @@ <translation id="7513029293694390567">Автоматски најавувајте се на веб-сајтови со складирани акредитиви. Ако е оневозможено, ќе ви се бара потврда пред секое најавување на веб-сајт.</translation> <translation id="7514239104543605883">Копирај на уредот</translation> <translation id="7514365320538308">Преземи</translation> -<translation id="751523031290522286">Администраторот ја блокирал <ph name="APP_NAME" />. Побарајте дозвола од него за користење на апликацијава.</translation> +<translation id="751523031290522286">Администраторот ја блокирал <ph name="APP_NAME" />. Побарајте дозвола од администраторот за користење на апликацијава.</translation> <translation id="7516981202574715431"><ph name="APP_NAME" /> е паузирана</translation> <translation id="7517063221058203587">{0,plural, =1{Ажурирајте го уредот во рок од 1 минута}one{Ажурирајте го уредот во рок од # минута}other{Ажурирајте го уредот во рок од # минути}}</translation> <translation id="7520766081042531487">Инкогнито портал: <ph name="SUBFRAME_SITE" /></translation> @@ -5541,6 +5545,7 @@ <translation id="8408068190360279472">Мрежа со <ph name="NETWORK_TYPE" />, се поврзува</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Прашај прво (препорачано)</translation> +<translation id="8417548266957501132">Лозинка на родител</translation> <translation id="8417573335434189196">Не ве заштитува од опасни веб-сајтови, преземања или екстензии. Chrome не ја препорачува поставкава.</translation> <translation id="8418445294933751433">&Прикажи како картичка</translation> <translation id="8419098111404128271">Резултати од пребарувањето за „<ph name="SEARCH_TEXT" />“</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 316ca13..c139265 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -2754,7 +2754,7 @@ <translation id="4665446389743427678"><ph name="SITE" /> സംഭരിച്ച മുഴുവൻ ഡാറ്റയും ഇല്ലാതാക്കപ്പെടും.</translation> <translation id="4668721319092543482"><ph name="PLUGIN_NAME" /> പ്രവർത്തനക്ഷമമാക്കാൻ ക്ലിക്ക് ചെയ്യുക</translation> <translation id="4670064810192446073">വെർച്വൽ റിയാലിറ്റി</translation> -<translation id="4672879467403304774">നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chrome-ലും മറ്റ് Google ആപ്പുകളിലും നിങ്ങളെ സുരക്ഷിതരാക്കുന്നു</translation> +<translation id="4672879467403304774">നിങ്ങൾ സൈൻ ഇൻ ആയിരിക്കുമ്പോൾ Chrome-ലും മറ്റ് Google ആപ്പുകളിലും നിങ്ങളെ സുരക്ഷിതരാക്കുന്നു</translation> <translation id="46733273239502219">ഇൻസ്റ്റാൾ ചെയ്ത ആപ്പുകളിലുള്ള ഓഫ്ലൈൻ ഡാറ്റയും മായ്ക്കും</translation> <translation id="4673442866648850031">സ്റ്റൈലസ് നീക്കംചെയ്യുമ്പോൾ സ്റ്റൈലസ് ടൂളുകൾ തുറക്കുക</translation> <translation id="4677772697204437347">GPU മെമ്മറി</translation> @@ -3175,7 +3175,7 @@ <translation id="5275352920323889391">നായ</translation> <translation id="527605982717517565"><ph name="HOST" /> ല് എപ്പോഴുംJavaScript അനുവദിക്കുക</translation> <translation id="5280174558369304332">വിപുലീകരണങ്ങൾ നീക്കം ചെയ്യപ്പെടും:</translation> -<translation id="5280243692621919988">വിൻഡോകൾ അടയ്ക്കുമ്പോൾ കുക്കികളും സൈറ്റ് ഡാറ്റയും മായ്ക്കുക</translation> +<translation id="5280243692621919988">എല്ലാ വിൻഡോകളും അടയ്ക്കുമ്പോൾ കുക്കികളും സൈറ്റ് ഡാറ്റയും മായ്ക്കുക</translation> <translation id="5280426389926346830">കുറുക്കുവഴി സൃഷ്ടിക്കണോ?</translation> <translation id="528208740344463258">Android ആപ്പുകൾ ഡൗൺലോഡ് ചെയ്ത് ഉപയോഗിക്കാൻ ആദ്യം നിങ്ങൾ ഈ ആവശ്യമായ അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. <ph name="DEVICE_TYPE" /> അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ, നിങ്ങൾക്കത് ഉപയോഗിക്കാനാവില്ല. ഇൻസ്റ്റലേഷൻ പൂർത്തിയായി കഴിയുമ്പോൾ, നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> റീസ്റ്റാർട്ട് ചെയ്യും.</translation> <translation id="5282733140964383898">നിങ്ങളുടെ ബ്രൗസിംഗ് ട്രാഫിക്കിൽ ഒരു അഭ്യർത്ഥന ഉൾപ്പെടുത്തുമെന്നാണ് "ട്രാക്ക് ചെയ്യരുത്" പ്രവർത്തനക്ഷമമാക്കുന്നതിലൂടെ അർത്ഥമാക്കുന്നത്. ഒരു വെബ്സൈറ്റ്, അഭ്യർത്ഥനയിന്മേൽ പ്രതികരിക്കുന്നോ എന്നതിനേയും അഭ്യർത്ഥന വ്യാഖ്യാനിക്കുന്നതെങ്ങനെ എന്നതിനേയും ആശ്രയിച്ചുള്ളതായിരിക്കും ഏതൊരു ഇഫക്റ്റും. ഉദാഹരണത്തിന്, ചില വെബ്സൈറ്റുകൾ, നിങ്ങൾ സന്ദർശിച്ച മറ്റ് വെബ്സൈറ്റുകളെ അടിസ്ഥാനമാക്കിയുള്ളതല്ലാത്ത പരസ്യങ്ങൾ കാണിച്ച് ഈ അഭ്യർത്ഥനയോട് പ്രതികരിച്ചേക്കാം. നിരവധി വെബ്സൈറ്റുകൾ തുടർന്നും നിങ്ങളുടെ ബ്രൗസിംഗ് ഡാറ്റ ശേഖരിക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യും - ഉദാഹരണത്തിന് സുരക്ഷ മെച്ചപ്പെടുത്തുന്നതിനും അവരുടെ വെബ്സൈറ്റുകളിൽ ഉള്ളടക്കവും സേവനങ്ങളും പരസ്യങ്ങളും നൽകുന്നതിനും റിപ്പോർട്ടിംഗ് സ്ഥിതിവിവരക്കണക്കുകൾ സൃഷ്ടിക്കുന്നതിനും. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation> @@ -4038,7 +4038,7 @@ <translation id="6414888972213066896">ഈ സൈറ്റ് സന്ദർശിക്കുന്നതിന് നിങ്ങൾ രക്ഷിതാവിനോട് അനുമതി ആവശ്യപ്പെട്ടു</translation> <translation id="6415900369006735853">ഫോണിലൂടെ ഇന്റർനെറ്റ് കണക്റ്റ് ചെയ്യുക</translation> <translation id="6416743254476733475">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ അനുവദിക്കുക അല്ലെങ്കിൽ ബ്ലോക്ക് ചെയ്യുക.</translation> -<translation id="6417265370957905582">Google അസിസ്റ്റന്റ്</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> എന്നതിന്റെ മുമ്പ് ഇൻസ്റ്റാൾ ചെയ്ത പതിപ്പിലേക്ക് പുന:സ്ഥാപിക്കുന്നു.</translation> <translation id="6418481728190846787">എല്ലാ ആപ്പുകൾക്കുമായുള്ള ആക്സസ് ശാശ്വതമായി നീക്കംചെയ്യുക</translation> <translation id="6418511932144861495">സുപ്രധാന അപ്ഡേറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 482a668f..f5b27615 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Байршуул</translation> <translation id="1244265436519979884">Linux-г одоогоор сэргээж байна</translation> <translation id="1244303850296295656">Өргөтгөлийн алдаа</translation> +<translation id="1246158006305844142">Таны Google бүртгэлээрээ нэвтэрсэн Chrome үйлдлийн системтэй бүх төхөөрөмж дээр таны аппууд болон тохиргоог синк хийнэ. Хөтчийг синк хийх сонголтыг харах бол<ph name="LINK_BEGIN" />Chrome-н тохиргоо<ph name="LINK_END" /> руу очно уу.</translation> <translation id="1246905108078336582">Түр санах ойгоос зөвлөмжийг устгах уу?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> хуучирсан тул үүнийг хориглосон байна</translation> <translation id="1251366534849411931">Хээтэй хаалтыг нээхээр хүлээж байсан <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">Үгүй, баярлалаа</translation> <translation id="1525740877599838384">Байршлыг тогтоохын тулд зөвхөн Wi-Fi ашиглах</translation> <translation id="152629053603783244">Linux-г дахин эхлүүлэх</translation> +<translation id="1526335046150927198">Мэдрэгч самбарын гүйлгэлтийн хурдасгуурыг идэвхжүүлэх</translation> <translation id="1526560967942511387">Гарчиггүй баримт бичиг</translation> <translation id="1529891865407786369">Эрчим хүчний эх үүсвэр</translation> <translation id="1530838837447122178">Хулгана, мэдрэгч самбарын төхөөрөмжийн тохиргоог нээх</translation> @@ -455,6 +457,7 @@ <translation id="1616206807336925449">Энэ өргөтгөл нь ямар нэгэн тусгай зөвшөөрөл шаарддаггүй.</translation> <translation id="1616298854599875024">"<ph name="IMPORT_NAME" />" өргөтгөл нь хуваалцсан модуль биш тул үүнийг импорт хийх боломжгүй</translation> <translation id="1618268899808219593">Тусламжийн төв</translation> +<translation id="1620307519959413822">Нууц үг буруу байна. Дахин оролдож эсвэл нууц үгийг шинэчлэхийн тулд Мартсан дээр товшино уу.</translation> <translation id="1620510694547887537">Камер</translation> <translation id="1623132449929929218">Зураг одоогоор боломжгүй байна. Ханын зургийн цуглуулгыг харахын тулд интернэтэд дахин холбогдоно уу.</translation> <translation id="1627276047960621195">Файл тодорхойлогч</translation> @@ -673,6 +676,7 @@ <translation id="1887850431809612466">Техник хангамжийн шалгалт</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Нээлттэй нүүр дүүрэн дэлгэц</translation> +<translation id="1892341345406963517">Сайн байна уу <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Бусад хэлнүүд</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> үлдсэн</translation> <translation id="1895658205118569222">Унтраах</translation> @@ -1308,6 +1312,7 @@ <translation id="2725200716980197196">Сүлжээний холболтыг дахин сэргээсэн байна.</translation> <translation id="2727633948226935816">Надад дахин битгий сануул</translation> <translation id="2727712005121231835">Бодит хэмжээ</translation> +<translation id="2729314457178420145">Мөн хайлтын өгөгдлийг (<ph name="URL" />) устгах. Ингэснээр таныг Google.com-с гаргаж болзошгүй. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux аппууд болон файлуудыг хуулбарлаж байна</translation> <translation id="273093730430620027">Энэ хуудас таны камерт хандаж байна.</translation> <translation id="2731392572903530958">Хаагдсан цонхыг дахин нээх</translation> @@ -2159,6 +2164,7 @@ <translation id="3838486795898716504">Илүү их <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies ба бусад сайтын болон нэмэлт өргөтгөлийн мэдээлэл</translation> <translation id="383891835335927981">Томруулж, жижигрүүлсэн сайт алга</translation> +<translation id="3839509547554145593">Хулганын гүйлгэлтийн хурдасгуурыг идэвхжүүлэх</translation> <translation id="3839516600093027468"><ph name="HOST" />-г түр санах ой харахыг тогтмол хориглох</translation> <translation id="3841964634449506551">Нууц үг буруу байна</translation> <translation id="3842552989725514455">Шовх үзүүртэй үгсийн фонт</translation> @@ -2769,6 +2775,7 @@ <translation id="4699172675775169585">Кэшлсэн дүрс ба файл</translation> <translation id="4699357559218762027">(автоматаар эхлүүлсэн)</translation> <translation id="470074695271471509">Дуусгахын тулд гарах уу?</translation> +<translation id="4701025263201366865">Эцэг эхийн нэвтрэлт</translation> <translation id="4707302005824653064">Chrome.com дээр хэрэглээ болон түүхийг менежер (<ph name="CUSTODIAN_EMAIL" />) хянаж болно.</translation> <translation id="4707579418881001319">L2TP/IPsec + хэрэглэгчийн гэрчилгээ</translation> <translation id="4708794300267213770">Унтаад сэрэх үед дэлгэцийн түгжээг харуулах</translation> @@ -3076,6 +3083,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> хайлт</translation> <translation id="5139823398361067371">Аюулгүй байдлын түлхүүрийнхээ ПИН-г оруулна уу. Хэрэв та ПИН-г мэдэхгүй бол аюулгүй байдлын түлхүүрийг шинэчлэх хэрэгтэй болно.</translation> <translation id="5139955368427980650">& Нээлттэй</translation> +<translation id="5142793792982256885">Мэдрэгч самбарын гүйлгэлтийн хурд</translation> <translation id="5142961317498132443">Нотолгоо</translation> <translation id="5143374789336132547">Таныг Нүүрний товчлуур дээр дарахад "<ph name="EXTENSION_NAME" />" нь хуудсанд харагдах зүйлийг өөрчилсөн.</translation> <translation id="5143712164865402236">Дэлгэц дүүрэн харах горимд оруулах</translation> @@ -3121,6 +3129,7 @@ <translation id="5213891612754844763">Прокси тохиргоог харуулах</translation> <translation id="5215502535566372932">Улсаа сонгох</translation> <translation id="521582610500777512">Зураг хэрэгцээгүй болсон байна</translation> +<translation id="5222403284441421673">Аюултай таталтыг блоклосон</translation> <translation id="5222676887888702881">Гарах</translation> <translation id="52232769093306234">Багцалж чадсангүй.</translation> <translation id="5225324770654022472">Аппликэйшнүүдийн богино холболтыг үзүүлэх</translation> @@ -3520,6 +3529,7 @@ <translation id="5734362860645681824">Харилцаа холбоо</translation> <translation id="5734697361979786483">Файл хуваалцахыг нэмэх</translation> <translation id="5736796278325406685">Хэрэглэгчийн нэрийг зөв оруулна уу</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" />-д сургуулийн бүртгэл нэмэхэд нь туслахын тулд нэвтэрнэ үү</translation> <translation id="5739235828260127894">Баталгаажуулалтыг хүлээж байна. <ph name="LINK_BEGIN" />Нэмэлт мэдээлэл авах<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Маш том</translation> <translation id="574209121243317957">Авиа</translation> @@ -3639,6 +3649,7 @@ <translation id="5901630391730855834">Шар</translation> <translation id="5906655207909574370">Удахгүй шинэчилж дууслаа! Шинэчлэлтийг дуусгахын тулд төхөөрөмжөө дахин асаана уу.</translation> <translation id="5906732635754427568">Энэ апп-тай холбоотой өгөгдлийг төхөөрөмжөөс устгах болно.</translation> +<translation id="5908695239556627796">Хулганын гүйлгэлтийн хурд</translation> <translation id="5908769186679515905">Сайтыг Flash ажиллуулах тохиргоог блоклох</translation> <translation id="5910363049092958439">Зургийг өөр өргөтгөлтэйгээр хадгалах...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> офлайн байна</translation> @@ -5084,6 +5095,7 @@ <ph name="BEGIN_BOLD" />Санамж:<ph name="END_BOLD" /> Системийг боловсруулалтын үед дахин асаах болно.</translation> <translation id="7828731929332799387">Энэ нь гуравдагч талын хам сэдэв дээр боломжтой бүх күүки, сайтын өгөгдлийг устгана. Та үргэлжлүүлмээр байна уу?</translation> <translation id="7829298379596169484">Дууны оролтод нэвтэрч байна</translation> +<translation id="7829877209233347340">Эцэг эхээсээ нэвтэрч, сургуулийн бүртгэл нэмэх зөвшөөрөл олгохыг хүснэ үү</translation> <translation id="7830594666202422257">Linux-д холбогдох</translation> <translation id="7831491651892296503">Сүлжээг тохируулахад алдаа гарлаа</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5521,6 +5533,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> сүлжээ, холбогдож байна</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Эхлээд асууна уу (санал болгосон)</translation> +<translation id="8417548266957501132">Эцэг эхийн нууц үг</translation> <translation id="8417573335434189196">Таныг аюултай вэб сайт, таталт эсвэл өргөтгөлөөс хамгаалахгүй. Chrome нь энэ тохиргоог санал болгодоггүй.</translation> <translation id="8418445294933751433">& Цонх болгож харуул</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />'-н хайлтын үр дүн</translation> @@ -5833,6 +5846,7 @@ <translation id="8808686172382650546">Муур</translation> <translation id="8808744862003883508">Та энэ хуудсан дээр Chrome-д суулгасан бүх өргөтгөлийг харах боломжтой.</translation> <translation id="8809147117840417135">Цайвар номин ногоон</translation> +<translation id="8812593354822910461">Мөн хайлтын өгөгдлийг (<ph name="URL" />) устгах. Ингэснээр та <ph name="DOMAIN" />-с гарах болно. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />-д нэвтрэх боломжгүй байна</translation> <translation id="8813811964357448561">Хуудас цаас</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"-г эцэг эхээрээ зөвшөөрүүлнэ үү</translation> @@ -6122,6 +6136,7 @@ <translation id="9203398526606335860">&Profiling идэвхжсэн</translation> <translation id="9203904171912129171">Төхөөрөмж сонгох</translation> <translation id="9203962528777363226">Энэ төхөөрөмжийн администратор нь шинэ хэрэглэгч нэмэхийг хориглосон байна</translation> +<translation id="9209689095351280025">Сайтууд нь таныг вэб дээр хянадаг күүкиг ашиглах боломжгүй байна</translation> <translation id="9211177926627870898">Шинэчлэх шаардлагатай</translation> <translation id="9214520840402538427">Програм суурьлуулах атрибут эхлэх цаг хэтэрхий удаан байна. Тусламжийн төлөөлөгчдөө хандана уу.</translation> <translation id="9214695392875603905">Жижиг кекс</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 93f8607..3c95426 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">अपलोड करा</translation> <translation id="1244265436519979884">Linux रिस्टोअर सध्या प्रगतीपथावर आहे</translation> <translation id="1244303850296295656">एक्स्टेंशन एरर</translation> +<translation id="1246158006305844142">तुमची अॅप्स आणि सेटिंग्ज तुम्ही तुमच्या Google खात्याने साइन इन केलेल्या सर्व Chrome OS डिव्हाइसवर सिंक होतील. ब्राउझर सिंक पर्यायांसाठी, <ph name="LINK_BEGIN" />Chrome सेटिंग्ज<ph name="LINK_END" /> वर जा.</translation> <translation id="1246905108078336582">क्लिपबोर्डवरून सूचना काढून टाकायची आहे का?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> नापसंत असल्यामुळे ब्लॉक केले गेले आहे</translation> <translation id="1251366534849411931">अपेक्षित खुला महिरपी कंस: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">नाही, नको</translation> <translation id="1525740877599838384">स्थान निर्धारित करण्यासाठी फक्त वाय-फाय वापरा</translation> <translation id="152629053603783244">Linux रीस्टार्ट करा</translation> +<translation id="1526335046150927198">टचपॅड स्क्रोल अॅक्सिलरेशन सुरू करा</translation> <translation id="1526560967942511387">अशीर्षकांकित दस्तऐवज</translation> <translation id="1529891865407786369">उर्जा स्रोत</translation> <translation id="1530838837447122178">माउस आणि टचपॅड डिव्हाइस सेटिंग्ज उघडा</translation> @@ -1312,6 +1314,7 @@ <translation id="2725200716980197196">नेटवर्क कनेक्टिव्हिटी पुनर्संचयित</translation> <translation id="2727633948226935816">मला पुन्हा स्मरण करून देऊ नका</translation> <translation id="2727712005121231835">वास्तविक आकार</translation> +<translation id="2729314457178420145">तसेच ब्राउझिंग डेटा (<ph name="URL" />) साफ करा ज्यामुळे तुम्ही Google.com वरून साइन आउट होऊ शकाल. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux अॅप्स आणि फाइलचा बॅकअप घेत आहे</translation> <translation id="273093730430620027">हे पृष्ठ आपल्या कॅमेर्यावर प्रवेश करत आहे.</translation> <translation id="2731392572903530958">बंद केलेली विंडो पु&न्हा उघडा</translation> @@ -2163,6 +2166,7 @@ <translation id="3838486795898716504">अधिक <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">कुकीज आणि इतर साइट आणि प्लग-इन डेटा</translation> <translation id="383891835335927981">कोणत्याही साइटसाठी झूम वाढविले किंवा कमी केलेले नाही</translation> +<translation id="3839509547554145593">माउस स्क्रोल अॅक्सिलरेशन सुरू करा</translation> <translation id="3839516600093027468"><ph name="HOST" /> ला क्लिपबोर्ड पाहण्यापासून नेहमी ब्लॉक करा</translation> <translation id="3841964634449506551">पासवर्ड चुकीचा आहे</translation> <translation id="3842552989725514455">Serif font</translation> @@ -2772,6 +2776,7 @@ <translation id="4699172675775169585">कॅश इमेज आणि फायली</translation> <translation id="4699357559218762027">(स्वयं-लाँच केलेले)</translation> <translation id="470074695271471509">पूर्ण करण्यासाठी साइन आइट करायचे आहे का?</translation> +<translation id="4701025263201366865">पालक साइन इन</translation> <translation id="4707302005824653064">chrome.com वरील व्यवस्थापकाद्वारे (<ph name="CUSTODIAN_EMAIL" />) वापर आणि इतिहासाचे पुनरावलोकन केले जाऊ शकते.</translation> <translation id="4707579418881001319">L2TP/IPsec + वापरकर्ता सर्टिफिकेट</translation> <translation id="4708794300267213770">निष्क्रियवरून सक्रिय होताना लॉक स्क्रीन दर्शवा</translation> @@ -3079,6 +3084,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Search</translation> <translation id="5139823398361067371">तुमच्या सिक्युरिटी कीचा पिन एंटर करा. तुम्हाला पिन माहीत नसल्यास, तुम्ही सिक्युरिटी की रीसेट करणे आवश्यक आहे.</translation> <translation id="5139955368427980650">&उघडा</translation> +<translation id="5142793792982256885">टचपॅड स्क्रोल वेग</translation> <translation id="5142961317498132443">ऑथेंटिकेशन</translation> <translation id="5143374789336132547">The extension "<ph name="EXTENSION_NAME" />" has changed what page is shown when you click the Home button.</translation> <translation id="5143712164865402236">पूर्ण स्क्रीनमध्ये जा</translation> @@ -3641,6 +3647,7 @@ <translation id="5901630391730855834">पिवळा</translation> <translation id="5906655207909574370">अद्ययावत करणे जवळजवळ पूर्ण झाले! अपडेट करणे समाप्त करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा.</translation> <translation id="5906732635754427568">या डिव्हाइस वरून या ॲपसह संबद्ध असलेला डेटा काढला जाईल.</translation> +<translation id="5908695239556627796">माउस स्क्रोल वेग</translation> <translation id="5908769186679515905">साइटला फ्लॅश चालवण्यापासून अवरोधित करा</translation> <translation id="5910363049092958439">म्हणून इमेज ज&तन करा...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ऑफलाइन आहे</translation> @@ -4031,7 +4038,7 @@ <translation id="6414888972213066896">या साइटला भेट देणे ठीक आहे का ते तुम्ही तुमच्या पालकास विचारले</translation> <translation id="6415900369006735853">तुमच्या फोनमधून इंटरनेटशी कनेक्ट करा</translation> <translation id="6416743254476733475">अनुमती द्या किंवा तुमच्या कॉंप्युटरवर ब्लॉक करा.</translation> -<translation id="6417265370957905582">Google साहाय्यक</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> च्या पूर्वी स्थापित केलेल्या आवृत्तीवर परत करत आहे</translation> <translation id="6418481728190846787">सर्व ॲप्ससाठी ॲक्सेस कायमचा काढा</translation> <translation id="6418511932144861495">महत्त्वाचे अपडेट इंस्टॉल करा</translation> @@ -5087,6 +5094,7 @@ <ph name="BEGIN_BOLD" />सूचना:<ph name="END_BOLD" /> प्रक्रियेदरम्यान सिस्टम रीबूट होईल.</translation> <translation id="7828731929332799387">हे तृतीय पक्ष संदर्भात उपलब्ध असलेल्या कुकी आणि साइट हटवेल. तुम्हाला पुढे सुरू ठेवायचे आहे का?</translation> <translation id="7829298379596169484">ऑडिओ इनपुटमध्ये प्रवेश करीत आहे</translation> +<translation id="7829877209233347340">शाळा खाते जोडण्याची परवानगी देण्यासाठी, पालकाला साइन इन करण्यास सांगा</translation> <translation id="7830594666202422257">Linux शी कनेक्ट करा</translation> <translation id="7831491651892296503">नेटवर्क कॉन्फिगर करताना एरर आली</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5841,6 +5849,7 @@ <translation id="8808686172382650546">मांजर</translation> <translation id="8808744862003883508">या पेजवर तुम्ही Chrome मध्ये इंस्टॉल केलेली सर्व एक्स्टेंशन पाहू शकता.</translation> <translation id="8809147117840417135">फिकट टील</translation> +<translation id="8812593354822910461">तसेच ब्राउझिंग डेटा (<ph name="URL" />) साफ करा ज्यामुळे तुम्ही <ph name="DOMAIN" /> वरून साइन आउट व्हाल. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> मध्ये साइन इन करू शकत नाही</translation> <translation id="8813811964357448561">कागदी पत्रक</translation> <translation id="8813872945700551674">पालकाला "<ph name="EXTENSION_NAME" />" मंजूर करायला सांगा</translation> @@ -6131,6 +6140,7 @@ <translation id="9203398526606335860">&प्रोफाइलिंग सक्षम</translation> <translation id="9203904171912129171">एक डिव्हाइस निवडा</translation> <translation id="9203962528777363226">या डिव्हाइसच्या ॲडमिनिस्ट्रेटरने नवीन वापरकर्त्यांना जोडले जाण्यापासून अक्षम केले आहे</translation> +<translation id="9209689095351280025">साइट संपूर्ण वेबवर तुमचा माग ठेवणाऱ्या कुकी वापरू शकत नाहीत</translation> <translation id="9211177926627870898">अपडेट आवश्यक</translation> <translation id="9214520840402538427">अरेरे! स्थापना-वेळ विशेषतांचे इंस्टॉलेशन कालबाह्य झाले. कृपया तुमच्या सपोर्ट प्रतिनिधीशी संपर्क साधा.</translation> <translation id="9214695392875603905">कपकेक</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index ad099ca5..627e590 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Sambungan ini tidak memerlukan kebenaran khas.</translation> <translation id="1616298854599875024">Tidak dapat mengimport sambungan "<ph name="IMPORT_NAME" />" kerana bukan modul kongsi</translation> <translation id="1618268899808219593">P&usat Bantuan</translation> +<translation id="1620307519959413822">Kata laluan salah. Cuba lagi atau klik Terlupa kata laluan untuk menetapkan semula kata laluan.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Imej tidak tersedia pada masa ini. Sila sambung semula ke Internet untuk melihat koleksi kertas dinding.</translation> <translation id="1627276047960621195">Pemerihal Fail</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Semakan perkakasan</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Buka skrin penuh</translation> +<translation id="1892341345406963517">Hai <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Bahasa lain</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> lagi</translation> <translation id="1895658205118569222">Tutup</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Tunjukkan tetapan proksi</translation> <translation id="5215502535566372932">Pilih negara</translation> <translation id="521582610500777512">Foto telah dibuang</translation> +<translation id="5222403284441421673">Muat turun yang tidak selamat disekat</translation> <translation id="5222676887888702881">Log keluar</translation> <translation id="52232769093306234">Gagal membungkus.</translation> <translation id="5225324770654022472">Paparkan pintasan apl</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Komunikasi</translation> <translation id="5734697361979786483">Tambahkan perkongsian fail</translation> <translation id="5736796278325406685">Sila masukkan nama pengguna yang sah</translation> +<translation id="5739017626473506901">Log masuk untuk membantu <ph name="USER_NAME" /> menambah akaun sekolah</translation> <translation id="5739235828260127894">Menunggu pengesahan. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Sangat besar</translation> <translation id="574209121243317957">Nada</translation> @@ -5540,6 +5544,7 @@ <translation id="8408068190360279472">Rangkaian <ph name="NETWORK_TYPE" />, menyambung</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Tanya dahulu (disyorkan)</translation> +<translation id="8417548266957501132">Kata laluan ibu bapa</translation> <translation id="8417573335434189196">Tidak melindungi anda daripada tapak web, muat turun dan sambungan yang berbahaya. Chrome tidak mengesyorkan tetapan ini.</translation> <translation id="8418445294933751433">&Paparkan sebagai tab</translation> <translation id="8419098111404128271">Hasil carian untuk '<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index c8a843d..2506b67 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">ဤတိုးချဲ့လိုင်းသည် အထူးခွင့်ပြုချက် မလိုအပ်ပါ။</translation> <translation id="1616298854599875024">မျှဝေထားသည့် မော်ဂျူးမဟုတ်သောကြောင့် နောက်ဆက်တွဲ "<ph name="IMPORT_NAME" />" ကို မတင်သွင်းနိုင်ပါ</translation> <translation id="1618268899808219593">အကူ&အညီ ဌာန</translation> +<translation id="1620307519959413822">စကားဝှက် မမှန်ပါ။ ထပ်စမ်းကြည့်ပါ (သို့) စကားဝှက် ပြင်ဆင်သတ်မှတ်ရန် 'စကားဝှက်မေ့သွားသည်' ကိုနှိပ်ပါ။</translation> <translation id="1620510694547887537">ကင်မရာ</translation> <translation id="1623132449929929218">ပုံများလက်ရှိမရနိုင်ပါ။ နောက်ခံပုံစုစည်းမှုကို ကြည့်ရန် အင်တာနက်သို့ ပြန်လည်ချိတ်ဆက်ပါ။</translation> <translation id="1627276047960621195">ဖိုင် ဖေါ်ပြချက်များ</translation> @@ -680,6 +681,7 @@ <translation id="1887850431809612466">စက်ပစ္စည်း စိစစ်သုံးသပ်ခြင်း</translation> <translation id="1890674179660343635"><span>ID-</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">မျက်နှာပြင် အပြည့် ဖွင့်ရန်</translation> +<translation id="1892341345406963517">မင်္ဂလာပါ <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">အခြား ဘာသာစကားများ</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> ကျန်သည်</translation> <translation id="1895658205118569222">ပိတ်ရန်</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">ပရောက်စီ ဆက်တင်များကို ပြရန်</translation> <translation id="5215502535566372932">နိုင်ငံ ရွေးပါ</translation> <translation id="521582610500777512">ဓာတ်ပုံကို လွှင့်ပစ်လိုက်ပါပြ</translation> +<translation id="5222403284441421673">လုံခြုံမှုမရှိသည့် ဒေါင်းလုဒ်ကို ပိတ်ထားခြင်း</translation> <translation id="5222676887888702881">ထွက်ခွာရန်</translation> <translation id="52232769093306234">ထုပ်ပိုးခြင်း မအောင်မြင်ပါ။</translation> <translation id="5225324770654022472">အက်ပ်များ၏ ဖြတ်လမ်းကို ပြပေးရန်</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">ဆက်သွယ်မှုများ</translation> <translation id="5734697361979786483">ဖိုင်မျှဝေမှုကို ထည့်ရန်</translation> <translation id="5736796278325406685">မှန်ကန်သော အသုံးပြုသူအမည်ကို ထည့်သွင်းပါ</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> ကျောင်းအကောင့်ထည့်ရာတွင် ကူညီရန် လက်မှတ်ထိုးဝင်ပါ</translation> <translation id="5739235828260127894">စစ်ဆေးအတည်ပြုချက် စောင့်နေသည်။ <ph name="LINK_BEGIN" />ပိုမို လေ့လာရန်<ph name="LINK_END" /></translation> <translation id="5739458112391494395">အလွန်ကြီး</translation> <translation id="574209121243317957">အသံအနိမ့်အမြင့်</translation> @@ -5536,6 +5540,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ကွန်ရက်၊ ချိတ်ဆက်နေသည်</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">ဦးစွာ မေးပါ (အကြံပြုထား)</translation> +<translation id="8417548266957501132">မိဘ၏ စကားဝှက်</translation> <translation id="8417573335434189196">အန္တရာယ်ရှိသော ဝဘ်ဆိုက်၊ ဒေါင်းလုဒ် သို့မဟုတ် နောက်ဆက်တွဲများ၏ ရန်မှ ကာကွယ်မပေးပါ။ Chrome သည် ဤဆက်တင်ကို အကြံမပြုပါ။</translation> <translation id="8418445294933751433">တဲပ် အနေဖြင့် &ပြ</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' အတွက် ရှာဖွေမှု ရလဒ်များ</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index eeafca6..df6d51c5 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -190,6 +190,7 @@ <translation id="1243314992276662751">अपलोड गर्नुहोस्</translation> <translation id="1244265436519979884">हाल Linux को पुनर्स्थापना हुँदै छ</translation> <translation id="1244303850296295656">एक्स्टेन्सन त्रुटि</translation> +<translation id="1246158006305844142">तपाईंले आफ्नो Google खातामार्फत साइन इन गर्नुभएका Chrome OS चल्ने यन्त्रहरूमा तपाईंका अनुप्रयोग तथा सेटिङ सिंक हुने छन्। ब्राउजरका सिंकसम्बन्धी विकल्पहरू हेर्न <ph name="LINK_BEGIN" />Chrome का सेटिङ<ph name="LINK_END" />मा जानुहोस्।</translation> <translation id="1246905108078336582">क्लिपबोर्डको सुझाव हटाउने हो?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> लाई चल्तीबाट हटाइएको हुनाले यसमाथि रोक लगाइयो</translation> <translation id="1251366534849411931">बायाँ मझौला कोष्ठक हुनु पर्ने हो: <ph name="ERROR_LINE" /></translation> @@ -389,6 +390,7 @@ <translation id="1524563461097350801">पर्दैन, धन्यवाद</translation> <translation id="1525740877599838384">स्थान निर्धारण गर्न Wi-Fi मात्र प्रयोग गर्नुहोस्</translation> <translation id="152629053603783244">Linux पुनः सुरु गर्नुहोस्</translation> +<translation id="1526335046150927198">टचप्याड स्क्रोल हुने गति बढाउने सुविधा सक्षम पार्नुहोस्</translation> <translation id="1526560967942511387">शीर्षक नभएको कागजात</translation> <translation id="1529891865407786369">पावरको स्रोत</translation> <translation id="1530838837447122178">माउस र टचप्याड यन्त्र सम्बन्धी सेटिङहरू खोल्नुहोस्</translation> @@ -1309,6 +1311,7 @@ <translation id="2725200716980197196">सञ्जाल जडान पुनर्स्थापित</translation> <translation id="2727633948226935816">मलाई फेरि नसम्झाउनुहोस्</translation> <translation id="2727712005121231835">वास्तविक आकार</translation> +<translation id="2729314457178420145">ब्राउजिङ डेटा (<ph name="URL" />) पनि हटाउनुहोस्। यस कार्यले तपाईंलाई Google.com बाट साइन आउट गराउन सक्छ। <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux सम्बन्धी अनुप्रयोग र फाइलहरू ब्याकअप गर्दै</translation> <translation id="273093730430620027">यो पृष्ठले तपाईंको क्यामेराको पहुँच गरिरहेको छ।</translation> <translation id="2731392572903530958">बन्द विण्डोलाई पुन: खो&ल्नुहोस्</translation> @@ -2161,6 +2164,7 @@ <translation id="3838486795898716504">थप <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">कुकीहरू र अन्य साइट तथा प्लगइन डेटा</translation> <translation id="383891835335927981">कुनै पनि साइटलाई जुम इन वा जुम आउट गरिएको छैन</translation> +<translation id="3839509547554145593">माउस स्क्रोल हुने गति बढाउने सुविधा सक्षम पार्नुहोस्</translation> <translation id="3839516600093027468"><ph name="HOST" /> लाई क्लिपबोर्ड हेर्न सधैँ रोक लगाउनुहोस्</translation> <translation id="3841964634449506551">पासवर्ड मिलेन</translation> <translation id="3842552989725514455">सेरिफ फन्ट</translation> @@ -2771,6 +2775,7 @@ <translation id="4699172675775169585">क्यास गरिएका छविहरू र फाइलहरू</translation> <translation id="4699357559218762027">(स्वत: सुरुवात गरिएको)</translation> <translation id="470074695271471509">समाप्त गर्न साइन आउट गर्ने हो?</translation> +<translation id="4701025263201366865">अभिभावकको साइन इन</translation> <translation id="4707302005824653064">chrome.com मा रहेको व्यवस्थापक (<ph name="CUSTODIAN_EMAIL" />) ले उपयोग र इतिहासको समीक्षा गर्न सक्छ।</translation> <translation id="4707579418881001319">L2TP/IPsec + प्रयोगकर्ता प्रमाणपत्र</translation> <translation id="4708794300267213770">शयन अवस्थाबाट सक्रिय पार्दा लक स्क्रिन देखाउनुहोस्</translation> @@ -3078,6 +3083,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> खोज</translation> <translation id="5139823398361067371">आफ्नो सुरक्षा साँचोको PIN प्रविष्टि गर्नुहोस् तपाईंलाई PIN थाहा छैन भने तपाईंले आफ्नो सुरक्षा साँचो रिसेट गर्नु पर्ने छ।</translation> <translation id="5139955368427980650">&खोल्नुहोस्</translation> +<translation id="5142793792982256885">टचप्याड स्क्रोल हुने गति</translation> <translation id="5142961317498132443">प्रमाणीकरण</translation> <translation id="5143374789336132547">विस्तार "<ph name="EXTENSION_NAME" />" ले तपाईँले गृहबटन क्लिक गर्दा देखाइएको पृष्ठलाई परिवर्तन गरेको छ।</translation> <translation id="5143712164865402236">पूर्ण स्क्रिनमा प्रविष्टि गर्नुहोस्</translation> @@ -3640,6 +3646,7 @@ <translation id="5901630391730855834">पहेँलो</translation> <translation id="5906655207909574370">लगभग अद्यावधिक भयो! अद्यावधिक गर्ने कार्य सम्पन्न गर्न आफ्नो यन्त्रलाई पुनः सुरु गर्नुहोस्।</translation> <translation id="5906732635754427568">यस यन्त्रबाट यस एपसँग सम्बन्धित डेटा हटाइने छ।</translation> +<translation id="5908695239556627796">माउस स्क्रोल हुने गति</translation> <translation id="5908769186679515905">साइटहरूलाई फ्ल्यास चलाउनबाट रोक लगाउनुहोस्</translation> <translation id="5910363049092958439">यस रूपमा छविलाई बच&त गर्नुहोस्...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> अफलाइन छ</translation> @@ -4000,7 +4007,7 @@ <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' को १ परिणाम</translation> <translation id="6380143666419481200">स्वीकार्नुहोस् र जारी राख्नुहोस्</translation> <translation id="6384275966486438344">तपाईंको खोज सेटिङहरूलाई यसमा परिवर्तन गर्नुहोस्: <ph name="SEARCH_HOST" /></translation> -<translation id="6385149369087767061">इन्टरनेट जोड्नुहोस् र फेरि प्रयास गर्नुहोस्</translation> +<translation id="6385149369087767061">इन्टरनेटमा जोडिनुहोस् र फेरि प्रयास गर्नुहोस्</translation> <translation id="6385543213911723544">साइटहरूले कुकी डेटा सुरक्षित गर्न र पढ्न सक्छ</translation> <translation id="6386099547750337629">यो कुनै त्रुटिवश भएको हो भने कृपया सहायता प्रदान गर्ने सेवामा सम्पर्क गर्नुहोस्।</translation> <translation id="6387674443318562538">ठाडो रूपमा विभाजन गर्नुहोस्</translation> @@ -5086,6 +5093,7 @@ <ph name="BEGIN_BOLD" />टिपोट:<ph name="END_BOLD" /> यो प्रक्रियाका क्रममा प्रणाली पुनः बुट हुने छ।</translation> <translation id="7828731929332799387">यस कार्यले तेस्रो पक्षीय सन्दर्भहरूमा उपलब्ध सबै कुकी तथा साइटको डेटा मेटाउने छ। तपाईं जारी राख्न चाहनुहुन्छ?</translation> <translation id="7829298379596169484">अडियो आगतमा पहुँच गर्दै</translation> +<translation id="7829877209233347340">आफ्ना अभिभावकलाई विद्यालयको खाता थप्ने अनुमति दिनका लागि साइन इन गर्न लगाउनुहोस्</translation> <translation id="7830594666202422257">Linux मा जोड्नुहोस्</translation> <translation id="7831491651892296503">नेटवर्क कन्फिगर गर्दा त्रुटि भयो</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5839,6 +5847,7 @@ <translation id="8808686172382650546">बिरालो</translation> <translation id="8808744862003883508">तपाईं यस पृष्ठमा Chrome मा स्थापना गरिएका सबै एक्स्टेन्सनहरू देख्न सक्नुहुन्छ।</translation> <translation id="8809147117840417135">हल्का निलो-हरियो मिश्रित रङ</translation> +<translation id="8812593354822910461">ब्राउजिङ डेटा (<ph name="URL" />) पनि हटाउनुहोस्। यस कार्यले तपाईंलाई <ph name="DOMAIN" /> बाट साइन आउट गराउने छ। <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> मा साइन इन गर्न सकिँदैन</translation> <translation id="8813811964357448561">कागजको पाना</translation> <translation id="8813872945700551674">अभिभावकलाई "<ph name="EXTENSION_NAME" />" अनुमोदन गर्न अनुरोध गर्नुहोस्</translation> @@ -6128,6 +6137,7 @@ <translation id="9203398526606335860">&प्रोफाइलिङ सक्षम भयो</translation> <translation id="9203904171912129171">कुनै यन्त्र चयन गर्नुहोस्</translation> <translation id="9203962528777363226">यस यन्त्रको प्रशासकले नयाँ प्रयोगकर्ताहरूलाई थप्नबाट असक्षम गरेको छ</translation> +<translation id="9209689095351280025">साइटहरूले वेबमा तपाईंलाई ट्र्याक गर्ने कुकीहरू प्रयोग गर्न सक्दैनन्</translation> <translation id="9211177926627870898">अद्यावधिक गर्नु पर्ने हुन्छ</translation> <translation id="9214520840402538427">ओहो! स्थापना-समय विशेषताहरूको प्रारम्भको समय सकिएको छ। कृपया आफ्नो समर्थन प्रतिनिधिलाई सम्पर्क गर्नुहोस्।</translation> <translation id="9214695392875603905">कपकेक</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index b038125..cdbcb2a 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">De extensie vereist geen speciale rechten.</translation> <translation id="1616298854599875024">Kan '<ph name="IMPORT_NAME" />' niet importeren, omdat dit geen gedeelde module is</translation> <translation id="1618268899808219593">H&elpcentrum</translation> +<translation id="1620307519959413822">Onjuist wachtwoord. Probeer het opnieuw of klik op 'Wachtwoord vergeten' om het te resetten.</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1623132449929929218">De afbeeldingen zijn momenteel niet beschikbaar. Maak opnieuw verbinding om collecties van achtergronden te bekijken.</translation> <translation id="1627276047960621195">Bestandsdescriptors</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Hardwarerevisie</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Openen in volledig scherm</translation> +<translation id="1892341345406963517">Hallo <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Andere talen</translation> <translation id="1895252664692693738">Nog <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Uitschakeling</translation> @@ -1881,7 +1883,7 @@ <translation id="3496213124478423963">Kleiner</translation> <translation id="3497560059572256875">Doodle delen</translation> <translation id="3498215018399854026">We kunnen je ouder momenteel niet bereiken. Probeer het opnieuw.</translation> -<translation id="3500417806337761827">Fout bij activeren van share. Er zijn al te veel SMB-shares geactiveerd.</translation> +<translation id="3500417806337761827">Fout bij activeren van fileshare. Er zijn al te veel SMB-fileshares geactiveerd.</translation> <translation id="3505030558724226696">Apparaattoegang intrekken</translation> <translation id="3507421388498836150">Huidige rechten voor '<ph name="EXTENSION_NAME" />'</translation> <translation id="3507888235492474624">Opnieuw scannen naar Bluetooth-apparaten</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Proxyinstellingen weergeven</translation> <translation id="5215502535566372932">Land selecteren</translation> <translation id="521582610500777512">Foto is geannuleerd</translation> +<translation id="5222403284441421673">Onveilige download geblokkeerd</translation> <translation id="5222676887888702881">Uitloggen</translation> <translation id="52232769093306234">Inpakken mislukt.</translation> <translation id="5225324770654022472">Snelle link voor apps weergeven</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Communicatie</translation> <translation id="5734697361979786483">Fileshare toevoegen</translation> <translation id="5736796278325406685">Geef een geldige gebruikersnaam op</translation> +<translation id="5739017626473506901">Log in om <ph name="USER_NAME" /> te helpen een schoolaccount toe te voegen</translation> <translation id="5739235828260127894">Wachten op verificatie. <ph name="LINK_BEGIN" />Meer informatie.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Zeer groot</translation> <translation id="574209121243317957">Toonhoogte</translation> @@ -5538,6 +5542,7 @@ <translation id="8408068190360279472">Netwerk: <ph name="NETWORK_TYPE" />, verbinden</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Eerst vragen (aanbevolen)</translation> +<translation id="8417548266957501132">Wachtwoord van ouder</translation> <translation id="8417573335434189196">Beschermt je niet tegen gevaarlijke websites, downloads of extensies. Chrome raadt deze instelling af.</translation> <translation id="8418445294933751433">Weergeven al&s tabblad</translation> <translation id="8419098111404128271">Zoekresultaten voor '<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 6fd25920..92fe5e3 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -458,6 +458,7 @@ <translation id="1616206807336925449">Denne utvidelsen krever ingen spesielle tillatelser.</translation> <translation id="1616298854599875024">Kan ikke importere utvidelsen «<ph name="IMPORT_NAME" />», fordi den ikke er en delt modul</translation> <translation id="1618268899808219593">&Brukerstøtte</translation> +<translation id="1620307519959413822">Feil passord. Prøv på nytt, eller klikk på Glemt passord for å tilbakestille det.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Bildene er ikke tilgjengelige nå. Koble til Internett på nytt for å se bakgrunnssamlingene.</translation> <translation id="1627276047960621195">Filbeskrivelser</translation> @@ -676,6 +677,7 @@ <translation id="1887850431809612466">Maskinvareversjon</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Åpne fullskjerm</translation> +<translation id="1892341345406963517">Hei, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Andre språk</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> igjen</translation> <translation id="1895658205118569222">Avslutning</translation> @@ -1686,7 +1688,7 @@ <translation id="3239373508713281971">Tidsgrensen er fjernet for <ph name="APP_NAME" /></translation> <translation id="3241680850019875542">Velg rotkatalogen til utvidelsen som skal pakkes. Hvis du vil oppdatere en utvidelse, velger du også den private nøkkelfilen.</translation> <translation id="3244294424315804309">Fortsett med å kutte lyden</translation> -<translation id="3246107497225150582">{0,plural, =1{Oppdater enheten innen en dag}other{Oppdater enheten innen # dager}}</translation> +<translation id="3246107497225150582">{0,plural, =1{Oppdater enheten innen én dag}other{Oppdater enheten innen # dager}}</translation> <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – nettverksfeil</translation> <translation id="3248902735035392926">Sikkerhet er viktig. Bruk et øyeblikk på å <ph name="BEGIN_LINK" />sjekke utvidelsene dine nå<ph name="END_LINK" /></translation> <translation id="3249950116250264636"><ph name="APP_NAME" /> (<ph name="APP_URL" />)</translation> @@ -3128,6 +3130,7 @@ <translation id="5213891612754844763">Vis innstillingene for proxy-tjener</translation> <translation id="5215502535566372932">Velg land</translation> <translation id="521582610500777512">Bildet er forkastet</translation> +<translation id="5222403284441421673">En usikker nedlasting er blokkert</translation> <translation id="5222676887888702881">Logg av</translation> <translation id="52232769093306234">Pakkingen mislyktes.</translation> <translation id="5225324770654022472">Vis appsnarveien</translation> @@ -3526,6 +3529,7 @@ <translation id="5734362860645681824">Kommunikasjon</translation> <translation id="5734697361979786483">Legg til delt nettverksressurs</translation> <translation id="5736796278325406685">Skriv inn et gyldig brukernavn</translation> +<translation id="5739017626473506901">Logg på for å hjelpe <ph name="USER_NAME" /> med å legge til en skolekonto</translation> <translation id="5739235828260127894">Venter på bekreftelse. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Veldig stor</translation> <translation id="574209121243317957">Stemmeleie</translation> @@ -5534,6 +5538,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-nettverk – kobler til</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Spør først (anbefales)</translation> +<translation id="8417548266957501132">Foreldrepassord</translation> <translation id="8417573335434189196">Beskytter deg ikke mot farlige nettsteder, nedlastinger eller utvidelser. Chrome anbefaler ikke denne innstillingen.</translation> <translation id="8418445294933751433">Vi&s som fane</translation> <translation id="8419098111404128271">Søkeresultater for «<ph name="SEARCH_TEXT" />»</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index a0e1061..36a3156 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -191,6 +191,7 @@ <translation id="1243314992276662751">ଅପ୍ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="1244265436519979884">ବର୍ତ୍ତମାନ Linuxର ରିଷ୍ଟୋର୍ ଚାଲିଛି</translation> <translation id="1244303850296295656">ଏକ୍ସଟେନ୍ସନ୍ ତ୍ରୁଟି</translation> +<translation id="1246158006305844142">ଆପଣ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ସହିତ ସାଇନ୍ ଇନ୍ କରିଥିବା ସମସ୍ତ Chrome OS ଡିଭାଇସରେ ଆପଣଙ୍କର ଆପ୍ସ ଏବଂ ସେଟିଂସ୍ ସିଙ୍କ୍ ହେବ। ବ୍ରାଉଜର୍ ସିଙ୍କ୍ ବିକଳ୍ପଗୁଡ଼ିକ ପାଇଁ, <ph name="LINK_BEGIN" />Chrome ସେଟିଂସ<ph name="LINK_END" />କୁ ଯାଆନ୍ତୁ।</translation> <translation id="1246905108078336582">କ୍ଲିପ୍ବୋର୍ଡରୁ ପ୍ରସ୍ତାବ କାଢ଼ି ଦେବେ?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ବ୍ଲକ୍ କରାଯାଇଥିଲା କାରଣ ଏହାକୁ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି</translation> <translation id="1251366534849411931">ପ୍ରତ୍ୟାଶିତ ଖୋଲାଥିବା କୁଟିଳ ବନ୍ଧନୀ: <ph name="ERROR_LINE" /></translation> @@ -387,6 +388,7 @@ <translation id="1524563461097350801">ନାହିଁ, ଥାଉ</translation> <translation id="1525740877599838384">ଲୋକେସନ୍ ସ୍ଥିର କରିବାକୁ କେବଳ ୱାଇ-ଫାଇ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="152629053603783244">Linux ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ</translation> +<translation id="1526335046150927198">ଟଚପ୍ୟାଡ୍ ସ୍କ୍ରଲ୍ ଆକ୍ସିଲିରେସନ୍ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="1526560967942511387">ଆଖ୍ୟାବିହୀନ ଡକ୍ୟୁମେଣ୍ଟ</translation> <translation id="1529891865407786369">ପାୱର୍ ଉତ୍ସ</translation> <translation id="1530838837447122178">ମାଉସ୍ ଏବଂ ଟଚ୍ପ୍ୟାଡ୍ ଡିଭାଇସ୍ ସେଟିଂସ୍ ଖୋଲନ୍ତୁ</translation> @@ -1308,6 +1310,7 @@ <translation id="2725200716980197196">ନେଟ୍ୱାର୍କ ସଂଯୋଗ ପୁନଃସ୍ଥାପନ ହୋଇଛି</translation> <translation id="2727633948226935816">ମୋତେ ପୁଣି ମନେ ପକାନ୍ତୁ ନାହିଁ</translation> <translation id="2727712005121231835">ପ୍ରକୃତ ଆକାର</translation> +<translation id="2729314457178420145">ଆପଣଙ୍କୁ Google.comରୁ ସାଇନ୍ ଆଉଟ୍ କରିଦେଇପାରୁଥିବା ବ୍ରାଉଜିଂ ଡାଟା (<ph name="URL" />)କୁ ମଧ୍ୟ ଖାଲି କରନ୍ତୁ। <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux ଆପ୍ ଏବଂ ଫାଇଲ୍ଗୁଡ଼ିକର ବ୍ୟାକ୍ ଅପ୍ ନିଆଯାଉଛି</translation> <translation id="273093730430620027">ଏହି ପୃଷ୍ଠା ଆପଣଙ୍କର କ୍ୟାମେରାକୁ ଆକ୍ସେସ୍ କରୁଛି।</translation> <translation id="2731392572903530958">&ବନ୍ଦ ହୋଇଥିବା ୱିଣ୍ଡୋ ପୁନର୍ବାର ଖୋଲନ୍ତୁ</translation> @@ -2159,6 +2162,7 @@ <translation id="3838486795898716504">ଅଧିକ <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">କୁକୀ ଓ ଅନ୍ୟାନ୍ୟ ସାଇଟ୍ ଏବଂ ପ୍ଲଗଇନ୍ ଡାଟା</translation> <translation id="383891835335927981">କୌଣସି ସାଇଟ୍କୁ ଜୁମ୍ ଇନ୍ ବା ଆଉଟ୍ କରାଯାଇନାହିଁ</translation> +<translation id="3839509547554145593">ମାଉସ୍ ସ୍କ୍ରଲ୍ ଆକ୍ସିଲିରେସନ୍ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="3839516600093027468">କ୍ଲିପ୍ବୋର୍ଡ ଦେଖିବାରୁ ସର୍ବଦା <ph name="HOST" />କୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="3841964634449506551">ପାସ୍ୱାର୍ଡ ଅବୈଧ ଅଟେ</translation> <translation id="3842552989725514455">ସେରିଫ୍ ଫଣ୍ଟ</translation> @@ -2769,6 +2773,7 @@ <translation id="4699172675775169585">କେଚ୍ ଛବି ଏବଂ ଫାଇଲ୍</translation> <translation id="4699357559218762027">(ଅଟୋ-ଲଞ୍ଚ କରାଗଲା)</translation> <translation id="470074695271471509">ସମାପ୍ତ କରିବା ପାଇଁ ସାଇନ୍ ଆଉଟ୍ କରିବେ?</translation> +<translation id="4701025263201366865">ବାପାମା ସାଇନ୍-ଇନ୍</translation> <translation id="4707302005824653064">।chrome.com ରେ ପରିଚାଳକ (<ph name="CUSTODIAN_EMAIL" />) ଙ୍କ ଦ୍ଵାରା ବ୍ୟବହାର ଓ ଇତିବୃତ୍ତିର ସମୀକ୍ଷା କରାଯାଇପାରିବ।</translation> <translation id="4707579418881001319">L2TP/IPsec + ଉପଯୋଗକର୍ତ୍ତା ସାର୍ଟିଫିକେଟ୍</translation> <translation id="4708794300267213770">ନିଷ୍କ୍ରିୟତାରୁ ବାହାରିବା ସମୟରେ ଲକ୍ ସ୍କ୍ରିନ୍ ଦେଖାନ୍ତୁ</translation> @@ -3076,6 +3081,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ସନ୍ଧାନ</translation> <translation id="5139823398361067371">ଆପଣଙ୍କର ସୁରକ୍ଷା କୀ ପାଇଁ PIN ଲେଖନ୍ତୁ। ଯଦି ଆପଣ PIN ଜାଣି ନାହାଁନ୍ତି, ତେବେ ଆପଣ ସୁରକ୍ଷା କୀ ରିସେଟ୍ କରିବାକୁ ଆବଶ୍ୟକ କରିବେ।</translation> <translation id="5139955368427980650">&ଖୋଲନ୍ତୁ</translation> +<translation id="5142793792982256885">ଟଚପ୍ୟାଡ୍ ସ୍କ୍ରଲ୍ ବେଗ</translation> <translation id="5142961317498132443">ପ୍ରମାଣିକରଣ</translation> <translation id="5143374789336132547">ଏକ୍ସଟେନ୍ସନ୍ "<ph name="EXTENSION_NAME" />" ଏହା ପରିବର୍ତ୍ତନ କରିଛି ଯେ ଯେତେବେଳେ ଆପଣ ହୋମ୍ ବଟନ୍ରେ କ୍ଲିକ୍ କରନ୍ତି ସେତେବେଳେ କେଉଁ ପୃଷ୍ଠା ଦେଖାଇବ।</translation> <translation id="5143712164865402236">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ରେ ପ୍ରବେଶ କରନ୍ତୁ</translation> @@ -3638,6 +3644,7 @@ <translation id="5901630391730855834">ହଳଦିଆ</translation> <translation id="5906655207909574370">ପ୍ରାୟ ଅପ୍-ଟୁ-ଡେଟ୍! ଅପଡେଟିଂ ସମାପ୍ତ କରିବା ପାଇଁ ନିଜ ଡିଭାଇସ୍କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।</translation> <translation id="5906732635754427568">ଏହି ଡିଭାଇସ୍ରୁ ଏହି ଆପ୍ ସମ୍ବନ୍ଧିତ ଡାଟା କାଢ଼ିଦିଆଯିବ।</translation> +<translation id="5908695239556627796">ମାଉସ୍ ସ୍କ୍ରଲ୍ ବେଗ</translation> <translation id="5908769186679515905">ଫ୍ଲାସ୍ ଚଲାଇବାରୁ ସାଇଟ୍ଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="5910363049092958439">ଛବି ଏପରି ଭାବେ &ସେଭ୍ କରନ୍ତୁ...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ଅଫଲାଇନ୍ ଅଛି</translation> @@ -4027,7 +4034,7 @@ <translation id="6414888972213066896">ଆପଣ ନିଜର ମାତାପିତାଙ୍କୁ ଏହି ସାଇଟ୍କୁ ଯିବା ଠିକ୍ କି ବୋଲି ପଚାରିଛନ୍ତି</translation> <translation id="6415900369006735853">ଆପଣଙ୍କର ଫୋନ୍ ମାଧ୍ୟମରେ ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ କରନ୍ତୁ</translation> <translation id="6416743254476733475">ଆପଣଙ୍କର କମ୍ପ୍ୟୁଟର୍ରେ ଅନୁମତି ଦିଅନ୍ତୁ କିମ୍ବା ବ୍ଲକ୍ କରନ୍ତୁ।</translation> -<translation id="6417265370957905582">Google ଆସିଷ୍ଟାଣ୍ଟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> ପୂର୍ବରୁ ଇନ୍ଷ୍ଟଲ୍ କରାଯାଇଥିବା ସଂସ୍କରଣକୁ ପୁଣି ଆଣିବା</translation> <translation id="6418481728190846787">ସମସ୍ତ ଆପ୍ସ ପାଇଁ ସ୍ଥାୟୀରୂପେ ଆକ୍ସେସ୍ କାଢ଼ି ଦିଅନ୍ତୁ</translation> <translation id="6418511932144861495">ଜଟିଳ ଅପ୍ଡେଟ୍ ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ</translation> @@ -5087,6 +5094,7 @@ <ph name="BEGIN_BOLD" />ଟିପ୍ପଣୀ:<ph name="END_BOLD" /> ଏହି ପ୍ରକ୍ରିୟା ଚାଲୁଥିବା ସମୟରେ ସିଷ୍ଟମ୍ ରିବୁଟ୍ ହେବ।</translation> <translation id="7828731929332799387">ଏହା ତୃତୀୟ-ପକ୍ଷ ପ୍ରସଙ୍ଗରେ ଉପଲବ୍ଧ ଥିବା ସମସ୍ତ କୁକୀ ଏବଂ ସାଇଟ୍ ଡାଟା ଡିଲିଟ୍ କରିଦେବ। ଆପଣ ଜାରି ରଖିବାକୁ ଚାହୁଁଛନ୍ତି କି?</translation> <translation id="7829298379596169484">ଅଡିଓ ଇନ୍ପୁଟ୍ ଆକ୍ସେସ୍ କରୁଛି</translation> +<translation id="7829877209233347340">ଏକ ସ୍କୁଲ ଆକାଉଣ୍ଟ ଯୋଗ କରିବାକୁ ଅନୁମତି ଦେବା ପାଇଁ ଜଣେ ବାପା କିମ୍ବା ମା'ଙ୍କୁ ସାଇନ୍ ଇନ୍ କରିବାକୁ କୁହନ୍ତୁ</translation> <translation id="7830594666202422257">Linuxକୁ ସଂଯୋଗ କରନ୍ତୁ</translation> <translation id="7831491651892296503">ନେଟ୍ୱର୍କ କନ୍ଫିଗର୍ କରିବା ସମୟରେ ତ୍ରୁଟି ହୋଇଛି</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5838,6 +5846,7 @@ <translation id="8808686172382650546">କ୍ୟାଟ୍</translation> <translation id="8808744862003883508">ଏହି ପୃଷ୍ଠାରେ ଆପଣ Chromeରେ ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ସମସ୍ତ ଏକ୍ସଟେନ୍ସନ୍ ଦେଖିପାରିବେ।</translation> <translation id="8809147117840417135">ହାଲୁକା ଟିଲ୍</translation> +<translation id="8812593354822910461">ଆପଣଙ୍କୁ <ph name="DOMAIN" />ରୁ ସାଇନ୍ ଆଉଟ୍ କରିଦେବା ବ୍ରାଉଜିଂ ଡାଟା (<ph name="URL" />)କୁ ମଧ୍ୟ ଖାଲି କରନ୍ତୁ। <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />ରେ ସାଇନ୍ ଇନ୍ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="8813811964357448561">କାଗଜର ସୀଟ୍</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"କୁ ଅନୁମୋଦନ କରିବା ପାଇଁ ଜଣେ ବାପା କିମ୍ବା ମା'ଙ୍କୁ ପଚାରନ୍ତୁ</translation> @@ -6127,6 +6136,7 @@ <translation id="9203398526606335860">&ପ୍ରଫାଇଲିଂ ସକ୍ଷମ କରାଗଲା</translation> <translation id="9203904171912129171">ଏକ ଡିଭାଇସ୍ ଚୟନ କରନ୍ତୁ</translation> <translation id="9203962528777363226">ଏହି ଡିଭାଇସ୍ର ବ୍ୟବସ୍ଥାପକ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ଯୋଗ ହେବାକୁ ଅକ୍ଷମ କରିଛନ୍ତି</translation> +<translation id="9209689095351280025">ସାଇଟଗୁଡ଼ିକ ସମଗ୍ର ୱେବରେ ଆପଣଙ୍କୁ ଟ୍ରାକ୍ କରୁଥିବା କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ</translation> <translation id="9211177926627870898">ଅପଡେଟ୍ କରିବା ଦରକାର</translation> <translation id="9214520840402538427">ଓହୋ! ଇନ୍ଷ୍ଟଲେସନ୍ ସମୟ ବୈଶିଷ୍ଟ୍ୟର ଇନ୍ଷ୍ଟାଲାଇଜେସନ୍ ସମୟ ଅବଧି ଶେଷ। ଦୟାକରି ଆପଣଙ୍କ ସମର୍ଥକ ପ୍ରତିନିଧିଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation> <translation id="9214695392875603905">କପ୍କେକ୍</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index cf9f6562..606f09ec 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">ਅਪਲੋਡ ਕਰੋ</translation> <translation id="1244265436519979884">ਇਸ ਵੇਲੇ Linux ਦੀ ਮੁੜ-ਬਹਾਲੀ ਜਾਰੀ ਹੈ</translation> <translation id="1244303850296295656">ਐਕਸਟੈਂਸ਼ਨ ਗੜਬੜ</translation> +<translation id="1246158006305844142">ਜਿੱਥੇ ਤੁਸੀਂ ਆਪਣੇ Google ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਹੋ, ਉੱਥੇ ਤੁਹਾਡੀਆਂ ਐਪਾਂ ਅਤੇ ਸੈਟਿੰਗਾਂ ਦਾ ਸਾਰੇ Chrome OS ਡੀਵਾਈਸਾਂ ਨਾਲ ਸਮਕਾਲੀਕਰਨ ਕੀਤਾ ਜਾਵੇਗਾ। ਬ੍ਰਾਊਜ਼ਰ ਸਮਕਾਲੀਕਰਨ ਵਿਕਲਪਾਂ ਲਈ, <ph name="LINK_BEGIN" />Chrome ਸੈਟਿੰਗਾਂ<ph name="LINK_END" /> 'ਤੇ ਜਾਓ।</translation> <translation id="1246905108078336582">ਕੀ ਕਲਿੱਪਬੋਰਡ ਤੋਂ ਸੁਝਾਅ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ਨੂੰ ਨਾਪਸੰਦ ਹੋਣ ਕਰਕੇ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation> <translation id="1251366534849411931">ਕੁੰਡਲਦਾਰ ਬ੍ਰੇਸ ਦੀ ਸੰਭਾਵੀ ਸ਼ੁਰੂਆਤ: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">ਨਹੀਂ, ਧੰਨਵਾਦ</translation> <translation id="1525740877599838384">ਟਿਕਾਣੇ ਦਾ ਪਤਾ ਲਗਾਉਣ ਲਈ ਸਿਰਫ਼ ਵਾਈ-ਫਾਈ ਵਰਤੋ</translation> <translation id="152629053603783244">Linux ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation> +<translation id="1526335046150927198">ਟੱਚਪੈਡ ਸਕ੍ਰੋਲ ਐਕਸੈੱਲਰੇਸ਼ਨ ਚਾਲੂ ਕਰੋ</translation> <translation id="1526560967942511387">ਬਿਨਾਂ ਸਿਰਲੇਖ ਦਾ ਦਸਤਾਵੇਜ਼</translation> <translation id="1529891865407786369">ਪਾਵਰ ਸਰੋਤ</translation> <translation id="1530838837447122178">ਮਾਊਸ ਅਤੇ ਟੱਚਪੈਡ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ</translation> @@ -1312,6 +1314,7 @@ <translation id="2725200716980197196">ਨੈੱਟਵਰਕ ਕਨੈਕਟੀਵਿਟੀ ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਗਿਆ</translation> <translation id="2727633948226935816">ਮੈਨੂੰ ਦੁਬਾਰਾ ਯਾਦ ਨਾ ਕਰਵਾਓ</translation> <translation id="2727712005121231835">ਅਸਲੀ ਆਕਾਰ</translation> +<translation id="2729314457178420145">ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ (<ph name="URL" />) ਵੀ ਕਲੀਅਰ ਕਰੋ ਜੋ ਸ਼ਾਇਦ ਤੁਹਾਨੂੰ Google.com ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕਰ ਦੇਵੇ। <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux ਐਪਾਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="273093730430620027">ਇਹ ਸਫ਼ਾ ਤੁਹਾਡੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਰਿਹਾ ਹੈ।</translation> <translation id="2731392572903530958">ਬੰਦ Window ਨੂੰ ਮੁ&ੜ ਖੋਲ੍ਹੋ</translation> @@ -1876,7 +1879,7 @@ <translation id="3496213124478423963">ਜ਼ੂਮ ਘਟਾਓ</translation> <translation id="3497560059572256875">ਡੂਡਲ ਸਾਂਝਾ ਕਰੋ</translation> <translation id="3498215018399854026">ਇਸ ਇਸ ਵੇਲੇ ਤੁਹਾਡੇ ਮਾਤਾ ਜਾਂ ਪਿਤਾ ਨਾਲ ਸੰਪਰਕ ਨਹੀਂ ਕਰ ਸਕੇ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> -<translation id="3500417806337761827">ਸਾਂਝਾਕਰਨ ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ। ਬਹੁਤ ਸਾਰੇ SMB ਸਾਂਝਾਕਰਨਾਂ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਮਾਊਂਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।</translation> +<translation id="3500417806337761827">ਸਾਂਝਾਕਰਨ ਮਾਊਂਟ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ। ਬਹੁਤ ਸਾਰੇ SMB ਸਾਂਝਾਕਰਨਾਂ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਮਾਊਂਟ ਕੀਤਾ ਜਾ ਚੁੱਕਿਆ ਹੈ।</translation> <translation id="3505030558724226696">ਡੀਵਾਈਸ ਪਹੁੰਚ ਰੱਦ ਕਰੋ</translation> <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />" ਲਈ ਮੌਜੂਦਾ ਅਨੁਮਤੀਆਂ</translation> <translation id="3507888235492474624">ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਲਈ ਮੁੜ-ਸਕੈਨ ਕਰੋ</translation> @@ -2162,6 +2165,7 @@ <translation id="3838486795898716504">ਹੋਰ <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਤੇ ਪਲੱਗਇਨ ਸੰਬੰਧੀ ਹੋਰ ਡਾਟਾ</translation> <translation id="383891835335927981">ਕੋਈ ਵੀ ਸਾਈਟਾਂ ਜ਼ੂਮ ਇਨ ਜਾਂ ਆਊਟ ਨਹੀਂ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ</translation> +<translation id="3839509547554145593">ਮਾਊਸ ਸਕ੍ਰੋਲ ਐਕਸੈੱਲਰੇਸ਼ਨ ਚਾਲੂ ਕਰੋ</translation> <translation id="3839516600093027468"><ph name="HOST" /> ਨੂੰ ਕਲਿੱਪਬੋਰਡ ਦੇਖਣ ਤੋਂ ਹਮੇਸ਼ਾਂ ਬਲਾਕ ਕਰੋ</translation> <translation id="3841964634449506551">ਅਵੈਧ ਪਾਸਵਰਡ</translation> <translation id="3842552989725514455">Serif ਫੌਂਟ</translation> @@ -2752,7 +2756,7 @@ <translation id="4665446389743427678"><ph name="SITE" /> ਵੱਲੋਂ ਸਟੋਰ ਕੀਤਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation> <translation id="4668721319092543482"><ph name="PLUGIN_NAME" /> ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ</translation> <translation id="4670064810192446073">ਆਭਾਸੀ ਵਾਸਤਵਿਕਤਾ</translation> -<translation id="4672879467403304774">ਜਦੋਂ ਤੁਸੀਂ ਸਾਈਨ-ਇਨ ਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ Chrome ਅਤੇ ਹੋਰ Google ਐਪਾਂ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰਹਿੰਦੇ ਹੋ</translation> +<translation id="4672879467403304774">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ 'ਤੇ, ਤੁਹਾਨੂੰ Chrome ਅਤੇ ਹੋਰ Google ਐਪਾਂ 'ਤੇ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ</translation> <translation id="46733273239502219">ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਵਿਚਲੇ ਆਫ਼ਲਾਈਨ ਡਾਟੇ ਨੂੰ ਵੀ ਕਲੀਅਰ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> <translation id="4673442866648850031">ਸਟਾਈਲਸ ਦੇ ਹਟਾਏ ਜਾਣ 'ਤੇ ਸਟਾਈਲਸ ਟੂਲ ਖੋਲ੍ਹੋ</translation> <translation id="4677772697204437347">GPU ਮੈਮਰੀ</translation> @@ -2773,6 +2777,7 @@ <translation id="4699172675775169585">ਕੈਚ ਕੀਤੇ ਚਿੱਤਰ ਅਤੇ ਫਾਈਲਾਂ</translation> <translation id="4699357559218762027">(ਆਟੋ-ਲੌਂਚ ਕੀਤਾ)</translation> <translation id="470074695271471509">ਕੀ ਕਾਰਵਾਈ ਪੂਰੀ ਕਰਨ ਲਈ ਸਾਈਨ-ਆਊਟ ਕਰਨਾ ਹੈ?</translation> +<translation id="4701025263201366865">ਮਾਂ-ਪਿਓ ਦਾ ਸਾਈਨ-ਇਨ</translation> <translation id="4707302005824653064">ਵਰਤੋਂ ਅਤੇ ਇਤਿਹਾਸ ਦੀ ਸਮੀਖਿਆ ਪ੍ਰਬੰਧਕ (<ph name="CUSTODIAN_EMAIL" />) ਵੱਲੋਂ chrome.com 'ਤੇ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।</translation> <translation id="4707579418881001319">L2TP/IPsec + ਵਰਤੋਂਕਾਰ ਪ੍ਰਮਾਣ-ਪੱਤਰ</translation> <translation id="4708794300267213770">ਸਲੀਪ ਤੋਂ ਕਿਰਿਆਸ਼ੀਲ ਹੋਣ ਦੌਰਾਨ ਲੌਕ ਸਕ੍ਰੀਨ ਦਿਖਾਓ </translation> @@ -3080,6 +3085,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> ਖੋਜ</translation> <translation id="5139823398361067371">ਆਪਣੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਦਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਜੇ ਤੁਹਾਨੂੰ ਪਿੰਨ ਨਹੀਂ ਪਤਾ, ਤਾਂ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਪਵੇਗਾ।</translation> <translation id="5139955368427980650">&ਖੋਲ੍ਹੋ</translation> +<translation id="5142793792982256885">ਟੱਚਪੈਡ ਸਕ੍ਰੋਲ ਗਤੀ</translation> <translation id="5142961317498132443">ਪ੍ਰਮਾਣੀਕਰਨ</translation> <translation id="5143374789336132547">ਐਕਸਟੈਂਸ਼ਨ <ph name="EXTENSION_NAME" /> ਨੇ ਇਹ ਬਦਲ ਦਿੱਤਾ ਹੈ ਕਿ ਜਦੋਂ ਤੁਸੀਂ ਹੋਮ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰਦੇ ਹੋ ਤਾਂ ਕਿਹੜਾ ਪੰਨਾ ਦਿਖਾਇਆ ਜਾਵੇ।</translation> <translation id="5143712164865402236">ਪੂਰੀ ਸਕ੍ਰੀਨ ਦਰਜ ਕਰੋ</translation> @@ -3642,6 +3648,7 @@ <translation id="5901630391730855834">ਪੀਲਾ</translation> <translation id="5906655207909574370">ਲਗਭਗ ਅੱਪ ਟੂ ਡੇਟ! ਅੱਪਡੇਟ ਕਰਨਾ ਪੂਰਾ ਕਰਨ ਲਈ ਆਪਣੀ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ।</translation> <translation id="5906732635754427568">ਇਸ ਐਪ ਨਾਲ ਸਬੰਧਿਤ ਡਾਟੇ ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation> +<translation id="5908695239556627796">ਮਾਊਸ ਸਕ੍ਰੋਲ ਗਤੀ</translation> <translation id="5908769186679515905">ਸਾਈਟਾਂ ਨੂੰ Flash ਚਲਾਉਣ ਤੋਂ ਰੋਕੋ</translation> <translation id="5910363049092958439">ਦੇ ਤੌਰ ਤੇ ਚਿੱਤਰ ਰੱ&ਖਿਅਤ ਕਰੋ...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ਆਫ਼ਲਾਈਨ ਹੈ</translation> @@ -4031,7 +4038,7 @@ <translation id="6414888972213066896">ਤੁਸੀਂ ਆਪਣੇ ਮਾਤਾ-ਪਿਤਾ ਤੋਂ ਪੁੱਛਿਆ ਕਿ ਕੀ ਇਸ ਸਾਈਟ 'ਤੇ ਜਾਣਾ ਠੀਕ ਹੈ</translation> <translation id="6415900369006735853">ਆਪਣੇ ਫ਼ੋਨ ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਕਰੋ</translation> <translation id="6416743254476733475">ਆਪਣੇ ਕੰਪਿਊਟਰ 'ਤੇ ਕਰਨ ਦਿਓ ਜਾਂ ਬਲਾਕ ਕਰੋ।</translation> -<translation id="6417265370957905582">Google ਅਸਿਸਟੈਂਟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> ਦੇ ਪਹਿਲਾਂ ਸਥਾਪਤ ਕੀਤੇ ਵਰਜਨ 'ਤੇ ਵਾਪਸ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="6418481728190846787">ਸਾਰੇ ਐਪਸ ਲਈ ਸਥਾਈ ਤੌਰ ਤੇ ਪਹੁੰਚ ਹਟਾਓ</translation> <translation id="6418511932144861495">ਅਤਿ ਜ਼ਰੂਰੀ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕਰੋ</translation> @@ -4274,7 +4281,7 @@ <translation id="6767639283522617719">ਡੋਮੇਨ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਪੱਕਾ ਕਰੋ ਕਿ ਸੰਸਥਾਗਤ ਇਕਾਈ ਲਈ ਸੈਟਿੰਗਾਂ ਸਹੀ ਹਨ।</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> ਵੱਲੋਂ ਤੁਹਾਨੂੰ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।</translation> <translation id="6769712124046837540">ਪ੍ਰਿੰਟਰ ਜੋੜ ਰਿਹਾ ਹੈ...</translation> -<translation id="6770602306803890733">ਵੈੱਬ 'ਤੇ ਤੁਹਾਡੀ ਅਤੇ ਹਰ ਕਿਸੇ ਲਈ ਸੁਰੱਖਿਆ ਨੂੰ ਬਿਹਤਰ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ</translation> +<translation id="6770602306803890733">ਵੈੱਬ 'ਤੇ ਤੁਹਾਡੀ ਅਤੇ ਹਰ ਕਿਸੇ ਦੀ ਸੁਰੱਖਿਆ ਨੂੰ ਬਿਹਤਰ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ</translation> <translation id="6770664076092644100">NFC ਰਾਹੀਂ ਪੁਸ਼ਟੀ ਕਰੋ</translation> <translation id="6771503742377376720">ਇੱਕ ਸਰਟੀਫਿਕੇਸ਼ਨ ਅਥਾੱਰਿਟੀ ਹੈ</translation> <translation id="6772339735733515807">ਆਪਣੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> @@ -5088,6 +5095,7 @@ <ph name="BEGIN_BOLD" />ਨੋਟ ਕਰੋ:<ph name="END_BOLD" /> ਸਿਸਟਮ ਪ੍ਰਕਿਰਿਆ ਦੇ ਦੌਰਾਨ ਰੀਬੂਟ ਹੋਵੇਗਾ।</translation> <translation id="7828731929332799387">ਇਹ ਤੀਜੀ-ਧਿਰ ਦੇ ਸੰਦਰਭਾਂ ਵਿੱਚ ਉਪਲਬਧ ਸਾਰੀਆਂ ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਡਾਟੇ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?</translation> <translation id="7829298379596169484">ਆਡੀਓ ਇਨਪੁਟ ਤੱਕ ਪਹੁੰਚ ਰਿਹਾ ਹੈ</translation> +<translation id="7829877209233347340">ਸਕੂਲੀ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ ਮਾਂ-ਪਿਓ ਵਿੱਚੋਂ ਕਿਸੇ ਇੱਕ ਨੂੰ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਕਹੋ</translation> <translation id="7830594666202422257">Linux ਨਾਲ ਕਨੈਕਟ ਕਰੋ</translation> <translation id="7831491651892296503">ਨੈੱਟਵਰਕ ਦਾ ਸੰਰੂਪਣ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5840,6 +5848,7 @@ <translation id="8808686172382650546">ਬਿੱਲੀ</translation> <translation id="8808744862003883508">ਤੁਸੀਂ Chrome 'ਤੇ ਸਥਾਪਤ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਇਸ ਪੰਨੇ 'ਤੇ ਦੇਖ ਸਕਦੇ ਹੋ।</translation> <translation id="8809147117840417135">ਹਲਕਾ ਹਰਾ-ਨੀਲਾ</translation> +<translation id="8812593354822910461">ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ (<ph name="URL" />) ਵੀ ਕਲੀਅਰ ਕਰੋ ਜੋ ਤੁਹਾਨੂੰ <ph name="DOMAIN" /> ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕਰ ਦੇਵੇਗਾ। <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> ਵਿੱਚ ਸਾਈਨ-ਇਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="8813811964357448561">ਕਾਗਜ਼ ਦੀ ਸ਼ੀਟ</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />" ਨੂੰ ਮਨਜ਼ੂਰੀ ਦੇਣ ਲਈ ਮਾਂ-ਪਿਓ ਦੀ ਮਦਦ ਲਓ</translation> @@ -6129,6 +6138,7 @@ <translation id="9203398526606335860">&ਪ੍ਰੋਫਾਈਲਿੰਗ ਸਮਰਥਿਤ</translation> <translation id="9203904171912129171">ਕੋਈ ਡੀਵਾਈਸ ਚੁਣੋ</translation> <translation id="9203962528777363226">ਇਸ ਡੀਵਾਈਸ ਦੇ ਪ੍ਰਬੰਧਕ ਨੇ ਨਵੇਂ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਸ਼ਾਮਿਲ ਕੀਤੇ ਜਾਣ ਨੂੰ ਬੰਦ ਕੀਤਾ ਹੈ।</translation> +<translation id="9209689095351280025">ਸਾਈਟਾਂ ਉਹਨਾਂ ਕੁਕੀਜ਼ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ ਜੋ ਵੈੱਬ 'ਤੇ ਤੁਹਾਨੂੰ ਟਰੈਕ ਕਰਦੀਆਂ ਹਨ</translation> <translation id="9211177926627870898">ਅੱਪਡੇਟ ਲੋੜੀਂਦਾ ਹੈ</translation> <translation id="9214520840402538427">ਓਹੋ! ਸਥਾਪਨਾ-ਸਮਾਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੇ ਸ਼ੁਰੂ ਹੋਣ ਦਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸਹਾਇਤਾ ਪ੍ਰਤੀਨਿਧੀ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 61a47e3d..f335936 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">To rozszerzenie nie wymaga specjalnych uprawnień.</translation> <translation id="1616298854599875024">Nie można zaimportować rozszerzenia „<ph name="IMPORT_NAME" />”, ponieważ nie jest to moduł udostępniany</translation> <translation id="1618268899808219593">C&entrum pomocy</translation> +<translation id="1620307519959413822">Nieprawidłowe hasło. Spróbuj ponownie lub kliknij Nie pamiętam hasła, by je zresetować.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Obrazy są obecnie niedostępne. Aby zobaczyć kolekcje tapet, połącz się ponownie z internetem.</translation> <translation id="1627276047960621195">Deskryptory plików</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Wersja sprzętu</translation> <translation id="1890674179660343635"><span>Identyfikator: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Otwórz na pełnym ekranie</translation> +<translation id="1892341345406963517">Cześć <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Inne języki</translation> <translation id="1895252664692693738">Jeszcze <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Wyłączenie</translation> @@ -1053,7 +1055,7 @@ <translation id="2392369802118427583">Aktywuj</translation> <translation id="2394566832561516196">Ustawienia zostaną wyczyszczone przy następnym ponownym ładowaniu.</translation> <translation id="2395616325548404795">Urządzenie <ph name="DEVICE_TYPE" /> zostało zarejestrowane do zarządzania w firmie, ale nie wysłało informacji o zasobie ani lokalizacji. Wpisz te informacje ręcznie przy urządzeniu w konsoli administracyjnej.</translation> -<translation id="2396387085693598316">Administrator zablokował rozszerzenie „<ph name="EXTENSION_NAME" />”.</translation> +<translation id="2396387085693598316">Administrator zablokował rozszerzenie „<ph name="EXTENSION_NAME" />”</translation> <translation id="2396783860772170191">Wpisz 4-cyfrowy kod PIN (0000–9999)</translation> <translation id="2399939490305346086">Dane logowania na kluczu bezpieczeństwa</translation> <translation id="2400664245143453337">Wymagana natychmiastowa aktualizacja</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Pokaż ustawienia serwera proxy</translation> <translation id="5215502535566372932">Wybierz kraj</translation> <translation id="521582610500777512">Zdjęcie zostało odrzucone</translation> +<translation id="5222403284441421673">Zablokowano pobieranie niebezpiecznego pliku</translation> <translation id="5222676887888702881">Wyloguj się</translation> <translation id="52232769093306234">Nie udało się spakować.</translation> <translation id="5225324770654022472">Pokaż skrót do aplikacji</translation> @@ -3380,7 +3383,7 @@ <translation id="5539221284352502426">Podane hasło zostało odrzucone przez serwer. Możliwe, że jest ono za krótkie, musi zawierać cyfry lub symbole albo musi się różnić od poprzednich haseł.</translation> <translation id="5541694225089836610">Administrator wyłączył to działanie</translation> <translation id="5542132724887566711">Profil</translation> -<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" /> wymaga jak najszybszego zaktualizowania urządzenia.</translation> +<translation id="5542133445231529202"><ph name="ORGANIZATION_NAME" /> wymaga natychmiastowego zaktualizowania urządzenia.</translation> <translation id="5542750926112347543">Pliki cookie z witryny <ph name="DOMAIN" /> zostały zablokowane</translation> <translation id="5542949973455282971">Łączę z siecią <ph name="CARRIER_NAME" /></translation> <translation id="5543983818738093899">Sprawdzam stan...</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Komunikacja</translation> <translation id="5734697361979786483">Dodaj udział plików</translation> <translation id="5736796278325406685">Wpisz prawidłową nazwę użytkownika</translation> +<translation id="5739017626473506901">Zaloguj się, by pomóc użytkownikowi <ph name="USER_NAME" /> w dodawaniu konta szkolnego</translation> <translation id="5739235828260127894">Czekam na weryfikację. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Bardzo duża</translation> <translation id="574209121243317957">Ton</translation> @@ -4850,7 +4854,7 @@ <translation id="7514239104543605883">Skopiuj na swoje urządzenie</translation> <translation id="7514365320538308">Pobierz</translation> <translation id="751523031290522286">Administrator zablokował aplikację <ph name="APP_NAME" />. Aby móc z niej korzystać, poproś go o pozwolenie.</translation> -<translation id="7516981202574715431"><ph name="APP_NAME" /> – wstrzymano</translation> +<translation id="7516981202574715431">Aplikacja <ph name="APP_NAME" /> została wstrzymana</translation> <translation id="7517063221058203587">{0,plural, =1{Aktualizacja urządzenia nastąpi w ciągu 1 minuty}few{Aktualizacja urządzenia nastąpi w ciągu # minut}many{Aktualizacja urządzenia nastąpi w ciągu # minut}other{Aktualizacja urządzenia nastąpi w ciągu # minuty}}</translation> <translation id="7520766081042531487">Portal incognito: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">Sieć <ph name="NETWORK_TYPE" />, łączę</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Najpierw zapytaj (zalecane)</translation> +<translation id="8417548266957501132">Hasło rodzica</translation> <translation id="8417573335434189196">Nie chroni przed niebezpiecznymi stronami, pobieranymi plikami ani rozszerzeniami. Chrome nie poleca tego ustawienia.</translation> <translation id="8418445294933751433">&Pokaż jako kartę</translation> <translation id="8419098111404128271">Wyniki wyszukiwania dla „<ph name="SEARCH_TEXT" />”</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 853b5e2..12d9d51 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Esta extensão não requer permissões especiais.</translation> <translation id="1616298854599875024">Não foi possível importar a extensão "<ph name="IMPORT_NAME" />", porque ela não é um módulo compartilhado</translation> <translation id="1618268899808219593">Central de ajuda</translation> +<translation id="1620307519959413822">Senha incorreta. Tente novamente ou clique em "Esqueceu a senha?" para redefini-la.</translation> <translation id="1620510694547887537">Câmera</translation> <translation id="1623132449929929218">As imagens estão indisponíveis no momento. Reconecte-se à Internet para ver as coleções de plano de fundo.</translation> <translation id="1627276047960621195">Descritores de arquivos</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Revisão do hardware</translation> <translation id="1890674179660343635"><span>Código: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Abrir tela cheia</translation> +<translation id="1892341345406963517">Olá, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Outros idiomas</translation> <translation id="1895252664692693738">Tempo restante: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Encerramento</translation> @@ -845,7 +847,7 @@ <translation id="2135787500304447609">&Retomar</translation> <translation id="2136372518715274136">Digite a nova senha</translation> <translation id="2136476978468204130">A senha longa informada está incorreta</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{Os cookies foram bloqueados.}=1{Os cookies foram bloqueados, 1 exceção}one{Os cookies foram bloqueados, {COUNT} exceção}other{Os cookies foram bloqueados, {COUNT} exceções}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{Os cookies foram bloqueados.}=1{Os cookies foram bloqueados, com 1 exceção}one{Os cookies foram bloqueados, com {COUNT} exceção}other{Os cookies foram bloqueados, com {COUNT} exceções}}</translation> <translation id="2138398485845393913">A conexão com "<ph name="DEVICE_NAME" />" ainda está em andamento</translation> <translation id="2139545522194199494">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, intensidade de sinal em <ph name="SIGNAL_STRENGTH" />%, gerenciada pelo seu administrador, conectar</translation> <translation id="2139919072249842737">Botão "Configurar"</translation> @@ -1881,7 +1883,7 @@ <translation id="3496213124478423963">Afastar</translation> <translation id="3497560059572256875">Compartilhar doodle</translation> <translation id="3498215018399854026">Não foi possível contatar seu pai/mãe no momento. Tente novamente.</translation> -<translation id="3500417806337761827">Erro ao ativar o compartilhamento. Muitos compartilhamentos PME já estão ativos.</translation> +<translation id="3500417806337761827">Erro ao ativar o compartilhamento. Muitos compartilhamentos SMB já estão ativos.</translation> <translation id="3505030558724226696">Revogar acesso ao dispositivo</translation> <translation id="3507421388498836150">Permissões atuais para "<ph name="EXTENSION_NAME" />"</translation> <translation id="3507888235492474624">Procurar dispositivos Bluetooth novamente</translation> @@ -2633,7 +2635,7 @@ <translation id="450099669180426158">Ícone de ponto de exclamação</translation> <translation id="4501530680793980440">Confirmar remoção</translation> <translation id="4502423230170890588">Remover deste dispositivo</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{Os cookies foram permitidos}=1{Os cookies foram permitidos, 1 exceção}one{Os cookies foram permitidos, {COUNT} exceção}other{Os cookies foram permitidos, {COUNT} exceções}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{Os cookies foram permitidos}=1{Os cookies foram permitidos, com 1 exceção}one{Os cookies foram permitidos, com {COUNT} exceção}other{Os cookies foram permitidos, com {COUNT} exceções}}</translation> <translation id="4504940961672722399">Para usar esta extensão, clique neste ícone ou pressione <ph name="EXTENSION_SHORTCUT" />.</translation> <translation id="4508051413094283164">Abrir todos em uma janela anônima</translation> <translation id="4508265954913339219">Falha na ativação</translation> @@ -2728,7 +2730,7 @@ <translation id="4628757576491864469">Dispositivos</translation> <translation id="4628762811416793313">A configuração do contêiner Linux não foi concluída. Tente novamente.</translation> <translation id="4633003931260532286">A extensão requer "<ph name="IMPORT_NAME" />" com a versão mínima "<ph name="IMPORT_VERSION" />", mas apenas a versão "<ph name="INSTALLED_VERSION" />" está instalada</translation> -<translation id="4633757335284074492">Faça backup no Google Drive Restaure dados ou troque de dispositivo a qualquer momento com facilidade. O backup inclui dados do app. Os backups são enviados ao Google e criptografados usando a senha da Conta do Google da criança.</translation> +<translation id="4633757335284074492">Fazer backup no Google Drive Restaure dados ou troque de dispositivo a qualquer momento com facilidade. O backup inclui dados do app. Os backups são enviados ao Google e criptografados usando a senha da Conta do Google da criança.</translation> <translation id="4634771451598206121">Fazer login novamente...</translation> <translation id="4635398712689569051"><ph name="PAGE_NAME" /> não está disponível para usuários visitantes.</translation> <translation id="4637083375689622795">Mais ações, <ph name="EMAIL" /></translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Mostrar configurações de proxy</translation> <translation id="5215502535566372932">Selecione um país</translation> <translation id="521582610500777512">A foto foi descartada.</translation> +<translation id="5222403284441421673">Download não seguro bloqueado</translation> <translation id="5222676887888702881">Sair</translation> <translation id="52232769093306234">O empacotamento falhou.</translation> <translation id="5225324770654022472">Mostrar atalho para aplicativos</translation> @@ -3426,7 +3429,7 @@ <translation id="5593357315997824387">Sincronizar meus arquivos</translation> <translation id="5595152862129936745">Muito longe</translation> <translation id="5595485650161345191">Editar endereço</translation> -<translation id="5595727715083333657">Seu contêiner não é compatível com redimensionamento. Para ajustar a quantidade de espaço pré-alocada no Linux (Beta), faça backup e restaure em um novo contêiner.</translation> +<translation id="5595727715083333657">Seu contêiner não é compatível com redimensionamento. Para ajustar a quantidade de espaço pré-alocada para o Linux (Beta), faça backup e restaure em um novo contêiner.</translation> <translation id="5596627076506792578">Mais opções</translation> <translation id="5600706100022181951">O download da atualização será feito com <ph name="UPDATE_SIZE_MB" /> MB de dados móveis. Quer continuar?</translation> <translation id="5601503069213153581">PIN</translation> @@ -3532,6 +3535,7 @@ <translation id="5734362860645681824">Comunicações</translation> <translation id="5734697361979786483">Adicionar compartilhamento de arquivos</translation> <translation id="5736796278325406685">Insira um nome de usuário válido</translation> +<translation id="5739017626473506901">Faça login para ajudar <ph name="USER_NAME" /> a adicionar uma conta escolar</translation> <translation id="5739235828260127894">Aguardando verificação. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Muito grande</translation> <translation id="574209121243317957">Tom da fala</translation> @@ -4794,7 +4798,7 @@ <translation id="7441830548568730290">Outros usuários</translation> <translation id="7442465037756169001">Seu hardware Hangouts Meet está pronto para ser configurado.</translation> <translation id="744341768939279100">Criar um novo perfil</translation> -<translation id="744366959743242014">Carregando dados. Isso pode demorar um pouco.</translation> +<translation id="744366959743242014">Carregando dados. Isso pode levar alguns segundos.</translation> <translation id="7443806024147773267">Acesse suas senhas sempre que estiver utilizando sua Conta Google</translation> <translation id="7444983668544353857">Desativar <ph name="NETWORKDEVICE" /></translation> <translation id="7448430327655618736">Instalar apps automaticamente</translation> @@ -4914,7 +4918,7 @@ <translation id="7609148976235050828">Conecte-se à Internet e tente novamente.</translation> <translation id="7611008212562900400">Pesquisar no dispositivo, nos apps, na Web...</translation> <translation id="7614260613810441905">Perguntar quando um site quiser editar arquivos ou pastas do dispositivo (recomendado)</translation> -<translation id="761530003705945209">Faça backup no Google Drive Restaure seus dados ou troque de dispositivo a qualquer momento com facilidade. Seu backup inclui dados do app. Seus backups são enviados para o Google e criptografados usando a senha da sua Conta do Google.</translation> +<translation id="761530003705945209">Fazer backup no Google Drive Restaure seus dados ou troque de dispositivo a qualquer momento com facilidade. Seu backup inclui dados do app. Seus backups são enviados para o Google e criptografados usando a senha da sua Conta do Google.</translation> <translation id="7616214729753637086">Registrando dispositivo…</translation> <translation id="7617366389578322136">Conectando-se a "<ph name="DEVICE_NAME" />"</translation> <translation id="762068974690945752">Adicione uma conta escolar ou gerencie contas de criança aqui. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> @@ -5541,6 +5545,7 @@ <translation id="8408068190360279472">Rede <ph name="NETWORK_TYPE" />, conectando</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Perguntar primeiro (recomendado)</translation> +<translation id="8417548266957501132">Senha do pai/mãe</translation> <translation id="8417573335434189196">Não protege você contra sites, downloads e extensões perigosos. O Chrome não recomenda essa configuração.</translation> <translation id="8418445294933751433">&Mostrar como guia</translation> <translation id="8419098111404128271">Resultados de pesquisa para "<ph name="SEARCH_TEXT" />"</translation> @@ -6033,7 +6038,7 @@ <translation id="9027459031423301635">Abrir link em uma nova &guia</translation> <translation id="9030515284705930323">Sua organização não ativou a Google Play Store para sua conta. Entre em contato com seu administrador para receber mais informações.</translation> <translation id="9030785788945687215">Gmail</translation> -<translation id="9031549947500880805">Faça backup no Google Drive Restaure seus dados ou troque de dispositivo a qualquer momento com facilidade. Seu backup inclui dados do app.</translation> +<translation id="9031549947500880805">Fazer backup no Google Drive Restaure seus dados ou troque de dispositivo a qualquer momento com facilidade. Seu backup inclui dados do app.</translation> <translation id="9033857511263905942">&Colar</translation> <translation id="9037965129289936994">Mostrar original</translation> <translation id="903797871439633902">Esta é a última atualização automática de software e segurança deste <ph name="DEVICE_TYPE" />. Para receber atualizações futuras, faça upgrade para um modelo mais novo. <a target="_blank" href="<ph name="URL" />">Saiba mais</a></translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 2894a84..71b57ccf 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Carregar</translation> <translation id="1244265436519979884">Neste momento, está a decorrer o restauro do Linux.</translation> <translation id="1244303850296295656">Erro de extensão</translation> +<translation id="1246158006305844142">As suas apps e definições serão sincronizadas em todos os dispositivos Chrome OS nos quais tenha sessão iniciada com a Conta Google. Para ver as opções de sincronização do navegador, aceda às <ph name="LINK_BEGIN" />definições do Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Pretende remover a sugestão da área de transferência?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> foi bloqueado por ter sido descontinuado.</translation> <translation id="1251366534849411931">Chaveta de abertura esperada: <ph name="ERROR_LINE" />.</translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Não, Obrigado</translation> <translation id="1525740877599838384">Utilizar apenas Wi-Fi para determinar a localização</translation> <translation id="152629053603783244">Reiniciar Linux</translation> +<translation id="1526335046150927198">Ativar aceleração da deslocação do touchpad</translation> <translation id="1526560967942511387">Documento sem nome</translation> <translation id="1529891865407786369">Fonte de alimentação</translation> <translation id="1530838837447122178">Abrir definições do dispositivo do rato e do touchpad</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Esta extensão não requer autorizações especiais.</translation> <translation id="1616298854599875024">Não é possível importar a extensão "<ph name="IMPORT_NAME" />" porque não é um módulo partilhado.</translation> <translation id="1618268899808219593">C&entro de Ajuda</translation> +<translation id="1620307519959413822">Palavra-passe incorreta. Tente novamente ou clique em Esqueceu-se da palavra-passe para a repor.</translation> <translation id="1620510694547887537">Câmara</translation> <translation id="1623132449929929218">De momento, as imagens não estão disponíveis. Volte a estabelecer ligação à Internet para ver as coleções de imagens de fundo.</translation> <translation id="1627276047960621195">Descritores de ficheiros</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Revisão de hardware</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Abrir ecrã inteiro</translation> +<translation id="1892341345406963517">Olá, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Outros idiomas</translation> <translation id="1895252664692693738">Resta(m) <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Encerrar</translation> @@ -1312,6 +1316,7 @@ <translation id="2725200716980197196">Conetividade de rede restaurada</translation> <translation id="2727633948226935816">Não lembrar novamente</translation> <translation id="2727712005121231835">Tamanho real</translation> +<translation id="2729314457178420145">Limpar também os dados de navegação (<ph name="URL" />), o que poderá terminar a sua sessão em Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">A fazer uma cópia de segurança das aplicações e dos ficheiros do Linux…</translation> <translation id="273093730430620027">Esta página está a aceder à sua câmara.</translation> <translation id="2731392572903530958">Voltar a Abrir a Jan&ela Fechada</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Mais <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies e outros dados de sites e plug-ins</translation> <translation id="383891835335927981">O zoom dos sites não foi aumentado nem diminuído</translation> +<translation id="3839509547554145593">Ativar aceleração da deslocação do rato</translation> <translation id="3839516600093027468">Impedir sempre <ph name="HOST" /> de ver a área de transferência</translation> <translation id="3841964634449506551">A palavra-passe é inválida.</translation> <translation id="3842552989725514455">Tipo de letra Serif</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Imagens e ficheiros em cache</translation> <translation id="4699357559218762027">(com iniciação automática)</translation> <translation id="470074695271471509">Pretende terminar sessão para concluir?</translation> +<translation id="4701025263201366865">Início de sessão pelos pais</translation> <translation id="4707302005824653064">A utilização e o histórico podem ser consultados pelo gestor (<ph name="CUSTODIAN_EMAIL" />) em chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + certificado do utilizador</translation> <translation id="4708794300267213770">Mostrar o ecrã de bloqueio quando for ativado após a suspensão</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, pesquisa no <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Introduza o PIN da sua chave de segurança. Se não souber o PIN, terá de repor a chave de segurança.</translation> <translation id="5139955368427980650">&Abrir</translation> +<translation id="5142793792982256885">Velocidade de deslocação do touchpad</translation> <translation id="5142961317498132443">Autenticação</translation> <translation id="5143374789336132547">A extensão "<ph name="EXTENSION_NAME" />" alterou a página apresentada quando clica no botão Página inicial.</translation> <translation id="5143712164865402236">Entrar no modo de ecrã inteiro</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Mostrar definições de proxy</translation> <translation id="5215502535566372932">Selecionar país</translation> <translation id="521582610500777512">A foto foi rejeitada</translation> +<translation id="5222403284441421673">Transferência insegura bloqueada</translation> <translation id="5222676887888702881">Terminar sessão</translation> <translation id="52232769093306234">Falha no acondicionamento.</translation> <translation id="5225324770654022472">Mostrar atalho das aplicações</translation> @@ -3526,6 +3535,7 @@ <translation id="5734362860645681824">Comunicações</translation> <translation id="5734697361979786483">Adicionar partilha de ficheiros</translation> <translation id="5736796278325406685">Introduza um nome de utilizador válido</translation> +<translation id="5739017626473506901">Inicie sessão para ajudar <ph name="USER_NAME" /> a adicionar uma conta escolar.</translation> <translation id="5739235828260127894">A aguardar a validação. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Muito grande</translation> <translation id="574209121243317957">Tonalidade</translation> @@ -3645,6 +3655,7 @@ <translation id="5901630391730855834">Amarelo</translation> <translation id="5906655207909574370">Quase atualizado! Reinicie o dispositivo para concluir a atualização.</translation> <translation id="5906732635754427568">Os dados associados a esta aplicação serão removidos deste dispositivo.</translation> +<translation id="5908695239556627796">Velocidade de deslocação do rato</translation> <translation id="5908769186679515905">Impedir que os sites executem o Flash</translation> <translation id="5910363049092958439">Guard&ar Imagem Como...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> está offline.</translation> @@ -5092,6 +5103,7 @@ <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> o sistema será reiniciado durante o processo.</translation> <translation id="7828731929332799387">Esta ação eliminará todos os cookies e dados de sites disponíveis em contextos de terceiros. Pretende continuar?</translation> <translation id="7829298379596169484">A aceder à entrada de áudio</translation> +<translation id="7829877209233347340">Peça a um dos seus pais para lhe conceder autorização para adicionar uma conta escolar.</translation> <translation id="7830594666202422257">Ligar ao Linux</translation> <translation id="7831491651892296503">Ocorreu um erro ao configurar a rede.</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5531,6 +5543,7 @@ <translation id="8408068190360279472">Rede <ph name="NETWORK_TYPE" />, a ligar…</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Perguntar primeiro (recomendado)</translation> +<translation id="8417548266957501132">Palavra-passe do Pai ou Mãe</translation> <translation id="8417573335434189196">Não protege contra transferências, extensões ou Websites perigosos. O Chrome não recomenda esta definição.</translation> <translation id="8418445294933751433">Mo&strar como separador</translation> <translation id="8419098111404128271">Resultados da pesquisa para "<ph name="SEARCH_TEXT" />"</translation> @@ -5845,6 +5858,7 @@ <translation id="8808686172382650546">Gato</translation> <translation id="8808744862003883508">Nesta página, pode ver todas as extensões instaladas no Chrome.</translation> <translation id="8809147117840417135">Azul esverdeado claro</translation> +<translation id="8812593354822910461">Limpar também os dados de navegação (<ph name="URL" />), o que terminará a sua sessão em <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Não é possível iniciar sessão na conta <ph name="USERNAME" /></translation> <translation id="8813811964357448561">folha de papel</translation> <translation id="8813872945700551674">Pede ao teu Pai ou Mãe para aprovar "<ph name="EXTENSION_NAME" />"</translation> @@ -6134,6 +6148,7 @@ <translation id="9203398526606335860">Criação de &perfis ativada</translation> <translation id="9203904171912129171">Selecionar um dispositivo</translation> <translation id="9203962528777363226">O gestor deste dispositivo desativou a adição de novos utilizadores</translation> +<translation id="9209689095351280025">Os sites não podem utilizar cookies que monitorizem a sua navegação na Web.</translation> <translation id="9211177926627870898">Atualização necessária</translation> <translation id="9214520840402538427">Ups! A inicialização dos atributos de tempo de instalação expirou. Contacte o seu representante de suporte.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index dfdeac5..69a576be 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Această extensie nu necesită permisiuni speciale.</translation> <translation id="1616298854599875024">Nu se poate importa extensia „<ph name="IMPORT_NAME" />”, deoarece nu este un modul folosit în comun</translation> <translation id="1618268899808219593">C&entrul de ajutor</translation> +<translation id="1620307519959413822">Parola este greșită. Încearcă din nou sau dă clic pe „Am uitat parola” pentru a o reseta.</translation> <translation id="1620510694547887537">Cameră</translation> <translation id="1623132449929929218">Imaginile sunt momentan indisponibile. Conectează-te din nou la internet ca să vezi colecțiile de imagini de fundal.</translation> <translation id="1627276047960621195">Descriptorii fișierelor</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Versiune hardware</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Deschide ecranul complet</translation> +<translation id="1892341345406963517">Bună, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Alte limbi</translation> <translation id="1895252664692693738">Timp rămas: <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Închideți</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Afișează setările de proxy</translation> <translation id="5215502535566372932">Selectează o țară</translation> <translation id="521582610500777512">Fotografia a fost ștearsă</translation> +<translation id="5222403284441421673">O descărcare nesigură a fost blocată</translation> <translation id="5222676887888702881">Deconectează-te</translation> <translation id="52232769093306234">Împachetarea nu a reușit.</translation> <translation id="5225324770654022472">Afișați comanda rapidă pentru aplicații</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Comunicații</translation> <translation id="5734697361979786483">Adaugă un dispozitiv de stocare în rețea</translation> <translation id="5736796278325406685">Introdu un nume de utilizator valid</translation> +<translation id="5739017626473506901">Conectează-te pentru a ajuta utilizatorul <ph name="USER_NAME" /> să adauge un cont de la școală</translation> <translation id="5739235828260127894">Se așteaptă confirmarea. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Foarte mare</translation> <translation id="574209121243317957">Tonalitatea</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">Rețea <ph name="NETWORK_TYPE" />, se stabilește conexiunea</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Mai întâi întreabă (recomandat)</translation> +<translation id="8417548266957501132">Parola părinte</translation> <translation id="8417573335434189196">Nu te protejează împotriva site-urilor, descărcărilor sau extensiilor periculoase. Chrome nu recomandă această setare.</translation> <translation id="8418445294933751433">&Afișează ca filă</translation> <translation id="8419098111404128271">Rezultatele de căutare pentru „<ph name="SEARCH_TEXT" />”</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 21ae096..c203b06a 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Загрузить</translation> <translation id="1244265436519979884">Выполняется восстановление Linux.</translation> <translation id="1244303850296295656">Ошибка расширения</translation> +<translation id="1246158006305844142">Ваши приложения и настройки синхронизируются на всех устройствах Chrome OS, на которых вы вошли в аккаунт Google. Изменить параметры синхронизации браузера можно в <ph name="LINK_BEGIN" />настройках Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Удалить подсказку из буфера обмена?</translation> <translation id="1249643471736608405">Плагин <ph name="PLUGIN_NAME" /> заблокирован, так как он больше не поддерживается.</translation> <translation id="1251366534849411931">Отсутствует ожидаемая открывающая фигурная скобка: <ph name="ERROR_LINE" />.</translation> @@ -390,6 +391,7 @@ <translation id="1524563461097350801">Нет, спасибо</translation> <translation id="1525740877599838384">Использовать для определения местоположения только Wi-Fi</translation> <translation id="152629053603783244">Перезагрузить Linux</translation> +<translation id="1526335046150927198">Включить ускорение прокрутки сенсорной панели</translation> <translation id="1526560967942511387">Документ без имени</translation> <translation id="1529891865407786369">Источник питания</translation> <translation id="1530838837447122178">Открыть настройки мыши и сенсорной панели</translation> @@ -458,6 +460,7 @@ <translation id="1616206807336925449">Расширению не требуются особые разрешения.</translation> <translation id="1616298854599875024">Не удалось импортировать расширение "<ph name="IMPORT_NAME" />", поскольку это не общий модуль</translation> <translation id="1618268899808219593">Справочный &центр</translation> +<translation id="1620307519959413822">Неверный пароль. Повторите попытку или нажмите "Забыли пароль?", чтобы сбросить его.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Эти изображения сейчас недоступны. Чтобы посмотреть коллекции обоев, подключитесь к Интернету.</translation> <translation id="1627276047960621195">Дескрипторы файлов</translation> @@ -676,6 +679,7 @@ <translation id="1887850431809612466">Версия оборудования</translation> <translation id="1890674179660343635"><span>Идентификатор:</span> <ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Открыть в полноэкранном режиме</translation> +<translation id="1892341345406963517">Здравствуйте, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Другие языки</translation> <translation id="1895252664692693738">Ещё <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Завершение работы</translation> @@ -1311,6 +1315,7 @@ <translation id="2725200716980197196">Подключение к сети восстановлено.</translation> <translation id="2727633948226935816">Больше не напоминать</translation> <translation id="2727712005121231835">Фактический размер</translation> +<translation id="2729314457178420145">Также удалить данные о работе в браузере (<ph name="URL" />). Возможно, при этом вы выйдете из аккаунта на сайте google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Резервное копирование приложений и файлов Linux…</translation> <translation id="273093730430620027">Этой странице разрешен доступ к вашей камере.</translation> <translation id="2731392572903530958">Открыть закрытое окно</translation> @@ -1771,7 +1776,7 @@ <translation id="3356580349448036450">Готово</translation> <translation id="3359256513598016054">Ограничения политики сертификатов</translation> <translation id="3360297538363969800">Не удалось распечатать документ. Проверьте, всё ли в порядке с принтером, и повторите попытку.</translation> -<translation id="3364986687961713424">Сообщение от администратора: "<ph name="ADMIN_MESSAGE" />".</translation> +<translation id="3364986687961713424">Сообщение от администратора: "<ph name="ADMIN_MESSAGE" />"</translation> <translation id="3365598184818502391">Необходимо использовать Ctrl или Alt</translation> <translation id="3367047597842238025">Настройте устройство <ph name="DEVICE_TYPE" /> по своему вкусу и оцените его удивительные возможности.</translation> <translation id="3368922792935385530">Подключено</translation> @@ -2152,7 +2157,7 @@ <translation id="3827774300009121996">Полноэкранный режим</translation> <translation id="3828029223314399057">Искать в закладках</translation> <translation id="3829765597456725595">Общая папка SMB</translation> -<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Администратор вновь включил 1 потенциально опасное расширение.}one{Администратор вновь включил {NUM_EXTENSIONS} потенциально опасное расширение.}few{Администратор вновь включил {NUM_EXTENSIONS} потенциально опасных расширения.}many{Администратор вновь включил {NUM_EXTENSIONS} потенциально опасных расширений.}other{Администратор вновь включил {NUM_EXTENSIONS} потенциально опасного расширения.}}</translation> +<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{Администратор снова включил 1 потенциально опасное расширение.}one{Администратор снова включил {NUM_EXTENSIONS} потенциально опасное расширение.}few{Администратор снова включил {NUM_EXTENSIONS} потенциально опасных расширения.}many{Администратор снова включил {NUM_EXTENSIONS} потенциально опасных расширений.}other{Администратор снова включил {NUM_EXTENSIONS} потенциально опасного расширения.}}</translation> <translation id="3831436149286513437">Автозаполнение при поиске на Google Диске</translation> <translation id="383161972796689579">Владелец этого устройства отключил возможность добавлять новых пользователей</translation> <translation id="3834775135533257713">Не удалось установить приложение "<ph name="TO_INSTALL_APP_NAME" />", так как оно конфликтует с приложением "<ph name="INSTALLED_APP_NAME" />".</translation> @@ -2162,6 +2167,7 @@ <translation id="3838486795898716504">Другие страницы с заголовком <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Файлы cookie, а также другие данные сайтов и плагинов</translation> <translation id="383891835335927981">Нет сайтов с измененным масштабом</translation> +<translation id="3839509547554145593">Включить ускорение прокрутки мыши</translation> <translation id="3839516600093027468">Никогда не открывать сайту <ph name="HOST" /> доступ к буферу обмена</translation> <translation id="3841964634449506551">Недействительный пароль.</translation> <translation id="3842552989725514455">Шрифты с засечками</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">Изображения и другие файлы, сохраненные в кеше</translation> <translation id="4699357559218762027">(автозапуск)</translation> <translation id="470074695271471509">Выйти из аккаунта?</translation> +<translation id="4701025263201366865">Вход для родителя</translation> <translation id="4707302005824653064">Менеджер (<ph name="CUSTODIAN_EMAIL" />) может просмотреть историю работы в браузере на сайте chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + сертификат пользователя</translation> <translation id="4708794300267213770">Показывать заблокированный экран при выходе из спящего режима</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680">Запрос "<ph name="QUERY_NAME" />", поиск в <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Введите PIN-код для электронного ключа. Если вы его не знаете, сбросьте настройки ключа.</translation> <translation id="5139955368427980650">&Открыть</translation> +<translation id="5142793792982256885">Скорость прокрутки (для сенсорной панели)</translation> <translation id="5142961317498132443">Аутентификация</translation> <translation id="5143374789336132547">Расширение "<ph name="EXTENSION_NAME" />" изменило страницу, которая отображается при нажатии кнопки "Главная страница".</translation> <translation id="5143712164865402236">Перейти в полноэкранный режим</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">Показать настройки прокси-сервера</translation> <translation id="5215502535566372932">Выберите страну</translation> <translation id="521582610500777512">Фотография удалена.</translation> +<translation id="5222403284441421673">Скачивание небезопасного контента заблокировано</translation> <translation id="5222676887888702881">Выйти</translation> <translation id="52232769093306234">Не удалось выполнить сжатие.</translation> <translation id="5225324770654022472">Показывать кнопку "Сервисы"</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">Оборудование</translation> <translation id="5734697361979786483">Добавить общую папку</translation> <translation id="5736796278325406685">Введите действительное имя пользователя</translation> +<translation id="5739017626473506901">Войдите в систему, чтобы помочь пользователю <ph name="USER_NAME" /> добавить учебный аккаунт.</translation> <translation id="5739235828260127894">Требуется подтверждение. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Очень крупный</translation> <translation id="574209121243317957">Высота звука</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">Желтый</translation> <translation id="5906655207909574370">Чтобы завершить обновление, перезапустите устройство.</translation> <translation id="5906732635754427568">Данные, связанные с этим приложением, будут удалены с устройства.</translation> +<translation id="5908695239556627796">Скорость прокрутки (для мыши)</translation> <translation id="5908769186679515905">Блокировать Flash на сайтах</translation> <translation id="5910363049092958439">Сохранить изображение как...</translation> <translation id="5910726859585389579">Устройство <ph name="DEVICE_TYPE" /> не подключено к Интернету</translation> @@ -3703,7 +3714,7 @@ <translation id="5976160379964388480">Другое</translation> <translation id="5978277834170881274">&Использовать базовую проверку правописания</translation> <translation id="5979084224081478209">Проверить пароли</translation> -<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Вы вновь включили 1 потенциально опасное расширение.}one{Вы вновь включили {NUM_EXTENSIONS} потенциально опасное расширение.}few{Вы вновь включили {NUM_EXTENSIONS} потенциально опасных расширения.}many{Вы вновь включили {NUM_EXTENSIONS} потенциально опасных расширений.}other{Вы вновь включили {NUM_EXTENSIONS} потенциально опасного расширения.}}</translation> +<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Вы снова включили 1 потенциально опасное расширение.}one{Вы снова включили {NUM_EXTENSIONS} потенциально опасное расширение.}few{Вы снова включили {NUM_EXTENSIONS} потенциально опасных расширения.}many{Вы снова включили {NUM_EXTENSIONS} потенциально опасных расширений.}other{Вы снова включили {NUM_EXTENSIONS} потенциально опасного расширения.}}</translation> <translation id="5979421442488174909">&Перевести на <ph name="LANGUAGE" /></translation> <translation id="5979469435153841984">Чтобы добавить страницу в закладки, нажмите на значок звездочки в адресной строке</translation> <translation id="5984222099446776634">Недавно посещенные страницы</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />Примечание.<ph name="END_BOLD" /> Система перезагрузится во время этого процесса.</translation> <translation id="7828731929332799387">Все сторонние файлы cookie и данные сайтов будут удалены. Продолжить?</translation> <translation id="7829298379596169484">Доступ к аудиовходу</translation> +<translation id="7829877209233347340">Попросите родителя войти в систему, чтобы дать вам разрешение на добавление учебного аккаунта.</translation> <translation id="7830594666202422257">Подключить к Linux</translation> <translation id="7831491651892296503">Ошибка при настройке сети</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5528,6 +5540,7 @@ <translation id="8408068190360279472">Сеть <ph name="NETWORK_TYPE" />, подключение</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Всегда спрашивать (рекомендуется)</translation> +<translation id="8417548266957501132">Пароль родителя</translation> <translation id="8417573335434189196">Не защищает вас от опасных сайтов, расширений и скачанных файлов. Chrome не рекомендует использовать эту настройку.</translation> <translation id="8418445294933751433">&Показать как вкладку</translation> <translation id="8419098111404128271">Результаты поиска по запросу "<ph name="SEARCH_TEXT" />"</translation> @@ -5842,6 +5855,7 @@ <translation id="8808686172382650546">Кот</translation> <translation id="8808744862003883508">На этой странице показаны все расширения, установленные в Chrome.</translation> <translation id="8809147117840417135">Светло-бирюзовый</translation> +<translation id="8812593354822910461">Также удалить данные о работе в браузере (<ph name="URL" />). При этом вы выйдете из аккаунта на сайте <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Не удалось войти в аккаунт <ph name="USERNAME" /></translation> <translation id="8813811964357448561">лист бумаги</translation> <translation id="8813872945700551674">Для установки расширения "<ph name="EXTENSION_NAME" />" требуется одобрение одного из родителей</translation> @@ -6131,6 +6145,7 @@ <translation id="9203398526606335860">&Сбор данных включен</translation> <translation id="9203904171912129171">Выберите устройство</translation> <translation id="9203962528777363226">Администратор этого устройства отключил возможность добавлять новых пользователей</translation> +<translation id="9209689095351280025">Сайты не могут использовать файлы cookie, которые отслеживают ваши действия в Интернете.</translation> <translation id="9211177926627870898">Требуется обновление</translation> <translation id="9214520840402538427">К сожалению, срок инициализации для атрибутов времени установки истек. Обратитесь в службу поддержки.</translation> <translation id="9214695392875603905">Кекс</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 578ce2f..5d0ec34 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -458,6 +458,7 @@ <translation id="1616206807336925449">මෙම දිගුවට කිසිඳු විශේෂිත බලතලයක් අවශ්ය නොවේ.</translation> <translation id="1616298854599875024">බෙදා ගත් මොඩියුලයක් නොවන බැවින් "<ph name="IMPORT_NAME" />" දිගුව ආයාත කළ නොහැකිය</translation> <translation id="1618268899808219593">උපකාර මධ්යස්ථානය</translation> +<translation id="1620307519959413822">වැරදි මුරපදය. නැවත උත්සාහ කරන්න හෝ යළි සැකසීමට මුරපදය අමතකයි ක්ලික් කරන්න.</translation> <translation id="1620510694547887537">කැමරාව</translation> <translation id="1623132449929929218">පින්තූර දැනට ලබා ගත නොහැක. වෝල්පේපර් එකතු බැලීමට කරණාකර අන්තර්ජාලයට සම්බන්ධ වන්න.</translation> <translation id="1627276047960621195">ගොනු සූචක</translation> @@ -676,6 +677,7 @@ <translation id="1887850431809612466">දෘඨාංග සංශෝධනය</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">සම්පූර්ණ තිරය විවෘත කරන්න</translation> +<translation id="1892341345406963517">ආයුබෝවන් <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">වෙනත් භාෂා</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> ඉතුරුයි</translation> <translation id="1895658205118569222">වසා දමන්න</translation> @@ -3131,6 +3133,7 @@ <translation id="5213891612754844763">ප්රොක්සි සැකසීම් පෙන්වන්න</translation> <translation id="5215502535566372932">රට තෝරන්න</translation> <translation id="521582610500777512">ඡායාරූපය ඉවතලන ලදී</translation> +<translation id="5222403284441421673">අනාරක්ෂිත බාගැනීම අවහිර කළා</translation> <translation id="5222676887888702881">පිටවීම</translation> <translation id="52232769093306234">ඇසුරුම්කරණය අසමත් විය.</translation> <translation id="5225324770654022472">යෙදුම් කෙටිමග පෙන්වන්න</translation> @@ -3530,6 +3533,7 @@ <translation id="5734362860645681824">සන්නිවේදන</translation> <translation id="5734697361979786483">ගොනු බෙදා ගැනීම එක් කරන්න</translation> <translation id="5736796278325406685">වලංගු පරිශීලක නාමයක් ඇතුළු කරන්න</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> හට පාසල් ගිණුමක් එක් කිරීමට උදවු කිරීමට පුරන්න</translation> <translation id="5739235828260127894">සත්යාපනය බලාපොරොත්තුවෙන් <ph name="LINK_BEGIN" />තවත් දැන ගන්න.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">ඉතා විශාල</translation> <translation id="574209121243317957">තාරතාව</translation> @@ -5534,6 +5538,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ජාලය, සම්බන්ධ කෙරේ</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">පළමුව අසන්න (නිර්දේශිතයි)</translation> +<translation id="8417548266957501132">මාපිය මුරපදය</translation> <translation id="8417573335434189196">අනතුරුදායක වෙබ් අඩවිවලට, බාගැනීම්වලට, හෝ දිගුවලට එරෙහිව ඔබව ආරක්ෂා නොකරයි. Chrome මෙම සැකසීම නිර්දේශ නොකරයි.</translation> <translation id="8418445294933751433">ටැබයක් ලෙස පෙන්වන්න</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' සඳහා සෙවීම් ප්රතිඵල</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 214fc41..373b0e8 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Toto rozšírenie nevyžaduje žiadne špeciálne povolenia.</translation> <translation id="1616298854599875024">Rozšírenie <ph name="IMPORT_NAME" /> sa nepodarilo importovať, pretože nie je zdieľaným modulom</translation> <translation id="1618268899808219593">Centrum pomoci</translation> +<translation id="1620307519959413822">Nesprávne heslo. Skúste to znova alebo heslo obnovte kliknutím na možnosť Zabudnuté heslo.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Obrázky sú momentálne nedostupné. Ak chcete zobraziť zbierky tapiet, pripojte sa znova k internetu.</translation> <translation id="1627276047960621195">Deskriptory súborov</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Revízia hardvéru</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Otvoriť zobrazenie na celú obrazovku</translation> +<translation id="1892341345406963517">Dobrý deň, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Ďalšie jazyky</translation> <translation id="1895252664692693738">Zostáva <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Vypnúť</translation> @@ -3132,6 +3134,7 @@ <translation id="5213891612754844763">Zobraziť nastavenia proxy servera</translation> <translation id="5215502535566372932">Vyberte krajinu</translation> <translation id="521582610500777512">Fotka bola zahodená</translation> +<translation id="5222403284441421673">Bolo zablokované nezabezpečené sťahovanie</translation> <translation id="5222676887888702881">Odhlásiť sa</translation> <translation id="52232769093306234">Nepodarilo sa zbaliť.</translation> <translation id="5225324770654022472">Zobrazovať odkaz aplikácií</translation> @@ -3530,6 +3533,7 @@ <translation id="5734362860645681824">Komunikácia</translation> <translation id="5734697361979786483">Pridať zdieľanie súboru</translation> <translation id="5736796278325406685">Zadajte platné používateľské meno</translation> +<translation id="5739017626473506901">Ak chce <ph name="USER_NAME" /> pomôcť pridať školský účet, prihláste sa</translation> <translation id="5739235828260127894">Čaká sa na overenie. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Veľmi veľké</translation> <translation id="574209121243317957">Výška hlasu</translation> @@ -5537,6 +5541,7 @@ <translation id="8408068190360279472">Sieť <ph name="NETWORK_TYPE" /> sa pripája</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Najprv sa opýtať (odporúčané)</translation> +<translation id="8417548266957501132">Heslo rodiča</translation> <translation id="8417573335434189196">Nechráni vás pred nebezpečnými webmi, stiahnutým súbormi ani rozšíreniami. Chrome toto nastavenie neodporúča.</translation> <translation id="8418445294933751433">&Zobraziť ako kartu</translation> <translation id="8419098111404128271">Výsledky vyhľadávania pre výraz „<ph name="SEARCH_TEXT" />“</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 31d755e7..3f61a62 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">Za to razširitev so potrebna posebna dovoljenja.</translation> <translation id="1616298854599875024">Razširitve »<ph name="IMPORT_NAME" />« ni mogoče uvoziti, ker ni modul v skupni rabi.</translation> <translation id="1618268899808219593">Center za pomoč</translation> +<translation id="1620307519959413822">Napačno geslo. Poskusite znova ali kliknite »Ste pozabili geslo?«, če želite geslo ponastaviti.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Slike trenutno niso na voljo. Znova vzpostavite povezavo z internetom, če si želite ogledati zbirke ozadij.</translation> <translation id="1627276047960621195">Deskriptorji datotek</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Različica strojne opreme</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Odpri v celozaslonskem načinu</translation> +<translation id="1892341345406963517">Pozdravljeni, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Drugi jeziki</translation> <translation id="1895252664692693738">Še <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Zaprt</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Prikaži nastavitve strežnika proxy</translation> <translation id="5215502535566372932">Izberite državo</translation> <translation id="521582610500777512">Fotografija je bila zavržena</translation> +<translation id="5222403284441421673">Prenos, ki ni varen, je blokiran</translation> <translation id="5222676887888702881">Odjava</translation> <translation id="52232769093306234">Pakiranje ni uspelo.</translation> <translation id="5225324770654022472">Prikaži bližnjico do aplikacij</translation> @@ -3533,6 +3536,7 @@ <translation id="5734362860645681824">Komunikacije</translation> <translation id="5734697361979786483">Dodajanje datotečnega sredstva v skupni rabi</translation> <translation id="5736796278325406685">Vnesite veljavno uporabniško ime</translation> +<translation id="5739017626473506901">Prijavite se, če želite uporabniku <ph name="USER_NAME" /> pomagati dodati šolski račun</translation> <translation id="5739235828260127894">Čakanje na potrditev. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Zelo velika</translation> <translation id="574209121243317957">Višina tona</translation> @@ -5541,6 +5545,7 @@ <translation id="8408068190360279472">Omrežje <ph name="NETWORK_TYPE" />, vzpostavljanje povezave</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Najprej vprašaj (priporočeno)</translation> +<translation id="8417548266957501132">Geslo starša</translation> <translation id="8417573335434189196">Ne ščiti pred nevarnimi spletnimi mesti, prenosi ali razširitvami. Chrome ne priporoča te nastavitve.</translation> <translation id="8418445294933751433">&Prikaži kot zavihek</translation> <translation id="8419098111404128271">Rezultati iskanja za poizvedbo »<ph name="SEARCH_TEXT" />«</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 49a000f..2348908 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Ngarko</translation> <translation id="1244265436519979884">Restaurimi i Linux aktualisht në vazhdim</translation> <translation id="1244303850296295656">Shtesa e paketës</translation> +<translation id="1246158006305844142">Aplikacionet dhe cilësimet e tua do të sinkronizohen nëpër të gjitha pajisjet me sistem operativ Chrome ku je identifikuar me llogarinë tënde të Google. Për opsionet e sinkronizimit të shfletuesit, shko te<ph name="LINK_BEGIN" />cilësimet e Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Të hiqet sugjerimi nga kujtesa e fragmenteve?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> u bllokua sepse është i vjetruar</translation> <translation id="1251366534849411931">Kllapë gjarpërushe hapëse e pritshme: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">Jo, faleminderit</translation> <translation id="1525740877599838384">Përdor vetëm Wi-Fi për të përcaktuar vendndodhjen</translation> <translation id="152629053603783244">Rinis Linux</translation> +<translation id="1526335046150927198">Aktivizo përshpejtimin e lëvizjes së bllokut me prekje</translation> <translation id="1526560967942511387">Dokument pa titull</translation> <translation id="1529891865407786369">Burimi i energjisë</translation> <translation id="1530838837447122178">Hap cilësimet e miut dhe bllokut me prekje</translation> @@ -1310,6 +1312,7 @@ <translation id="2725200716980197196">Lidhshmëria e rrjetit u restaurua</translation> <translation id="2727633948226935816">Mos më kujto më</translation> <translation id="2727712005121231835">Madhësia aktuale</translation> +<translation id="2729314457178420145">Pastro gjithashtu të dhënat e shfletimit, (<ph name="URL" />)gjë që mund të të bëjë të dalësh nga Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Po rezervon aplikacionet dhe skedarët e Linux</translation> <translation id="273093730430620027">Kjo faqe po qaset te kamera jote.</translation> <translation id="2731392572903530958">H&ape sërish dritaren e mbyllur</translation> @@ -2161,6 +2164,7 @@ <translation id="3838486795898716504">Më shumë <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Kukit, faqet e tjera dhe të dhënat e përbërësve shtesë</translation> <translation id="383891835335927981">Asnjë sajt nuk është zmadhuar apo zvogëluar</translation> +<translation id="3839509547554145593">Aktivizo përshpejtimin e lëvizjes së miut</translation> <translation id="3839516600093027468">Blloko gjithmonë <ph name="HOST" /> që të mos shikojë kujtesën e fragmenteve</translation> <translation id="3841964634449506551">Fjalëkalimi është i pavlefshëm</translation> <translation id="3842552989725514455">Shkrimi serif</translation> @@ -2772,6 +2776,7 @@ <translation id="4699172675775169585">Imazhet dhe skedarët në memorien specifike</translation> <translation id="4699357559218762027">(nisur automatikisht)</translation> <translation id="470074695271471509">Do të dalësh për ta përfunduar?</translation> +<translation id="4701025263201366865">Identifikimi i prindit</translation> <translation id="4707302005824653064">Përdorimi dhe historiku mund të rishikohen nga menaxheri (<ph name="CUSTODIAN_EMAIL" />) në chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + certifikatë përdoruesi</translation> <translation id="4708794300267213770">Shfaq ekranin e kyçjes kur zgjohet nga gjumi</translation> @@ -3079,6 +3084,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, kërko në <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Fut kodin PIN për çelësin e sigurisë. Nëse nuk e di kodin PIN, do të duhet ta rivendosësh çelësin e sigurisë.</translation> <translation id="5139955368427980650">&Hape</translation> +<translation id="5142793792982256885">Shpejtësia e lëvizjes së bllokut me prekje</translation> <translation id="5142961317498132443">Vërtetimi</translation> <translation id="5143374789336132547">Shtesa <ph name="EXTENSION_NAME" /> ka ndryshuar se cila faqe shfaqet kur klikon te butoni Kreu.</translation> <translation id="5143712164865402236">Hyr në ekranin e plotë</translation> @@ -3641,6 +3647,7 @@ <translation id="5901630391730855834">E verdhë</translation> <translation id="5906655207909574370">Pothuajse i përditësuar! Rinise pajisjen për të përfunduar përditësimin.</translation> <translation id="5906732635754427568">Të dhënat e lidhura me këtë aplikacion do të hiqen nga kjo pajisje.</translation> +<translation id="5908695239556627796">Shpejtësia e lëvizjes së miut</translation> <translation id="5908769186679515905">Blloko sajtet që të mos ekzekutojnë Flash</translation> <translation id="5910363049092958439">Ru&aje imazhin si...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> është jashtë linje</translation> @@ -5087,6 +5094,7 @@ <ph name="BEGIN_BOLD" />Shënim:<ph name="END_BOLD" /> Sistemi do të rifillojë punën gjatë procesit.</translation> <translation id="7828731929332799387">Kjo do të fshijë të gjitha kukit dhe të dhënat e sajtit që ofrohen në kontekstet e palëve të treta. Dëshiron të vazhdosh?</translation> <translation id="7829298379596169484">Po qaset në hyrjen e audios</translation> +<translation id="7829877209233347340">Kërkoji prindit që të të japë leje për të shtuar një llogari shkolle</translation> <translation id="7830594666202422257">Lidhe me Linux</translation> <translation id="7831491651892296503">Gabim gjatë konfigurimit të rrjetit</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5840,6 +5848,7 @@ <translation id="8808686172382650546">Macja</translation> <translation id="8808744862003883508">Në këtë faqe mund të shikosh të gjitha shtesat e instaluara në Chrome.</translation> <translation id="8809147117840417135">Gurkali e çelur</translation> +<translation id="8812593354822910461">Pastro gjithashtu të dhënat e shfletimit, (<ph name="URL" />) gjë që mund të të bëjë të dalësh nga <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Nuk mund të identifikohet në <ph name="USERNAME" /></translation> <translation id="8813811964357448561">fletë letre</translation> <translation id="8813872945700551674">Kërkoji një prindi të miratojë "<ph name="EXTENSION_NAME" />"</translation> @@ -6129,6 +6138,7 @@ <translation id="9203398526606335860">&Profilizimi u aktivizua</translation> <translation id="9203904171912129171">Zgjidh një pajisje</translation> <translation id="9203962528777363226">Administratori i kësaj pajisjeje ka çaktivizuar shtimin e përdoruesve të rinj</translation> +<translation id="9209689095351280025">Sajtet nuk mund të përdorin kuki që të monitorojnë nëpër ueb</translation> <translation id="9211177926627870898">Kërkohet përditësimi</translation> <translation id="9214520840402538427">Mos! Nisjes së atributeve të kohës së instalimit i ka përfunduar afati. Kontakto me përfaqësuesin e mbështetjes.</translation> <translation id="9214695392875603905">Kek në kupë</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 12eb738..2015ffe 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Отпреми</translation> <translation id="1244265436519979884">У току је враћање Linux података</translation> <translation id="1244303850296295656">Грешка додатка</translation> +<translation id="1246158006305844142">Апликације и подешавања ће се синхронизовати на свим Chrome OS уређајима на којима сте пријављени помоћу свог Google налога. Опције синхронизације прегледача пронађите у <ph name="LINK_BEGIN" />подешавањима Chrome-а<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Желите ли да уклоните предлог из привремене меморије?</translation> <translation id="1249643471736608405">Додатна компонента <ph name="PLUGIN_NAME" /> је блокирана јер је застарела.</translation> <translation id="1251366534849411931">Недостаје отворена витичаста заграда: <ph name="ERROR_LINE" /></translation> @@ -388,6 +389,7 @@ <translation id="1524563461097350801">Не, хвала</translation> <translation id="1525740877599838384">Користи само Wi-Fi за одређивање локације</translation> <translation id="152629053603783244">Рестартуј Linux</translation> +<translation id="1526335046150927198">Омогући убрзање померања тачпедом</translation> <translation id="1526560967942511387">Ненасловљени документ</translation> <translation id="1529891865407786369">Извор напајања</translation> <translation id="1530838837447122178">Отвори подешавања уређаја за миш и тачпед</translation> @@ -456,6 +458,7 @@ <translation id="1616206807336925449">Овај додатак не захтева никакве специјалне дозволе.</translation> <translation id="1616298854599875024">Увоз додатка „<ph name="IMPORT_NAME" />“ није успео зато што није дељени модул</translation> <translation id="1618268899808219593">Ц&ентар за помоћ</translation> +<translation id="1620307519959413822">Погрешна лозинка. Пробајте поново или кликните на Заборавили сте лозинку да бисте је ресетовали.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Слике тренутно нису доступне. Поново се повежите на интернет да бисте прегледали колекције позадина.</translation> <translation id="1627276047960621195">Дескриптори датотека</translation> @@ -674,6 +677,7 @@ <translation id="1887850431809612466">Ревизија хардвера</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Отвори цео екран</translation> +<translation id="1892341345406963517">Здраво, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Други језици</translation> <translation id="1895252664692693738">Још <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Затварање</translation> @@ -1310,6 +1314,7 @@ <translation id="2725200716980197196">Веза са мрежом је поново успостављена</translation> <translation id="2727633948226935816">Не подсећај ме више</translation> <translation id="2727712005121231835">Стварна величина</translation> +<translation id="2729314457178420145">Обриши и податке прегледања (<ph name="URL" />). Ово може да вас одјави са Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Праве се резервне копије Linux апликација и датотека</translation> <translation id="273093730430620027">Ова страница приступа камери.</translation> <translation id="2731392572903530958">П&оново отвори затворени прозор</translation> @@ -2161,6 +2166,7 @@ <translation id="3838486795898716504">Још страница <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Колачићи и други подаци о сајтовима и додатним компонентама</translation> <translation id="383891835335927981">Ниједан сајт није увећан ни умањен</translation> +<translation id="3839509547554145593">Омогући убрзање померања мишем</translation> <translation id="3839516600093027468">Увек блокирај увид у привремену меморију страници <ph name="HOST" /></translation> <translation id="3841964634449506551">Лозинка је нетачна</translation> <translation id="3842552989725514455">Фонт Serif</translation> @@ -2772,6 +2778,7 @@ <translation id="4699172675775169585">Кеширане слике и датотеке</translation> <translation id="4699357559218762027">(аутоматски покренуто)</translation> <translation id="470074695271471509">Желите ли да се одјавите да бисте завршили?</translation> +<translation id="4701025263201366865">Пријављивање родитеља</translation> <translation id="4707302005824653064">Менаџер (<ph name="CUSTODIAN_EMAIL" />) може да прегледа коришћење и историју на chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + сертификат корисника</translation> <translation id="4708794300267213770">Прикажи закључани екран при покретању из режима спавања</translation> @@ -3079,6 +3086,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> претрага</translation> <translation id="5139823398361067371">Унесите PIN за безбедносни кључ. Ако не знате PIN, треба да ресетујете безбедносни кључ.</translation> <translation id="5139955368427980650">&Отвори</translation> +<translation id="5142793792982256885">Брзина померања тачпедом</translation> <translation id="5142961317498132443">Потврда идентитета</translation> <translation id="5143374789336132547">Додатак „<ph name="EXTENSION_NAME" />“ је променио страницу која се приказује када кликнете на дугме Почетна.</translation> <translation id="5143712164865402236">Пређи на режим целог екрана</translation> @@ -3124,6 +3132,7 @@ <translation id="5213891612754844763">Прикажи подешавања проксија</translation> <translation id="5215502535566372932">Изаберите земљу</translation> <translation id="521582610500777512">Слика је одбачена</translation> +<translation id="5222403284441421673">Небезбедно преузимање је блокирано</translation> <translation id="5222676887888702881">Одјави ме</translation> <translation id="52232769093306234">Паковање није успело.</translation> <translation id="5225324770654022472">Прикажи пречицу за апликације</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">Комуникације</translation> <translation id="5734697361979786483">Додај дељење датотека</translation> <translation id="5736796278325406685">Унесите важеће корисничко име</translation> +<translation id="5739017626473506901">Пријавите се и омогућите да <ph name="USER_NAME" /> дода школски налог</translation> <translation id="5739235828260127894">Чека се верификација. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Јако велики</translation> <translation id="574209121243317957">Ниво</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">Жута</translation> <translation id="5906655207909574370">Ажурирање је скоро готово! Поново покрените уређај да бисте довршили ажурирање.</translation> <translation id="5906732635754427568">Подаци повезани са овом апликацијом ће бити уклоњени са овог уређаја.</translation> +<translation id="5908695239556627796">Брзина померања мишем</translation> <translation id="5908769186679515905">Блокирај сајтове да не би покретали Flash</translation> <translation id="5910363049092958439">Са&чувај слику као...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> је офлајн</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> Систем ће се рестартовати током овог процеса.</translation> <translation id="7828731929332799387">Овим ћете избрисати све колачиће и податке о сајтовима који су доступни у контекстима трећих страна. Желите ли да наставите?</translation> <translation id="7829298379596169484">Приступа се аудио улазу</translation> +<translation id="7829877209233347340">Затражи од родитеља да се пријави да би дао дозволу за додавање школског налога</translation> <translation id="7830594666202422257">Повежи са Linux-ом</translation> <translation id="7831491651892296503">Грешка при конфигурацији мреже</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5529,6 +5541,7 @@ <translation id="8408068190360279472">Мрежа <ph name="NETWORK_TYPE" />, повезује се</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Прво питај (препоручено)</translation> +<translation id="8417548266957501132">Лозинка родитеља</translation> <translation id="8417573335434189196">Не штити вас од опасних веб-сајтова, преузимања или додатака. Chrome не препоручује ово подешавање.</translation> <translation id="8418445294933751433">&Прикажи као картицу</translation> <translation id="8419098111404128271">Резултати претраге за „<ph name="SEARCH_TEXT" />“</translation> @@ -5843,6 +5856,7 @@ <translation id="8808686172382650546">Мачка</translation> <translation id="8808744862003883508">На овој страници можете да видите све додатке инсталиране у Chrome-у.</translation> <translation id="8809147117840417135">Светлотиркизна</translation> +<translation id="8812593354822910461">Обриши и податке прегледања (<ph name="URL" />). Ово ће вас одјавити са <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Пријављивање на <ph name="USERNAME" /> није успело</translation> <translation id="8813811964357448561">лист папира</translation> <translation id="8813872945700551674">Затражи од родитеља да одобри додатак <ph name="EXTENSION_NAME" /></translation> @@ -6132,6 +6146,7 @@ <translation id="9203398526606335860">&Профилисање је омогућено</translation> <translation id="9203904171912129171">Изаберите уређај</translation> <translation id="9203962528777363226">Администратор овог уређаја је онемогућио додавање нових корисника</translation> +<translation id="9209689095351280025">Сајтови не могу да користе колачиће који вас прате на вебу</translation> <translation id="9211177926627870898">Ажурирање је обавезно</translation> <translation id="9214520840402538427">Упс! Време покретања атрибута за време инсталације је истекло. Контактирајте представника подршке.</translation> <translation id="9214695392875603905">Мафин</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index c7f8169..dab185a 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Ladda upp</translation> <translation id="1244265436519979884">Återställning av Linux pågår</translation> <translation id="1244303850296295656">Fel i tillägg</translation> +<translation id="1246158006305844142">Appar och inställningar synkroniseras på alla Chrome OS-enheter där du är inloggad på ditt Google-konto. Alternativ för synkronisering av webbläsaren finns i <ph name="LINK_BEGIN" />Chrome-inställningarna<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Vill du ta bort förslaget från urklipp?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> har blockerats eftersom det har fasats ut</translation> <translation id="1251366534849411931">Oväntad vänster klammerparentes: <ph name="ERROR_LINE" /></translation> @@ -281,7 +282,7 @@ <translation id="1386387014181100145">Hejsan.</translation> <translation id="138784436342154190">Vill du återställa standardinställningen för startfliken?</translation> <translation id="1390548061267426325">Öppna som en vanlig flik</translation> -<translation id="1392232653471491344">Omstart av Linux krävs.</translation> +<translation id="1392232653471491344">Omstart av Linux krävs</translation> <translation id="1393283411312835250">Sol och moln</translation> <translation id="1393787139683794508">All data och alla cookies som har sparats av <ph name="ORIGIN_NAME" /> rensas.</translation> <translation id="1395730723686586365">Uppdateringstjänsten startades</translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Nej tack</translation> <translation id="1525740877599838384">Fastställ platsen enbart utifrån Wi-Fi</translation> <translation id="152629053603783244">Starta om Linux</translation> +<translation id="1526335046150927198">Aktivera skrollningsacceleration för styrplattan</translation> <translation id="1526560967942511387">Namnlöst dokument</translation> <translation id="1529891865407786369">Strömkälla</translation> <translation id="1530838837447122178">Öppna enhetsinställningarna för mus och styrplatta</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Det här tillägget kräver inga särskilda behörigheter.</translation> <translation id="1616298854599875024">Det gick inte att importera tillägget <ph name="IMPORT_NAME" /> eftersom det inte är en delad modul</translation> <translation id="1618268899808219593">Hjälpc&enter</translation> +<translation id="1620307519959413822">Fel lösenord. Försök igen eller klicka på Glömt lösenordet? om du vill återställa det.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Bilderna är inte tillgängliga för närvarande. Samlingarna med bakgrunder visas när du har återfått internetanslutningen.</translation> <translation id="1627276047960621195">Filbeskrivningar</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Revision av maskinvara</translation> <translation id="1890674179660343635"><span>Id: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Öppna helskärmsläge</translation> +<translation id="1892341345406963517">Hej <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Övriga språk</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> kvar</translation> <translation id="1895658205118569222">Stängning</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Nätverksanslutning har återställts</translation> <translation id="2727633948226935816">Påminn mig inte igen</translation> <translation id="2727712005121231835">Faktisk storlek</translation> +<translation id="2729314457178420145">Rensa även webbinformation (<ph name="URL" />), vilket kan innebära att du loggas ut från Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Säkerhetskopierar Linux-appar och Linux-filer</translation> <translation id="273093730430620027">Den här sidan använder din kamera.</translation> <translation id="2731392572903530958">Ö&ppna ett stängt fönster igen</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504">Mer <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookies och andra webbplats- och plugindata</translation> <translation id="383891835335927981">Inga webbplatser har zoomats in eller ut</translation> +<translation id="3839509547554145593">Aktivera skrollningsacceleration för musen</translation> <translation id="3839516600093027468">Blockera alltid tillgången till Urklipp för <ph name="HOST" /></translation> <translation id="3841964634449506551">Ogiltigt lösenord</translation> <translation id="3842552989725514455">Serif-teckensnitt</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Cachade bilder och filer</translation> <translation id="4699357559218762027">(startas automatiskt)</translation> <translation id="470074695271471509">Vill du logga ut och slutföra konverteringen?</translation> +<translation id="4701025263201366865">Föräldrainloggning</translation> <translation id="4707302005824653064">Den ansvariga (<ph name="CUSTODIAN_EMAIL" />) kan se användning och historik på chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPSec + användarcertifikat</translation> <translation id="4708794300267213770">Visa låsskärm efter viloläge</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, sökning på <ph name="DEFAULT_SEARCH_ENGINE_NAME" /></translation> <translation id="5139823398361067371">Ange säkerhetsnyckelns pinkod. Om du inte kommer ihåg pinkoden måste du återställa säkerhetsnyckeln.</translation> <translation id="5139955368427980650">&Öppna</translation> +<translation id="5142793792982256885">Skrollningshastighet för styrplatta</translation> <translation id="5142961317498132443">Autentisering</translation> <translation id="5143374789336132547">Tillägget <ph name="EXTENSION_NAME" /> har ändrat vilken sida som visas när du klickar på hemknappen.</translation> <translation id="5143712164865402236">Visa i helskärm</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Visa proxyinställningar</translation> <translation id="5215502535566372932">Välj land</translation> <translation id="521582610500777512">Bilden togs bort</translation> +<translation id="5222403284441421673">En osäker nedladdning blockerades</translation> <translation id="5222676887888702881">Logga ut</translation> <translation id="52232769093306234">Komprimeringen misslyckades.</translation> <translation id="5225324770654022472">Visa genväg för appar</translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Kommunikation</translation> <translation id="5734697361979786483">Lägg till filresurs</translation> <translation id="5736796278325406685">Ange ett giltigt användarnamn</translation> +<translation id="5739017626473506901">Logga in för att hjälpa <ph name="USER_NAME" /> att lägga till ett skolkonto</translation> <translation id="5739235828260127894">Väntar på verifiering. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Mycket stor</translation> <translation id="574209121243317957">Ton</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Gul</translation> <translation id="5906655207909574370">Uppdateringen är nästan klar! Slutför den genom att starta om enheten.</translation> <translation id="5906732635754427568">Data kopplad till den här appen tas bort från enheten.</translation> +<translation id="5908695239556627796">Skrollningshastighet för musen</translation> <translation id="5908769186679515905">Blockera webbplatser från att köra Flash</translation> <translation id="5910363049092958439">S&para bild som...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> är offline</translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Obs!<ph name="END_BOLD" /> Systemet startas om under aktiveringen.</translation> <translation id="7828731929332799387">Med denna åtgärd raderas alla cookies och webbplatsuppgifter som är tillgängliga i sammanhang där en tredje part är inblandad. Vill du fortsätta?</translation> <translation id="7829298379596169484">Får åtkomst till ljudindata</translation> +<translation id="7829877209233347340">Be en förälder att logga in och ge behörighet att lägga till ett skolkonto</translation> <translation id="7830594666202422257">Anslut till Linux</translation> <translation id="7831491651892296503">Fel i nätverkskonfigurationen</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5531,6 +5543,7 @@ <translation id="8408068190360279472">Nätverkstyp: <ph name="NETWORK_TYPE" />, ansluter</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Fråga först (rekommenderas)</translation> +<translation id="8417548266957501132">Förälderns lösenord</translation> <translation id="8417573335434189196">Skyddar inte mot farliga webbplatser, nedladdningar eller tillägg. Chrome rekommenderar inte denna inställning.</translation> <translation id="8418445294933751433">&Visa som flik</translation> <translation id="8419098111404128271">Sökresultat för ”<ph name="SEARCH_TEXT" />”</translation> @@ -5845,6 +5858,7 @@ <translation id="8808686172382650546">Katt</translation> <translation id="8808744862003883508">På den här sidan visas alla tillägg som har installerats i Chrome.</translation> <translation id="8809147117840417135">Ljust blågrön</translation> +<translation id="8812593354822910461">Rensa även webbinformation (<ph name="URL" />), vilket kan innebära att du loggas ut från <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Det gick inte att logga in på <ph name="USERNAME" /></translation> <translation id="8813811964357448561">pappersark</translation> <translation id="8813872945700551674">Be att en förälder godkänner <ph name="EXTENSION_NAME" /></translation> @@ -6134,6 +6148,7 @@ <translation id="9203398526606335860">&Profilering aktiverad</translation> <translation id="9203904171912129171">Välj en enhet</translation> <translation id="9203962528777363226">Administratören av den här enheten har inaktiverat nya användare från att läggas till</translation> +<translation id="9209689095351280025">Webbplatser kan inte använda cookies som spårar dig på webben</translation> <translation id="9211177926627870898">Uppdatering krävs</translation> <translation id="9214520840402538427">Hoppsan! Initieringen av attributen för installationstiden har gått ut. Kontakta din representant för kundsupport.</translation> <translation id="9214695392875603905">Muffin</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 9a753e4..067c8a6 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -458,6 +458,7 @@ <translation id="1616206807336925449">Kiendelezi hiki hakihitaji ruhusa maalum.</translation> <translation id="1616298854599875024">Imeshindwa kupakia kiendelezi "<ph name="IMPORT_NAME" />" kwa sababu si sehemu iliyoshirikiwa</translation> <translation id="1618268899808219593">Kituo cha Usaidizi</translation> +<translation id="1620307519959413822">Nenosiri si sahihi. Jaribu tena au ubofye 'Nimesahau nenosiri' ili uliweke upya.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Picha hizi hazipatikani kwa sasa. Tafadhali unganisha tena kwenye intaneti ili uone mikusanyiko ya mandhari.</translation> <translation id="1627276047960621195">Vifafanuzi Faili</translation> @@ -676,6 +677,7 @@ <translation id="1887850431809612466">Sahihisho la maunzi</translation> <translation id="1890674179660343635"><span>Kitambulisho: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Fungua skrini nzima</translation> +<translation id="1892341345406963517">Hujambo <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Lugha zingine</translation> <translation id="1895252664692693738">Zimesalia <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Funga</translation> @@ -842,7 +844,7 @@ <translation id="2135787500304447609">&Endelea</translation> <translation id="2136372518715274136">Weka nenosiri jipya</translation> <translation id="2136476978468204130">Kauli ya siri uliyoweka si sahihi</translation> -<translation id="2137122615728646911">{COUNT,plural, =0{Vidakuzi vimezuiwa.}=1{Vidakuzi vimezuiwa, hali moja isiyofuata kanuni}other{Vidakuzi vimezuiwa, hali {COUNT} zisizofuata kanuni}}</translation> +<translation id="2137122615728646911">{COUNT,plural, =0{Vidakuzi vimezuiwa.}=1{Vidakuzi vimezuiwa, ila kimoja}other{Vidakuzi vimezuiwa, ila {COUNT}}}</translation> <translation id="2138398485845393913">Muunganisho kwenye "<ph name="DEVICE_NAME" />" bado unaendelea</translation> <translation id="2139545522194199494">Mtandao wa <ph name="NETWORK_INDEX" /> kati ya <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Uthabiti wa Mtandao <ph name="SIGNAL_STRENGTH" />%, Unadhibitiwa na Msimamizi wako, Unganisha</translation> <translation id="2139919072249842737">Kitufe cha kuweka mipangilio</translation> @@ -2332,7 +2334,7 @@ <translation id="4047726037116394521">Nenda kwenye skrini ya kwanza</translation> <translation id="4050225813016893843">Njia ya uthibitishaji</translation> <translation id="4052120076834320548">Ndogo sana</translation> -<translation id="4056908315660577142">Umefikisha kikomo cha muda uliowekwa na mzazi wako katika programu ya Chrome kwenye <ph name="APP_NAME" />. Utaweza kuitumia kwa <ph name="TIME_LIMIT" /> kesho.</translation> +<translation id="4056908315660577142">Umefikisha kikomo cha muda wa kutumia <ph name="APP_NAME" /> kwenye programu ya Chrome uliowekwa na mzazi wako. Utaweza kuitumia kwa <ph name="TIME_LIMIT" /> kesho.</translation> <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">Angalia katika Duka la Wavuti</translation> <translation id="4058647953897694817">Thibitisha kupitia Bluetooth</translation> @@ -2628,7 +2630,7 @@ <translation id="450099669180426158">Aikoni ya alama hisi</translation> <translation id="4501530680793980440">Thibitisha Uondoaji</translation> <translation id="4502423230170890588">Ondoa kwenye kifaa hiki</translation> -<translation id="4504374760782163539">{COUNT,plural, =0{Vidakuzi vimeruhusiwa}=1{Vidakuzi vimeruhusiwa, hali moja isiyofuata kanuni}other{Vidakuzi vimeruhusiwa, hali {COUNT} zisizofuata kanuni}}</translation> +<translation id="4504374760782163539">{COUNT,plural, =0{Vidakuzi vimeruhusiwa}=1{Vidakuzi vinaruhusiwa, ila kimoja}other{Vidakuzi vinaruhusiwa, ila {COUNT}}}</translation> <translation id="4504940961672722399">Tumia kiendelezi hiki kwa kubofya aikoni hii au kwa kubonyeza <ph name="EXTENSION_SHORTCUT" />.</translation> <translation id="4508051413094283164">Fungua url zote katika dirisha fiche</translation> <translation id="4508265954913339219">Uamilisho umeshindikana</translation> @@ -3128,6 +3130,7 @@ <translation id="5213891612754844763">Onyesha mipangilio ya seva mbadala</translation> <translation id="5215502535566372932">Chagua nchi</translation> <translation id="521582610500777512">Picha ilitupwa</translation> +<translation id="5222403284441421673">Kipakuliwa kisicho salama kimezuiwa</translation> <translation id="5222676887888702881">Ondoka</translation> <translation id="52232769093306234">Imeshindwa kupakia faili.</translation> <translation id="5225324770654022472">Onyesha mkato wa programu</translation> @@ -3526,6 +3529,7 @@ <translation id="5734362860645681824">Mawasiliano</translation> <translation id="5734697361979786483">Ongeza faili ya kushiriki</translation> <translation id="5736796278325406685">Tafadhali andika jina sahihi la mtumiaji</translation> +<translation id="5739017626473506901">Ingia katika akaunti ili umsaidie <ph name="USER_NAME" /> aweke akaunti ya shuleni</translation> <translation id="5739235828260127894">Inasubiri uthibitishaji. <ph name="LINK_BEGIN" />Pata maelezo zaidi.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Kubwa sana</translation> <translation id="574209121243317957">Uzito wa sauti</translation> @@ -4756,7 +4760,7 @@ <translation id="7400418766976504921">URL</translation> <translation id="7400839060291901923">Weka mipangilio ya muunganisho kwenye <ph name="PHONE_NAME" /> yako</translation> <translation id="7401778920660465883">Ondoa ujumbe huu</translation> -<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Angalizo la usalama limetekelezwa saa moja iliyopita}other{Angalizo la usalama limetekelezwa saa {NUM_HOURS} zilizopita}}</translation> +<translation id="7405938989981604410">{NUM_HOURS,plural, =1{Angalizo la usalama lilitekelezwa saa moja iliyopita}other{Angalizo la usalama lilitekelezwa saa {NUM_HOURS} zilizopita}}</translation> <translation id="740624631517654988">Kidirisha ibukizi kimezuiwa</translation> <translation id="7407430846095439694">Leta na Ufunge</translation> <translation id="7407504355934009739">Watu wengi huzuia arifa kutoka tovuti hii</translation> @@ -4845,7 +4849,7 @@ <translation id="7514239104543605883">Nakili kwenye kifaa chako</translation> <translation id="7514365320538308">Pakua</translation> <translation id="751523031290522286"><ph name="APP_NAME" /> imezuiwa na msimamizi. Mwombe msimamizi ruhusa ya kutumia programu hii.</translation> -<translation id="7516981202574715431"><ph name="APP_NAME" /> imesimamishwa</translation> +<translation id="7516981202574715431"><ph name="APP_NAME" /> imesitishwa</translation> <translation id="7517063221058203587">{0,plural, =1{Sasisha kifaa ndani ya dakika moja}other{Sasisha kifaa ndani ya dakika #}}</translation> <translation id="7520766081042531487">Tovuti katika Hali Fiche: <ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> @@ -5536,6 +5540,7 @@ <translation id="8408068190360279472">Mtandao wa <ph name="NETWORK_TYPE" />, inaunganisha</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Uliza kwanza (imependekezwa)</translation> +<translation id="8417548266957501132">Nenosiri la mzazi</translation> <translation id="8417573335434189196">Haikulindi dhidi ya tovuti, vipakuliwa au viendelezi hatari. Chrome haipendekezi mipangilio hii.</translation> <translation id="8418445294933751433">Onye&sha kama kichupo</translation> <translation id="8419098111404128271">Matokeo ya utafutaji wa '<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 075832b..3f2b875 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3968,7 +3968,7 @@ <translation id="6414888972213066896">இந்தத் தளத்தைப் பார்வையிடலாமா என, நீங்கள் பெற்றோரிடம் கேட்டுள்ளீர்கள்</translation> <translation id="6415900369006735853">உங்கள் ஃபோனைப் பயன்படுத்தி இணையத்துடன் இணைக்கலாம்</translation> <translation id="6416743254476733475">உங்கள் கம்ப்யூட்டரில் அனுமதிக்கவும் அல்லது தடுக்கவும்.</translation> -<translation id="6417265370957905582">Google அசிஸ்டண்ட்</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> இன் நிறுவப்பட்ட முந்தைய பதிப்பிற்கு மாற்றியமைக்கிறது</translation> <translation id="6418481728190846787">எல்லா ஆப்ஸுக்கும் அணுகலை நிரந்தரமாக அகற்று</translation> <translation id="6418511932144861495">முக்கியப் புதுப்பிப்பை நிறுவவும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index eeb271a..0295de32 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">అప్లోడ్ చేయి</translation> <translation id="1244265436519979884">ప్రస్తుతం Linux పునరుద్ధరణ ప్రోగ్రెస్లో ఉంది</translation> <translation id="1244303850296295656">ఎక్స్టెన్షన్ ఎర్రర్</translation> +<translation id="1246158006305844142">మీరు Google ఖాతాతో సైన్ ఇన్ చేసిన Chrome OS పరికరాల అంతటా మీ యాప్లు, సెట్టింగ్లు సింక్ చేయబడతాయి. బ్రౌజర్ సింక్ ఎంపికల కోసం, <ph name="LINK_BEGIN" />Chrome సెట్టింగ్ల<ph name="LINK_END" />కు వెళ్లండి.</translation> <translation id="1246905108078336582">క్లిప్బోర్డ్ నుండి సూచనను తొలగించాలా?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> విస్మరించబడింది కాబట్టి అది బ్లాక్ చేయబడింది</translation> <translation id="1251366534849411931">తెరిచి ఉన్న వంకర కలుపు ఉండాలి: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">వద్దు, ధన్యవాదాలు</translation> <translation id="1525740877599838384">స్థానాన్ని గుర్తించడానికి Wi-Fiని మాత్రమే ఉపయోగించు</translation> <translation id="152629053603783244">Linuxను రీస్టార్ట్ చేయండి</translation> +<translation id="1526335046150927198">టచ్ప్యాడ్ స్క్రోల్ యాక్సిలరేషన్ను ఎనేబుల్ చేయండి</translation> <translation id="1526560967942511387">శీర్షికలేని పత్రం</translation> <translation id="1529891865407786369">పవర్ సోర్స్</translation> <translation id="1530838837447122178">మౌస్ మరియు టచ్ప్యాడ్ పరికర సెట్టింగ్లను తెరవండి</translation> @@ -405,7 +407,7 @@ <translation id="1545177026077493356">స్వయంచాలక కియోస్క్ మోడ్</translation> <translation id="1545775234664667895">"<ph name="THEME_NAME" />" థీమ్ వ్యవస్థాపించబడింది.</translation> <translation id="1546280085599573572">ఈ ఎక్స్టెన్షన్ మీరు హోమ్ బటన్ను క్లిక్ చేసినప్పుడు చూపబడే పేజీని మార్చింది.</translation> -<translation id="1546452108651444655"><ph name="CHILD_NAME" /> <ph name="EXTENSION_TYPE" />ను ఇన్స్టాల్ చేయాలనుకుంటుంది, అది కింది వాటిని చేయగలదు:</translation> +<translation id="1546452108651444655"><ph name="CHILD_NAME" /> <ph name="EXTENSION_TYPE" />ను ఇన్స్టాల్ చేయాలనుకుంటోంది, అది కింది వాటిని చేయగలదు:</translation> <translation id="1549275686094429035">ARC ఎనేబుల్ చేయబడింది</translation> <translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" />ని యాక్సెస్ చేయాలనుకుంటోంది. దీని వలన మీ ఫైల్లు మారవచ్చు లేదా తొలగించబడవచ్చు.</translation> <translation id="1553538517812678578">అపరిమిత</translation> @@ -1310,6 +1312,7 @@ <translation id="2725200716980197196">నెట్వర్క్ కనెక్టివిటీ పునరుద్ధరించబడింది</translation> <translation id="2727633948226935816">నాకు మళ్లీ గుర్తు చేయవద్దు</translation> <translation id="2727712005121231835">అసలు పరిమాణం</translation> +<translation id="2729314457178420145">అలాగే బ్రౌజింగ్ డేటాను (<ph name="URL" />) క్లియర్ చేస్తుంది, దీని వలన మీరు Google.com నుండి సైన్ అవుట్ చేయబడవచ్చు. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux యాప్లు, ఫైల్లను బ్యాకప్ చేస్తోంది</translation> <translation id="273093730430620027">ఈ పేజీ మీ కెమెరాను ప్రాప్యత చేస్తోంది.</translation> <translation id="2731392572903530958">మూసివేయబడిన విండోను మళ్లీ తె&రవండి</translation> @@ -2158,6 +2161,7 @@ <translation id="3838486795898716504">మరిన్ని <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">కుక్కీలు మరియు ఇతర సైట్ మరియు ప్లగిన్ డేటా</translation> <translation id="383891835335927981">సైట్లు ఏవీ దగ్గరకు లేదా దూరానికి జూమ్ చేయబడలేదు</translation> +<translation id="3839509547554145593">మౌస్ స్క్రోల్ యాక్సిలరేషన్ను ఎనేబుల్ చేయండి</translation> <translation id="3839516600093027468">క్లిప్బోర్డ్ను చూడనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయి</translation> <translation id="3841964634449506551">పాస్వర్డ్ చెల్లదు</translation> <translation id="3842552989725514455">Serif ఫాంట్</translation> @@ -2766,6 +2770,7 @@ <translation id="4699172675775169585">కాష్ చేసిన చిత్రాలు మరియు ఫైల్లు</translation> <translation id="4699357559218762027">(స్వయంచాలకంగా ప్రారంభించబడింది)</translation> <translation id="470074695271471509">పూర్తి చేయడానికి సైన్ అవుట్ చేస్తారా?</translation> +<translation id="4701025263201366865">తల్లి/తండ్రి సైన్ ఇన్</translation> <translation id="4707302005824653064">chrome.comలో నిర్వాహకుడు (<ph name="CUSTODIAN_EMAIL" />) వినియోగాన్ని మరియు చరిత్రను సమీక్షించవచ్చు.</translation> <translation id="4707579418881001319">L2TP/IPsec + వినియోగదారు ప్రమాణపత్రం</translation> <translation id="4708794300267213770">నిద్రావస్థ నుండి సక్రియం అవుతున్నప్పుడు లాక్ స్క్రీన్ని చూపు</translation> @@ -3073,6 +3078,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> శోధన</translation> <translation id="5139823398361067371">మీ సెక్యూరిటీ కీకి చెందిన పిన్ను నమోదు చేయండి. మీకు పిన్ తెలియకపోతే, మీరు 'సెక్యూరిటీ కీ'ని రీసెట్ చేయాలి.</translation> <translation id="5139955368427980650">&తెరువు</translation> +<translation id="5142793792982256885">టచ్ప్యాడ్ స్క్రోల్ వేగం</translation> <translation id="5142961317498132443">ప్రమాణీకరణ</translation> <translation id="5143374789336132547">"<ph name="EXTENSION_NAME" />" ఎక్స్టెన్షన్, మీరు హోమ్ బటన్ను క్లిక్ చేసినప్పుడు చూపబడే పేజీని మార్చింది.</translation> <translation id="5143712164865402236">పూర్తి స్క్రీన్ను ఎంటర్ చెయ్యండి</translation> @@ -3634,6 +3640,7 @@ <translation id="5901630391730855834">పసుపు</translation> <translation id="5906655207909574370">దాదాపు తాజాగా ఉంది! అప్డేట్ను పూర్తి చేయడానికి మీ పరికరాన్ని పునఃప్రారంభించండి.</translation> <translation id="5906732635754427568">ఈ యాప్తో అనుబంధించబడిన డేటా ఈ పరికరం నుండి తీసివేయబడుతుంది.</translation> +<translation id="5908695239556627796">మౌస్ స్క్రోల్ వేగం</translation> <translation id="5908769186679515905">Flashని అమలు చేయనీయకుండా సైట్లను బ్లాక్ చేయి</translation> <translation id="5910363049092958439">చిత్రాన్ని ఇలా సే&వ్ చేయి...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> ఆఫ్లైన్లో ఉంది</translation> @@ -4023,7 +4030,7 @@ <translation id="6414888972213066896">మీరు ఈ సైట్ను సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు</translation> <translation id="6415900369006735853">మీ ఫోన్ ద్వారా ఇంటర్నెట్కు కనెక్ట్ అవ్వండి</translation> <translation id="6416743254476733475">మీ కంప్యూటర్లో అనుమతించండి లేదా బ్లాక్ చేయండి.</translation> -<translation id="6417265370957905582">Google అసిస్టెంట్</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6418160186546245112">మునుపు ఇన్స్టాల్ చేసిన <ph name="IDS_SHORT_PRODUCT_NAME" /> వెర్షన్కు తిరిగి మారుస్తోంది</translation> <translation id="6418481728190846787">అన్ని యాప్ల కోసం యాక్సెస్ను శాశ్వతంగా తీసివేయి</translation> <translation id="6418511932144861495">కీలకమైన అప్డేట్ను ఇన్స్టాల్ చేయండి</translation> @@ -5075,6 +5082,7 @@ <ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> ప్రక్రియ సమయంలో సిస్టమ్ రీబూట్ అవుతుంది.</translation> <translation id="7828731929332799387">మూడవ పక్షంతో అనుబంధించబడిన అందుబాటులో ఉన్న అన్ని కుక్కీలను, ఇంకా సైట్ డేటాను ఇది క్లియర్ చేస్తుంది. మీరు కొనసాగించాలనుకుంటున్నారా?</translation> <translation id="7829298379596169484">ఆడియో ఇన్పుట్ ప్రాప్యత చేయబడుతోంది</translation> +<translation id="7829877209233347340">స్కూల్ ఖాతాను జోడించడానికి అనుమతి ఇవ్వడం కోసం తల్లి/తండ్రిని సైన్ ఇన్ అవ్వమని అడగండి</translation> <translation id="7830594666202422257">Linuxకు కనెక్ట్ చేయి</translation> <translation id="7831491651892296503">నెట్వర్క్ను కాన్ఫిగర్ చేయడంలో ఎర్రర్</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5823,6 +5831,7 @@ <translation id="8808686172382650546">పిల్లి</translation> <translation id="8808744862003883508">ఈ పేజీలో మీరు Chromeలో ఇన్స్టాల్ చేసిన అన్ని ఎక్స్టెన్షన్లను చూడవచ్చు.</translation> <translation id="8809147117840417135">లేత నీలి ఆకుపచ్చ రంగు</translation> +<translation id="8812593354822910461">అలాగే బ్రౌజింగ్ డేటాను (<ph name="URL" />) క్లియర్ చేస్తుంది, దీని వలన మీరు <ph name="DOMAIN" /> నుండి సైన్ అవుట్ చేయబడతారు. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" />కు సైన్ ఇన్ చేయడం సాధ్యపడదు</translation> <translation id="8813811964357448561">పేపర్ షీట్</translation> <translation id="8813872945700551674">"<ph name="EXTENSION_NAME" />"ను ఆమోదించమని తల్లి/తండ్రిని అడగండి</translation> @@ -6112,6 +6121,7 @@ <translation id="9203398526606335860">&ప్రొఫైలింగ్ అనుమతించబడింది</translation> <translation id="9203904171912129171">ఒక పరికరాన్ని ఎంచుకోండి</translation> <translation id="9203962528777363226">ఈ పరికరం యొక్క నిర్వాహకుడు కొత్త వినియోగదారులను జోడించడం నిలిపివేశారు</translation> +<translation id="9209689095351280025">వెబ్ అంతటా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే కుక్కీలను సైట్లు ఉపయోగించడం సాధ్యం కాదు</translation> <translation id="9211177926627870898">అప్డేట్ అవసరం</translation> <translation id="9214520840402538427">అయ్యో! ఇనస్టలేషన్-సమయ లక్షణాల ప్రారంభ సమయం ముగిసింది. దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation> <translation id="9214695392875603905">కప్ కేక్</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 9b4a77c..e52b8aaf 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -461,6 +461,7 @@ <translation id="1616206807336925449">ส่วนขยายนี้ไม่จำเป็นต้องมีสิทธิ์พิเศษ</translation> <translation id="1616298854599875024">นำเข้าส่วนขยาย "<ph name="IMPORT_NAME" />" ไม่ได้เนื่องจากไม่ใช่โมดูลที่แชร์</translation> <translation id="1618268899808219593">ศู&นย์ช่วยเหลือ</translation> +<translation id="1620307519959413822">รหัสผ่านไม่ถูกต้อง ลองอีกครั้งหรือคลิก "ลืมรหัสผ่าน" เพื่อรีเซ็ตรหัสผ่าน</translation> <translation id="1620510694547887537">กล้องถ่ายรูป</translation> <translation id="1623132449929929218">ขณะนี้รูปภาพยังไม่พร้อมให้ใช้งาน โปรดเชื่อมต่ออินเทอร์เน็ตอีกครั้งเพื่อดูคอลเล็กชันวอลเปเปอร์</translation> <translation id="1627276047960621195">ตัวอธิบายไฟล์</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">การแก้ไขฮาร์ดแวร์</translation> <translation id="1890674179660343635"><span>รหัส: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">เปิดการแสดงแบบเต็มหน้าจอ</translation> +<translation id="1892341345406963517">สวัสดี <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">ภาษาอื่นๆ</translation> <translation id="1895252664692693738">เหลืออีก <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">ปิด</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">แสดงการตั้งค่าพร็อกซี</translation> <translation id="5215502535566372932">เลือกประเทศ</translation> <translation id="521582610500777512">รูปภาพถูกยกเลิกแล้ว</translation> +<translation id="5222403284441421673">บล็อกการดาวน์โหลดที่ไม่ปลอดภัยแล้ว</translation> <translation id="5222676887888702881">ออกจากระบบ</translation> <translation id="52232769093306234">การบรรจุล้มเหลว</translation> <translation id="5225324770654022472">แสดงทางลัดแอป</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">การสื่อสาร</translation> <translation id="5734697361979786483">เพิ่มพื้นที่แชร์ไฟล์</translation> <translation id="5736796278325406685">โปรดป้อนชื่อผู้ใช้ที่ถูกต้อง</translation> +<translation id="5739017626473506901">ลงชื่อเข้าใช้เพื่อช่วย <ph name="USER_NAME" /> เพิ่มบัญชีโรงเรียน</translation> <translation id="5739235828260127894">กำลังรอการยืนยัน <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation> <translation id="5739458112391494395">ใหญ่มาก</translation> <translation id="574209121243317957">ระดับเสียงสูงต่ำ</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">เครือข่าย <ph name="NETWORK_TYPE" /> กำลังเชื่อมต่อ</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">ถามก่อน (แนะนำ)</translation> +<translation id="8417548266957501132">รหัสผ่านสำหรับผู้ปกครอง</translation> <translation id="8417573335434189196">ไม่ปกป้องคุณจากเว็บไซต์ การดาวน์โหลด หรือส่วนขยายที่เป็นอันตราย Chrome ไม่แนะนำให้ใช้การตั้งค่านี้</translation> <translation id="8418445294933751433">แ&สดงเป็นแถบ</translation> <translation id="8419098111404128271">ผลการค้นหาของ "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 81a85d9f..c6697eb 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Yükle</translation> <translation id="1244265436519979884">Linux için geri yükleme şu anda devam ediyor</translation> <translation id="1244303850296295656">Uzantı hatası</translation> +<translation id="1246158006305844142">Uygulamalarınız ve ayarlarınız, Google hesabınızla oturum açtığınız tüm Chrome OS cihazlarında senkronize edilir. Tarayıcı senkronizasyon seçenekleri için <ph name="LINK_BEGIN" />Chrome ayarlarına<ph name="LINK_END" /> gidin.</translation> <translation id="1246905108078336582">Öneri panodan kaldırılsın mı?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> eklentisi kullanımdan kaldırıldığı için engellendi</translation> <translation id="1251366534849411931">Küme açma parantezi olması bekleniyor: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Hayır, teşekkürler</translation> <translation id="1525740877599838384">Konumu belirlemek için yalnızca kablosuz ağ kullan</translation> <translation id="152629053603783244">Linux'u yeniden başlat</translation> +<translation id="1526335046150927198">Dokunmatik alan kaydırma hızlandırmasını etkinleştir</translation> <translation id="1526560967942511387">Adsız Doküman</translation> <translation id="1529891865407786369">Güç kaynağı</translation> <translation id="1530838837447122178">Fare ve dokunmatik alan cihaz ayarlarını aç</translation> @@ -1313,6 +1315,7 @@ <translation id="2725200716980197196">Ağ bağlantısı geri yüklendi</translation> <translation id="2727633948226935816">Bir daha hatırlatma</translation> <translation id="2727712005121231835">Gerçek Boyut</translation> +<translation id="2729314457178420145">Ayrıca tarama verilerini (<ph name="URL" />) temizle. Bu işlem Google.com oturumunuzu kapatabilir. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux uygulamaları ve dosyalar yedekleniyor</translation> <translation id="273093730430620027">Bu sayfa kameranıza erişiyor.</translation> <translation id="2731392572903530958">Kapatılan Pencereyi T&ekrar Aç</translation> @@ -1665,7 +1668,7 @@ <translation id="3201422919974259695">Kullanılabilir USB cihazlar burada görünür.</translation> <translation id="3202131003361292969">Yol</translation> <translation id="3202173864863109533">Bu sekmenin sesi kapatılıyor.</translation> -<translation id="3208321278970793882">App</translation> +<translation id="3208321278970793882">Uygulama</translation> <translation id="3208584281581115441">Şimdi denetle</translation> <translation id="3208703785962634733">Onaylanmayan</translation> <translation id="32101887417650595">Yazıcıya bağlanılamıyor</translation> @@ -2164,6 +2167,7 @@ <translation id="3838486795898716504">Diğer <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Çerezler ve diğer site verileriyle eklenti verileri</translation> <translation id="383891835335927981">Yakınlaştırılmış veya uzaklaştırılmış herhangi bir site yok</translation> +<translation id="3839509547554145593">Fare kaydırma hızlandırmasını etkinleştir</translation> <translation id="3839516600093027468"><ph name="HOST" /> sitesinin panoyu görmesini her zaman engelle</translation> <translation id="3841964634449506551">Şifre geçersiz</translation> <translation id="3842552989725514455">Serif yazı tipi</translation> @@ -2775,6 +2779,7 @@ <translation id="4699172675775169585">Önbelleğe alınan resimler ve dosyalar</translation> <translation id="4699357559218762027">(otomatik başlatıldı)</translation> <translation id="470074695271471509">Tamamlamak için oturum kapatılsın mı?</translation> +<translation id="4701025263201366865">Ebeveyn oturum açmalı</translation> <translation id="4707302005824653064">Kullanım ve geçmiş bilgileri, yönetici tarafından (<ph name="CUSTODIAN_EMAIL" />) chrome.com adresinden incelenebilir.</translation> <translation id="4707579418881001319">L2TP/IPSec + kullanıcı sertifikası</translation> <translation id="4708794300267213770">Uykudan uyanırken kilit ekranını göster</translation> @@ -3082,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Arama</translation> <translation id="5139823398361067371">Güvenlik anahtarınızın PIN'ini girin. PIN kodunu bilmiyorsanız güvenlik anahtarını sıfırlamanız gerekir.</translation> <translation id="5139955368427980650">&Aç</translation> +<translation id="5142793792982256885">Dokunmatik alan kaydırma hızı</translation> <translation id="5142961317498132443">Kimlik Doğrulama</translation> <translation id="5143374789336132547">"<ph name="EXTENSION_NAME" />" uzantısı Ana Sayfa düğmesini tıkladığınızda gösterilecek sayfayı değiştirdi.</translation> <translation id="5143712164865402236">Tam Ekrana Geç</translation> @@ -3645,6 +3651,7 @@ <translation id="5901630391730855834">Sarı</translation> <translation id="5906655207909574370">Az kaldı! Güncellemeyi tamamlamak için cihazınızı yeniden başlatın.</translation> <translation id="5906732635754427568">Bu uygulamayla ilişkili veriler bu cihazdan kaldırılacak.</translation> +<translation id="5908695239556627796">Fare kaydırma hızı</translation> <translation id="5908769186679515905">Sitelerin Flash çalıştırmasını engelle</translation> <translation id="5910363049092958439">Resmi Farklı Ka&ydet...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> çevrimdışı</translation> @@ -5091,6 +5098,7 @@ <ph name="BEGIN_BOLD" />Not:<ph name="END_BOLD" /> İşlem sırasında sistem yeniden başlatılacaktır</translation> <translation id="7828731929332799387">Bu, üçüncü taraf bağlamında mevcut tüm çerezleri ve site verilerini siler. Devam etmek istiyor musunuz?</translation> <translation id="7829298379596169484">Ses girişine erişiliyor</translation> +<translation id="7829877209233347340">Bir ebeveynden okul hesabı ekleme izni vermesi için oturum açmasını isteyin</translation> <translation id="7830594666202422257">Linux'a bağlan</translation> <translation id="7831491651892296503">Ağ yapılandırılırken hata oluştu</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5845,6 +5853,7 @@ <translation id="8808686172382650546">Kedi</translation> <translation id="8808744862003883508">Chrome'da yüklü tüm uzantıları bu sayfada görebilirsiniz.</translation> <translation id="8809147117840417135">Açık turkuaz</translation> +<translation id="8812593354822910461">Ayrıca tarama verilerini (<ph name="URL" />) temizle. Bu işlem <ph name="DOMAIN" /> oturumunuzu kapatabilir. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> hesabında oturum açılamıyor</translation> <translation id="8813811964357448561">kağıt</translation> <translation id="8813872945700551674">Ebeveyninizden "<ph name="EXTENSION_NAME" />" uzantısını onaylamasını isteyin</translation> @@ -6134,6 +6143,7 @@ <translation id="9203398526606335860">&Profil oluşturma etkin</translation> <translation id="9203904171912129171">Cihaz seçin</translation> <translation id="9203962528777363226">Bu cihazın yöneticisi yeni kullanıcıların eklenmesini devre dışı bıraktı</translation> +<translation id="9209689095351280025">Siteler sizi web'de takip eden çerezler kullanamaz</translation> <translation id="9211177926627870898">Güncelleme gerekli</translation> <translation id="9214520840402538427">Hata! Yükleme zamanı özniteliklerini başlatma işlemi zaman aşımına uğradı. Lütfen destek temsilcinizle görüşün.</translation> <translation id="9214695392875603905">Küçük kek</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index a473fe88..021f47a 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -392,7 +392,7 @@ <translation id="1524563461097350801">Ні, дякую</translation> <translation id="1525740877599838384">Визначати місцезнаходження лише за допомогою Wi-Fi</translation> <translation id="152629053603783244">Перезапустити Linux</translation> -<translation id="1526335046150927198">Увімкнути прискорення прокрутки сенсорною панеллю</translation> +<translation id="1526335046150927198">Увімкнути прискорення прокрутки за допомогою сенсорної панелі</translation> <translation id="1526560967942511387">Документ без імені</translation> <translation id="1529891865407786369">Джерело живлення</translation> <translation id="1530838837447122178">Відкрити налаштування миші та сенсорної панелі</translation> @@ -461,6 +461,7 @@ <translation id="1616206807336925449">Для цього розширення не потрібні спеціальні дозволи.</translation> <translation id="1616298854599875024">Не вдається імпортувати розширення <ph name="IMPORT_NAME" />, оскільки воно не є спільним модулем</translation> <translation id="1618268899808219593">Довідковий центр</translation> +<translation id="1620307519959413822">Неправильний пароль. Повторіть спробу або натисніть "Забули пароль?", щоб скинути його.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1623132449929929218">Зображення наразі недоступні. Щоб переглянути колекції фонових малюнків, підключіться до Інтернету знову.</translation> <translation id="1627276047960621195">Опис файлу</translation> @@ -679,6 +680,7 @@ <translation id="1887850431809612466">Апаратне забезпечення</translation> <translation id="1890674179660343635"><span>Ідентифікатор: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Відкрити на весь екран</translation> +<translation id="1892341345406963517">Вітаємо, <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Інші мови</translation> <translation id="1895252664692693738">Залишилося <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Завершення роботи</translation> @@ -3133,6 +3135,7 @@ <translation id="5213891612754844763">Показати налаштування проксі</translation> <translation id="5215502535566372932">Вибрати країну</translation> <translation id="521582610500777512">Фотографію відхилено</translation> +<translation id="5222403284441421673">Незахищене завантаження заблоковано</translation> <translation id="5222676887888702881">Вийти</translation> <translation id="52232769093306234">Помилка пакування.</translation> <translation id="5225324770654022472">Показувати ярлики додатків</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Зв’язок</translation> <translation id="5734697361979786483">Додати файлообмінник</translation> <translation id="5736796278325406685">Введіть дійсне ім’я користувача</translation> +<translation id="5739017626473506901">Увійдіть, і тоді <ph name="USER_NAME" /> зможе додати обліковий запис навчального закладу</translation> <translation id="5739235828260127894">Очікується підтвердження. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Дуже великий</translation> <translation id="574209121243317957">Тон</translation> @@ -5539,6 +5543,7 @@ <translation id="8408068190360279472">Мережа <ph name="NETWORK_TYPE" />: підключення</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Спершу запитувати (рекомендується)</translation> +<translation id="8417548266957501132">Пароль батьків</translation> <translation id="8417573335434189196">Не захищає від небезпечних веб-сайтів, завантажень і розширень. Chrome не радить це налаштування.</translation> <translation id="8418445294933751433">&Показати як вкладку</translation> <translation id="8419098111404128271">Результати пошуку для запиту "<ph name="SEARCH_TEXT" />"</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 6d69621..55f2218 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -52,7 +52,7 @@ <translation id="1058262162121953039">PUK</translation> <translation id="1061745542578250838"><ph name="FILE_NAME" /> حساس مواد پر مشتمل ہے، اور مسدود کر دیا گیا ہے۔</translation> <translation id="1061904396131502319">وقفے کا وقت تقریباً ہو گیا ہے</translation> -<translation id="1064552680598333868">جب Linux دوبارہ شروع ہوگا تو مائیکروفون میں تبدیلیاں لاگو ہوں گی۔</translation> +<translation id="1064552680598333868">اگلی بار Linux کے ری اسٹارٹ ہونے پر مائیکروفون میں تبدیلیاں لاگو ہوں گی۔</translation> <translation id="1067048845568873861">بنائی گئی</translation> <translation id="1067291318998134776">Linux (بی ٹا)</translation> <translation id="1067922213147265141">دیگر Google سروسز</translation> @@ -193,6 +193,7 @@ <translation id="1243314992276662751">اپ لوڈ کریں</translation> <translation id="1244265436519979884">Linux بحالی فی الحال جاری ہے</translation> <translation id="1244303850296295656">ایکسٹینشن میں خرابی</translation> +<translation id="1246158006305844142">آپ کی ایپس اور ترتیبات ان تمام Chrome OS آلات میں مطابقت پذیر ہوں گی جہاں آپ اپنے Google اکاؤنٹ کے ساتھ سائن ان ہیں۔ براؤزر کے مطابقت پذیری کے اختیارات کے ليے <ph name="LINK_BEGIN" />Chrome کی ترتیبات<ph name="LINK_END" /> پر جائیں۔</translation> <translation id="1246905108078336582">کلپ بورڈ سے تجویز ہٹائیں؟</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> فرسودہ ہونے کی وجہ سے مسدود کر دیا گیا</translation> <translation id="1251366534849411931">ابتدائی خمیدہ قوسین کی توقع ہے: <ph name="ERROR_LINE" /></translation> @@ -392,6 +393,7 @@ <translation id="1524563461097350801">نہیں شکریہ</translation> <translation id="1525740877599838384">مقام کا تعین کرنے کے لیے صرف Wi-Fi کا استعمال کریں</translation> <translation id="152629053603783244">Linux ری اسٹارٹ کریں</translation> +<translation id="1526335046150927198">ٹچ پیڈ کے اسکرول ایکسلریٹر کو فعال کریں</translation> <translation id="1526560967942511387">بلا عنوان دستاویز</translation> <translation id="1529891865407786369">پاور کا ماخذ</translation> <translation id="1530838837447122178">ماؤس اور ٹچ پیڈ آلہ کی ترتیبات کو کھولیں</translation> @@ -460,6 +462,7 @@ <translation id="1616206807336925449">اس ایکسٹینشن کو کوئی خاص اجازتیں درکار نہیں ہیں۔</translation> <translation id="1616298854599875024">ایکسٹینشن "<ph name="IMPORT_NAME" />" کو درآمد کرنے سے قاصر ہے کیونکہ یہ ایک اشتراک کردہ ماڈیول نہیں ہے</translation> <translation id="1618268899808219593">امدادی &مرکز</translation> +<translation id="1620307519959413822">پاس ورڈ غلط ہے۔ دوبارہ کوشش کریں یا اسے ری سیٹ کرنے کیلئے 'پاس ورڈ بھول گئے' پر کلک کریں۔</translation> <translation id="1620510694547887537">کیمرا</translation> <translation id="1623132449929929218">تصاویر فی الحال دستیاب نہیں ہے۔ وال پیپر کے مجموعوں کو دیکھنے کے لیے براہ کرم انٹرنیٹ سے دوبارہ منسلک ہوں۔</translation> <translation id="1627276047960621195">فائل ڈسکرپٹرز</translation> @@ -678,6 +681,7 @@ <translation id="1887850431809612466">ہارڈ ویئر سے متعلق نظر ثانی</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">پوری سکرین کھولیں</translation> +<translation id="1892341345406963517">آداب <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">دوسری زبانیں</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> باقی ہے</translation> <translation id="1895658205118569222">بند کریں</translation> @@ -1314,6 +1318,7 @@ <translation id="2725200716980197196">نیٹ ورک کنیکٹویٹی بحال کر دی گئی</translation> <translation id="2727633948226935816">مجھے دوبارہ یاد نہ دلائیں</translation> <translation id="2727712005121231835">اصل سائز</translation> +<translation id="2729314457178420145">براؤزنگ ڈیٹا (<ph name="URL" />) بھی صاف کریں جس سے آپ Google.com سے سائن آؤٹ ہو سکتے ہیں۔ <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux ایپس اور فائلز کا بیک اپ لیا جا رہا ہے</translation> <translation id="273093730430620027">یہ صفحہ آپ کے کیمرا تک رسائی حاصل کر رہا ہے۔</translation> <translation id="2731392572903530958">بند ونڈوز د&وبارہ کھولیں</translation> @@ -2165,6 +2170,7 @@ <translation id="3838486795898716504">مزید <ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">کوکیز اور دیگر سائٹ اور پلگ ان ڈیٹا</translation> <translation id="383891835335927981">کسی بھی سائٹ کو زوم ان یا زوم آؤٹ نہیں کیا گیا ہے</translation> +<translation id="3839509547554145593">ماؤس کے اسکرول ایکسلریٹر کو فعال کریں</translation> <translation id="3839516600093027468">کلپ بورڈ کو دیکھنے سے <ph name="HOST" /> کو ہمیشہ مسدود کریں</translation> <translation id="3841964634449506551">پاس ورڈ غلط ہے</translation> <translation id="3842552989725514455">Serif فونٹ</translation> @@ -2332,7 +2338,7 @@ <translation id="4047726037116394521">ہوم پر جائیں</translation> <translation id="4050225813016893843">تصدیق کا طریقہ</translation> <translation id="4052120076834320548">چھوٹا</translation> -<translation id="4056908315660577142"><ph name="APP_NAME" /> Chrome ایپس کے لیے آپ کے والدین کی سیٹ کی ہوئی آپ کی وقت کی حد پوری ہو گئی۔ اب آپ اسے <ph name="TIME_LIMIT" /> تک کل استعمال کر سکتے ہیں۔</translation> +<translation id="4056908315660577142"><ph name="APP_NAME" /> Chrome ایپ کے لیے آپ کے والدین کی سیٹ کی ہوئی آپ کی وقت کی حد پوری ہو گئی۔ اب آپ اسے <ph name="TIME_LIMIT" /> تک کل استعمال کر سکتے ہیں۔</translation> <translation id="4057041477816018958"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" /></translation> <translation id="4057896668975954729">اسٹور میں دیکھیں</translation> <translation id="4058647953897694817">بلوٹوتھ کے ذریعے توثیق کریں</translation> @@ -2776,6 +2782,7 @@ <translation id="4699172675775169585">کیش کردہ تصاویر اور فائلیں</translation> <translation id="4699357559218762027">(از خود شروع کیا گیا)</translation> <translation id="470074695271471509">مکمل کرنے کیلئے سائن آؤٹ کریں؟</translation> +<translation id="4701025263201366865">والدین کا سائن ان</translation> <translation id="4707302005824653064">مینیجر (<ph name="CUSTODIAN_EMAIL" />) استعمال اور سرگزشت کا chrome.com پر جائزہ لے سکتا ہے۔</translation> <translation id="4707579418881001319">L2TP/IPsec + صارف سرٹیفکیٹ</translation> <translation id="4708794300267213770">سلیپ وضع سے بیدار کرنے کے وقت لاک اسکرین دکھائیں</translation> @@ -3083,6 +3090,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />، <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> تلاش</translation> <translation id="5139823398361067371">اپنی سیکورٹی کلید کے لیے PIN درج کریں۔ اگر آپ کو PIN معلوم نہیں ہے، تو آپ کو سیکیورٹی کلید کو دوبارہ ترتیب دینا ہوگا۔</translation> <translation id="5139955368427980650">&کھولیں</translation> +<translation id="5142793792982256885">ٹچ پیڈ کے اسکرول کی رفتار</translation> <translation id="5142961317498132443">تصدیق</translation> <translation id="5143374789336132547">آپ کی جانب سے ہوم بٹن کلک کرنے پر دکھائی دینے والے صفحہ کو ایکسٹینشن "<ph name="EXTENSION_NAME" />" نے تبدیل کر دیا ہے۔</translation> <translation id="5143712164865402236">پوری اسکرین میں داخل ہوں</translation> @@ -3128,6 +3136,7 @@ <translation id="5213891612754844763">پراکسی ترتیبات دکھائيں</translation> <translation id="5215502535566372932">ملک منتخب کریں</translation> <translation id="521582610500777512">تصویر کو مسترد کر دیا گیا</translation> +<translation id="5222403284441421673">غیر محفوظ ڈاؤن لوڈ مسدود ہو گیا</translation> <translation id="5222676887888702881">سائن آؤٹ</translation> <translation id="52232769093306234">پیکنگ نہیں ہو سکی۔</translation> <translation id="5225324770654022472">ایپس شارٹ کٹ دکھائیں</translation> @@ -3421,7 +3430,7 @@ <translation id="5593357315997824387">میری فائلز کی مطابقت پذیری کریں</translation> <translation id="5595152862129936745">بہت دور</translation> <translation id="5595485650161345191">پتے میں ترمیم کریں</translation> -<translation id="5595727715083333657">آپ کا کنٹینر سائز تبدیل کرنے کو سپورٹ نہیں کرتا ہے۔ Linux (بی ٹا) کے لیے پہلے تقسیم کیے گئے جگہ کی مقدار کو ایڈجسٹ کرنے کے لیے بیک اپ لیں اور اسے نئے کنٹینر میں بحال کریں۔</translation> +<translation id="5595727715083333657">آپ کا کنٹینر سائز تبدیل کرنے کو سپورٹ نہیں کرتا ہے۔ Linux (بی ٹا) کے لیے پہلے سے مختص کی گئی جگہ کی مقدار کو ایڈجسٹ کرنے کے لیے بیک اپ لیں اور اسے نئے کنٹینر میں بحال کریں۔</translation> <translation id="5596627076506792578">مزید اختیارات</translation> <translation id="5600706100022181951">موبائل ڈیٹا <ph name="UPDATE_SIZE_MB" /> MB استعمال کرتے ہوۓ اپڈیٹ ڈاؤن لوڈ ہو جائے گا۔ کیا آپ اسے جاری رکھنا چاہتے ہيں؟</translation> <translation id="5601503069213153581">PIN</translation> @@ -3526,6 +3535,7 @@ <translation id="5734362860645681824">مواصلات</translation> <translation id="5734697361979786483">فائل کا اشتراک شامل کریں</translation> <translation id="5736796278325406685">براہ کرم ایک درست صارف نام درج کریں</translation> +<translation id="5739017626473506901">اسکول کا اکاؤنٹ شامل کرنے میں <ph name="USER_NAME" /> کی مدد کرنے کیلئے سائن ان کریں</translation> <translation id="5739235828260127894">توثیق کا انتظار ہے۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="5739458112391494395">بہت بڑا</translation> <translation id="574209121243317957">پچ</translation> @@ -3645,6 +3655,7 @@ <translation id="5901630391730855834">پیلا</translation> <translation id="5906655207909574370">تقریباً اپ ٹو ڈیٹ! اپ ڈیٹ کرنے کو مکمل کرنے کیلئے اپنا آلہ دوبارہ شروع کریں۔</translation> <translation id="5906732635754427568">اس ایپ سے وابستہ ڈیٹا کو اس آلہ سے ہٹا دیا جائے گا۔</translation> +<translation id="5908695239556627796">ماؤس کے اسکرول کی رفتار</translation> <translation id="5908769186679515905">سائٹس کو فلیش چلانے سے مسدود کریں</translation> <translation id="5910363049092958439">تصویر مح&فوظ کریں بطور…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> آف لائن ہے</translation> @@ -3957,7 +3968,7 @@ <translation id="6309510305002439352">مائیکروفون آف ہے</translation> <translation id="6311220991371174222">Chrome کو شروع نہیں کیا جا سکتا ہے کیوںکہ آپ کے پروفائل کو کھولتے وقت کچھ غلط ہوگیا۔ Chrome کو دوبارہ شروع کرنے کی کوشش کریں۔</translation> <translation id="6312403991423642364">نیٹ ورک کی نامعلوم خرابی</translation> -<translation id="6312567056350025599">{NUM_DAYS,plural, =1{سیفٹی چیک 1 دن پہلے کیا گیا}other{سیفٹی چیک {NUM_DAYS} دن پہلے کیا گیا۔}}</translation> +<translation id="6312567056350025599">{NUM_DAYS,plural, =1{سیفٹی چیک 1 دن پہلے کیا گیا}other{سیفٹی چیک {NUM_DAYS} دن پہلے کیا گیا}}</translation> <translation id="6312638141433622592">تعاون یافتہ ہونے پر، ریڈر وضع میں مضامین دکھانے کی پیشکش کریں</translation> <translation id="6313641880021325787">VR سے باہر نکلیں</translation> <translation id="6314819609899340042">آپ نے اس <ph name="IDS_SHORT_PRODUCT_NAME" /> آلہ پر ڈیبگ کرنے کی خصوصیت کامیابی کے ساتھ فعال کر دی ہے۔</translation> @@ -4755,7 +4766,7 @@ <translation id="7400418766976504921">URL</translation> <translation id="7400839060291901923">اپنے <ph name="PHONE_NAME" /> پر کنکشن سیٹ اپ کریں</translation> <translation id="7401778920660465883">یہ پیغام خارج کریں</translation> -<translation id="7405938989981604410">{NUM_HOURS,plural, =1{سیفٹی چیک 1 گھنٹہ پہلے کیا گیا}other{سیفٹی چیک {NUM_HOURS} گھنٹہ پہلے کیا گیا}}</translation> +<translation id="7405938989981604410">{NUM_HOURS,plural, =1{سیفٹی چیک 1 گھنٹہ پہلے کیا گیا}other{سیفٹی چیک {NUM_HOURS} گھنٹے پہلے کیا گیا}}</translation> <translation id="740624631517654988">پاپ اپ کو مسدود کر دیا گیا</translation> <translation id="7407430846095439694">درآمد کریں اور پابند بنائیں</translation> <translation id="7407504355934009739">زیادہ تر لوگ اس سائٹ سے اطلاعات کو مسدود کرتے ہیں</translation> @@ -5093,6 +5104,7 @@ <ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" /> کارروائی کے دوران سسٹم ریبوٹ کرے گا۔</translation> <translation id="7828731929332799387">اس سے فریق ثالث کے سیاق و سباق میں دستیاب تمام کوکیز اور سائٹ کا ڈیٹا حذف ہو جائے گا۔ کیا آپ جاری رکھنا چاہتے ہیں؟</translation> <translation id="7829298379596169484">آڈیو ان پٹ تک رسائی ہو رہی ہے</translation> +<translation id="7829877209233347340">والدین سے اسکول اکاؤنٹ شامل کرنے کی اجازت دینے کے ليے سائن ان کرنے کو کہیں</translation> <translation id="7830594666202422257">Linux سے منسلک ہوں</translation> <translation id="7831491651892296503">نیٹ ورک کو ترتیب دینے میں خرابی</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5532,6 +5544,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> نیٹ ورک، منسلک ہو رہا ہے</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">پہلے پوچھیں (تجویز کردہ)</translation> +<translation id="8417548266957501132">والد/والدہ کا پاس ورڈ</translation> <translation id="8417573335434189196">خطرناک ویب سائٹس، ڈاؤن لوڈز یا ایکسٹینشنز سے آپ کی حفاظت نہیں کرتی ہے۔ Chrome اس ترتیب کی تجویز نہیں کرتا ہے۔</translation> <translation id="8418445294933751433">ٹیب کے بطور &دکھائیں</translation> <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' کیلئے تلاش کے نتائج</translation> @@ -5846,6 +5859,7 @@ <translation id="8808686172382650546">بلی</translation> <translation id="8808744862003883508">اس صفحہ پر آپ Chrome میں انسٹال کردہ تمام ایکسٹینشنز دیکھ سکتے ہیں۔</translation> <translation id="8809147117840417135">ہلکا نیلگوں سبز</translation> +<translation id="8812593354822910461">براؤزنگ ڈیٹا (<ph name="URL" />) بھی صاف کریں جس سے آپ <ph name="DOMAIN" /> سے سائن آؤٹ ہو جائیں گے۔ <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> میں سائن ان نہیں کیا جا سکتا ہے</translation> <translation id="8813811964357448561">پیپر کی شیٹ</translation> <translation id="8813872945700551674">والدین سے "<ph name="EXTENSION_NAME" />" کی منظوری طلب کریں</translation> @@ -6135,6 +6149,7 @@ <translation id="9203398526606335860">&پروفائلنگ فعال ہے</translation> <translation id="9203904171912129171">ایک آلہ منتخب کریں</translation> <translation id="9203962528777363226">اس آلہ کے منتظم نے نئے صارفین کے شامل کیے جانے کو غیر فعال کر دیا ہے</translation> +<translation id="9209689095351280025">سائٹس ان کوکیز کا استعمال نہیں کر سکتی ہیں جو آپ کو پورے ویب پر ٹریک کرتی ہیں۔</translation> <translation id="9211177926627870898">اپ ڈیٹ درکار ہے</translation> <translation id="9214520840402538427">افوہ! انسٹالیشن کے وقت کے انتسابات کے آغاز کا وقت ختم ہوگیا ہے۔ براہ کرم اپنے امدادی نمائندہ سے رابطہ کریں۔</translation> <translation id="9214695392875603905">کپ کیک</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 02f57a7..691016a 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -193,6 +193,7 @@ <translation id="1243314992276662751">Yuklash</translation> <translation id="1244265436519979884">Ayni vaqtda Linux fayllari tiklanmoqda</translation> <translation id="1244303850296295656">Kengaytma xatoligi</translation> +<translation id="1246158006305844142">Ilova va sozlamalaringiz Google hisobingiz bilan kirilgan barcha Chrome OS qurilmalaringizda sinxronlanadi. Brauzer sinxronizatsiyasi parametrlarini <ph name="LINK_BEGIN" />Chrome sozlamalari<ph name="LINK_END" /> orqali sozlash mumkin.</translation> <translation id="1246905108078336582">Klipbord taklifi olib tashlansinmi?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> plagini eskirganligi sababli bloklandi</translation> <translation id="1251366534849411931">Chap figurali qavs kiritilmagan: <ph name="ERROR_LINE" /></translation> @@ -389,6 +390,7 @@ <translation id="1524563461097350801">Kerak emas</translation> <translation id="1525740877599838384">Joylashuvni aniqlash uchun faqat Wi-Fi tarmoqdan foydalanish</translation> <translation id="152629053603783244">Linuxni qaytadan ishga tushirish</translation> +<translation id="1526335046150927198">Sensorli panelda tez varaqlash funksiyasini yoqish</translation> <translation id="1526560967942511387">Nomlanmagan hujjat</translation> <translation id="1529891865407786369">Quvvat manbai</translation> <translation id="1530838837447122178">Sichqoncha va sensorli panel sozlamalarini ochish</translation> @@ -457,6 +459,7 @@ <translation id="1616206807336925449">Bu kengaytmaga maxsus ruxsatlarni talab qilmaydi.</translation> <translation id="1616298854599875024">Umumiy modul hisoblanmagan <ph name="IMPORT_NAME" /> kengaytmasini import qilib bo‘lmadi</translation> <translation id="1618268899808219593">&Yordam markazi</translation> +<translation id="1620307519959413822">Parol xato. Qayta urining yoki tiklash uchun Parolni unutdim tugmasini bosing.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623132449929929218">Rasmlar hozircha mavjud emas. Kolleksiyalarni olish uchun internetga qayta ulaning.</translation> <translation id="1627276047960621195">Fayl deskriptorlari</translation> @@ -675,6 +678,7 @@ <translation id="1887850431809612466">Qurilma versiyasi</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">To‘liq ekran rejimida ochish</translation> +<translation id="1892341345406963517">Salom, <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Boshqa tillar</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> qoldi</translation> <translation id="1895658205118569222">Ishni tamomlash</translation> @@ -1311,6 +1315,7 @@ <translation id="2725200716980197196">Tarmoq aloqasi tiklandi</translation> <translation id="2727633948226935816">Boshqa eslatilmasin</translation> <translation id="2727712005121231835">Asl hajmi</translation> +<translation id="2729314457178420145">Shuningdek, brauzer tarixi (<ph name="URL" />) ham tozalansin (Google.com hisobingizdan avtomatik chiqib ketasiz). <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Linux ilova va fayllari zaxiralanmoqda</translation> <translation id="273093730430620027">Bu sahifa kameradan foydalanmoqda.</translation> <translation id="2731392572903530958">Y&opilgan oynani tiklash</translation> @@ -1589,7 +1594,7 @@ <translation id="3090819949319990166">Tashqi CRX faylni <ph name="TEMP_CRX_FILE" /> jildiga nusxalab bo‘lmadi.</translation> <translation id="3090871774332213558">“<ph name="DEVICE_NAME" />” qurilmasi ulandi</translation> <translation id="3092699946856346803">SIM kartani joylang va qaytadan urining</translation> -<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 ta ehtimolan zararli kengaytma faolsizlantirildi. Uni oʻchirib tashlash mumkin.}other{{NUM_EXTENSIONS} ta ehtimolan zararli kengaytma faolsizlantirildi. Ularni oʻchirib tashlash mumkin.}}</translation> +<translation id="3099836255427453137">{NUM_EXTENSIONS,plural, =1{1 ta ehtimoliy zararli kengaytma faolsizlantirildi. Uni oʻchirib tashlash mumkin.}other{{NUM_EXTENSIONS} ta ehtimoliy zararli kengaytma faolsizlantirildi. Ularni oʻchirib tashlash mumkin.}}</translation> <translation id="3101709781009526431">Sana va vaqt</translation> <translation id="3103941660000130485">Linux yangilanmadi</translation> <translation id="310671807099593501">Sayt Bluetooth aloqasidan foydalanmoqda</translation> @@ -2152,7 +2157,7 @@ <translation id="3827774300009121996">&To‘liq ekran rejimi</translation> <translation id="3828029223314399057">Xatcho‘plardan qidirish</translation> <translation id="3829765597456725595">Fayllarni Samba (SMB) orqali ulashish</translation> -<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{1 ta ehtimolan zararli kengaytma administrator tomonidan qayta yoqildi}other{{NUM_EXTENSIONS} ta ehtimolan zararli kengaytma administrator tomonidan qayta yoqildi}}</translation> +<translation id="3830654885961023588">{NUM_EXTENSIONS,plural, =1{1 ta ehtimoliy zararli kengaytma administrator tomonidan qayta yoqildi}other{{NUM_EXTENSIONS} ta ehtimoliy zararli kengaytma administrator tomonidan qayta yoqildi}}</translation> <translation id="3831436149286513437">Google Drive qidiruv tavsiyalari</translation> <translation id="383161972796689579">Bu qurilmaning egasi yangi foydalanuvchilarni qo‘shish imkoniyatini o‘chirib qo‘ygan</translation> <translation id="3834775135533257713">“<ph name="TO_INSTALL_APP_NAME" />” ilovasi o‘rnatilmadi, chunki u “<ph name="INSTALLED_APP_NAME" />” ilovasi bilan moslasha olmayapti.</translation> @@ -2162,6 +2167,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> sarlavhasiga ega boshqa sahifalar</translation> <translation id="3838543471119263078">Cookie fayllari, hamda boshqa sayt ma’lumotlari va plaginlar</translation> <translation id="383891835335927981">Hech qanday sayt uchun masshtab tayinlanmagan</translation> +<translation id="3839509547554145593">Sichqonchada tez varaqlash funksiyasini yoqish</translation> <translation id="3839516600093027468"><ph name="HOST" /> saytiga klipbordni ko‘rishga ruxsat har doim taqiqlansin</translation> <translation id="3841964634449506551">Parol xato terildi</translation> <translation id="3842552989725514455">Serif shrifti</translation> @@ -2461,7 +2467,7 @@ <translation id="424963718355121712">Ilovalar yopilishidan avval ochiq qolgan saytlar bilan birga ishga tushiriladi</translation> <translation id="4250229828105606438">Skrinshot</translation> <translation id="4250680216510889253">Yo‘q</translation> -<translation id="4252035718262427477">Veb sahifa, yagona faylda (veb arxiv)</translation> +<translation id="4252035718262427477">Veb-sahifa, yagona faylda (veb-arxiv)</translation> <translation id="4252852543720145436">Himoyalangan kontent identifikatorlari</translation> <translation id="4252899949534773101">Bluetooth yoqilmagan</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> – varaqni ko‘rishga ruxsat berildi</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">Keshda saqlangan tavsirlar va boshqa fayllar</translation> <translation id="4699357559218762027">(avtomatik-ishga tushirilgan)</translation> <translation id="470074695271471509">Hisobdan chiqib yakunlansinmi?</translation> +<translation id="4701025263201366865">Ota-onalar uchun kirish</translation> <translation id="4707302005824653064">Boshqaruvchi (<ph name="CUSTODIAN_EMAIL" />) brauzer tarixini chrome.com saytida ko‘rishi mumkin.</translation> <translation id="4707579418881001319">L2TP/IPSec + foydalanuvchi sertifikati</translation> <translation id="4708794300267213770">Qurilma uyqu rejimidan chiqarilishida ekran qulfi ko‘rsatilsin</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="DEFAULT_SEARCH_ENGINE_NAME" /> orqali qidirish: <ph name="QUERY_NAME" /></translation> <translation id="5139823398361067371">Elektron kalit PIN kodini kiriting. PIN kodni bilmasangiz, elektron kalit sozlamalarini qayta tiklash kerak.</translation> <translation id="5139955368427980650">&Ochish</translation> +<translation id="5142793792982256885">Sensorli panelda varaqlash tezligi</translation> <translation id="5142961317498132443">Autentifikatsiya</translation> <translation id="5143374789336132547">“<ph name="EXTENSION_NAME" />” kengaytmasi “Boshi” tugmasi bosilganda ko‘rsatiladigan sahifani o‘zgartirdi.</translation> <translation id="5143712164865402236">To‘liq ekran rejimiga o‘tish</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">Proksi-server sozlamalari</translation> <translation id="5215502535566372932">Mamlakatni tanlang</translation> <translation id="521582610500777512">Rasm o‘chirildi</translation> +<translation id="5222403284441421673">Himoyalanmagan yuklanma bloklandi</translation> <translation id="5222676887888702881">Tizimdan chiqish</translation> <translation id="52232769093306234">Arxivlab bo‘lmadi.</translation> <translation id="5225324770654022472">“Xizmatlar” tugmasini ko‘rsatish</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">Uskunalar</translation> <translation id="5734697361979786483">Fayllarni ulashish sozlamasini kiritish</translation> <translation id="5736796278325406685">Yaroqli foydalanuvchi nomini kiriting.</translation> +<translation id="5739017626473506901"><ph name="USER_NAME" /> maktab hisobini kiritishiga yordam berish uchun hisobingizga kiring</translation> <translation id="5739235828260127894">Tasdiqlanishi zarur. <ph name="LINK_BEGIN" />Batafsil axborot.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Juda katta</translation> <translation id="574209121243317957">Ovoz balandligi</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">Sariq</translation> <translation id="5906655207909574370">Yangilanish deyarli yakunlandi. Qurilmani qayta ishga tushiring.</translation> <translation id="5906732635754427568">Bu ilovaga aloqador ma’lumotlar ushbu qurilmadan o‘chiriladi.</translation> +<translation id="5908695239556627796">Sichqonchada varaqlash tezligi</translation> <translation id="5908769186679515905">Saytlarga Flash elementlarini ishga tushirish taqiqlansin</translation> <translation id="5910363049092958439">&Rasmni saqlab olish...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> oflayn</translation> @@ -3703,7 +3714,7 @@ <translation id="5976160379964388480">Boshqa</translation> <translation id="5978277834170881274">&Oddiy imlo tekshiruvini ishlatish</translation> <translation id="5979084224081478209">Parollarni tekshiring</translation> -<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{1 ta ehtimolan zararli kengaytmani qayta yoqdingiz}other{{NUM_EXTENSIONS} ta ehtimolan zararli kengaytmani qayta yoqdingiz}}</translation> +<translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{1 ta ehtimoliy zararli kengaytmani qayta yoqdingiz}other{{NUM_EXTENSIONS} ta ehtimoliy zararli kengaytmani qayta yoqdingiz}}</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" /> tiliga &tarjima qilish</translation> <translation id="5979469435153841984">Sahifalarni xatcho‘plarga qo‘shish uchun manzillar qatoridagi yulduzchani bosing</translation> <translation id="5984222099446776634">So‘nggi ochilgan sahifalar</translation> @@ -5088,6 +5099,7 @@ <ph name="BEGIN_BOLD" />Eslatma:<ph name="END_BOLD" /> Sozlash vaqtida tizim qaytadan ishga tushiriladi.</translation> <translation id="7828731929332799387">Bunda tashqi saytlardagi barcha cookie fayllari va sayt maʼlumotlari tozalanadi. Davom ettirilsinmi?</translation> <translation id="7829298379596169484">Audio-kirish qurilmasi faollashtirildi</translation> +<translation id="7829877209233347340">Ota-onangizdan hisoblariga kirib maktab hisobingizni kiritishga ruxsat berishlarini soʻrang</translation> <translation id="7830594666202422257">Linuxga ulanish</translation> <translation id="7831491651892296503">Tarmoqni sozlashda xatolik yuz berdi</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5527,6 +5539,7 @@ <translation id="8408068190360279472">Tarmoq: <ph name="NETWORK_TYPE" />, ulanmoqda</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Avval so‘ralsin (tavsiya etiladi)</translation> +<translation id="8417548266957501132">Ota-ona paroli</translation> <translation id="8417573335434189196">Zararli sayt, yuklanma va kengaytmalardan himoya qila olmaydi. Chrome bu sozlamani tavsiya qilmaydi.</translation> <translation id="8418445294933751433">&Ichki oyna sifatida ko‘rsatish</translation> <translation id="8419098111404128271">“<ph name="SEARCH_TEXT" />” uchun qidiruv natijalari</translation> @@ -5841,6 +5854,7 @@ <translation id="8808686172382650546">Mushuk</translation> <translation id="8808744862003883508">Bu sahifada Google Chrome brauzerida oʻrnatilgan barcha kengaytmalarni koʻrishingiz mumkin.</translation> <translation id="8809147117840417135">Och moviy</translation> +<translation id="8812593354822910461">Shuningdek, brauzer tarixi (<ph name="URL" />) ham tozalansin (<ph name="DOMAIN" /> hisobingizdan avtomatik chiqib ketasiz). <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039"><ph name="USERNAME" /> nomidan kirib bo‘lmadi</translation> <translation id="8813811964357448561">qog‘oz varag‘i</translation> <translation id="8813872945700551674">“<ph name="EXTENSION_NAME" />” kengaytmasini oʻrnatish uchun ota-onangizdan ruxsat oling.</translation> @@ -6130,6 +6144,7 @@ <translation id="9203398526606335860">&Ma’lumotlarni yig‘ish yoniq</translation> <translation id="9203904171912129171">Qurilmani tanlang</translation> <translation id="9203962528777363226">Bu qurilmaning administratori yangi foydalanuvchilarni qo‘shish umkonini o‘chirib qo‘ygan</translation> +<translation id="9209689095351280025">Saytlar sizni internet boʻylab kuzatadigan cookie fayllardan foydalana olmaydi.</translation> <translation id="9211177926627870898">Yangilash zarur</translation> <translation id="9214520840402538427">Afsuski, vaqt sozlamalarini o‘rnatishga tayyorlash vaqti tugadi. Xizmat ko‘rsatish markazi bilan bog‘laning.</translation> <translation id="9214695392875603905">Keks</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 8854fc4..745c58dc 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">Tải lên</translation> <translation id="1244265436519979884">Hiện đang khôi phục Linux</translation> <translation id="1244303850296295656">Lỗi tiện ích</translation> +<translation id="1246158006305844142">Các ứng dụng và tùy chọn cài đặt của bạn sẽ đồng bộ hóa trên mọi thiết bị Chrome OS mà bạn đã đăng nhập bằng Tài khoản Google của mình. Để biết các tùy chọn đồng bộ hóa trình duyệt, hãy chuyển đến phần <ph name="LINK_BEGIN" />Cài đặt Chrome<ph name="LINK_END" />.</translation> <translation id="1246905108078336582">Xóa nội dung đề xuất khỏi khay nhớ tạm?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> bị chặn vì đã ngừng hoạt động</translation> <translation id="1251366534849411931">Thiếu dấu ngoặc nhọn mở: <ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">Không, cảm ơn</translation> <translation id="1525740877599838384">Chỉ sử dụng Wi-Fi để xác định vị trí</translation> <translation id="152629053603783244">Khởi động lại Linux</translation> +<translation id="1526335046150927198">Bật tính năng tăng tốc độ cuộn trên bàn di chuột</translation> <translation id="1526560967942511387">Tài liệu không Tên</translation> <translation id="1529891865407786369">Nguồn điện</translation> <translation id="1530838837447122178">Mở cài đặt thiết bị chuột và bàn di chuột</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">Tiện ích này không yêu cầu quyền đặc biệt.</translation> <translation id="1616298854599875024">Không thể nhập tiện ích "<ph name="IMPORT_NAME" />" do tiện ích này không phải là mô-đun được chia sẻ</translation> <translation id="1618268899808219593">Trung tâm trợ g&iúp</translation> +<translation id="1620307519959413822">Mật khẩu không chính xác. Hãy thử lại hoặc nhấp vào "Bạn quên mật khẩu" để đặt lại.</translation> <translation id="1620510694547887537">Máy ảnh</translation> <translation id="1623132449929929218">Hiện không sử dụng được hình ảnh. Vui lòng kết nối lại với Internet để xem các bộ sưu tập hình nền.</translation> <translation id="1627276047960621195">Phần mô tả tệp</translation> @@ -610,7 +613,7 @@ <translation id="1805822111539868586">Kiểm tra chế độ xem</translation> <translation id="1805888043020974594">Máy chủ máy in</translation> <translation id="1805967612549112634">Xác nhận mã PIN</translation> -<translation id="1806335016774576568">Chuyển sang một ứng dụng đang mở khác</translation> +<translation id="1806335016774576568">Chuyển sang một ứng dụng khác đang mở</translation> <translation id="1809734401532861917">Thêm dấu trang, lịch sử, mật khẩu của tôi và các cài đặt khác vào <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="1813278315230285598">Dịch vụ</translation> <translation id="18139523105317219">Tên của Bên EDI</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">Hiệu chỉnh phần cứng</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Mở chế độ toàn màn hình</translation> +<translation id="1892341345406963517">Xin chào <ph name="PARENT_NAME" />!</translation> <translation id="189358972401248634">Ngôn ngữ khác</translation> <translation id="1895252664692693738">Còn <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">Tắt</translation> @@ -1313,6 +1317,7 @@ <translation id="2725200716980197196">Đã khôi phục kết nối mạng</translation> <translation id="2727633948226935816">Đừng nhắc tôi lần nữa</translation> <translation id="2727712005121231835">Kích thước Thực</translation> +<translation id="2729314457178420145">Xóa cả dữ liệu duyệt web (<ph name="URL" />), việc này có thể khiến bạn bị đăng xuất khỏi Google.com. <ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">Đang sao lưu ứng dụng và tệp Linux</translation> <translation id="273093730430620027">Trang này đang truy cập máy ảnh của bạn.</translation> <translation id="2731392572903530958">&Mở lại Cửa sổ đã Đóng</translation> @@ -1338,7 +1343,7 @@ <translation id="2753677631968972007">Kiểm soát các quyền của trang web theo cách thủ công.</translation> <translation id="2755367719610958252">Quản lý tính năng hỗ trợ tiếp cận</translation> <translation id="275662540872599901">màn hình tắt</translation> -<translation id="2757338480560142065">Đảm bảo mật khẩu bạn đang lưu khớp với mật khẩu trên <ph name="WEBSITE" /></translation> +<translation id="2757338480560142065">Đảm bảo mật khẩu bạn đang lưu khớp với mật khẩu cho <ph name="WEBSITE" /></translation> <translation id="2762441749940182211">Máy ảnh bị chặn</translation> <translation id="2765217105034171413">Nhỏ</translation> <translation id="2766161002040448006">Xin phép cha mẹ</translation> @@ -1611,7 +1616,7 @@ <translation id="3129173833825111527">Lề trái</translation> <translation id="3129215702932019810">Lỗi khi chạy ứng dụng</translation> <translation id="3130528281680948470">Thiết bị của bạn sẽ được đặt lại và tất cả các tài khoản người dùng và dữ liệu cục bộ sẽ bị xóa. Không thể hoàn tác thao tác này.</translation> -<translation id="313205617302240621">Quên mật khẩu?</translation> +<translation id="313205617302240621">Bạn quên mật khẩu?</translation> <translation id="3132996321662585180">Làm mới hàng ngày</translation> <translation id="313963229645891001">Đang tải xuống, còn <ph name="STATUS" /></translation> <translation id="3139925690611372679">Hình đại diện màu vàng mặc định</translation> @@ -1944,7 +1949,7 @@ <translation id="3592260987370335752">&Tìm hiểu thêm</translation> <translation id="359283478042092570">Nhập</translation> <translation id="3593965109698325041">Ràng buộc Tên của Chứng chỉ</translation> -<translation id="3595381248165458839">Hãy liên hệ với quản trị viên thiết bị của tổ chức bạn</translation> +<translation id="3595381248165458839">Hãy liên hệ với quản trị viên thiết bị của tổ chức của bạn</translation> <translation id="3596235046596950091">Bật dịch vụ đám mây</translation> <translation id="3596414637720633074">Chặn các cookie của bên thứ ba trong chế độ Ẩn danh</translation> <translation id="3599221874935822507">Nhô lên</translation> @@ -2164,6 +2169,7 @@ <translation id="3838486795898716504"><ph name="PAGE_TITLE" /> khác</translation> <translation id="3838543471119263078">Cookie cùng dữ liệu plugin và trang web khác</translation> <translation id="383891835335927981">Không có trang web nào được phóng to hoặc thu nhỏ</translation> +<translation id="3839509547554145593">Bật tính năng tăng tốc độ cuộn chuột</translation> <translation id="3839516600093027468">Luôn chặn <ph name="HOST" /> xem khay nhớ tạm</translation> <translation id="3841964634449506551">Mật khẩu không hợp lệ</translation> <translation id="3842552989725514455">Phông chữ Serif</translation> @@ -2775,6 +2781,7 @@ <translation id="4699172675775169585">Tệp và hình ảnh được lưu trong bộ nhớ đệm</translation> <translation id="4699357559218762027">(tự động chạy)</translation> <translation id="470074695271471509">Đăng xuất để hoàn tất?</translation> +<translation id="4701025263201366865">Hoạt động đăng nhập của cha mẹ</translation> <translation id="4707302005824653064">Người quản lý (<ph name="CUSTODIAN_EMAIL" />) có thể xem lại mức sử dụng và lịch sử trên chrome.com.</translation> <translation id="4707579418881001319">L2TP/IPsec + chứng chỉ người dùng</translation> <translation id="4708794300267213770">Hiển thị màn hình khóa khi đánh thức từ chế độ ngủ</translation> @@ -3082,6 +3089,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />, <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> Tìm kiếm</translation> <translation id="5139823398361067371">Nhập mã PIN cho khóa bảo mật của bạn. Bạn cần đặt lại khóa bảo mật nếu không biết mã PIN này.</translation> <translation id="5139955368427980650">&Mở</translation> +<translation id="5142793792982256885">Tốc độ cuộn trên bàn di chuột</translation> <translation id="5142961317498132443">Xác thực</translation> <translation id="5143374789336132547">Tiện ích "<ph name="EXTENSION_NAME" />" đã thay đổi trang nào sẽ hiển thị khi bạn nhấp vào nút Trang chủ.</translation> <translation id="5143712164865402236">Vào Chế độ Toàn Màn hình</translation> @@ -3127,6 +3135,7 @@ <translation id="5213891612754844763">Hiển thị cài đặt proxy</translation> <translation id="5215502535566372932">Chọn quốc gia</translation> <translation id="521582610500777512">Đã hủy ảnh</translation> +<translation id="5222403284441421673">Đã chặn tải xuống tệp không an toàn</translation> <translation id="5222676887888702881">Đăng xuất</translation> <translation id="52232769093306234">Không đóng gói được.</translation> <translation id="5225324770654022472">Hiển thị lối tắt cho ứng dụng</translation> @@ -3235,7 +3244,7 @@ <translation id="5353252989841766347">Xuất mật khẩu từ Chrome</translation> <translation id="5355099869024327351">Cho phép Trợ lý hiển thị thông báo cho bạn</translation> <translation id="5355926466126177564">Tiện ích "<ph name="EXTENSION_NAME" />" đã thay đổi trang nào được hiển thị khi bạn tìm kiếm từ Thanh địa chỉ.</translation> -<translation id="535911077628776608"><ph name="FILE_NAME" /> có thể nguy hiểm. Gửi tệp tới Hệ thống bảo vệ nâng cao của Google để quét? Hãy nhấn tổ hợp phím Shift+F6 để chuyển tới khu vực thanh tệp đã tải xuống.</translation> +<translation id="535911077628776608"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới Chương trình Bảo vệ nâng cao của Google để quét không? Hãy nhấn tổ hợp phím Shift+F6 để chuyển tới khu vực thanh tệp đã tải xuống.</translation> <translation id="5359910752122114278">1 kết quả</translation> <translation id="5360150013186312835">Hiển thị trên thanh công cụ</translation> <translation id="5362741141255528695">Chọn tệp khóa cá nhân.</translation> @@ -3420,7 +3429,7 @@ <translation id="5593357315997824387">Đồng bộ hóa các tệp</translation> <translation id="5595152862129936745">Rất xa</translation> <translation id="5595485650161345191">Chỉnh sửa địa chỉ</translation> -<translation id="5595727715083333657">Không hỗ trợ thay đổi dung lượng vùng chứa của bạn. Để điều chỉnh mức dung lượng được phân bổ sẵn cho Linux (Phiên bản thử nghiệm), hãy sao lưu rồi khôi phục dữ liệu sang một vùng chứa mới.</translation> +<translation id="5595727715083333657">Vùng chứa của bạn không hỗ trợ khả năng thay đổi dung lượng. Để điều chỉnh mức dung lượng được phân bổ sẵn cho Linux (Phiên bản thử nghiệm), hãy sao lưu rồi khôi phục dữ liệu sang một vùng chứa mới.</translation> <translation id="5596627076506792578">Tùy chọn khác</translation> <translation id="5600706100022181951">Bản cập nhật sẽ được tải xuống bằng cách dùng <ph name="UPDATE_SIZE_MB" /> MB dữ liệu di động. Bạn có muốn tiếp tục không?</translation> <translation id="5601503069213153581">Mã PIN</translation> @@ -3493,7 +3502,7 @@ <translation id="5691511426247308406">Gia đình</translation> <translation id="5691772641933328258">Không nhận dạng được vân tay</translation> <translation id="5692183275898619210">Đã in xong</translation> -<translation id="5692875591060376599">Tệp đã chọn là không xác định và có thể nguy hiểm. Bạn có muốn gửi tệp tới chương trình Bảo vệ nâng cao của Google để quét không?</translation> +<translation id="5692875591060376599">Tệp đã chọn là không xác định và có thể nguy hiểm. Bạn có muốn gửi tệp tới Chương trình Bảo vệ nâng cao của Google để quét không?</translation> <translation id="569425414730375234">Phiên truy cập ẩn danh hiện tại: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" /></translation> <translation id="5696143504434933566">Báo cáo vi phạm từ "<ph name="EXTENSION_NAME" />"</translation> <translation id="5696679855467848181">Tệp PPD hiện được sử dụng: <ph name="PPD_NAME" /></translation> @@ -3525,6 +3534,7 @@ <translation id="5734362860645681824">Truyền thông</translation> <translation id="5734697361979786483">Thêm mục chia sẻ tệp</translation> <translation id="5736796278325406685">Vui lòng nhập tên người dùng hợp lệ</translation> +<translation id="5739017626473506901">Đăng nhập để giúp <ph name="USER_NAME" /> thêm tài khoản trường học</translation> <translation id="5739235828260127894">Đang chờ xác minh. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Rất lớn</translation> <translation id="574209121243317957">Cao độ</translation> @@ -3644,6 +3654,7 @@ <translation id="5901630391730855834">Vàng</translation> <translation id="5906655207909574370">Gần được cập nhật! Hãy khởi động lại thiết bị của bạn để hoàn tất cập nhật.</translation> <translation id="5906732635754427568">Dữ liệu được liên kết với ứng dụng này sẽ bị xóa khỏi thiết bị này.</translation> +<translation id="5908695239556627796">Tốc độ cuộn chuột</translation> <translation id="5908769186679515905">Chặn trang web chạy Flash</translation> <translation id="5910363049092958439">Lưu &Hình ảnh Dưới dạng...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> hiện không có kết nối mạng</translation> @@ -5091,6 +5102,7 @@ <ph name="BEGIN_BOLD" />Lưu ý:<ph name="END_BOLD" /> Hệ thống sẽ khởi động lại trong quá trình này.</translation> <translation id="7828731929332799387">Thao tác này sẽ xóa tất cả dữ liệu trang web và cookie có trong ngữ cảnh của bên thứ ba. Bạn có muốn tiếp tục không?</translation> <translation id="7829298379596169484">Đang truy cập thiết bị đầu vào âm thanh</translation> +<translation id="7829877209233347340">Đề nghị cha mẹ đăng nhập để cấp quyền thêm một tài khoản trường học</translation> <translation id="7830594666202422257">Kết nối với Linux</translation> <translation id="7831491651892296503">Lỗi khi định cấu hình mạng</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5531,6 +5543,7 @@ <translation id="8408068190360279472">Đang kết nối mạng <ph name="NETWORK_TYPE" /></translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">Hỏi trước (khuyên dùng)</translation> +<translation id="8417548266957501132">Mật khẩu của cha mẹ</translation> <translation id="8417573335434189196">Không bảo vệ bạn trước các trang web, tệp đã tải xuống hoặc tiện ích nguy hiểm. Chrome không khuyên dùng tùy chọn cài đặt này.</translation> <translation id="8418445294933751433">&Hiển thị dưới dạng tab</translation> <translation id="8419098111404128271">Kết quả tìm kiếm cho '<ph name="SEARCH_TEXT" />'</translation> @@ -5668,7 +5681,7 @@ <translation id="8608618451198398104">Thêm phiếu Kerberos</translation> <translation id="8609465669617005112">Di chuyển lên</translation> <translation id="8610103157987623234">Định dạng không chính xác. Hãy thử lại</translation> -<translation id="8612935480510351790"><ph name="FILE_NAME" /> có thể nguy hiểm. Gửi tệp tới Hệ thống bảo vệ nâng cao của Google để quét?</translation> +<translation id="8612935480510351790"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới Chương trình Bảo vệ nâng cao của Google để quét không?</translation> <translation id="8613164732773110792">Chỉ các ký tự viết thường, chữ số, dấu gạch dưới hoặc dấu gạch ngang</translation> <translation id="8615618338313291042">Ứng dụng Ẩn danh: <ph name="APP_NAME" /></translation> <translation id="8619803522055190423">Bóng đổ</translation> @@ -5696,7 +5709,7 @@ <translation id="8641606876632989680">Chrome sẽ thông báo khi mật khẩu bạn dùng để đăng nhập đã bị lộ</translation> <translation id="8642900771896232685">2 giây</translation> <translation id="8642947597466641025">Phóng to Văn bản</translation> -<translation id="8643443571868262066"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới chương trình Bảo vệ nâng cao của Google để quét không?</translation> +<translation id="8643443571868262066"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới Chương trình Bảo vệ nâng cao của Google để quét không?</translation> <translation id="8644655801811752511">Không thể đặt lại khóa bảo mật này. Thử đặt lại khóa này ngay sau khi cắm.</translation> <translation id="8645354835496065562">Tiếp tục cho phép sử dụng cảm biến</translation> <translation id="8645920082661222035">Dự đoán và cảnh báo cho bạn các sự kiện nguy hiểm trước khi các sự kiện đó xảy ra</translation> @@ -5845,6 +5858,7 @@ <translation id="8808686172382650546">Mèo</translation> <translation id="8808744862003883508">Trên trang này, bạn có thể thấy tất cả các tiện ích đã cài đặt trong Chrome.</translation> <translation id="8809147117840417135">Xanh két nhạt</translation> +<translation id="8812593354822910461">Xóa cả dữ liệu duyệt web (<ph name="URL" />), việc này sẽ khiến bạn bị đăng xuất khỏi <ph name="DOMAIN" />. <ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">Không thể đăng nhập vào <ph name="USERNAME" /></translation> <translation id="8813811964357448561">trang giấy</translation> <translation id="8813872945700551674">Yêu cầu cha mẹ phê duyệt "<ph name="EXTENSION_NAME" />"</translation> @@ -6134,6 +6148,7 @@ <translation id="9203398526606335860">&Bật cấu hình</translation> <translation id="9203904171912129171">Chọn thiết bị</translation> <translation id="9203962528777363226">Quản trị viên của thiết bị này đã vô hiệu hóa thêm người dùng mới</translation> +<translation id="9209689095351280025">Các trang web không thể dùng cookie theo dõi bạn trên web</translation> <translation id="9211177926627870898">Yêu cầu cập nhật</translation> <translation id="9214520840402538427">Rất tiếc! Việc chạy thuộc tính thời gian cài đặt đã hết thời gian. Vui lòng liên hệ với người đại diện hỗ trợ của bạn.</translation> <translation id="9214695392875603905">Cupcake</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 8664a26..77f29b82 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -113,7 +113,7 @@ <translation id="1147991416141538220">要申请访问权限,请与此设备的管理员联系。</translation> <translation id="1149401351239820326">过期月份</translation> <translation id="1150565364351027703">太阳镜</translation> -<translation id="1151841030700667295">您将会自动退出所有网站(包括已打开的标签页)。</translation> +<translation id="1151841030700667295">您将会自动退出所有网站(包括已打开的标签页中的网站)。</translation> <translation id="1151917987301063366">始终允许 <ph name="HOST" /> 使用传感器</translation> <translation id="1153356358378277386">已配对的设备</translation> <translation id="1153636665119721804">Google 高级保护计划</translation> @@ -458,6 +458,7 @@ <translation id="1616206807336925449">此扩展程序无需任何特殊权限。</translation> <translation id="1616298854599875024">无法导入扩展程序“<ph name="IMPORT_NAME" />”,因为它不是共享模块</translation> <translation id="1618268899808219593">帮助中心(&E)</translation> +<translation id="1620307519959413822">密码错误。请重试,或点击“忘记了密码?”以重置密码。</translation> <translation id="1620510694547887537">摄像头</translation> <translation id="1623132449929929218">暂时无法提供图片。请重新连接到互联网以查看壁纸集。</translation> <translation id="1627276047960621195">文件描述符</translation> @@ -676,6 +677,7 @@ <translation id="1887850431809612466">硬件版本</translation> <translation id="1890674179660343635"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">以全屏模式打开</translation> +<translation id="1892341345406963517"><ph name="PARENT_NAME" />,您好!</translation> <translation id="189358972401248634">其他语言</translation> <translation id="1895252664692693738">还剩 <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">关机</translation> @@ -3128,6 +3130,7 @@ <translation id="5213891612754844763">显示代理设置</translation> <translation id="5215502535566372932">选择国家/地区</translation> <translation id="521582610500777512">照片已被舍弃</translation> +<translation id="5222403284441421673">已阻止不安全的下载</translation> <translation id="5222676887888702881">退出</translation> <translation id="52232769093306234">打包失败。</translation> <translation id="5225324770654022472">显示应用快捷方式</translation> @@ -3421,7 +3424,7 @@ <translation id="5593357315997824387">同步我的文件</translation> <translation id="5595152862129936745">非常远</translation> <translation id="5595485650161345191">修改地址</translation> -<translation id="5595727715083333657">无法调整您的容器的大小。要调整预先分配给 Linux(Beta 版)的空间量,请先备份旧容器中的内容,然后再将这些内容恢复到新容器中。</translation> +<translation id="5595727715083333657">您的容器无法调整大小。要调整预先分配给 Linux(Beta 版)的空间,请先备份旧容器中的内容,然后再将这些内容恢复到新容器中。</translation> <translation id="5596627076506792578">更多选项</translation> <translation id="5600706100022181951">下载更新需要使用 <ph name="UPDATE_SIZE_MB" /> MB 的移动数据流量。要继续吗?</translation> <translation id="5601503069213153581">PIN</translation> @@ -3526,6 +3529,7 @@ <translation id="5734362860645681824">通讯</translation> <translation id="5734697361979786483">添加文件共享</translation> <translation id="5736796278325406685">请输入有效的用户名</translation> +<translation id="5739017626473506901">请登录以帮助<ph name="USER_NAME" />添加学校帐号</translation> <translation id="5739235828260127894">正在等待验证。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation> <translation id="5739458112391494395">特大</translation> <translation id="574209121243317957">音高</translation> @@ -5533,6 +5537,7 @@ <translation id="8408068190360279472">“<ph name="NETWORK_TYPE" />”类型的网络,正在连接</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">先询问(推荐)</translation> +<translation id="8417548266957501132">家长的登录密码</translation> <translation id="8417573335434189196">不会保护您免受危险网站、下载内容或扩展程序的侵害。Chrome 不建议您使用此设置。</translation> <translation id="8418445294933751433">显示为标签页(&S)</translation> <translation id="8419098111404128271">与“<ph name="SEARCH_TEXT" />”相符的搜索结果</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 09782895..da6fe137 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">上載</translation> <translation id="1244265436519979884">正在執行 Linux 還原</translation> <translation id="1244303850296295656">擴充功能錯誤</translation> +<translation id="1246158006305844142">您的應用程式和設定將會同步至所有您使用 Google 帳戶登入的 Chrome 作業系統裝置。如要瞭解瀏覽器同步選項,請前往<ph name="LINK_BEGIN" />Chrome 設定<ph name="LINK_END" />。</translation> <translation id="1246905108078336582">要從剪貼簿中移除建議嗎?</translation> <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> 因已淘汰而被封鎖</translation> <translation id="1251366534849411931">缺少預期的開頭大括弧:<ph name="ERROR_LINE" /></translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">不用了,謝謝</translation> <translation id="1525740877599838384">只使用 Wi-Fi 確定位置</translation> <translation id="152629053603783244">重新啟動 Linux</translation> +<translation id="1526335046150927198">啟用觸控板捲動加速功能</translation> <translation id="1526560967942511387">無標題文件</translation> <translation id="1529891865407786369">電源</translation> <translation id="1530838837447122178">開啟滑鼠和觸控板裝置設定</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">這個擴充功能不需任何特殊權限。</translation> <translation id="1616298854599875024">「<ph name="IMPORT_NAME" />」擴充程式並非共用模組,因此無法匯入。</translation> <translation id="1618268899808219593">說明中心(&E)</translation> +<translation id="1620307519959413822">密碼錯誤,請再試一次,或按一下 [忘記密碼] 以重設密碼。</translation> <translation id="1620510694547887537">相機</translation> <translation id="1623132449929929218">目前無法提供相片,請重新連線至互聯網以查看桌布相片集。</translation> <translation id="1627276047960621195">檔案描述符</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">硬件版本</translation> <translation id="1890674179660343635"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">開啟全螢幕</translation> +<translation id="1892341345406963517"><ph name="PARENT_NAME" />,您好</translation> <translation id="189358972401248634">其他語言</translation> <translation id="1895252664692693738">剩餘 <ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">關閉</translation> @@ -1312,6 +1316,7 @@ <translation id="2725200716980197196">網絡連線已恢復</translation> <translation id="2727633948226935816">不要再提醒我</translation> <translation id="2727712005121231835">實際大小</translation> +<translation id="2729314457178420145">一併清除瀏覽資料 (<ph name="URL" />),此操作可能會將您登出 Google.com。<ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">正在備份 Linux 應用程式和檔案</translation> <translation id="273093730430620027">這個網頁正在存取您的相機。</translation> <translation id="2731392572903530958">重新開啟先前關閉的視窗(&E)</translation> @@ -2162,6 +2167,7 @@ <translation id="3838486795898716504">更多<ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookie、其他網站數據和外掛程式數據</translation> <translation id="383891835335927981">沒有已放大或縮小的網站</translation> +<translation id="3839509547554145593">啟用滑鼠捲動加速功能</translation> <translation id="3839516600093027468">一律禁止 <ph name="HOST" /> 查看剪貼簿</translation> <translation id="3841964634449506551">密碼無效</translation> <translation id="3842552989725514455">Serif 字型</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">快取圖片和檔案</translation> <translation id="4699357559218762027">(自動啟動)</translation> <translation id="470074695271471509">要登出以完成程序嗎?</translation> +<translation id="4701025263201366865">家長登入</translation> <translation id="4707302005824653064">管理員 (<ph name="CUSTODIAN_EMAIL" />) 可以在 chrome.com 瞭解這名使用者的使用情形和記錄。</translation> <translation id="4707579418881001319">L2TP/IPsec + 使用者憑證</translation> <translation id="4708794300267213770">從休眠狀態喚醒時顯示螢幕鎖定畫面</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />,使用 <ph name="DEFAULT_SEARCH_ENGINE_NAME" /> 的搜查結果</translation> <translation id="5139823398361067371">請輸入安全密鑰的 PIN。如果您不知道 PIN,請重設安全密鑰。</translation> <translation id="5139955368427980650">開啟(&O)</translation> +<translation id="5142793792982256885">觸控板捲動速度</translation> <translation id="5142961317498132443">驗證</translation> <translation id="5143374789336132547">擴充功能「<ph name="EXTENSION_NAME" />」已變更您按下 [主頁] 按鈕時所顯示的網頁。</translation> <translation id="5143712164865402236">進入全螢幕</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">顯示 Proxy 設定</translation> <translation id="5215502535566372932">選取國家/地區</translation> <translation id="521582610500777512">已捨棄相片</translation> +<translation id="5222403284441421673">已封鎖不安全的下載</translation> <translation id="5222676887888702881">登出</translation> <translation id="52232769093306234">無法封裝。</translation> <translation id="5225324770654022472">顯示應用程式捷徑</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">通訊工具</translation> <translation id="5734697361979786483">新增檔案共用</translation> <translation id="5736796278325406685">請輸入有效的使用者名稱</translation> +<translation id="5739017626473506901">需要登入才能為 <ph name="USER_NAME" /> 新增學校帳戶</translation> <translation id="5739235828260127894">正在等待驗證。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="5739458112391494395">非常大</translation> <translation id="574209121243317957">音調</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">黃色</translation> <translation id="5906655207909574370">即將更新至最新版本!重新啟動您的裝置即可完成更新程序。</translation> <translation id="5906732635754427568">系統會從裝置中移除與此應用程式相關的資料。</translation> +<translation id="5908695239556627796">滑鼠捲動速度</translation> <translation id="5908769186679515905">禁止網站執行 Flash</translation> <translation id="5910363049092958439">另存圖片為(&V)…</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> 已離線</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在程序中途重新開機。</translation> <translation id="7828731929332799387">系統會刪除第三方內容中使用的所有 Cookie 和網站資料。要繼續嗎?</translation> <translation id="7829298379596169484">正在存取音訊輸入</translation> +<translation id="7829877209233347340">請要求家長登入,授予新增學校帳戶的權限</translation> <translation id="7830594666202422257">連結至 Linux</translation> <translation id="7831491651892296503">設定網絡時發生錯誤</translation> <translation id="7831754656372780761">「<ph name="TAB_TITLE" />」<ph name="EMOJI_MUTING" /></translation> @@ -5528,6 +5540,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />網絡,正在連線</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">事先詢問 (建議)</translation> +<translation id="8417548266957501132">家長密碼</translation> <translation id="8417573335434189196">無法防範危險網站、下載檔案或擴充程式。Chrome 不建議使用此設定。</translation> <translation id="8418445294933751433">顯示為分頁(&S)</translation> <translation id="8419098111404128271">「<ph name="SEARCH_TEXT" />」嘅搜尋結果</translation> @@ -5842,6 +5855,7 @@ <translation id="8808686172382650546">Cat</translation> <translation id="8808744862003883508">此頁面顯示所有在 Chrome 安裝的擴充程式。</translation> <translation id="8809147117840417135">淺藍綠色</translation> +<translation id="8812593354822910461">一併清除瀏覽資料 (<ph name="URL" />),此操作會將您登出 <ph name="DOMAIN" />。<ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">無法登入 <ph name="USERNAME" /></translation> <translation id="8813811964357448561">紙張數目</translation> <translation id="8813872945700551674">要求家長核准安裝「<ph name="EXTENSION_NAME" />」</translation> @@ -6131,6 +6145,7 @@ <translation id="9203398526606335860">分析已啟用(&P)</translation> <translation id="9203904171912129171">選取裝置</translation> <translation id="9203962528777363226">裝置管理員已停用新增使用者功能</translation> +<translation id="9209689095351280025">網站不能使用 Cookie 追蹤您的網絡活動</translation> <translation id="9211177926627870898">必須更新</translation> <translation id="9214520840402538427">糟糕!系統嘗試初始設定安裝時間 (installation-time) 屬性,但是動作已逾時。請與您的支援代表聯絡。</translation> <translation id="9214695392875603905">紙杯蛋糕</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 3580b56c..8f86a0f 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -192,6 +192,7 @@ <translation id="1243314992276662751">上傳</translation> <translation id="1244265436519979884">目前正在執行 Linux 還原作業</translation> <translation id="1244303850296295656">擴充功能錯誤</translation> +<translation id="1246158006305844142">當你使用 Google 帳戶登入後,你的應用程式和設定會在所有 Chrome 作業系統裝置上保持同步。如要查看瀏覽器同步處理選項,請前往 <ph name="LINK_BEGIN" />Chrome 設定<ph name="LINK_END" />。</translation> <translation id="1246905108078336582">要從剪貼簿中移除建議嗎?</translation> <translation id="1249643471736608405">「<ph name="PLUGIN_NAME" />」因已淘汰而遭封鎖</translation> <translation id="1251366534849411931">缺少左大括弧:<ph name="ERROR_LINE" /></translation> @@ -310,7 +311,7 @@ <translation id="1420920093772172268">如要允許配對,請<ph name="TURN_ON_BLUETOOTH_LINK" /></translation> <translation id="1422159345171879700">載入不安全的指令碼</translation> <translation id="1426410128494586442">是</translation> -<translation id="142655739075382478">已封鎖「<ph name="APP_NAME" />」</translation> +<translation id="142655739075382478">「<ph name="APP_NAME" />」已遭封鎖</translation> <translation id="1426870617281699524">請點選 [再試一次] 並接受電腦顯示的提示</translation> <translation id="1427269577154060167">國家/地區</translation> <translation id="142758023928848008">啟用相黏鍵 (執行鍵盤快速鍵時只需依序輸入按鍵)</translation> @@ -391,6 +392,7 @@ <translation id="1524563461097350801">不用了,謝謝</translation> <translation id="1525740877599838384">僅使用 Wi-Fi 判斷所在位置</translation> <translation id="152629053603783244">重新啟動 Linux</translation> +<translation id="1526335046150927198">啟用觸控板捲動加速功能</translation> <translation id="1526560967942511387">未命名文件</translation> <translation id="1529891865407786369">電源</translation> <translation id="1530838837447122178">開啟滑鼠和觸控板裝置設定</translation> @@ -459,6 +461,7 @@ <translation id="1616206807336925449">這個擴充功能不需要特殊權限。</translation> <translation id="1616298854599875024">「<ph name="IMPORT_NAME" />」擴充功能不是共用模組,因此無法匯入</translation> <translation id="1618268899808219593">說明中心(&E)</translation> +<translation id="1620307519959413822">密碼錯誤。請再試一次,或按一下 [忘記密碼] 來重設密碼。</translation> <translation id="1620510694547887537">攝影機</translation> <translation id="1623132449929929218">目前無法提供圖片。如要查看桌布集,請重新連上網際網路。</translation> <translation id="1627276047960621195">檔案描述元</translation> @@ -677,6 +680,7 @@ <translation id="1887850431809612466">硬體版本</translation> <translation id="1890674179660343635"><span>ID:</span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">開啟全螢幕</translation> +<translation id="1892341345406963517"><ph name="PARENT_NAME" />,你好</translation> <translation id="189358972401248634">其他語言</translation> <translation id="1895252664692693738">剩餘時間:<ph name="TIME_LEFT" /></translation> <translation id="1895658205118569222">關閉</translation> @@ -1312,6 +1316,7 @@ <translation id="2725200716980197196">網路連線已恢復</translation> <translation id="2727633948226935816">不要再提醒我</translation> <translation id="2727712005121231835">實際大小</translation> +<translation id="2729314457178420145">一併清除瀏覽資料 (<ph name="URL" />)。這項操作可能會將你登出 Google.com。<ph name="LEARN_MORE" /></translation> <translation id="2730029791981212295">正在備份 Linux 應用程式和檔案</translation> <translation id="273093730430620027">這個網頁正在存取你的攝影機。</translation> <translation id="2731392572903530958">重新開啟先前關閉的視窗(&E)</translation> @@ -1877,7 +1882,7 @@ <translation id="3496213124478423963">縮小</translation> <translation id="3497560059572256875">分享 Doodle</translation> <translation id="3498215018399854026">我們暫時無法與您的家長聯絡,請再試一次。</translation> -<translation id="3500417806337761827">掛接共用檔案時發生錯誤。已掛接過多 SMB 共用檔案。</translation> +<translation id="3500417806337761827">掛接檔案共用區時發生錯誤。已掛接過多 SMB 檔案共用區。</translation> <translation id="3505030558724226696">撤銷裝置存取權</translation> <translation id="3507421388498836150">「<ph name="EXTENSION_NAME" />」目前擁有的權限</translation> <translation id="3507888235492474624">重新掃描藍牙裝置</translation> @@ -2163,6 +2168,7 @@ <translation id="3838486795898716504">更多<ph name="PAGE_TITLE" /></translation> <translation id="3838543471119263078">Cookie、其他網站資料和外掛程式資料</translation> <translation id="383891835335927981">未針對任何網站設定縮放等級</translation> +<translation id="3839509547554145593">啟用滑鼠捲動加速功能</translation> <translation id="3839516600093027468">一律禁止 <ph name="HOST" /> 讀取剪貼簿</translation> <translation id="3841964634449506551">密碼無效</translation> <translation id="3842552989725514455">Serif 字型</translation> @@ -2773,6 +2779,7 @@ <translation id="4699172675775169585">快取圖片和檔案</translation> <translation id="4699357559218762027">(自動啟動)</translation> <translation id="470074695271471509">要登出以完成作業嗎?</translation> +<translation id="4701025263201366865">家長登入</translation> <translation id="4707302005824653064">管理員 (<ph name="CUSTODIAN_EMAIL" />) 可以在 chrome.com 瞭解這名使用者的使用情形和記錄。</translation> <translation id="4707579418881001319">L2TP/IPsec + 使用者憑證</translation> <translation id="4708794300267213770">從休眠狀態喚醒時顯示螢幕鎖定</translation> @@ -3080,6 +3087,7 @@ <translation id="5139112070765735680"><ph name="QUERY_NAME" />,「<ph name="DEFAULT_SEARCH_ENGINE_NAME" />」搜尋</translation> <translation id="5139823398361067371">請輸入安全金鑰的 PIN 碼。如果你不知道 PIN 碼,則必須重設安全金鑰。</translation> <translation id="5139955368427980650">開啟(&O)</translation> +<translation id="5142793792982256885">觸控板捲動速度</translation> <translation id="5142961317498132443">驗證</translation> <translation id="5143374789336132547">擴充功能「<ph name="EXTENSION_NAME" />」已變更您點選 [首頁] 按鈕時所顯示的網頁。</translation> <translation id="5143712164865402236">進入全螢幕</translation> @@ -3125,6 +3133,7 @@ <translation id="5213891612754844763">顯示 Proxy 設定</translation> <translation id="5215502535566372932">選取國家/地區</translation> <translation id="521582610500777512">已捨棄相片</translation> +<translation id="5222403284441421673">已封鎖不安全的下載內容</translation> <translation id="5222676887888702881">登出</translation> <translation id="52232769093306234">封裝失敗。</translation> <translation id="5225324770654022472">顯示應用程式捷徑</translation> @@ -3523,6 +3532,7 @@ <translation id="5734362860645681824">通訊</translation> <translation id="5734697361979786483">新增檔案共用區</translation> <translation id="5736796278325406685">請輸入有效的使用者名稱</translation> +<translation id="5739017626473506901">登入以協助<ph name="USER_NAME" />新增學校帳戶</translation> <translation id="5739235828260127894">等待驗證中。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="5739458112391494395">非常大</translation> <translation id="574209121243317957">音調</translation> @@ -3642,6 +3652,7 @@ <translation id="5901630391730855834">黃色</translation> <translation id="5906655207909574370">即將更新為最新版本!重新啟動您的裝置即可完成更新程序。</translation> <translation id="5906732635754427568">與這個應用程式相關聯的資料會從這個裝置上移除。</translation> +<translation id="5908695239556627796">滑鼠捲動速度</translation> <translation id="5908769186679515905">禁止網站執行 Flash</translation> <translation id="5910363049092958439">另存圖片(&V)...</translation> <translation id="5910726859585389579"><ph name="DEVICE_TYPE" /> 目前離線</translation> @@ -4405,7 +4416,7 @@ <translation id="6943836128787782965">HTTP 擷取失敗</translation> <translation id="6945221475159498467">選取</translation> <translation id="694592694773692225">已在這個網頁禁止重新導向。</translation> -<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{有 1 個密碼遭外洩}other{有 {NUM_PASSWORDS} 個密碼遭外洩}}</translation> +<translation id="6947526360212886241">{NUM_PASSWORDS,plural, =1{有 1 組密碼遭外洩}other{有 {NUM_PASSWORDS} 組密碼遭外洩}}</translation> <translation id="6949434160682548041">密碼 (選填)</translation> <translation id="6950627417367801484">還原應用程式</translation> <translation id="6950943362443484797">系統將為你安裝這個應用程式</translation> @@ -4841,7 +4852,7 @@ <translation id="7514239104543605883">複製到你的裝置</translation> <translation id="7514365320538308">下載</translation> <translation id="751523031290522286">管理員已封鎖「<ph name="APP_NAME" />」。如要使用這個應用程式,請要求管理員授予權限。</translation> -<translation id="7516981202574715431">已暫停「<ph name="APP_NAME" />」</translation> +<translation id="7516981202574715431">「<ph name="APP_NAME" />」已暫停</translation> <translation id="7517063221058203587">{0,plural, =1{請在 1 分鐘內更新裝置}other{請在 # 分鐘內更新裝置}}</translation> <translation id="7520766081042531487">無痕模式入口網站:<ph name="SUBFRAME_SITE" /></translation> <translation id="7521387064766892559">JavaScript</translation> @@ -5089,6 +5100,7 @@ <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在過程中重新啟動。</translation> <translation id="7828731929332799387">這將會刪除第三方內容中使用的所有 Cookie 和網站資料。確定要繼續嗎?</translation> <translation id="7829298379596169484">正在存取音訊輸入</translation> +<translation id="7829877209233347340">請要求家長登入,授予新增學校帳戶的權限</translation> <translation id="7830594666202422257">連線至 Linux</translation> <translation id="7831491651892296503">網路設定錯誤</translation> <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> @@ -5528,6 +5540,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />網路,連線中</translation> <translation id="8410775397654368139">Google Play</translation> <translation id="8413385045638830869">先詢問我 (建議)</translation> +<translation id="8417548266957501132">家長帳戶密碼</translation> <translation id="8417573335434189196">無法防範不安全的網站、下載內容或擴充功能。Chrome 不建議使用這項設定。</translation> <translation id="8418445294933751433">顯示為分頁(&S)</translation> <translation id="8419098111404128271">「<ph name="SEARCH_TEXT" />」的搜尋結果</translation> @@ -5842,6 +5855,7 @@ <translation id="8808686172382650546">貓咪</translation> <translation id="8808744862003883508">這個頁面會顯示 Chrome 目前安裝的所有擴充功能。</translation> <translation id="8809147117840417135">淺藍綠色</translation> +<translation id="8812593354822910461">一併清除瀏覽資料 (<ph name="URL" />)。這項操作會將你登出 <ph name="DOMAIN" />。<ph name="LEARN_MORE" /></translation> <translation id="8813698869395535039">無法登入 <ph name="USERNAME" /></translation> <translation id="8813811964357448561">張</translation> <translation id="8813872945700551674">要求家長核准安裝「<ph name="EXTENSION_NAME" />」</translation> @@ -6131,6 +6145,7 @@ <translation id="9203398526606335860">分析已啟用(&P)</translation> <translation id="9203904171912129171">選取裝置</translation> <translation id="9203962528777363226">裝置管理員已停用新增使用者功能</translation> +<translation id="9209689095351280025">網站無法使用 Cookie 來追蹤你在網路上的活動</translation> <translation id="9211177926627870898">必須更新</translation> <translation id="9214520840402538427">糟糕!系統嘗試初始設定安裝時間 (installation-time) 屬性,但是動作已逾時。請洽詢你的支援代表。</translation> <translation id="9214695392875603905">杯子蛋糕</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 44539bc5..c50aae7 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -459,6 +459,7 @@ <translation id="1616206807336925449">Lesi sandiso asidingi izimvume ezibalulekile.</translation> <translation id="1616298854599875024">Ayikwazi ukungenisa isandiso se-"<ph name="IMPORT_NAME" />" ngoba akuyona imojuli eyabiwe</translation> <translation id="1618268899808219593">Isikhungo sosizo</translation> +<translation id="1620307519959413822">Iphasiwedi engalungile. Zama futhi noma chofoza okuthi Ukhohlwe iphasiwedi ukuze uyisethe kabusha.</translation> <translation id="1620510694547887537">Ikhamela</translation> <translation id="1623132449929929218">Izithombe manje azitholakali. Sicela uphinde uxhumeke ku-inthanethi ukuze ubuke amaqoqo esithombe sangemuva.</translation> <translation id="1627276047960621195">Izichazi zefayela</translation> @@ -677,6 +678,7 @@ <translation id="1887850431809612466">Ukubuyekeza kwezingxenyekazi zekhompuyutha</translation> <translation id="1890674179660343635"><span>ID: </span><ph name="EXTENSION_ID" /></translation> <translation id="189210018541388520">Vula isikrini esigcwele</translation> +<translation id="1892341345406963517">Sawubona <ph name="PARENT_NAME" /></translation> <translation id="189358972401248634">Ezinye izilimi</translation> <translation id="1895252664692693738"><ph name="TIME_LEFT" /> esele</translation> <translation id="1895658205118569222">Cima</translation> @@ -3130,6 +3132,7 @@ <translation id="5213891612754844763">Bonisa izilungiselelo zommeleli</translation> <translation id="5215502535566372932">Khetha izwe</translation> <translation id="521582610500777512">Isithombe silahliwe</translation> +<translation id="5222403284441421673">Ukulandwa okungavikelekile kuvinjiwe</translation> <translation id="5222676887888702881">Phuma ngemvume</translation> <translation id="52232769093306234">Ukupakisha kuhlulekile.</translation> <translation id="5225324770654022472">Bonisa isinqamuleli sohlelo lokusebenza</translation> @@ -3531,6 +3534,7 @@ <translation id="5734362860645681824">Ezokuxhumana</translation> <translation id="5734697361979786483">Engeza ukwabelana kwefayela</translation> <translation id="5736796278325406685">Sicela ufake igama lomsebenzisi elivumelekile</translation> +<translation id="5739017626473506901">Ngena ngemvume ukuze usize u-<ph name="USER_NAME" /> angeze i-akhawunti yesikole</translation> <translation id="5739235828260127894">Ilinde ukuqinisekisa. <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation> <translation id="5739458112391494395">Yinkulu kakhulu</translation> <translation id="574209121243317957">Ukuphakama</translation> @@ -5538,6 +5542,7 @@ <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> inethiwekhi, ukuxhuma</translation> <translation id="8410775397654368139">I-Google Play</translation> <translation id="8413385045638830869">Buza kuqala (kunconyiwe)</translation> +<translation id="8417548266957501132">Iphasiwedi yomzali</translation> <translation id="8417573335434189196">Akukuvikeli kumawebusayithi ayingozi, okulandwayo, noma izandiso. I-Chrome ayincomi lesi silungiselelo.</translation> <translation id="8418445294933751433">Bonisa njengethebhu</translation> <translation id="8419098111404128271">Imiphumela yosesho ye-'<ph name="SEARCH_TEXT" />'</translation>
diff --git a/chrome/app/resources/google_chrome_strings_as.xtb b/chrome/app/resources/google_chrome_strings_as.xtb index 158b95f9..18a1746 100644 --- a/chrome/app/resources/google_chrome_strings_as.xtb +++ b/chrome/app/resources/google_chrome_strings_as.xtb
@@ -162,6 +162,7 @@ <translation id="573759479754913123">Chrome OSৰ বিষয়ে</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome লঞ্চ কৰিব পৰা নগ'ল। পুনৰ চেষ্টা কৰক।</translation> +<translation id="5867197326698922595">Google Chromeএ পাছৱর্ডসমূহ সম্পাদনা কৰিবলৈ চেষ্টা কৰি আছে।</translation> <translation id="5895138241574237353">ৰিষ্টাৰ্ট কৰক</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - নেটৱর্কত ছাইন ইন</translation> <translation id="5940385492829620908">আপোনাৰ ৱেব, বুকমার্ক আৰু Chromeৰ অন্য বস্তুবোৰ ইয়াত থাকে৷</translation> @@ -244,6 +245,7 @@ <translation id="870251953148363156">&Google Chrome আপডে’ট কৰক</translation> <translation id="873133009373065397">Google Chromeএ ডিফ’ল্ট ব্ৰাউজাৰ নির্ধাৰণ বা ছেট কৰিব নোৱাৰে</translation> <translation id="8823341990149967727">Chromeটো অতি পুৰণি</translation> +<translation id="8834965163890861871">Google Chromeএ পাছৱর্ডসমূহ সম্পাদনা কৰিবলৈ চেষ্টা কৰি আছে। এই কার্যৰ বাবে অনুমতি দিবলৈ আপোনাৰ Windowsৰ পাছৱৰ্ডটো টাইপ কৰক।</translation> <translation id="884296878221830158">এইটোৱে লগতে আপুনি Chromeৰ ব্যৱহাৰ কৰিলে বা গৃহপৃষ্ঠা বুটামটো ক্লিক কৰিলে কি পৃষ্ঠা দেখুওৱা হয় সেয়াও নিয়ন্ত্ৰণ কৰে।</translation> <translation id="8862326446509486874">ছিষ্টেম-পৰ্যায়ৰ ইনষ্টলৰ বাবে আপোনাৰ সঠিক অধিকাৰ নাই। প্রশাসক হিচাপে ইনষ্টলাৰটো পুনৰ চলাই চাওক।</translation> <translation id="8914504000324227558">Chrome পুনৰ লঞ্চ কৰক</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index 9b30f76..b101db2 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -158,7 +158,7 @@ <translation id="573759479754913123">Chrome OS সম্পর্কে </translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome লঞ্চ করা যায়নি। আবার চেষ্টা করুন।</translation> -<translation id="5867197326698922595">Google Chrome পাসওয়ার্ড এডিট করার চেষ্টা করছে।</translation> +<translation id="5867197326698922595">Google Chrome আপনার পাসওয়ার্ড এডিট করার অনুমতি চাইছে।</translation> <translation id="5895138241574237353">পুনর্সূচনা</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - নেটওয়ার্ক সাইন-ইন</translation> <translation id="5940385492829620908">আপনার ওয়েব, বুকমার্ক এবং Chrome-এর অন্যান্য জিনিস এখানে রয়েছে৷</translation> @@ -241,7 +241,7 @@ <translation id="870251953148363156">&Google Chrome আপডেট</translation> <translation id="873133009373065397">Google Chrome ডিফল্ট ব্রাউজার নির্ধারণ বা সেট করতে পারছে না</translation> <translation id="8823341990149967727">Chrome পুরানো হয়ে গেছে</translation> -<translation id="8834965163890861871">Google Chrome পাসওয়ার্ড এডিট করার চেষ্টা করছে। অনুমতি দিতে আপনার Windows পাসওয়ার্ড টাইপ করুন।</translation> +<translation id="8834965163890861871">Google Chrome আপনার পাসওয়ার্ড এডিট করার অনুমতি চাইছে। অনুমতি দিতে আপনার Windows পাসওয়ার্ড টাইপ করুন।</translation> <translation id="884296878221830158">আপনি Chrome শুরু করলে বা হোম বোতামটি ক্লিক করলে কোন পৃষ্ঠাটি দেখানো হবে তাও এটি নিয়ন্ত্রণ করে।</translation> <translation id="8862326446509486874">সিস্টেম-স্তরীয় ইনস্টলের জন্য আপনার কাছে যথাযথ অধিকারগুলি নেই৷ অ্যাডমিনিস্ট্রেটর হিসেবে আবার ইনস্টলারটি চালানোর চেষ্টা করুন৷</translation> <translation id="8914504000324227558">Chrome আবার লঞ্চ করুন</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index dbbefdc..475b379 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -154,7 +154,7 @@ <translation id="573759479754913123">מידע על מערכת ההפעלה של Chrome</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome בגירסת Canary</translation> <translation id="5804318322022881572">לא ניתן היה להפעיל את Chrome. יש לנסות שוב.</translation> -<translation id="5867197326698922595">Google Chrome מנסה להעתיק את הסיסמאות.</translation> +<translation id="5867197326698922595">Google Chrome מנסה לערוך את הסיסמאות.</translation> <translation id="5895138241574237353">הפעל מחדש</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – כניסה לרשת</translation> <translation id="5940385492829620908">היסטוריית האתרים, הסימניות ופריטים נוספים מ-Chrome נמצאים כאן.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb index d6ad9077..1c949b5 100644 --- a/chrome/app/resources/google_chrome_strings_kk.xtb +++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -162,7 +162,7 @@ <translation id="573759479754913123">Chrome OS туралы</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome браузері іске қосылмады. Қайталап көріңіз.</translation> -<translation id="5867197326698922595">Google Chrome құпия сөздерді көшіргісі келеді.</translation> +<translation id="5867197326698922595">Google Chrome құпия сөздерді өзгерткісі келеді.</translation> <translation id="5895138241574237353">Қайта іске қосу</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – Желіге кіру</translation> <translation id="5940385492829620908">Веб-сайттар, бетбелгілер және басқа Chrome материалдары осы жерде болады.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ne.xtb b/chrome/app/resources/google_chrome_strings_ne.xtb index 30b924ef..2b531ebb 100644 --- a/chrome/app/resources/google_chrome_strings_ne.xtb +++ b/chrome/app/resources/google_chrome_strings_ne.xtb
@@ -158,7 +158,7 @@ <translation id="573759479754913123">क्रोम OS का बारेमा</translation> <translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome Canary</translation> <translation id="5804318322022881572">Chrome सुरु गर्न सकिएन। फेरि प्रयास गर्नुहोस्।</translation> -<translation id="5867197326698922595">Google Chrome ले पासवर्डहरू कपि गर्ने प्रयास गरिरहेको छ।</translation> +<translation id="5867197326698922595">Google Chrome ले पासवर्डहरू बदल्ने प्रयास गरिरहेको छ।</translation> <translation id="5895138241574237353">पुन: शुरू गर्नुहोस्</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - नेटवर्क साइन इन</translation> <translation id="5940385492829620908">तपाईंको वेब, बुकमार्कहरू, र अन्य Chrome सामान यहाँ रहन्छन्।</translation> @@ -241,7 +241,7 @@ <translation id="870251953148363156">&Google Chrome अद्यावधिक गर्नुहोस्</translation> <translation id="873133009373065397">Google Chrome ले पूर्वनिर्धारित ब्राउजर निर्धारण वा सेट गर्न सक्दैन</translation> <translation id="8823341990149967727">Chrome को मिति समाप्त भएको छ</translation> -<translation id="8834965163890861871">Google Chrome ले पासवर्डहरू कपि गर्ने प्रयास गर्दैछ। यसो गर्ने अनुमति दिन आफूले Windows मा प्रयोग गरेको पासवर्ड टाइप गर्नुहोस्।</translation> +<translation id="8834965163890861871">Google Chrome ले पासवर्डहरू बदल्ने प्रयास गर्दैछ। यसो गर्ने अनुमति दिन आफूले Windows मा प्रयोग गरेको पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="884296878221830158">तपाइँले Chrome सुरु गर्दा वा गृह बटन क्लिक गर्दा यसले कुन पृष्ठ देखाउँछ भनेर पनि नियन्त्रण गर्छ।</translation> <translation id="8862326446509486874">तपाईंसँग सिस्टम-स्तरको स्थापनाको लागि उपयुक्त अधिकारहरू छैनन्। स्थापकलाई व्यवस्थापकको रूपमा पुन: चलाउने प्रयास गर्नुहोस्।</translation> <translation id="8914504000324227558">Chrome पुनः सुरु गर्नुहोस्</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 1b62c30..4a722b9 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1863,8 +1863,6 @@ "unexpire_flags.h", "unified_consent/unified_consent_service_factory.cc", "unified_consent/unified_consent_service_factory.h", - "upboarding/query_tiles/cached_image_loader.cc", - "upboarding/query_tiles/cached_image_loader.h", "upboarding/query_tiles/tile_service_factory.cc", "upboarding/query_tiles/tile_service_factory.h", "update_client/chrome_update_query_params_delegate.cc", @@ -3005,6 +3003,7 @@ "//chrome/common:non_code_constants", "//chrome/services/media_gallery_util/public/cpp", "//components/autofill_assistant/browser", + "//components/browser_ui/util/android", "//components/cbor", "//components/cdm/browser", "//components/content_capture/android", @@ -3098,6 +3097,8 @@ "apps/app_service/app_service_proxy_factory.h", "apps/app_service/dip_px_util.cc", "apps/app_service/dip_px_util.h", + "apps/app_service/launch_utils.cc", + "apps/app_service/launch_utils.h", "apps/app_service/uninstall_dialog.cc", "apps/app_service/uninstall_dialog.h", "apps/intent_helper/apps_navigation_throttle.cc", @@ -3112,8 +3113,6 @@ "apps/intent_helper/intent_picker_auto_display_service_factory.h", "apps/intent_helper/page_transition_util.cc", "apps/intent_helper/page_transition_util.h", - "apps/launch_service/app_utils.cc", - "apps/launch_service/app_utils.h", "apps/launch_service/extension_app_launch_manager.cc", "apps/launch_service/extension_app_launch_manager.h", "apps/launch_service/launch_manager.cc", @@ -3143,6 +3142,13 @@ "component_updater/intervention_policy_database_component_installer.h", "custom_handlers/register_protocol_handler_permission_request.cc", "custom_handlers/register_protocol_handler_permission_request.h", + "device_identity/device_identity_provider.cc", + "device_identity/device_identity_provider.h", + "device_identity/device_oauth2_token_service.cc", + "device_identity/device_oauth2_token_service.h", + "device_identity/device_oauth2_token_service_factory.cc", + "device_identity/device_oauth2_token_service_factory.h", + "device_identity/device_oauth2_token_store.h", "diagnostics/diagnostics_controller.cc", "diagnostics/diagnostics_controller.h", "diagnostics/diagnostics_metrics.cc", @@ -3828,13 +3834,6 @@ "component_updater/smart_dim_component_installer.h", "device_identity/chromeos/device_oauth2_token_store_chromeos.cc", "device_identity/chromeos/device_oauth2_token_store_chromeos.h", - "device_identity/device_identity_provider.cc", - "device_identity/device_identity_provider.h", - "device_identity/device_oauth2_token_service.cc", - "device_identity/device_oauth2_token_service.h", - "device_identity/device_oauth2_token_service_factory.cc", - "device_identity/device_oauth2_token_service_factory.h", - "device_identity/device_oauth2_token_store.h", "download/notification/download_item_notification.cc", "download/notification/download_item_notification.h", "download/notification/download_notification_manager.cc", @@ -4318,6 +4317,8 @@ if (!is_android && !is_chromeos) { sources += [ + "device_identity/device_oauth2_token_store_desktop.cc", + "device_identity/device_oauth2_token_store_desktop.h", "first_run/upgrade_util.cc", "first_run/upgrade_util.h", "first_run/upgrade_util_mac.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 0524711..56a1317 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -39,6 +39,7 @@ #include "chrome/browser/performance_manager/graph/policies/policy_features.h" #include "chrome/browser/permissions/quiet_notification_permission_ui_config.h" #include "chrome/browser/predictors/loading_predictor_config.h" +#include "chrome/browser/prerender/isolated/isolated_prerender_features.h" #include "chrome/browser/prerender/prerender_field_trial.h" #include "chrome/browser/resource_coordinator/tab_manager_features.h" #include "chrome/browser/search/ntp_features.h" @@ -2431,6 +2432,10 @@ flag_descriptions::kEnablePreviewsCoinFlipName, flag_descriptions::kEnablePreviewsCoinFlipDescription, kOsAll, FEATURE_VALUE_TYPE(previews::features::kCoinFlipHoldback)}, + {"enable-google-srp-isolated-prerenders", + flag_descriptions::kEnableSRPIsolatedPrerendersName, + flag_descriptions::kEnableSRPIsolatedPrerendersDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kIsolatePrerenders)}, {"allow-insecure-localhost", flag_descriptions::kAllowInsecureLocalhostName, flag_descriptions::kAllowInsecureLocalhostDescription, kOsAll, SINGLE_VALUE_TYPE(switches::kAllowInsecureLocalhost)},
diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS index 5f18710c..617640f 100644 --- a/chrome/browser/android/DEPS +++ b/chrome/browser/android/DEPS
@@ -3,6 +3,7 @@ "+cc/layers/layer.h", "+chrome/android/test_support_jni_headers", "+chrome_jni_registration/chrome_jni_registration.h", + "+components/browser_ui/util/android/url_constants.h", "+device/vr/buildflags/buildflags.h", "+media/gpu", "+sandbox/linux/seccomp-bpf/sandbox_bpf.h",
diff --git a/chrome/browser/android/cookies/cookies_fetcher_util.cc b/chrome/browser/android/cookies/cookies_fetcher_util.cc index 87a0ef9..5f0b9e84 100644 --- a/chrome/browser/android/cookies/cookies_fetcher_util.cc +++ b/chrome/browser/android/cookies/cookies_fetcher_util.cc
@@ -117,7 +117,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); GetCookieServiceClient()->SetCanonicalCookie( *cookie, "https", options, network::mojom::CookieManager::SetCanonicalCookieCallback());
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.cc b/chrome/browser/android/omnibox/autocomplete_controller_android.cc index 6d1d023..3c4b39b3 100644 --- a/chrome/browser/android/omnibox/autocomplete_controller_android.cc +++ b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
@@ -34,12 +34,14 @@ #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "components/browser_ui/util/android/url_constants.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/omnibox/browser/autocomplete_classifier.h" #include "components/omnibox/browser/autocomplete_input.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_match_type.h" #include "components/omnibox/browser/location_bar_model.h" +#include "components/omnibox/browser/omnibox_controller_emitter.h" #include "components/omnibox/browser/omnibox_event_global_tracker.h" #include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/omnibox_log.h" @@ -118,7 +120,6 @@ ZeroSuggestPrefetcher::ZeroSuggestPrefetcher(Profile* profile) : controller_(new AutocompleteController( std::make_unique<ChromeAutocompleteProviderClient>(profile), - nullptr, // We only want to warm up the cache, don't need the result. AutocompleteProvider::TYPE_ZERO_SUGGEST)) { AutocompleteInput input(base::string16(), metrics::OmniboxEventProto::NTP, ChromeAutocompleteSchemeClassifier(profile)); @@ -140,10 +141,16 @@ AutocompleteControllerAndroid::AutocompleteControllerAndroid(Profile* profile) : autocomplete_controller_(new AutocompleteController( std::make_unique<ChromeAutocompleteProviderClient>(profile), - this, AutocompleteClassifier::DefaultOmniboxProviders())), inside_synchronous_start_(false), - profile_(profile) {} + profile_(profile) { + autocomplete_controller_->AddObserver(this); + + OmniboxControllerEmitter* emitter = + OmniboxControllerEmitter::GetForBrowserContext(profile_); + if (emitter) + autocomplete_controller_->AddObserver(emitter); +} void AutocompleteControllerAndroid::Start(JNIEnv* env, const JavaRef<jobject>& obj, @@ -209,9 +216,8 @@ // If omnibox text is empty, set it to the current URL for the purposes of // populating the verbatim match. - if (omnibox_text.empty() && - !current_url.SchemeIs(content::kChromeUIScheme) && - !current_url.SchemeIs(chrome::kChromeUINativeScheme)) + if (omnibox_text.empty() && !current_url.SchemeIs(content::kChromeUIScheme) && + !current_url.SchemeIs(browser_ui::kChromeUINativeScheme)) omnibox_text = url; input_ = AutocompleteInput(
diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc index 7526e90..bf6c02e 100644 --- a/chrome/browser/android/preferences/website_preference_bridge.cc +++ b/chrome/browser/android/preferences/website_preference_bridge.cc
@@ -20,7 +20,6 @@ #include "base/metrics/user_metrics.h" #include "base/stl_util.h" #include "chrome/android/chrome_jni_headers/WebsitePreferenceBridge_jni.h" -#include "chrome/browser/android/search_permissions/search_permissions_service.h" #include "chrome/browser/notifications/notification_permission_context.h" #include "chrome/browser/permissions/quiet_notification_permission_ui_state.h" #include "chrome/browser/profiles/profile.h" @@ -87,23 +86,20 @@ // Reset the give permission for the DSE if the permission and origin are // controlled by the DSE. -bool MaybeResetDSEPermission(ContentSettingsType type, +bool MaybeResetDSEPermission(Profile* profile, + ContentSettingsType type, const GURL& origin, const GURL& embedder, - bool is_incognito, ContentSetting setting) { - SearchPermissionsService* search_helper = - SearchPermissionsService::Factory::GetForBrowserContext( - GetActiveUserProfile(is_incognito)); - bool same_embedder = embedder.is_empty() || embedder == origin; - if (same_embedder && search_helper && - search_helper->IsPermissionControlledByDSE(type, - url::Origin::Create(origin)) && - setting == CONTENT_SETTING_DEFAULT) { - search_helper->ResetDSEPermission(type); - return true; - } - return false; + if (!embedder.is_empty() && embedder != origin) + return false; + + if (setting != CONTENT_SETTING_DEFAULT) + return false; + + return permissions::PermissionsClient::Get() + ->ResetPermissionIfControlledByDse(profile, type, + url::Origin::Create(origin)); } ScopedJavaLocalRef<jstring> ConvertOriginToJavaString( @@ -245,8 +241,8 @@ ->RemoveEmbargoByUrl(origin_url, content_type); } - if (MaybeResetDSEPermission(content_type, origin_url, embedder_url, - is_incognito, setting)) { + if (MaybeResetDSEPermission(profile, content_type, origin_url, embedder_url, + setting)) { return; } @@ -479,8 +475,8 @@ ->GetPermissionDecisionAutoBlocker(profile) ->RemoveEmbargoByUrl(url, ContentSettingsType::NOTIFICATIONS); - if (MaybeResetDSEPermission(ContentSettingsType::NOTIFICATIONS, url, GURL(), - is_incognito, setting)) { + if (MaybeResetDSEPermission(profile, ContentSettingsType::NOTIFICATIONS, url, + GURL(), setting)) { return; } @@ -831,13 +827,10 @@ int content_settings_type, const JavaParamRef<jstring>& jorigin, jboolean is_incognito) { - SearchPermissionsService* search_helper = - SearchPermissionsService::Factory::GetForBrowserContext( - GetActiveUserProfile(is_incognito)); - return search_helper && - search_helper->IsPermissionControlledByDSE( - static_cast<ContentSettingsType>(content_settings_type), - url::Origin::Create(GURL(ConvertJavaStringToUTF8(env, jorigin)))); + return permissions::PermissionsClient::Get()->IsPermissionControlledByDse( + GetActiveUserProfile(is_incognito), + static_cast<ContentSettingsType>(content_settings_type), + url::Origin::Create(GURL(ConvertJavaStringToUTF8(env, jorigin)))); } static jboolean JNI_WebsitePreferenceBridge_GetAdBlockingActivated(
diff --git a/chrome/browser/android/tab_web_contents_delegate_android.cc b/chrome/browser/android/tab_web_contents_delegate_android.cc index 3a7f6c3..beacbda 100644 --- a/chrome/browser/android/tab_web_contents_delegate_android.cc +++ b/chrome/browser/android/tab_web_contents_delegate_android.cc
@@ -49,6 +49,7 @@ #include "chrome/browser/vr/vr_tab_helper.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/url_constants.h" +#include "components/browser_ui/util/android/url_constants.h" #include "components/find_in_page/find_notification_details.h" #include "components/find_in_page/find_tab_helper.h" #include "components/infobars/core/infobar.h" @@ -213,10 +214,10 @@ if (entry) { GURL url = entry->GetURL(); GURL virtual_url = entry->GetVirtualURL(); - if ((url.SchemeIs(chrome::kChromeUINativeScheme) && - url.host_piece() == chrome::kChromeUINewTabHost) || - (virtual_url.SchemeIs(chrome::kChromeUINativeScheme) && - virtual_url.host_piece() == chrome::kChromeUINewTabHost)) { + if ((url.SchemeIs(browser_ui::kChromeUINativeScheme) && + url.host_piece() == chrome::kChromeUINewTabHost) || + (virtual_url.SchemeIs(browser_ui::kChromeUINativeScheme) && + virtual_url.host_piece() == chrome::kChromeUINewTabHost)) { return true; } }
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index 7724683..233c9cb90 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -115,6 +115,8 @@ "//chrome/browser/vr:vr_common", "//chrome/common", "//chrome/common:constants", + "//components/browser_ui/util/android", + "//components/content_settings/core/browser", "//components/language/core/browser", "//components/omnibox/browser", "//components/permissions",
diff --git a/chrome/browser/android/vr/autocomplete_controller.cc b/chrome/browser/android/vr/autocomplete_controller.cc index 8724735..f6974043 100644 --- a/chrome/browser/android/vr/autocomplete_controller.cc +++ b/chrome/browser/android/vr/autocomplete_controller.cc
@@ -12,6 +12,7 @@ #include "chrome/browser/vr/model/omnibox_suggestions.h" #include "components/omnibox/browser/autocomplete_classifier.h" #include "components/omnibox/browser/autocomplete_input.h" +#include "components/omnibox/browser/omnibox_controller_emitter.h" #include "components/search_engines/util.h" namespace vr { @@ -26,9 +27,15 @@ suggestion_callback_(std::move(callback)) { auto client = std::make_unique<ChromeAutocompleteProviderClient>(profile_); client_ = client.get(); + autocomplete_controller_ = std::make_unique<::AutocompleteController>( - std::move(client), this, - AutocompleteClassifier::DefaultOmniboxProviders()); + std::move(client), AutocompleteClassifier::DefaultOmniboxProviders()); + autocomplete_controller_->AddObserver(this); + + OmniboxControllerEmitter* emitter = + OmniboxControllerEmitter::GetForBrowserContext(profile_); + if (emitter) + autocomplete_controller_->AddObserver(emitter); } AutocompleteController::~AutocompleteController() = default;
diff --git a/chrome/browser/android/vr/vr_shell.cc b/chrome/browser/android/vr/vr_shell.cc index d393e31..8be8666 100644 --- a/chrome/browser/android/vr/vr_shell.cc +++ b/chrome/browser/android/vr/vr_shell.cc
@@ -30,7 +30,6 @@ #include "chrome/browser/android/vr/vr_shell_delegate.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/component_updater/vr_assets_component_installer.h" -#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" #include "chrome/browser/profiles/profile.h" @@ -48,6 +47,8 @@ #include "chrome/browser/vr/vr_tab_helper.h" #include "chrome/browser/vr/vr_web_contents_observer.h" #include "chrome/common/url_constants.h" +#include "components/browser_ui/util/android/url_constants.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/language/core/browser/pref_names.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" @@ -1013,7 +1014,7 @@ GURL url = entry->GetVirtualURL(); // URL is of the form chrome-native://.... This is not useful for the user. // Hide it. - if (url.SchemeIs(chrome::kChromeUINativeScheme)) { + if (url.SchemeIs(browser_ui::kChromeUINativeScheme)) { return false; } // URL is of the form chrome://.... @@ -1206,9 +1207,7 @@ SecurityStateTabHelper* helper = SecurityStateTabHelper::FromWebContents(web_contents_); auto page_info = std::make_unique<PageInfo>( - Profile::FromBrowserContext(web_contents_->GetBrowserContext()), - std::make_unique<ChromePageInfoDelegate>(web_contents_), - TabSpecificContentSettings::FromWebContents(web_contents_), web_contents_, + std::make_unique<ChromePageInfoDelegate>(web_contents_), web_contents_, entry->GetVirtualURL(), helper->GetSecurityLevel(), *helper->GetVisibleSecurityState()); page_info->InitializeUiState(this);
diff --git a/chrome/browser/apps/app_service/arc_apps.cc b/chrome/browser/apps/app_service/arc_apps.cc index c3c8e94..8c8ee85 100644 --- a/chrome/browser/apps/app_service/arc_apps.cc +++ b/chrome/browser/apps/app_service/arc_apps.cc
@@ -347,6 +347,10 @@ instance->ResetVerifiedLinks(package_names); } +bool ShouldShow(const ArcAppListPrefs::AppInfo& app_info) { + return app_info.show_in_launcher; +} + } // namespace namespace apps { @@ -649,7 +653,7 @@ } // App Info item. - if (app_info->ready) { + if (app_info->ready && ShouldShow(*app_info)) { AddCommandItem(ash::SHOW_APP_INFO, IDS_APP_CONTEXT_MENU_SHOW_INFO, &menu_items); } @@ -998,8 +1002,8 @@ app->recommendable = apps::mojom::OptionalBool::kTrue; app->searchable = apps::mojom::OptionalBool::kTrue; - auto show = app_info.show_in_launcher ? apps::mojom::OptionalBool::kTrue - : apps::mojom::OptionalBool::kFalse; + auto show = ShouldShow(app_info) ? apps::mojom::OptionalBool::kTrue + : apps::mojom::OptionalBool::kFalse; app->show_in_launcher = show; app->show_in_search = show; app->show_in_management = show;
diff --git a/chrome/browser/apps/app_service/extension_apps.cc b/chrome/browser/apps/app_service/extension_apps.cc index cfb5a3d..042e588 100644 --- a/chrome/browser/apps/app_service/extension_apps.cc +++ b/chrome/browser/apps/app_service/extension_apps.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/apps/app_service/extension_apps.h" -#include <memory> #include <utility> #include <vector> @@ -15,6 +14,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" +#include "base/feature_list.h" #include "base/metrics/histogram_macros.h" #include "base/optional.h" #include "base/scoped_observer.h" @@ -23,7 +23,6 @@ #include "base/strings/stringprintf.h" #include "chrome/browser/apps/app_service/app_icon_factory.h" #include "chrome/browser/apps/app_service/menu_util.h" -#include "chrome/browser/apps/launch_service/launch_service.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_interface.h" #include "chrome/browser/chromeos/crostini/crostini_util.h" @@ -45,9 +44,11 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/extensions/app_launch_params.h" +#include "chrome/browser/ui/extensions/application_launch.h" #include "chrome/browser/ui/extensions/extension_enable_flow.h" #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/web_applications/web_app_launch_manager.h" #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" @@ -183,9 +184,7 @@ ~ExtensionAppsEnableFlow() override {} - using Callback = base::OnceCallback<void()>; - - void Run(Callback callback) { + void Run(base::OnceClosure callback) { callback_ = std::move(callback); if (!flow_) { @@ -210,34 +209,12 @@ Profile* profile_; std::string app_id_; - Callback callback_; + base::OnceClosure callback_; std::unique_ptr<ExtensionEnableFlow> flow_; DISALLOW_COPY_AND_ASSIGN(ExtensionAppsEnableFlow); }; -void ExtensionApps::RecordUninstallCanceledAction(Profile* profile, - const std::string& app_id) { - const extensions::Extension* extension = - extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension( - app_id); - if (!extension) { - return; - } - - if (extension->from_bookmark()) { - UMA_HISTOGRAM_ENUMERATION( - "Webapp.UninstallDialogAction", - extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED, - extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST); - } else { - UMA_HISTOGRAM_ENUMERATION( - "Extensions.UninstallDialogAction", - extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED, - extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST); - } -} - ExtensionApps::ExtensionApps( const mojo::Remote<apps::mojom::AppService>& app_service, Profile* profile, @@ -263,6 +240,29 @@ } } +// static +void ExtensionApps::RecordUninstallCanceledAction(Profile* profile, + const std::string& app_id) { + const extensions::Extension* extension = + extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension( + app_id); + if (!extension) { + return; + } + + if (extension->from_bookmark()) { + UMA_HISTOGRAM_ENUMERATION( + "Webapp.UninstallDialogAction", + extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED, + extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST); + } else { + UMA_HISTOGRAM_ENUMERATION( + "Extensions.UninstallDialogAction", + extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED, + extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST); + } +} + void ExtensionApps::FlushMojoCallsForTesting() { receiver_.FlushForTesting(); } @@ -311,6 +311,12 @@ weak_factory_.GetWeakPtr())); } + if (app_type_ == apps::mojom::AppType::kWeb && + base::FeatureList::IsEnabled(features::kDesktopPWAsUnifiedLaunch)) { + web_app_launch_manager_ = + std::make_unique<web_app::WebAppLaunchManager>(profile_); + } + // Remaining initialization is only relevant to the kExtension app type. if (app_type_ != apps::mojom::AppType::kExtension) { return; @@ -418,7 +424,10 @@ extensions::ExtensionRegistry::Get(profile_)->GetInstalledExtension( app_id); if (!extension || !extensions::util::IsAppLaunchable(app_id, profile_) || - RunExtensionEnableFlow(app_id, event_flags, launch_source, display_id)) { + RunExtensionEnableFlow( + app_id, + base::BindOnce(&ExtensionApps::Launch, weak_factory_.GetWeakPtr(), + app_id, event_flags, launch_source, display_id))) { return; } @@ -463,7 +472,7 @@ extension_url, extension_urls::kWebstoreSourceField, source_value); } - apps::LaunchService::Get(profile_)->OpenApplication(params); + LaunchImpl(params); } void ExtensionApps::LaunchAppWithIntent(const std::string& app_id, @@ -474,9 +483,20 @@ return; } - AppLaunchParams params = CreateAppLaunchParamsForIntent(app_id, intent); + const extensions::Extension* extension = + extensions::ExtensionRegistry::Get(profile_)->GetInstalledExtension( + app_id); + if (!extension || !extensions::util::IsAppLaunchable(app_id, profile_) || + RunExtensionEnableFlow( + app_id, + base::BindOnce(&ExtensionApps::LaunchAppWithIntent, + weak_factory_.GetWeakPtr(), app_id, std::move(intent), + launch_source, display_id))) { + return; + } - apps::LaunchService::Get(profile_)->OpenApplication(params); + AppLaunchParams params = CreateAppLaunchParamsForIntent(app_id, intent); + LaunchImpl(params); } void ExtensionApps::SetPermission(const std::string& app_id, @@ -1276,11 +1296,8 @@ } } -bool ExtensionApps::RunExtensionEnableFlow( - const std::string& app_id, - int32_t event_flags, - apps::mojom::LaunchSource launch_source, - int64_t display_id) { +bool ExtensionApps::RunExtensionEnableFlow(const std::string& app_id, + base::OnceClosure callback) { if (extensions::util::IsAppLaunchableWithoutEnabling(app_id, profile_)) { return false; } @@ -1290,9 +1307,7 @@ std::make_unique<ExtensionAppsEnableFlow>(profile_, app_id); } - enable_flow_map_[app_id]->Run( - base::BindOnce(&ExtensionApps::Launch, weak_factory_.GetWeakPtr(), app_id, - event_flags, launch_source, display_id)); + enable_flow_map_[app_id]->Run(std::move(callback)); return true; } @@ -1432,4 +1447,19 @@ std::move(callback).Run(std::move(menu_items)); } +void ExtensionApps::LaunchImpl(const AppLaunchParams& params) { + if (web_app_launch_manager_) { + web_app_launch_manager_->OpenApplication(params); + return; + } + + if (params.container == + apps::mojom::LaunchContainer::kLaunchContainerWindow && + app_type_ == apps::mojom::AppType::kWeb) { + web_app::RecordAppWindowLaunch(profile_, params.app_id); + } + + ::OpenApplication(profile_, params); +} + } // namespace apps
diff --git a/chrome/browser/apps/app_service/extension_apps.h b/chrome/browser/apps/app_service/extension_apps.h index f96a813..c72f988 100644 --- a/chrome/browser/apps/app_service/extension_apps.h +++ b/chrome/browser/apps/app_service/extension_apps.h
@@ -6,15 +6,18 @@ #define CHROME_BROWSER_APPS_APP_SERVICE_EXTENSION_APPS_H_ #include <map> +#include <memory> #include <string> #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "chrome/browser/apps/app_service/app_icon_factory.h" +#include "chrome/browser/apps/app_service/app_launch_params.h" #include "chrome/browser/apps/app_service/icon_key_util.h" #include "chrome/browser/apps/app_service/paused_apps.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" +#include "chrome/browser/ui/web_applications/web_app_launch_manager.h" #include "chrome/services/app_service/public/cpp/instance.h" #include "chrome/services/app_service/public/cpp/instance_registry.h" #include "chrome/services/app_service/public/mojom/app_service.mojom.h" @@ -55,16 +58,16 @@ public content_settings::Observer, public ArcAppListPrefs::Observer { public: - // Record uninstall dialog action for Web apps and Chrome apps. - static void RecordUninstallCanceledAction(Profile* profile, - const std::string& app_id); - ExtensionApps(const mojo::Remote<apps::mojom::AppService>& app_service, Profile* profile, apps::mojom::AppType app_type, apps::InstanceRegistry* instance_registry); ~ExtensionApps() override; + // Record uninstall dialog action for Web apps and Chrome apps. + static void RecordUninstallCanceledAction(Profile* profile, + const std::string& app_id); + void FlushMojoCallsForTesting(); void Shutdown(); @@ -161,11 +164,9 @@ // Checks if extension is disabled and if enable flow should be started. // Returns true if extension enable flow is started or there is already one - // running. + // running, and run |callback| to launch the app. bool RunExtensionEnableFlow(const std::string& app_id, - int32_t event_flags, - apps::mojom::LaunchSource launch_source, - int64_t display_id); + base::OnceClosure callback); static bool IsBlacklisted(const std::string& app_id); @@ -209,6 +210,8 @@ void GetMenuModelForChromeBrowserApp(apps::mojom::MenuType menu_type, GetMenuModelCallback callback); + void LaunchImpl(const AppLaunchParams& params); + mojo::Receiver<apps::mojom::Publisher> receiver_{this}; mojo::RemoteSet<apps::mojom::Subscriber> subscribers_; @@ -246,6 +249,9 @@ // Registrar used to monitor the profile prefs. PrefChangeRegistrar profile_pref_change_registrar_; + // TODO(crbug.com/1061843): Remove web_app_launch_manager_ when BMO launches. + std::unique_ptr<web_app::WebAppLaunchManager> web_app_launch_manager_; + base::WeakPtrFactory<ExtensionApps> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ExtensionApps);
diff --git a/chrome/browser/apps/launch_service/app_utils.cc b/chrome/browser/apps/app_service/launch_utils.cc similarity index 63% rename from chrome/browser/apps/launch_service/app_utils.cc rename to chrome/browser/apps/app_service/launch_utils.cc index a380edb..378275f 100644 --- a/chrome/browser/apps/launch_service/app_utils.cc +++ b/chrome/browser/apps/app_service/launch_utils.cc
@@ -2,16 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" +#include "base/command_line.h" +#include "base/files/file_path.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_navigator.h" +#include "chrome/browser/ui/browser_navigator_params.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/web_applications/components/app_registrar.h" #include "chrome/browser/web_applications/components/web_app_provider_base.h" #include "chrome/browser/web_applications/components/web_app_tab_helper_base.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/webui_url_constants.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension.h" +#include "url/gurl.h" namespace apps { @@ -21,15 +31,17 @@ web_app::WebAppTabHelperBase* web_app_tab_helper = web_app::WebAppTabHelperBase::FromWebContents(web_contents); // web_app_tab_helper is nullptr in some unit tests. - if (web_app_tab_helper) + if (web_app_tab_helper) { app_id = web_app_tab_helper->GetAppId(); + } if (app_id.empty()) { extensions::TabHelper* extensions_tab_helper = extensions::TabHelper::FromWebContents(web_contents); // extensions_tab_helper is nullptr in some tests. - if (extensions_tab_helper) + if (extensions_tab_helper) { app_id = extensions_tab_helper->GetExtensionAppId(); + } } return app_id; @@ -72,4 +84,39 @@ } } +std::vector<base::FilePath> GetLaunchFilesFromCommandLine( + const base::CommandLine& command_line) { + std::vector<base::FilePath> launch_files; + if (!command_line.HasSwitch(switches::kAppId)) { + return launch_files; + } + + // Assume all args passed were intended as files to pass to the app. + launch_files.reserve(command_line.GetArgs().size()); + for (const auto& arg : command_line.GetArgs()) { + base::FilePath path(arg); + if (path.empty()) { + continue; + } + + launch_files.push_back(path); + } + + return launch_files; +} + +Browser* CreateBrowserWithNewTabPage(Profile* profile) { + Browser::CreateParams create_params(profile, /*user_gesture=*/false); + Browser* browser = new Browser(create_params); + + NavigateParams params(browser, GURL(chrome::kChromeUINewTabURL), + ui::PAGE_TRANSITION_AUTO_TOPLEVEL); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + params.tabstrip_add_types = TabStripModel::ADD_ACTIVE; + Navigate(¶ms); + + browser->window()->Show(); + return browser; +} + } // namespace apps
diff --git a/chrome/browser/apps/app_service/launch_utils.h b/chrome/browser/apps/app_service/launch_utils.h new file mode 100644 index 0000000..5daf8f48 --- /dev/null +++ b/chrome/browser/apps/app_service/launch_utils.h
@@ -0,0 +1,43 @@ +// Copyright 2020 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_APPS_APP_SERVICE_LAUNCH_UTILS_H_ +#define CHROME_BROWSER_APPS_APP_SERVICE_LAUNCH_UTILS_H_ + +#include <string> +#include <vector> + +class Browser; +class Profile; + +namespace base { +class CommandLine; +class FilePath; +} // namespace base + +namespace content { +class WebContents; +} // namespace content + +namespace apps { + +std::string GetAppIdForWebContents(content::WebContents* web_contents); + +bool IsInstalledApp(Profile* profile, const std::string& app_id); + +void SetAppIdForWebContents(Profile* profile, + content::WebContents* web_contents, + const std::string& app_id); + +// Converts file arguments to an app on |command_line| into base::FilePaths. +std::vector<base::FilePath> GetLaunchFilesFromCommandLine( + const base::CommandLine& command_line); + +// When a command line launch has an unknown app id, we open a browser with only +// the new tab page. +Browser* CreateBrowserWithNewTabPage(Profile* profile); + +} // namespace apps + +#endif // CHROME_BROWSER_APPS_APP_SERVICE_LAUNCH_UTILS_H_
diff --git a/chrome/browser/apps/launch_service/app_utils.h b/chrome/browser/apps/launch_service/app_utils.h deleted file mode 100644 index 82106fc..0000000 --- a/chrome/browser/apps/launch_service/app_utils.h +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2020 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_APPS_LAUNCH_SERVICE_APP_UTILS_H_ -#define CHROME_BROWSER_APPS_LAUNCH_SERVICE_APP_UTILS_H_ - -#include <string> - -class Profile; - -namespace content { -class WebContents; -} // namespace content - -namespace apps { - -std::string GetAppIdForWebContents(content::WebContents* web_contents); - -bool IsInstalledApp(Profile* profile, const std::string& app_id); - -void SetAppIdForWebContents(Profile* profile, - content::WebContents* web_contents, - const std::string& app_id); - -} // namespace apps - -#endif // CHROME_BROWSER_APPS_LAUNCH_SERVICE_APP_UTILS_H_
diff --git a/chrome/browser/apps/launch_service/extension_app_launch_manager.cc b/chrome/browser/apps/launch_service/extension_app_launch_manager.cc index ec07a33..42a50ff9 100644 --- a/chrome/browser/apps/launch_service/extension_app_launch_manager.cc +++ b/chrome/browser/apps/launch_service/extension_app_launch_manager.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/apps/launch_service/extension_app_launch_manager.h" #include "base/feature_list.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/apps/platform_apps/platform_app_launch.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -57,7 +58,7 @@ container = apps::mojom::LaunchContainer::kLaunchContainerTab; } else { // Open an empty browser window as the app_id is invalid. - CreateNewTabBrowser(); + CreateBrowserWithNewTabPage(profile()); container = apps::mojom::LaunchContainer::kLaunchContainerNone; } std::move(callback).Run(BrowserList::GetInstance()->GetLastActive(),
diff --git a/chrome/browser/apps/launch_service/launch_manager.cc b/chrome/browser/apps/launch_service/launch_manager.cc index aa567fb..fbf63ea0 100644 --- a/chrome/browser/apps/launch_service/launch_manager.cc +++ b/chrome/browser/apps/launch_service/launch_manager.cc
@@ -4,57 +4,10 @@ #include "chrome/browser/apps/launch_service/launch_manager.h" -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_navigator.h" -#include "chrome/browser/ui/browser_navigator_params.h" -#include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/webui_url_constants.h" -#include "ui/base/page_transition_types.h" -#include "url/gurl.h" - namespace apps { LaunchManager::LaunchManager(Profile* profile) : profile_(profile) {} LaunchManager::~LaunchManager() = default; -// static -std::vector<base::FilePath> LaunchManager::GetLaunchFilesFromCommandLine( - const base::CommandLine& command_line) { - std::vector<base::FilePath> launch_files; - if (!command_line.HasSwitch(switches::kAppId)) - return launch_files; - - // Assume all args passed were intended as files to pass to the app. - launch_files.reserve(command_line.GetArgs().size()); - for (const auto& arg : command_line.GetArgs()) { - base::FilePath path(arg); - if (path.empty()) - continue; - - launch_files.push_back(path); - } - - return launch_files; -} - -Browser* LaunchManager::CreateNewTabBrowser() { - Browser::CreateParams create_params = - Browser::CreateParams(profile_, /*user_gesture=*/false); - Browser* browser = new Browser(create_params); - - NavigateParams params(browser, GURL(chrome::kChromeUINewTabURL), - ui::PAGE_TRANSITION_AUTO_TOPLEVEL); - params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; - params.tabstrip_add_types = TabStripModel::ADD_ACTIVE; - Navigate(¶ms); - - browser->window()->Show(); - return browser; -} - } // namespace apps
diff --git a/chrome/browser/apps/launch_service/launch_manager.h b/chrome/browser/apps/launch_service/launch_manager.h index 08867c8..8ca4a123 100644 --- a/chrome/browser/apps/launch_service/launch_manager.h +++ b/chrome/browser/apps/launch_service/launch_manager.h
@@ -50,18 +50,10 @@ apps::mojom::LaunchContainer container)> callback) = 0; - // Converts file arguments to an app on |command_line| into base::FilePaths. - static std::vector<base::FilePath> GetLaunchFilesFromCommandLine( - const base::CommandLine& command_line); - protected: explicit LaunchManager(Profile*); Profile* profile() { return profile_; } - // When a command line launch has an unknown app id, we open a browser - // with only the new tab page. - Browser* CreateNewTabBrowser(); - private: Profile* const profile_; DISALLOW_COPY_AND_ASSIGN(LaunchManager);
diff --git a/chrome/browser/apps/platform_apps/platform_app_launch.cc b/chrome/browser/apps/platform_apps/platform_app_launch.cc index 9fd0867..9b5a413 100644 --- a/chrome/browser/apps/platform_apps/platform_app_launch.cc +++ b/chrome/browser/apps/platform_apps/platform_app_launch.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/apps/platform_apps/platform_app_launch.h" #include "chrome/browser/apps/app_service/app_launch_params.h" -#include "chrome/browser/apps/launch_service/launch_manager.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/extensions/launch_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/extensions/application_launch.h" @@ -84,8 +84,7 @@ params.command_line = command_line; params.current_directory = current_directory; if (app->from_bookmark()) { - params.launch_files = - LaunchManager::GetLaunchFilesFromCommandLine(command_line); + params.launch_files = GetLaunchFilesFromCommandLine(command_line); } content::WebContents* tab_in_app_window = ::OpenApplication(profile, params);
diff --git a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc index 7f4dd5ff..c106fe5 100644 --- a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc +++ b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
@@ -42,7 +42,7 @@ Profile* profile = static_cast<Profile*>(context); return std::make_unique<AutocompleteClassifier>( std::make_unique<AutocompleteController>( - std::make_unique<ChromeAutocompleteProviderClient>(profile), nullptr, + std::make_unique<ChromeAutocompleteProviderClient>(profile), AutocompleteClassifier::DefaultOmniboxProviders()), std::make_unique<ChromeAutocompleteSchemeClassifier>(profile)); }
diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc index ca654652..f16543b 100644 --- a/chrome/browser/autocomplete/search_provider_unittest.cc +++ b/chrome/browser/autocomplete/search_provider_unittest.cc
@@ -352,12 +352,9 @@ public: void SetUp() override { CustomizableSetUp( - /* search_url */ prefix + "{searchTerms}", - /* suggestions_url */ prefix + "{searchTerms}"); + /* search_url */ "http://defaulturl/{searchTerms}", + /* suggestions_url */ "http://defaulturl/{searchTerms}"); } - - protected: - static const std::string prefix; }; // Implementation of classes -------------------------------------------------- @@ -366,7 +363,6 @@ const char BaseSearchProviderTest::kNotApplicable[] = "Not Applicable"; const BaseSearchProviderTest::ExpectedMatch BaseSearchProviderTest::kEmptyExpectedMatch = {kNotApplicable, false}; -const std::string InvalidSearchProviderTest::prefix = "http://defaulturl/"; void BaseSearchProviderTest::CustomizableSetUp( const std::string& search_url, @@ -1093,7 +1089,7 @@ AutocompleteController controller( std::make_unique<TestAutocompleteProviderClient>( &profile_, &test_url_loader_factory_), - nullptr, AutocompleteProvider::TYPE_SEARCH); + AutocompleteProvider::TYPE_SEARCH); AutocompleteInput input(ASCIIToUTF16("k t"), metrics::OmniboxEventProto::OTHER, ChromeAutocompleteSchemeClassifier(&profile_)); @@ -3766,7 +3762,7 @@ QueryForInput(query, false, false); // Make sure the default provider's suggest service was not queried. - EXPECT_FALSE(test_url_loader_factory_.IsPending(prefix + "query")); + EXPECT_FALSE(test_url_loader_factory_.IsPending("http://defaulturl/query")); } // SearchProviderWarmUpTest --------------------------------------------------
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index be4fa6e4..e9579c8 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -109,6 +109,11 @@ <include name="IDR_OFFLINE_INTERNALS_BROWSER_PROXY_JS" file="resources\offline_pages\offline_internals_browser_proxy.js" type="BINDATA" compress="gzip" /> </if> + <if expr="not is_android"> + <!-- New Tab Page --> + <part file="resources/local_ntp/icons.grdp" /> + </if> + <if expr="enable_supervised_users"> <part file="resources/supervised_user_error_page_resources.grdp" /> </if> @@ -122,15 +127,6 @@ <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" /> </if> - <!-- App Management. --> - <if expr="chromeos"> - <include name="IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS" file="${root_gen_dir}\skia\public\mojom\bitmap.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS" file="${root_gen_dir}\skia\public\mojom\image_info.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS" file="${root_gen_dir}\ui\gfx\image\mojom\image.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_APP_MANAGEMENT_MOJO_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\app_management\app_management.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS" file="${root_gen_dir}\chrome\services\app_service\public\mojom\types.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - </if> - <if expr="not is_android"> <!-- Page not available for guest. --> <include name="IDR_PAGE_NOT_AVAILABLE_FOR_GUEST_APP_HTML" file="resources\page_not_available_for_guest\app.html" type="BINDATA" /> @@ -447,11 +443,6 @@ <include name="IDR_ADD_SUPERVISION_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\chromeos\add_supervision\add_supervision.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> </if> <if expr="chromeos"> - <include name="IDR_OS_SETTINGS_SEARCH_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_OS_SETTINGS_SEARCH_RESULT_ICON_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search_result_icon.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - <include name="IDR_OS_SETTINGS_USER_ACTION_RECORDER_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\user_action_recorder.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" /> - </if> - <if expr="chromeos"> <!-- OOBE / Login resources --> <include name="IDR_ASSISTANT_LOGO_PNG" file="resources\chromeos\assistant_optin\assistant_logo.png" type="BINDATA" /> <include name="IDR_SUPERVISION_ICON_PNG" file="resources\chromeos\supervision\supervision_icon.png" type="BINDATA" />
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc index 0ae7635..ab6696e 100644 --- a/chrome/browser/chrome_content_browser_client_browsertest.cc +++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -7,15 +7,12 @@ #include <memory> #include <vector> -#include "base/base_switches.h" #include "base/bind.h" #include "base/command_line.h" #include "base/macros.h" #include "base/no_destructor.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "base/system/sys_info.h" -#include "base/test/mock_entropy_provider.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/custom_handlers/protocol_handler_registry.h" @@ -38,27 +35,21 @@ #include "components/network_session_configurator/common/network_switches.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/prefs/pref_service.h" -#include "components/variations/variations_switches.h" -#include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" -#include "content/public/browser/site_isolation_policy.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_client.h" -#include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" -#include "google_apis/gaia/gaia_urls.h" #include "net/dns/mock_host_resolver.h" #include "net/http/http_status_code.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" -#include "testing/gmock/include/gmock/gmock.h" #include "ui/native_theme/native_theme.h" #include "ui/native_theme/test_native_theme.h" #include "url/gurl.h" @@ -239,584 +230,6 @@ contents->GetMainFrame()->GetProcess()->GetID())); } -enum class SitePerProcessMemoryThreshold { - kNone, - k128MB, - k768MB, -}; - -enum class SitePerProcessMode { - kDisabled, - kEnabled, - kIsolatedOrigin, -}; - -struct SitePerProcessMemoryThresholdBrowserTestParams { - SitePerProcessMemoryThreshold threshold; - SitePerProcessMode mode; -}; - -const url::Origin& GetTrialOrigin() { - static base::NoDestructor<url::Origin> origin{ - url::Origin::Create(GURL("http://foo.com/"))}; - return *origin; -} - -// Helper class to run tests on a simulated 512MB low-end device. -class SitePerProcessMemoryThresholdBrowserTest - : public InProcessBrowserTest, - public ::testing::WithParamInterface< - SitePerProcessMemoryThresholdBrowserTestParams> { - public: - SitePerProcessMemoryThresholdBrowserTest() { - switch (GetParam().threshold) { - case SitePerProcessMemoryThreshold::kNone: - break; - case SitePerProcessMemoryThreshold::k128MB: - threshold_feature_.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, - "128"}}); - break; - case SitePerProcessMemoryThreshold::k768MB: - threshold_feature_.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, - "768"}}); - break; - } - - switch (GetParam().mode) { - case SitePerProcessMode::kDisabled: - mode_feature_.InitAndDisableFeature(features::kSitePerProcess); - break; - case SitePerProcessMode::kEnabled: - mode_feature_.InitAndEnableFeature(features::kSitePerProcess); - break; - case SitePerProcessMode::kIsolatedOrigin: - mode_feature_.InitAndEnableFeatureWithParameters( - features::kIsolateOrigins, - {{features::kIsolateOriginsFieldTrialParamName, - GetTrialOrigin().Serialize()}}); - break; - } - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - InProcessBrowserTest::SetUpCommandLine(command_line); - - // This way the test always sees the same amount of physical memory - // (kLowMemoryDeviceThresholdMB = 512MB), regardless of how much memory is - // available in the testing environment. - command_line->AppendSwitch(switches::kEnableLowEndDeviceMode); - EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB()); - } - - // Some command-line switches override field trials - the tests need to be - // skipped in this case. - bool ShouldSkipBecauseOfConflictingCommandLineSwitches() { - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kSitePerProcess)) - return true; - - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kDisableSiteIsolation)) - return true; - - return false; - } - - void SetUpOnMainThread() override { - InProcessBrowserTest::SetUpOnMainThread(); - - // Initializing the expected embedder origins at runtime is required for - // GetWebstoreLaunchURL(), which needs to have a proper ExtensionsClient - // initialized. -#if !defined(OS_ANDROID) - expected_embedder_origins_.push_back( - url::Origin::Create(GaiaUrls::GetInstance()->gaia_url())); -#endif -#if BUILDFLAG(ENABLE_EXTENSIONS) - expected_embedder_origins_.push_back( - url::Origin::Create(extension_urls::GetWebstoreLaunchURL())); -#endif - } - - protected: - // These are the origins we expect to be returned by - // content::ChildProcessSecurityPolicy::GetIsolatedOrigins() even if - // ContentBrowserClient::ShouldDisableSiteIsolation() returns true. - std::vector<url::Origin> expected_embedder_origins_; - -#if defined(OS_ANDROID) - // On Android we don't expect any trial origins because the 512MB - // physical memory used for testing is below the Android specific - // hardcoded 1024MB memory limit that disables site isolation. - const std::size_t kExpectedTrialOrigins = 0; -#else - // All other platforms expect the single trial origin to be returned because - // they don't have the memory limit that disables site isolation. - const std::size_t kExpectedTrialOrigins = 1; -#endif - - private: - base::test::ScopedFeatureList threshold_feature_; - base::test::ScopedFeatureList mode_feature_; - - DISALLOW_COPY_AND_ASSIGN(SitePerProcessMemoryThresholdBrowserTest); -}; - -using SitePerProcessMemoryThresholdBrowserTestNoIsolation = - SitePerProcessMemoryThresholdBrowserTest; -IN_PROC_BROWSER_TEST_P(SitePerProcessMemoryThresholdBrowserTestNoIsolation, - NoIsolation) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // Isolation should be disabled given the set of parameters used to - // instantiate these tests. - EXPECT_FALSE( - content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites()); -} - -using SitePerProcessMemoryThresholdBrowserTestIsolation = - SitePerProcessMemoryThresholdBrowserTest; -IN_PROC_BROWSER_TEST_P(SitePerProcessMemoryThresholdBrowserTestIsolation, - Isolation) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // Isolation should be enabled given the set of parameters used to - // instantiate these tests. - EXPECT_TRUE(content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites()); -} - -INSTANTIATE_TEST_SUITE_P( - NoIsolation, - SitePerProcessMemoryThresholdBrowserTestNoIsolation, - testing::Values( -#if defined(OS_ANDROID) - // Expect no isolation on Android because 512MB physical memory - // triggered by kEnableLowEndDeviceMode in SetUpCommandLine() is below - // the 1024MB Android specific memory limit which disables site - // isolation for all sites. - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::kNone, SitePerProcessMode::kEnabled}, -#endif - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k768MB, - SitePerProcessMode::kEnabled}, - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::kNone, - SitePerProcessMode::kDisabled}, - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k128MB, - SitePerProcessMode::kDisabled}, - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k768MB, - SitePerProcessMode::kDisabled})); - -INSTANTIATE_TEST_SUITE_P(Isolation, - SitePerProcessMemoryThresholdBrowserTestIsolation, - testing::Values( -#if !defined(OS_ANDROID) - // See the note above regarding why this - // expectation is different on Android. - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::kNone, - SitePerProcessMode::kEnabled}, -#endif - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k128MB, - SitePerProcessMode::kEnabled})); - -using SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin = - SitePerProcessMemoryThresholdBrowserTest; -IN_PROC_BROWSER_TEST_P(SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin, - TrialNoIsolatedOrigin) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - SiteIsolationPolicy::ApplyGlobalIsolatedOrigins(); - - auto* cpsp = content::ChildProcessSecurityPolicy::GetInstance(); - std::vector<url::Origin> isolated_origins = cpsp->GetIsolatedOrigins(); - EXPECT_EQ(expected_embedder_origins_.size(), isolated_origins.size()); - - // Verify that the expected embedder origins are present even though site - // isolation has been disabled and the trial origins should not be present. - EXPECT_THAT(expected_embedder_origins_, - ::testing::IsSubsetOf(isolated_origins)); - - // Verify that the trial origin is not present. - EXPECT_THAT(isolated_origins, - ::testing::Not(::testing::Contains(GetTrialOrigin()))); -} - -using SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin = - SitePerProcessMemoryThresholdBrowserTest; -IN_PROC_BROWSER_TEST_P(SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin, - TrialIsolatedOrigin) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - SiteIsolationPolicy::ApplyGlobalIsolatedOrigins(); - - auto* cpsp = content::ChildProcessSecurityPolicy::GetInstance(); - std::vector<url::Origin> isolated_origins = cpsp->GetIsolatedOrigins(); - EXPECT_EQ(1u + expected_embedder_origins_.size(), isolated_origins.size()); - EXPECT_THAT(expected_embedder_origins_, - ::testing::IsSubsetOf(isolated_origins)); - - // Verify that the trial origin is present. - EXPECT_THAT(isolated_origins, ::testing::Contains(GetTrialOrigin())); -} - -INSTANTIATE_TEST_SUITE_P( - TrialNoIsolatedOrigin, - SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin, - testing::Values( -#if defined(OS_ANDROID) - // The 512MB the test simulates is below the global Android threshold of - // 1024MB, so the test origin should not be isolated. - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::kNone, - SitePerProcessMode::kIsolatedOrigin}, -#endif - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k768MB, - SitePerProcessMode::kIsolatedOrigin})); - -INSTANTIATE_TEST_SUITE_P(TrialIsolatedOrigin, - SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin, - testing::Values( -#if defined(OS_ANDROID) - // See the note above regarding why this - // expectation is different on Android. - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::kNone, - SitePerProcessMode::kIsolatedOrigin}, -#endif - SitePerProcessMemoryThresholdBrowserTestParams{ - SitePerProcessMemoryThreshold::k128MB, - SitePerProcessMode::kIsolatedOrigin})); - -// Helper class to run tests with password-triggered site isolation initialized -// via a regular field trial and *not* via a command-line override. It -// creates a new field trial (with 100% probability of being in the group), and -// initializes the test class's ScopedFeatureList using it. Two derived -// classes below control are used to initialize the feature to either enabled -// or disabled state. -class PasswordSiteIsolationFieldTrialTest - : public SitePerProcessMemoryThresholdBrowserTest { - public: - explicit PasswordSiteIsolationFieldTrialTest(bool should_enable) - : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) { - const std::string kTrialName = "PasswordSiteIsolation"; - const std::string kGroupName = "FooGroup"; // unused - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - feature_list->RegisterFieldTrialOverride( - features::kSiteIsolationForPasswordSites.name, - should_enable - ? base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE - : base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE, - trial.get()); - - feature_list_.InitWithFeatureList(std::move(feature_list)); - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - // This test creates and tests its own field trial group, so it needs to - // disable the field trial testing config, which might define an - // incompatible trial name/group. - command_line->AppendSwitch( - variations::switches::kDisableFieldTrialTestingConfig); - SitePerProcessMemoryThresholdBrowserTest::SetUpCommandLine(command_line); - } - - protected: - base::test::ScopedFeatureList feature_list_; - base::FieldTrialList field_trial_list_; - - private: - DISALLOW_COPY_AND_ASSIGN(PasswordSiteIsolationFieldTrialTest); -}; - -class EnabledPasswordSiteIsolationFieldTrialTest - : public PasswordSiteIsolationFieldTrialTest { - public: - EnabledPasswordSiteIsolationFieldTrialTest() - : PasswordSiteIsolationFieldTrialTest(true /* should_enable */) {} - - private: - DISALLOW_COPY_AND_ASSIGN(EnabledPasswordSiteIsolationFieldTrialTest); -}; - -class DisabledPasswordSiteIsolationFieldTrialTest - : public PasswordSiteIsolationFieldTrialTest { - public: - DisabledPasswordSiteIsolationFieldTrialTest() - : PasswordSiteIsolationFieldTrialTest(false /* should_enable */) {} - - private: - DISALLOW_COPY_AND_ASSIGN(DisabledPasswordSiteIsolationFieldTrialTest); -}; - -IN_PROC_BROWSER_TEST_F(EnabledPasswordSiteIsolationFieldTrialTest, - DISABLED_BelowThreshold) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // If no memory threshold is defined, password site isolation should be - // enabled. - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Define a memory threshold at 768MB. Since this is above the 512MB of - // physical memory that this test simulates, password site isolation should - // now be disabled. - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); - - EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Simulate enabling password site isolation from command line. (Note that - // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine - // internally, and that triggering the feature via chrome://flags follows the - // same override path as well.) - base::test::ScopedFeatureList password_site_isolation_feature; - password_site_isolation_feature.InitAndEnableFeature( - features::kSiteIsolationForPasswordSites); - - // This should override the memory threshold and enable password site - // isolation. - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); -} - -IN_PROC_BROWSER_TEST_F(EnabledPasswordSiteIsolationFieldTrialTest, - DISABLED_AboveThreshold) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // If no memory threshold is defined, password site isolation should be - // enabled. - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Define a memory threshold at 128MB. Since this is below the 512MB of - // physical memory that this test simulates, password site isolation should - // still be enabled. - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); - - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Simulate disabling password site isolation from command line. (Note that - // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine - // internally, and that triggering the feature via chrome://flags follows the - // same override path as well.) This should take precedence over the regular - // field trial behavior. - base::test::ScopedFeatureList password_site_isolation_feature; - password_site_isolation_feature.InitAndDisableFeature( - features::kSiteIsolationForPasswordSites); - EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); -} - -// This test verifies that when password-triggered site isolation is disabled -// via field trials but force-enabled via command line, it takes effect even -// when below the memory threshold. See https://crbug.com/1009828. -IN_PROC_BROWSER_TEST_F(DisabledPasswordSiteIsolationFieldTrialTest, - DISABLED_CommandLineOverride_BelowThreshold) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // Password site isolation should be disabled at this point. - EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Simulate enabling password site isolation from command line. (Note that - // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine - // internally, and that triggering the feature via chrome://flags follows the - // same override path as well.) - base::test::ScopedFeatureList password_site_isolation_feature; - password_site_isolation_feature.InitAndEnableFeature( - features::kSiteIsolationForPasswordSites); - - // If no memory threshold is defined, password site isolation should be - // enabled. - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - // Define a memory threshold at 768MB. This is above the 512MB of physical - // memory that this test simulates, but password site isolation should still - // be enabled, because the test has simulated the user manually overriding - // this feature via command line. - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); - - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); -} - -// Similar to the test above, but with device memory being above memory -// threshold. -IN_PROC_BROWSER_TEST_F(DisabledPasswordSiteIsolationFieldTrialTest, - DISABLED_CommandLineOverride_AboveThreshold) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - base::test::ScopedFeatureList password_site_isolation_feature; - password_site_isolation_feature.InitAndEnableFeature( - features::kSiteIsolationForPasswordSites); - - // If no memory threshold is defined, password site isolation should be - // enabled. - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); - - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); - - EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); -} - -// Helper class to run tests with strict origin isolation initialized via -// a regular field trial and *not* via a command-line override. It creates a -// new field trial (with 100% probability of being in the group), and -// initializes the test class's ScopedFeatureList using it. Two derived -// classes below control are used to initialize the feature to either enabled -// or disabled state. -class StrictOriginIsolationFieldTrialTest - : public SitePerProcessMemoryThresholdBrowserTest { - public: - explicit StrictOriginIsolationFieldTrialTest(bool should_enable) - : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) { - const std::string kTrialName = "StrictOriginIsolation"; - const std::string kGroupName = "FooGroup"; // unused - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - feature_list->RegisterFieldTrialOverride( - features::kStrictOriginIsolation.name, - should_enable - ? base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE - : base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE, - trial.get()); - - feature_list_.InitWithFeatureList(std::move(feature_list)); - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - // This test creates and tests its own field trial group, so it needs to - // disable the field trial testing config, which might define an - // incompatible trial name/group. - command_line->AppendSwitch( - variations::switches::kDisableFieldTrialTestingConfig); - SitePerProcessMemoryThresholdBrowserTest::SetUpCommandLine(command_line); - } - - protected: - base::test::ScopedFeatureList feature_list_; - base::FieldTrialList field_trial_list_; - - private: - DISALLOW_COPY_AND_ASSIGN(StrictOriginIsolationFieldTrialTest); -}; - -class EnabledStrictOriginIsolationFieldTrialTest - : public StrictOriginIsolationFieldTrialTest { - public: - EnabledStrictOriginIsolationFieldTrialTest() - : StrictOriginIsolationFieldTrialTest(true /* should_enable */) {} - - private: - DISALLOW_COPY_AND_ASSIGN(EnabledStrictOriginIsolationFieldTrialTest); -}; - -class DisabledStrictOriginIsolationFieldTrialTest - : public StrictOriginIsolationFieldTrialTest { - public: - DisabledStrictOriginIsolationFieldTrialTest() - : StrictOriginIsolationFieldTrialTest(false /* should_enable */) {} - - private: - DISALLOW_COPY_AND_ASSIGN(DisabledStrictOriginIsolationFieldTrialTest); -}; - -// Check that when strict origin isolation is enabled via a field trial, and -// the device is above the memory threshold, disabling it via the command line -// takes precedence. -IN_PROC_BROWSER_TEST_F(EnabledStrictOriginIsolationFieldTrialTest, - DISABLED_DisabledViaCommandLineOverride) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // If no memory threshold is defined, strict origin isolation should be - // enabled. - EXPECT_TRUE(SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); - - // Define a memory threshold at 128MB. Since this is below the 512MB of - // physical memory that this test simulates, strict origin isolation should - // still be enabled. - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); - EXPECT_TRUE(SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); - - // Simulate disabling strict origin isolation from command line. (Note that - // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine - // internally, and that disabling the feature via chrome://flags follows the - // same override path as well.) - base::test::ScopedFeatureList strict_origin_isolation_feature; - strict_origin_isolation_feature.InitAndDisableFeature( - features::kStrictOriginIsolation); - EXPECT_FALSE(SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); -} - -// This test verifies that when strict origin isolation is disabled -// via field trials but force-enabled via command line, it takes effect even -// when below the memory threshold. See https://crbug.com/1009828. -IN_PROC_BROWSER_TEST_F(DisabledStrictOriginIsolationFieldTrialTest, - DISABLED_EnabledViaCommandLineOverride_BelowThreshold) { - if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) - return; - - // Strict origin isolation should be disabled at this point. - EXPECT_FALSE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); - - // Simulate enabling strict origin isolation from command line. (Note that - // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine - // internally, and that triggering the feature via chrome://flags follows the - // same override path as well.) - base::test::ScopedFeatureList strict_origin_isolation_feature; - strict_origin_isolation_feature.InitAndEnableFeature( - features::kStrictOriginIsolation); - - // If no memory threshold is defined, strict origin isolation should be - // enabled. - EXPECT_TRUE(SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); - - // Define a memory threshold at 768MB. This is above the 512MB of physical - // memory that this test simulates, but strict origin isolation should still - // be enabled, because the test has simulated the user manually overriding - // this feature via command line. - base::test::ScopedFeatureList memory_feature; - memory_feature.InitAndEnableFeatureWithParameters( - features::kSitePerProcessOnlyForHighMemoryClients, - {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); - - EXPECT_TRUE(SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); -} - // Helper class to test window creation from NTP. class OpenWindowFromNTPBrowserTest : public InProcessBrowserTest, public InstantTestBase {
diff --git a/chrome/browser/chromeos/accessibility/speech_monitor.cc b/chrome/browser/chromeos/accessibility/speech_monitor.cc index fc6ded6..2473fcd6 100644 --- a/chrome/browser/chromeos/accessibility/speech_monitor.cc +++ b/chrome/browser/chromeos/accessibility/speech_monitor.cc
@@ -4,6 +4,9 @@ #include "chrome/browser/chromeos/accessibility/speech_monitor.h" +#include "base/strings/pattern.h" +#include "base/task/post_task.h" +#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/tts_controller.h" namespace chromeos { @@ -13,6 +16,8 @@ const char kChromeVoxAlertMessage[] = "Alert"; const char kChromeVoxUpdate1[] = "chrome vox Updated Press chrome vox o,"; const char kChromeVoxUpdate2[] = "n to learn more about chrome vox Next."; + +constexpr int kPrintExpectationDelayMs = 3000; } // namespace SpeechMonitor::SpeechMonitor() { @@ -22,6 +27,8 @@ SpeechMonitor::~SpeechMonitor() { content::TtsController::GetInstance()->SetTtsPlatform( content::TtsPlatform::GetInstance()); + if (!replay_queue_.empty() || !replayed_queue_.empty()) + CHECK(replay_called_) << "Expectation was made, but Replay() not called."; } std::string SpeechMonitor::GetNextUtterance() { @@ -84,7 +91,6 @@ utterance_id, content::TTS_EVENT_END, static_cast<int>(utterance.size()), 0, std::string()); std::move(on_speak_finished).Run(true); - delay_for_last_utterance_MS_ = CalculateUtteranceDelayMS(); time_of_last_utterance_ = std::chrono::steady_clock::now(); } @@ -119,6 +125,7 @@ VLOG(0) << "Speaking " << utterance->GetText(); utterance_queue_.emplace_back(utterance->GetText(), utterance->GetLang()); + delay_for_last_utterance_ms_ = CalculateUtteranceDelayMS(); if (loop_runner_.get()) loop_runner_->Quit(); @@ -151,52 +158,119 @@ } double SpeechMonitor::GetDelayForLastUtteranceMS() { - return delay_for_last_utterance_MS_; + return delay_for_last_utterance_ms_; } SpeechMonitor& SpeechMonitor::ExpectSpeech(const std::string& text) { CHECK(!replay_loop_runner_.get()); - replay_queue_.push_back([this, text]() { - for (auto it = utterance_queue_.begin(); it != utterance_queue_.end(); - it++) { - if (it->text == text) { - utterance_queue_.erase(it); - return true; - } - } - return false; - }); + replay_queue_.push_back({[this, text]() { + for (auto it = utterance_queue_.begin(); + it != utterance_queue_.end(); it++) { + if (it->text == text) { + // Erase all utterances that came before the + // match as well as the match itself. + utterance_queue_.erase( + utterance_queue_.begin(), it + 1); + return true; + } + } + return false; + }, + "ExpectSpeech(\"" + text + "\")"}); + return *this; +} + +SpeechMonitor& SpeechMonitor::ExpectSpeechPattern(const std::string& pattern) { + CHECK(!replay_loop_runner_.get()); + replay_queue_.push_back({[this, pattern]() { + for (auto it = utterance_queue_.begin(); + it != utterance_queue_.end(); it++) { + if (base::MatchPattern(it->text, pattern)) { + // Erase all utterances that came before the + // match as well as the match itself. + utterance_queue_.erase( + utterance_queue_.begin(), it + 1); + return true; + } + } + return false; + }, + "ExpectSpeechPattern(\"" + pattern + "\")"}); + return *this; +} + +SpeechMonitor& SpeechMonitor::ExpectNextSpeechIsNot(const std::string& text) { + CHECK(!replay_loop_runner_.get()); + replay_queue_.push_back({[this, text]() { + if (utterance_queue_.empty()) + return false; + + return text != utterance_queue_.front().text; + }, + "ExpectNextSpeechIsNot(\"" + text + "\")"}); return *this; } SpeechMonitor& SpeechMonitor::Call(std::function<void()> func) { CHECK(!replay_loop_runner_.get()); - replay_queue_.push_back([func]() { - func(); - return true; - }); + replay_queue_.push_back({[func]() { + func(); + return true; + }, + "Call()"}); return *this; } void SpeechMonitor::Replay() { + replay_called_ = true; MaybeContinueReplay(); } void SpeechMonitor::MaybeContinueReplay() { auto it = replay_queue_.begin(); while (it != replay_queue_.end()) { - if ((*it)()) + if (it->first()) { + replayed_queue_.push_back(it->second); it = replay_queue_.erase(it); - else + } else { break; + } } - if (replay_queue_.size() > 0 && !replay_loop_runner_.get()) { - replay_loop_runner_ = new content::MessageLoopRunner(); - replay_loop_runner_->Run(); + if (replay_queue_.size() > 0) { + base::PostDelayedTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&SpeechMonitor::MaybePrintExpectations, + base::Unretained(this)), + base::TimeDelta::FromMilliseconds(kPrintExpectationDelayMs)); + + if (!replay_loop_runner_.get()) { + replay_loop_runner_ = new content::MessageLoopRunner(); + replay_loop_runner_->Run(); + } } else if (replay_queue_.empty() && replay_loop_runner_.get()) { replay_loop_runner_->Quit(); } } +void SpeechMonitor::MaybePrintExpectations() { + if (CalculateUtteranceDelayMS() < kPrintExpectationDelayMs || + replay_queue_.empty()) + return; + + if (last_replay_queue_size_ == replay_queue_.size()) + return; + + last_replay_queue_size_ = replay_queue_.size(); + std::vector<std::string> replay_queue_descriptions; + for (const auto& pair : replay_queue_) + replay_queue_descriptions.push_back(pair.second); + + LOG(ERROR) << "Still waiting for expectation(s).\n" + << "Unsatisfied expectations...\n" + << base::JoinString(replay_queue_descriptions, "\n") << "\n\n\n" + << "Satisfied expectations...\n" + << base::JoinString(replayed_queue_, "\n"); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/accessibility/speech_monitor.h b/chrome/browser/chromeos/accessibility/speech_monitor.h index 54ecd57..6e58ae70 100644 --- a/chrome/browser/chromeos/accessibility/speech_monitor.h +++ b/chrome/browser/chromeos/accessibility/speech_monitor.h
@@ -61,6 +61,8 @@ // Adds an expectation of spoken text. SpeechMonitor& ExpectSpeech(const std::string& text); + SpeechMonitor& ExpectSpeechPattern(const std::string& pattern); + SpeechMonitor& ExpectNextSpeechIsNot(const std::string& text); // Adds a call to be included in replay. SpeechMonitor& Call(std::function<void()> func); @@ -72,6 +74,8 @@ double GetDelayForLastUtteranceMS(); private: + typedef std::pair<std::function<bool()>, std::string> ReplayArgs; + // TtsPlatform implementation. bool PlatformImplAvailable() override; void Speak(int utterance_id, @@ -94,6 +98,7 @@ void SetError(const std::string& error) override; void MaybeContinueReplay(); + void MaybePrintExpectations(); scoped_refptr<content::MessageLoopRunner> loop_runner_; // Our list of utterances and specified language. @@ -105,16 +110,25 @@ // Calculates the milliseconds elapsed since the last call to Speak(). double CalculateUtteranceDelayMS(); // Stores the milliseconds elapsed since the last call to Speak(). - double delay_for_last_utterance_MS_; + double delay_for_last_utterance_ms_; // Stores the last time Speak() was called. std::chrono::steady_clock::time_point time_of_last_utterance_; // Queue of expectations to be replayed. - std::vector<std::function<bool()>> replay_queue_; + std::vector<ReplayArgs> replay_queue_; + + // Queue of expectations already satisfied. + std::vector<std::string> replayed_queue_; // Blocks this test when replaying expectations. scoped_refptr<content::MessageLoopRunner> replay_loop_runner_; + // Used to track the size of |replay_queue_| for knowing when to print errors. + size_t last_replay_queue_size_ = 0; + + // Whether |Replay| was called. + bool replay_called_ = false; + DISALLOW_COPY_AND_ASSIGN(SpeechMonitor); };
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc index 94160fb..8c3ceec 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_app_list_browsertest.cc
@@ -106,46 +106,32 @@ EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF)); - while (!base::MatchPattern(speech_monitor_.GetNextUtterance(), "Launcher")) { - } - - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Shelf", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Tool bar", speech_monitor_.GetNextUtterance()); - EXPECT_EQ(", window", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Press space on the launcher button in shelf, this opens peeking launcher. - SendKeyPressWithSearch(ui::VKEY_SPACE); - EXPECT_TRUE(base::MatchPattern(speech_monitor_.GetNextUtterance(), - "Search your device,*")); - EXPECT_EQ("Edit text", speech_monitor_.GetNextUtterance()); - EXPECT_EQ(", window", speech_monitor_.GetNextUtterance()); - - // Check that Launcher, partial view state is announced. - EXPECT_EQ("Launcher, partial view", speech_monitor_.GetNextUtterance()); - - // Send a key press to enable keyboard traversal - SendKeyPressWithSearchAndShift(ui::VKEY_TAB); - - // Move focus to expand all apps button; - SendKeyPressWithSearchAndShift(ui::VKEY_TAB); - EXPECT_EQ("Expand to all apps", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Press space on expand arrow to go to fullscreen launcher. - SendKeyPressWithSearch(ui::VKEY_SPACE); - EXPECT_EQ( - "Search your device, apps, and web." - " Use the arrow keys to navigate your apps.", - speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Edit text", speech_monitor_.GetNextUtterance()); - - // Check that Launcher, all apps state is announced. - EXPECT_EQ("Launcher, all apps", speech_monitor_.GetNextUtterance()); + speech_monitor_.ExpectSpeechPattern("Launcher") + .ExpectSpeech("Button") + .ExpectSpeech("Shelf") + .ExpectSpeech("Tool bar") + // Press space on the launcher button in shelf, this opens peeking + // launcher. + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); }) + .ExpectSpeechPattern("Search your device,*") + .ExpectSpeech("Edit text") + // Check that Launcher, partial view state is announced. + .ExpectSpeech("Launcher, partial view") + // Send a key press to enable keyboard traversal + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); }) + // Move focus to expand all apps button; + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); }) + .ExpectSpeech("Expand to all apps") + .ExpectSpeech("Button") + // Press space on expand arrow to go to fullscreen launcher. + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); }) + .ExpectSpeech( + "Search your device, apps, and web." + " Use the arrow keys to navigate your apps.") + .ExpectSpeech("Edit text") + // Check that Launcher, all apps state is announced. + .ExpectSpeech("Launcher, all apps") + .Replay(); } IN_PROC_BROWSER_TEST_P(SpokenFeedbackAppListTest, @@ -195,47 +181,32 @@ EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF)); - while (speech_monitor_.GetNextUtterance() != - "Press Search plus Space to activate") { - } - - // Press space on the launcher button in shelf, this opens peeking launcher. - SendKeyPressWithSearch(ui::VKEY_SPACE); - while (speech_monitor_.GetNextUtterance() != "Launcher, partial view") { - } - - // Move focus to 1st suggestion chip; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Chip 0", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to 2nd suggestion chip; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Chip 1", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to 3rd suggestion chip; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Chip 2", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to expand all apps button; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Expand to all apps", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to app list window; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_TRUE(base::MatchPattern(speech_monitor_.GetNextUtterance(), - "Search your device,*")); + speech_monitor_ + .ExpectSpeech("Press Search plus Space to activate") + // Press space on the launcher button in shelf, this opens peeking + // launcher. + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); }) + .ExpectSpeech("Launcher, partial view") + // Move focus to 1st suggestion chip; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Chip 0") + .ExpectSpeech("Button") + // Move focus to 2nd suggestion chip; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Chip 1") + .ExpectSpeech("Button") + // Move focus to 3rd suggestion chip; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Chip 2") + .ExpectSpeech("Button") + // Move focus to expand all apps button; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Expand to all apps") + .ExpectSpeech("Button") + // Move focus to app list window; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeechPattern("Search your device,*") + .Replay(); } IN_PROC_BROWSER_TEST_P(SpokenFeedbackAppListTest, @@ -248,66 +219,45 @@ EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF)); - while (speech_monitor_.GetNextUtterance() != - "Press Search plus Space to activate") { - } - - // Press space on the launcher button in shelf, this opens peeking launcher. - SendKeyPressWithSearch(ui::VKEY_SPACE); - while (speech_monitor_.GetNextUtterance() != "Launcher, partial view") { - } - - // Send a key press to enable keyboard traversal - SendKeyPressWithSearchAndShift(ui::VKEY_TAB); - - // Move focus to expand all apps button. - SendKeyPressWithSearchAndShift(ui::VKEY_TAB); - while (speech_monitor_.GetNextUtterance() != - "Press Search plus Space to activate") { - } - - // Press space on expand arrow to go to fullscreen launcher. - SendKeyPressWithSearch(ui::VKEY_SPACE); - while (speech_monitor_.GetNextUtterance() != "Launcher, all apps") { - } - - // Move focus to the suggestion chip; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Chip 0", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to 1st app; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Item 0", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to 2nd app; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Item 1", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to 3rd app; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ("Item 2", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - - // Move focus to app list window; - SendKeyPressWithSearch(ui::VKEY_RIGHT); - EXPECT_EQ( - "Search your device, apps, and web. Use the arrow keys to navigate your " - "apps.", - speech_monitor_.GetNextUtterance()); - - // Move focus to search box; - EXPECT_EQ("Edit text", speech_monitor_.GetNextUtterance()); + speech_monitor_ + .ExpectSpeech("Press Search plus Space to activate") + // Press space on the launcher button in shelf, this opens peeking + // launcher. + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); }) + .ExpectSpeech("Launcher, partial view") + // Send a key press to enable keyboard traversal + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); }) + // Move focus to expand all apps button. + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_TAB); }) + .ExpectSpeech("Press Search plus Space to activate") + // Press space on expand arrow to go to fullscreen launcher. + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_SPACE); }) + .ExpectSpeech("Launcher, all apps") + // Move focus to the suggestion chip; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Chip 0") + .ExpectSpeech("Button") + // Move focus to 1st app; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Item 0") + .ExpectSpeech("Button") + // Move focus to 2nd app; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Item 1") + .ExpectSpeech("Button") + // Move focus to 3rd app; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech("Item 2") + .ExpectSpeech("Button") + // Move focus to app list window; + .Call([this]() { SendKeyPressWithSearch(ui::VKEY_RIGHT); }) + .ExpectSpeech( + "Search your device, apps, and web. Use the arrow keys to navigate " + "your " + "apps.") + // Move focus to search box; + .ExpectSpeech("Edit text") + .Replay(); } // TODO(newcomer): reimplement this test once the AppListFocus changes are
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index d3fdf05..7f3e093 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -100,6 +100,12 @@ nullptr, key, false, false, false, true))); } +void LoggedInSpokenFeedbackTest::SendKeyPressWithSearchAndControl( + ui::KeyboardCode key) { + ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( + nullptr, key, true, false, false, true))); +} + void LoggedInSpokenFeedbackTest::SendKeyPressWithSearchAndControlAndShift( ui::KeyboardCode key) { ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( @@ -863,50 +869,62 @@ EnableChromeVox(); ui_test_utils::NavigateToURL( browser(), GURL("data:text/html,<button autofocus>Click me</button>")); - EXPECT_EQ("Web Content", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Click me", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Button", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); + speech_monitor_.ExpectSpeech("Web Content") + .ExpectSpeech("Click me") + .ExpectSpeech("Button") + .ExpectSpeech("Press Search plus Space to activate") - // Move by character through the button. - // Assert that phonetic speech and hints are delayed. - SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); - EXPECT_EQ("L", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("lima", speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); - EXPECT_EQ("I", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("india", speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); - EXPECT_EQ("C", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("charlie", speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); - EXPECT_EQ("K", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("kilo", speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); - EXPECT_EQ("Press Search plus Space to activate", - speech_monitor_.GetNextUtterance()); - EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= - kExpectedPhoneticSpeechAndHintDelayMS); + // Move by character through the button. + // Assert that phonetic speech and hints are delayed. + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); }) + .ExpectSpeech("L") + .ExpectSpeech("lima") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .ExpectSpeech("Press Search plus Space to activate") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); }) + .ExpectSpeech("I") + .ExpectSpeech("india") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .ExpectSpeech("Press Search plus Space to activate") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); }) + .ExpectSpeech("C") + .ExpectSpeech("charlie") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .ExpectSpeech("Press Search plus Space to activate") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .Call([this]() { SendKeyPressWithSearchAndShift(ui::VKEY_RIGHT); }) + .ExpectSpeech("K") + .ExpectSpeech("kilo") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .ExpectSpeech("Press Search plus Space to activate") + .Call([this]() { + EXPECT_TRUE(speech_monitor_.GetDelayForLastUtteranceMS() >= + kExpectedPhoneticSpeechAndHintDelayMS); + }) + .Replay(); } IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, ResetTtsSettings) {
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.h b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.h index dd255a3..62f39f96 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.h +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.h
@@ -31,6 +31,7 @@ void SendKeyPressWithControl(ui::KeyboardCode key); void SendKeyPressWithSearchAndShift(ui::KeyboardCode key); void SendKeyPressWithSearch(ui::KeyboardCode key); + void SendKeyPressWithSearchAndControl(ui::KeyboardCode key); void SendKeyPressWithSearchAndControlAndShift(ui::KeyboardCode key); void SendMouseMoveTo(const gfx::Point& location);
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc index 937c433c..5de117b 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
@@ -101,7 +101,7 @@ << "installation."; net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); pwa_delegate_->GetCookieManager(app_url, profile_) ->SetCanonicalCookie( *net::CanonicalCookie::CreateSanitizedCookie( @@ -317,7 +317,7 @@ // the user try to open old client. net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); pwa_delegate_->GetCookieManager(app_url, profile_) ->SetCanonicalCookie( *net::CanonicalCookie::CreateSanitizedCookie(
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc index 004f33e..cfbebc8 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc
@@ -232,7 +232,7 @@ "true" /* expected_cookie_value */, "https" /* expected_source_scheme */, false /* expected_modify_http_only */, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + net::CookieOptions::SameSiteCookieContext::MakeInclusive(), true /* success */); fake_cookie_manager_->InvokePendingDeleteCookiesCallback( @@ -294,7 +294,7 @@ "true" /* expected_cookie_value */, "https" /* expected_source_scheme */, false /* expected_modify_http_only */, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + net::CookieOptions::SameSiteCookieContext::MakeInclusive(), true /* success */); fake_cookie_manager_->InvokePendingDeleteCookiesCallback( @@ -369,7 +369,7 @@ migrated_to_app_url.GetContent() /* expected_cookie_value */, "https" /* expected_source_scheme */, false /* expected_modify_http_only */, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + net::CookieOptions::SameSiteCookieContext::MakeInclusive(), true /* success */); fake_cookie_manager_->InvokePendingDeleteCookiesCallback(
diff --git a/chrome/browser/chromeos/app_mode/OWNERS b/chrome/browser/chromeos/app_mode/OWNERS index 83d55f9..2c621f1 100644 --- a/chrome/browser/chromeos/app_mode/OWNERS +++ b/chrome/browser/chromeos/app_mode/OWNERS
@@ -1,3 +1,4 @@ +anqing@chromium.org apotapchuk@chromium.org poromov@chromium.org
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc index 3e00b42..9e2c2b6 100644 --- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc +++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
@@ -144,7 +144,7 @@ void OnCompositionBoundsChanged( const std::vector<gfx::Rect>& bounds) override {} void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) override {
diff --git a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc index 1ebdc2f..891c7cd 100644 --- a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc +++ b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc
@@ -39,7 +39,7 @@ void OnCompositionBoundsChanged( const std::vector<gfx::Rect>& bounds) override {} void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) override {}
diff --git a/chrome/browser/chromeos/crostini/crostini_pref_names.cc b/chrome/browser/chromeos/crostini/crostini_pref_names.cc index 35f0220..2f7fb80 100644 --- a/chrome/browser/chromeos/crostini/crostini_pref_names.cc +++ b/chrome/browser/chromeos/crostini/crostini_pref_names.cc
@@ -20,7 +20,6 @@ // Crostini (Called "Linux Apps" in UI). const char kCrostiniEnabled[] = "crostini.enabled"; const char kCrostiniMimeTypes[] = "crostini.mime_types"; -const char kCrostiniRegistry[] = "crostini.registry"; // List of USB devices with their system guid, a name/description and their // enabled state for use with Crostini. const char kCrostiniSharedUsbDevices[] = "crostini.shared_usb_devices"; @@ -83,7 +82,6 @@ registry->RegisterBooleanPref(kCrostiniEnabled, false); registry->RegisterBooleanPref(kCrostiniMicSharing, true); registry->RegisterDictionaryPref(kCrostiniMimeTypes); - registry->RegisterDictionaryPref(kCrostiniRegistry); registry->RegisterListPref(kCrostiniPortForwarding); registry->RegisterListPref(kCrostiniSharedUsbDevices);
diff --git a/chrome/browser/chromeos/crostini/crostini_pref_names.h b/chrome/browser/chromeos/crostini/crostini_pref_names.h index 3e7909a9..b9c70e1 100644 --- a/chrome/browser/chromeos/crostini/crostini_pref_names.h +++ b/chrome/browser/chromeos/crostini/crostini_pref_names.h
@@ -12,7 +12,6 @@ extern const char kCrostiniEnabled[]; extern const char kCrostiniMimeTypes[]; -extern const char kCrostiniRegistry[]; extern const char kCrostiniSharedUsbDevices[]; extern const char kCrostiniContainers[]; extern const char kCrostiniTerminalSettings[];
diff --git a/chrome/browser/chromeos/crostini/crostini_registry_service.cc b/chrome/browser/chromeos/crostini/crostini_registry_service.cc index e81fe37..22d39a1 100644 --- a/chrome/browser/chromeos/crostini/crostini_registry_service.cc +++ b/chrome/browser/chromeos/crostini/crostini_registry_service.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/chromeos/crostini/crostini_features.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h" +#include "chrome/browser/chromeos/guest_os/guest_os_pref_names.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_syncable_service.h" #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" @@ -46,23 +47,6 @@ constexpr char kCrostiniIconFolder[] = "crostini.icons"; -// Keys for the Dictionary stored in prefs for each app. -constexpr char kAppDesktopFileIdKey[] = "desktop_file_id"; -constexpr char kAppVmNameKey[] = "vm_name"; -constexpr char kAppContainerNameKey[] = "container_name"; -constexpr char kAppCommentKey[] = "comment"; -constexpr char kAppMimeTypesKey[] = "mime_types"; -constexpr char kAppKeywordsKey[] = "keywords"; -constexpr char kAppExecutableFileNameKey[] = "executable_file_name"; -constexpr char kAppNameKey[] = "name"; -constexpr char kAppNoDisplayKey[] = "no_display"; -constexpr char kAppScaledKey[] = "scaled"; -constexpr char kAppPackageIdKey[] = "package_id"; -constexpr char kAppStartupWMClassKey[] = "startup_wm_class"; -constexpr char kAppStartupNotifyKey[] = "startup_notify"; -constexpr char kAppInstallTimeKey[] = "install_time"; -constexpr char kAppLastLaunchTimeKey[] = "last_launch_time"; - constexpr char kCrostiniAppsInstalledHistogram[] = "Crostini.AppsInstalledAtLogin"; @@ -147,24 +131,29 @@ base::Value name, const vm_tools::apps::ApplicationList& app_list) { base::Value pref_registration(base::Value::Type::DICTIONARY); - pref_registration.SetKey(kAppDesktopFileIdKey, + pref_registration.SetKey(guest_os::prefs::kAppDesktopFileIdKey, base::Value(app.desktop_file_id())); - pref_registration.SetKey(kAppVmNameKey, base::Value(app_list.vm_name())); - pref_registration.SetKey(kAppContainerNameKey, + pref_registration.SetKey(guest_os::prefs::kAppVmNameKey, + base::Value(app_list.vm_name())); + pref_registration.SetKey(guest_os::prefs::kAppContainerNameKey, base::Value(app_list.container_name())); - pref_registration.SetKey(kAppNameKey, std::move(name)); - pref_registration.SetKey(kAppCommentKey, ProtoToDictionary(app.comment())); - pref_registration.SetKey(kAppExecutableFileNameKey, + pref_registration.SetKey(guest_os::prefs::kAppNameKey, std::move(name)); + pref_registration.SetKey(guest_os::prefs::kAppCommentKey, + ProtoToDictionary(app.comment())); + pref_registration.SetKey(guest_os::prefs::kAppExecutableFileNameKey, base::Value(app.executable_file_name())); - pref_registration.SetKey(kAppMimeTypesKey, ProtoToList(app.mime_types())); - pref_registration.SetKey(kAppKeywordsKey, + pref_registration.SetKey(guest_os::prefs::kAppMimeTypesKey, + ProtoToList(app.mime_types())); + pref_registration.SetKey(guest_os::prefs::kAppKeywordsKey, LocaleStringsProtoToDictionary(app.keywords())); - pref_registration.SetKey(kAppNoDisplayKey, base::Value(app.no_display())); - pref_registration.SetKey(kAppStartupWMClassKey, + pref_registration.SetKey(guest_os::prefs::kAppNoDisplayKey, + base::Value(app.no_display())); + pref_registration.SetKey(guest_os::prefs::kAppStartupWMClassKey, base::Value(app.startup_wm_class())); - pref_registration.SetKey(kAppStartupNotifyKey, + pref_registration.SetKey(guest_os::prefs::kAppStartupNotifyKey, base::Value(app.startup_notify())); - pref_registration.SetKey(kAppPackageIdKey, base::Value(app.package_id())); + pref_registration.SetKey(guest_os::prefs::kAppPackageIdKey, + base::Value(app.package_id())); return pref_registration; } @@ -211,13 +200,14 @@ if (require_startup_notify && !item.second - .FindKeyOfType(kAppStartupNotifyKey, base::Value::Type::BOOLEAN) + .FindKeyOfType(guest_os::prefs::kAppStartupNotifyKey, + base::Value::Type::BOOLEAN) ->GetBool()) continue; if (need_display) { const base::Value* no_display = item.second.FindKeyOfType( - kAppNoDisplayKey, base::Value::Type::BOOLEAN); + guest_os::prefs::kAppNoDisplayKey, base::Value::Type::BOOLEAN); if (no_display && no_display->GetBool()) continue; } @@ -258,13 +248,13 @@ auto left_iter = left_items.begin(); auto right_iter = right_items.begin(); while (left_iter != left_items.end() && right_iter != right_items.end()) { - if (left_iter->first == kAppInstallTimeKey || - left_iter->first == kAppLastLaunchTimeKey) { + if (left_iter->first == guest_os::prefs::kAppInstallTimeKey || + left_iter->first == guest_os::prefs::kAppLastLaunchTimeKey) { ++left_iter; continue; } - if (right_iter->first == kAppInstallTimeKey || - right_iter->first == kAppLastLaunchTimeKey) { + if (right_iter->first == guest_os::prefs::kAppInstallTimeKey || + right_iter->first == guest_os::prefs::kAppLastLaunchTimeKey) { ++right_iter; continue; } @@ -388,39 +378,44 @@ std::string CrostiniRegistryService::Registration::DesktopFileId() const { if (is_terminal_app_) return std::string(); - return pref_.FindKeyOfType(kAppDesktopFileIdKey, base::Value::Type::STRING) + return pref_ + .FindKeyOfType(guest_os::prefs::kAppDesktopFileIdKey, + base::Value::Type::STRING) ->GetString(); } std::string CrostiniRegistryService::Registration::VmName() const { if (is_terminal_app_) return kCrostiniDefaultVmName; - return pref_.FindKeyOfType(kAppVmNameKey, base::Value::Type::STRING) + return pref_ + .FindKeyOfType(guest_os::prefs::kAppVmNameKey, base::Value::Type::STRING) ->GetString(); } std::string CrostiniRegistryService::Registration::ContainerName() const { if (is_terminal_app_) return kCrostiniDefaultContainerName; - return pref_.FindKeyOfType(kAppContainerNameKey, base::Value::Type::STRING) + return pref_ + .FindKeyOfType(guest_os::prefs::kAppContainerNameKey, + base::Value::Type::STRING) ->GetString(); } std::string CrostiniRegistryService::Registration::Name() const { if (is_terminal_app_) return l10n_util::GetStringUTF8(IDS_CROSTINI_TERMINAL_APP_NAME); - return LocalizedString(kAppNameKey); + return LocalizedString(guest_os::prefs::kAppNameKey); } std::string CrostiniRegistryService::Registration::Comment() const { - return LocalizedString(kAppCommentKey); + return LocalizedString(guest_os::prefs::kAppCommentKey); } std::string CrostiniRegistryService::Registration::ExecutableFileName() const { if (pref_.is_none()) return std::string(); - const base::Value* executable_file_name = - pref_.FindKeyOfType(kAppExecutableFileNameKey, base::Value::Type::STRING); + const base::Value* executable_file_name = pref_.FindKeyOfType( + guest_os::prefs::kAppExecutableFileNameKey, base::Value::Type::STRING); if (!executable_file_name) return std::string(); return executable_file_name->GetString(); @@ -429,8 +424,8 @@ std::set<std::string> CrostiniRegistryService::Registration::MimeTypes() const { if (pref_.is_none()) return {}; - return ListToStringSet( - pref_.FindKeyOfType(kAppMimeTypesKey, base::Value::Type::LIST)); + return ListToStringSet(pref_.FindKeyOfType(guest_os::prefs::kAppMimeTypesKey, + base::Value::Type::LIST)); } std::set<std::string> CrostiniRegistryService::Registration::Keywords() const { @@ -440,14 +435,14 @@ l10n_util::GetStringUTF8(IDS_CROSTINI_TERMINAL_APP_SEARCH_TERMS)); return result; } - return LocalizedList(kAppKeywordsKey); + return LocalizedList(guest_os::prefs::kAppKeywordsKey); } bool CrostiniRegistryService::Registration::NoDisplay() const { if (pref_.is_none()) return false; - const base::Value* no_display = - pref_.FindKeyOfType(kAppNoDisplayKey, base::Value::Type::BOOLEAN); + const base::Value* no_display = pref_.FindKeyOfType( + guest_os::prefs::kAppNoDisplayKey, base::Value::Type::BOOLEAN); if (no_display) return no_display->GetBool(); return false; @@ -458,8 +453,8 @@ return std::string(); if (pref_.is_none()) return std::string(); - const base::Value* package_id = - pref_.FindKeyOfType(kAppPackageIdKey, base::Value::Type::STRING); + const base::Value* package_id = pref_.FindKeyOfType( + guest_os::prefs::kAppPackageIdKey, base::Value::Type::STRING); if (!package_id) return std::string(); return package_id->GetString(); @@ -478,26 +473,26 @@ // desktop files, and it's better to show an error message (which the user can // then Google to learn more) than to just not have an uninstall option at // all. - const base::Value* package_id = - pref_.FindKeyOfType(kAppPackageIdKey, base::Value::Type::STRING); + const base::Value* package_id = pref_.FindKeyOfType( + guest_os::prefs::kAppPackageIdKey, base::Value::Type::STRING); if (package_id) return !package_id->GetString().empty(); return false; } base::Time CrostiniRegistryService::Registration::InstallTime() const { - return GetTime(pref_, kAppInstallTimeKey); + return GetTime(pref_, guest_os::prefs::kAppInstallTimeKey); } base::Time CrostiniRegistryService::Registration::LastLaunchTime() const { - return GetTime(pref_, kAppLastLaunchTimeKey); + return GetTime(pref_, guest_os::prefs::kAppLastLaunchTimeKey); } bool CrostiniRegistryService::Registration::IsScaled() const { if (pref_.is_none()) return false; - const base::Value* scaled = - pref_.FindKeyOfType(kAppScaledKey, base::Value::Type::BOOLEAN); + const base::Value* scaled = pref_.FindKeyOfType( + guest_os::prefs::kAppScaledKey, base::Value::Type::BOOLEAN); if (!scaled) return false; return scaled->GetBool(); @@ -587,13 +582,14 @@ const std::string* window_app_id, const std::string* window_startup_id) { const base::DictionaryValue* apps = - prefs_->GetDictionary(prefs::kCrostiniRegistry); + prefs_->GetDictionary(guest_os::prefs::kGuestOsRegistry); std::string app_id; if (window_startup_id) { // TODO(timloh): We should use a value that is unique so we can handle // an app installed in multiple containers. - if (FindAppId(apps, kAppDesktopFileIdKey, *window_startup_id, &app_id, + if (FindAppId(apps, guest_os::prefs::kAppDesktopFileIdKey, + *window_startup_id, &app_id, true) == FindAppIdResult::UniqueMatch) return app_id; LOG(ERROR) << "Startup ID was set to '" << *window_startup_id @@ -607,8 +603,8 @@ // Wayland apps won't be prefixed with org.chromium.termina. if (!base::StartsWith(*window_app_id, kCrostiniWindowAppIdPrefix, base::CompareCase::SENSITIVE)) { - if (FindAppId(apps, kAppDesktopFileIdKey, *window_app_id, &app_id) == - FindAppIdResult::UniqueMatch) { + if (FindAppId(apps, guest_os::prefs::kAppDesktopFileIdKey, *window_app_id, + &app_id) == FindAppIdResult::UniqueMatch) { return app_id; } return kCrostiniAppIdPrefix + *window_app_id; @@ -625,20 +621,20 @@ // If an app had StartupWMClass set to the given WM class, use that, // otherwise look for a desktop file id matching the WM class. base::StringPiece key = suffix.substr(strlen(kWMClassPrefix)); - FindAppIdResult result = FindAppId(apps, kAppStartupWMClassKey, key, &app_id, - false /* require_startup_notification */, - true /* need_display */); + FindAppIdResult result = FindAppId( + apps, guest_os::prefs::kAppStartupWMClassKey, key, &app_id, + false /* require_startup_notification */, true /* need_display */); if (result == FindAppIdResult::UniqueMatch) return app_id; if (result == FindAppIdResult::NonUniqueMatch) return kCrostiniAppIdPrefix + *window_app_id; - if (FindAppId(apps, kAppDesktopFileIdKey, key, &app_id) == + if (FindAppId(apps, guest_os::prefs::kAppDesktopFileIdKey, key, &app_id) == FindAppIdResult::UniqueMatch) { return app_id; } - if (FindAppId(apps, kAppNameKey, key, &app_id, + if (FindAppId(apps, guest_os::prefs::kAppNameKey, key, &app_id, false /* require_startup_notification */, true /* need_display */, true /* ignore_space */) == FindAppIdResult::UniqueMatch) { @@ -647,7 +643,7 @@ const std::string* app_name = GetAppNameForWMClass(key); if (app_name && - FindAppId(apps, kAppNameKey, *app_name, &app_id, + FindAppId(apps, guest_os::prefs::kAppNameKey, *app_name, &app_id, false /* require_startup_notification */, true /* need_display */) == FindAppIdResult::UniqueMatch) { return app_id; @@ -667,14 +663,14 @@ // TODO(timloh): We need to handle desktop files that have been removed. // For example, running windows with a no-longer-valid app id will try to // use the ExtensionContextMenuModel. - return prefs_->GetDictionary(prefs::kCrostiniRegistry) + return prefs_->GetDictionary(guest_os::prefs::kGuestOsRegistry) ->FindKey(shelf_app_id) != nullptr; } std::map<std::string, CrostiniRegistryService::Registration> CrostiniRegistryService::GetRegisteredApps() const { const base::DictionaryValue* apps = - prefs_->GetDictionary(prefs::kCrostiniRegistry); + prefs_->GetDictionary(guest_os::prefs::kGuestOsRegistry); std::map<std::string, CrostiniRegistryService::Registration> result; for (const auto& item : apps->DictItems()) { result.emplace(item.first, @@ -693,7 +689,7 @@ base::Optional<CrostiniRegistryService::Registration> CrostiniRegistryService::GetRegistration(const std::string& app_id) const { const base::DictionaryValue* apps = - prefs_->GetDictionary(prefs::kCrostiniRegistry); + prefs_->GetDictionary(guest_os::prefs::kGuestOsRegistry); const base::Value* pref_registration = apps->FindKeyOfType(app_id, base::Value::Type::DICTIONARY); @@ -707,7 +703,7 @@ void CrostiniRegistryService::RecordStartupMetrics() { const base::DictionaryValue* apps = - prefs_->GetDictionary(prefs::kCrostiniRegistry); + prefs_->GetDictionary(guest_os::prefs::kGuestOsRegistry); if (!CrostiniFeatures::Get()->IsEnabled(profile_)) return; @@ -718,8 +714,8 @@ if (item.first == GetTerminalId()) continue; - const base::Value* no_display = - item.second.FindKeyOfType(kAppNoDisplayKey, base::Value::Type::BOOLEAN); + const base::Value* no_display = item.second.FindKeyOfType( + guest_os::prefs::kAppNoDisplayKey, base::Value::Type::BOOLEAN); if (no_display && no_display->GetBool()) continue; @@ -788,16 +784,17 @@ std::vector<std::string> removed_apps; // The DictionaryPrefUpdate should be destructed before calling the observer. { - DictionaryPrefUpdate update(prefs_, prefs::kCrostiniRegistry); + DictionaryPrefUpdate update(prefs_, guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* apps = update.Get(); for (const auto& item : apps->DictItems()) { if (item.first == GetTerminalId()) continue; - if (item.second.FindKey(kAppVmNameKey)->GetString() == vm_name && + if (item.second.FindKey(guest_os::prefs::kAppVmNameKey)->GetString() == + vm_name && (container_name.empty() || - item.second.FindKey(kAppContainerNameKey)->GetString() == - container_name)) + item.second.FindKey(guest_os::prefs::kAppContainerNameKey) + ->GetString() == container_name)) removed_apps.push_back(item.first); } for (const std::string& removed_app : removed_apps) { @@ -837,7 +834,7 @@ // The DictionaryPrefUpdate should be destructed before calling the observer. { - DictionaryPrefUpdate update(prefs_, prefs::kCrostiniRegistry); + DictionaryPrefUpdate update(prefs_, guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* apps = update.Get(); for (const App& app : app_list.apps()) { if (app.desktop_file_id().empty()) { @@ -867,19 +864,22 @@ base::Value* old_last_launch_time = nullptr; if (old_app) { updated_apps.push_back(app_id); - old_install_time = old_app->FindKey(kAppInstallTimeKey); - old_last_launch_time = old_app->FindKey(kAppLastLaunchTimeKey); + old_install_time = + old_app->FindKey(guest_os::prefs::kAppInstallTimeKey); + old_last_launch_time = + old_app->FindKey(guest_os::prefs::kAppLastLaunchTimeKey); } else { inserted_apps.push_back(app_id); } if (old_install_time) - pref_registration.SetKey(kAppInstallTimeKey, old_install_time->Clone()); + pref_registration.SetKey(guest_os::prefs::kAppInstallTimeKey, + old_install_time->Clone()); else - SetCurrentTime(&pref_registration, kAppInstallTimeKey); + SetCurrentTime(&pref_registration, guest_os::prefs::kAppInstallTimeKey); if (old_last_launch_time) { - pref_registration.SetKey(kAppLastLaunchTimeKey, + pref_registration.SetKey(guest_os::prefs::kAppLastLaunchTimeKey, old_last_launch_time->Clone()); } @@ -889,10 +889,10 @@ for (const auto& item : apps->DictItems()) { if (item.first == GetTerminalId()) continue; - if (item.second.FindKey(kAppVmNameKey)->GetString() == + if (item.second.FindKey(guest_os::prefs::kAppVmNameKey)->GetString() == app_list.vm_name() && - item.second.FindKey(kAppContainerNameKey)->GetString() == - app_list.container_name() && + item.second.FindKey(guest_os::prefs::kAppContainerNameKey) + ->GetString() == app_list.container_name() && new_app_ids.find(item.first) == new_app_ids.end()) { removed_apps.push_back(item.first); } @@ -944,19 +944,19 @@ } void CrostiniRegistryService::AppLaunched(const std::string& app_id) { - DictionaryPrefUpdate update(prefs_, prefs::kCrostiniRegistry); + DictionaryPrefUpdate update(prefs_, guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* apps = update.Get(); base::Value* app = apps->FindKey(app_id); if (!app) { DCHECK_EQ(app_id, GetTerminalId()); base::Value pref(base::Value::Type::DICTIONARY); - SetCurrentTime(&pref, kAppLastLaunchTimeKey); + SetCurrentTime(&pref, guest_os::prefs::kAppLastLaunchTimeKey); apps->SetKey(app_id, std::move(pref)); return; } - SetCurrentTime(app, kAppLastLaunchTimeKey); + SetCurrentTime(app, guest_os::prefs::kAppLastLaunchTimeKey); } void CrostiniRegistryService::SetCurrentTime(base::Value* dictionary, @@ -970,7 +970,7 @@ bool scaled) { DCHECK_NE(app_id, GetTerminalId()); - DictionaryPrefUpdate update(prefs_, prefs::kCrostiniRegistry); + DictionaryPrefUpdate update(prefs_, guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* apps = update.Get(); base::Value* app = apps->FindKey(app_id); @@ -980,7 +980,7 @@ << app_id << " that doesn't exist in the registry."; return; } - app->SetKey(kAppScaledKey, base::Value(scaled)); + app->SetKey(guest_os::prefs::kAppScaledKey, base::Value(scaled)); } void CrostiniRegistryService::RequestIcon(const std::string& app_id, @@ -1059,7 +1059,8 @@ void CrostiniRegistryService::MigrateTerminal() const { // Remove the old terminal from the registry. - DictionaryPrefUpdate update(profile_->GetPrefs(), prefs::kCrostiniRegistry); + DictionaryPrefUpdate update(profile_->GetPrefs(), + guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* apps = update.Get(); apps->RemoveKey(GetDeletedTerminalId());
diff --git a/chrome/browser/chromeos/crostini/crostini_registry_service_unittest.cc b/chrome/browser/chromeos/crostini/crostini_registry_service_unittest.cc index 3734538..bac1368 100644 --- a/chrome/browser/chromeos/crostini/crostini_registry_service_unittest.cc +++ b/chrome/browser/chromeos/crostini/crostini_registry_service_unittest.cc
@@ -13,6 +13,7 @@ #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/guest_os/guest_os_pref_names.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/dbus/vm_applications/apps.pb.h" @@ -550,7 +551,8 @@ // Add prefs entry for the deleted terminal. base::DictionaryValue registry; registry.SetKey(GetDeletedTerminalId(), base::DictionaryValue()); - profile()->GetPrefs()->Set(prefs::kCrostiniRegistry, std::move(registry)); + profile()->GetPrefs()->Set(guest_os::prefs::kGuestOsRegistry, + std::move(registry)); // Only current terminal returned. RecreateService(); @@ -560,7 +562,7 @@ // Deleted terminal removed from prefs. EXPECT_FALSE(profile() ->GetPrefs() - ->GetDictionary(prefs::kCrostiniRegistry) + ->GetDictionary(guest_os::prefs::kGuestOsRegistry) ->HasKey(GetDeletedTerminalId())); }
diff --git a/chrome/browser/chromeos/crostini/crostini_test_util.cc b/chrome/browser/chromeos/crostini/crostini_test_util.cc index 76f01aa..e148505 100644 --- a/chrome/browser/chromeos/crostini/crostini_test_util.cc +++ b/chrome/browser/chromeos/crostini/crostini_test_util.cc
@@ -4,9 +4,8 @@ #include "chrome/browser/chromeos/crostini/crostini_test_util.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" +#include "chrome/test/views/chrome_test_views_delegate.h" #include "ui/views/test/scoped_views_test_helper.h" -#include "ui/views/test/test_views_delegate.h" namespace { @@ -15,7 +14,7 @@ // ViewsDelegate to provide context to dialog creation functions which do not // allow InitParams to be set, and pass a null |context| argument to // DialogDelegate::CreateDialogWidget(). -class TestViewsDelegateWithContext : public views::TestViewsDelegate { +class TestViewsDelegateWithContext : public ChromeTestViewsDelegate<> { public: TestViewsDelegateWithContext() {} @@ -27,7 +26,7 @@ views::internal::NativeWidgetDelegate* delegate) override { if (!params->context) params->context = context_; - TestViewsDelegate::OnBeforeWidgetInit(params, delegate); + ChromeTestViewsDelegate::OnBeforeWidgetInit(params, delegate); } private: @@ -47,8 +46,6 @@ views_helper_ = std::make_unique<views::ScopedViewsTestHelper>(std::move(views_delegate)); views_delegate_weak->set_context(views_helper_->GetContext()); - views_delegate_weak->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); } void TearDownViewsEnvironmentForTesting() {
diff --git a/chrome/browser/chromeos/file_manager/crostini_file_tasks_unittest.cc b/chrome/browser/chromeos/file_manager/crostini_file_tasks_unittest.cc index efb6f3f..7cda9db 100644 --- a/chrome/browser/chromeos/file_manager/crostini_file_tasks_unittest.cc +++ b/chrome/browser/chromeos/file_manager/crostini_file_tasks_unittest.cc
@@ -7,6 +7,7 @@ #include "base/files/file_path.h" #include "base/values.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h" +#include "chrome/browser/chromeos/guest_os/guest_os_pref_names.h" #include "chrome/test/base/testing_profile.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" @@ -29,7 +30,7 @@ // crostini.registry {<id>: {container_name: "penguin", name: {"": <name>}, // mime_types: [<mime>,], vm_name: "termina"}} DictionaryPrefUpdate update(profile_.GetPrefs(), - crostini::prefs::kCrostiniRegistry); + guest_os::prefs::kGuestOsRegistry); base::DictionaryValue* registry = update.Get(); base::Value app(base::Value::Type::DICTIONARY); app.SetKey("container_name", base::Value("penguin"));
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 33ecac7..7736a2d0 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -858,7 +858,8 @@ FilesAppBrowserTest, ::testing::Values(TestCase("filesTooltipFocus"), TestCase("filesTooltipMouseOver"), - TestCase("filesTooltipClickHides"))); + TestCase("filesTooltipClickHides"), + TestCase("filesTooltipHidesOnWindowResize"))); WRAPPED_INSTANTIATE_TEST_SUITE_P( FileList, /* file_list.js */
diff --git a/chrome/browser/chromeos/file_manager/file_tasks_browsertest.cc b/chrome/browser/chromeos/file_manager/file_tasks_browsertest.cc index 8ce0f6b..53b36de 100644 --- a/chrome/browser/chromeos/file_manager/file_tasks_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_tasks_browsertest.cc
@@ -96,8 +96,7 @@ public: FileTasksBrowserTestWithMediaApp() { // Enable Media App. - scoped_feature_list_.InitWithFeatures( - {chromeos::features::kMediaApp, blink::features::kFileHandlingAPI}, {}); + scoped_feature_list_.InitWithFeatures({chromeos::features::kMediaApp}, {}); } private:
diff --git a/chrome/browser/chromeos/guest_os/guest_os_pref_names.cc b/chrome/browser/chromeos/guest_os/guest_os_pref_names.cc index e8d20a9..bdda35ed 100644 --- a/chrome/browser/chromeos/guest_os/guest_os_pref_names.cc +++ b/chrome/browser/chromeos/guest_os/guest_os_pref_names.cc
@@ -13,8 +13,28 @@ // shared with. const char kGuestOSPathsSharedToVms[] = "guest_os.paths_shared_to_vms"; +const char kGuestOsRegistry[] = "crostini.registry"; +// Keys for the |kGuestOsRegistry| Dictionary stored in prefs for each app. +const char kAppDesktopFileIdKey[] = "desktop_file_id"; +const char kAppVmNameKey[] = "vm_name"; +const char kAppContainerNameKey[] = "container_name"; +const char kAppCommentKey[] = "comment"; +const char kAppMimeTypesKey[] = "mime_types"; +const char kAppKeywordsKey[] = "keywords"; +const char kAppExecutableFileNameKey[] = "executable_file_name"; +const char kAppNameKey[] = "name"; +const char kAppNoDisplayKey[] = "no_display"; +const char kAppScaledKey[] = "scaled"; +const char kAppPackageIdKey[] = "package_id"; +const char kAppStartupWMClassKey[] = "startup_wm_class"; +const char kAppStartupNotifyKey[] = "startup_notify"; +const char kAppInstallTimeKey[] = "install_time"; +const char kAppLastLaunchTimeKey[] = "last_launch_time"; + void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterDictionaryPref(kGuestOSPathsSharedToVms); + + registry->RegisterDictionaryPref(kGuestOsRegistry); } } // namespace prefs
diff --git a/chrome/browser/chromeos/guest_os/guest_os_pref_names.h b/chrome/browser/chromeos/guest_os/guest_os_pref_names.h index 6138b5b..8d1642be 100644 --- a/chrome/browser/chromeos/guest_os/guest_os_pref_names.h +++ b/chrome/browser/chromeos/guest_os/guest_os_pref_names.h
@@ -13,6 +13,23 @@ extern const char kCrostiniSharedPaths[]; extern const char kGuestOSPathsSharedToVms[]; +extern const char kGuestOsRegistry[]; +extern const char kAppDesktopFileIdKey[]; +extern const char kAppVmNameKey[]; +extern const char kAppContainerNameKey[]; +extern const char kAppCommentKey[]; +extern const char kAppMimeTypesKey[]; +extern const char kAppKeywordsKey[]; +extern const char kAppExecutableFileNameKey[]; +extern const char kAppNameKey[]; +extern const char kAppNoDisplayKey[]; +extern const char kAppScaledKey[]; +extern const char kAppPackageIdKey[]; +extern const char kAppStartupWMClassKey[]; +extern const char kAppStartupNotifyKey[]; +extern const char kAppInstallTimeKey[]; +extern const char kAppLastLaunchTimeKey[]; + void RegisterProfilePrefs(PrefRegistrySimple* registry); } // namespace prefs
diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc index 8d4b291..2b8b356 100644 --- a/chrome/browser/chromeos/input_method/assistive_suggester.cc +++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc
@@ -40,21 +40,21 @@ base::UmaHistogramEnumeration("InputMethod.Assistive.Coverage", type); } -AssistiveType ProposeAssistiveAction(const std::string& text) { +AssistiveType ProposeAssistiveAction(const base::string16& text) { AssistiveType action = AssistiveType::kGenericAction; - if (base::EndsWith(text, kAssistEmailPrefix, + if (base::EndsWith(text, base::UTF8ToUTF16(kAssistEmailPrefix), base::CompareCase::INSENSITIVE_ASCII)) { action = AssistiveType::kPersonalEmail; } - if (base::EndsWith(text, kAssistNamePrefix, + if (base::EndsWith(text, base::UTF8ToUTF16(kAssistNamePrefix), base::CompareCase::INSENSITIVE_ASCII)) { action = AssistiveType::kPersonalName; } - if (base::EndsWith(text, kAssistAddressPrefix, + if (base::EndsWith(text, base::UTF8ToUTF16(kAssistAddressPrefix), base::CompareCase::INSENSITIVE_ASCII)) { action = AssistiveType::kPersonalAddress; } - if (base::EndsWith(text, kAssistPhoneNumberPrefix, + if (base::EndsWith(text, base::UTF8ToUTF16(kAssistPhoneNumberPrefix), base::CompareCase::INSENSITIVE_ASCII)) { action = AssistiveType::kPersonalPhoneNumber; } @@ -102,14 +102,15 @@ return false; } -void AssistiveSuggester::RecordAssitiveCoverageMetrics(const std::string& text, - int cursor_pos, - int anchor_pos) { +void AssistiveSuggester::RecordAssitiveCoverageMetrics( + const base::string16& text, + int cursor_pos, + int anchor_pos) { int len = static_cast<int>(text.length()); if (cursor_pos > 0 && cursor_pos <= len && cursor_pos == anchor_pos && (cursor_pos == len || base::IsAsciiWhitespace(text[cursor_pos]))) { int start_pos = std::max(0, cursor_pos - kMaxTextBeforeCursorLength); - std::string text_before_cursor = + base::string16 text_before_cursor = text.substr(start_pos, cursor_pos - start_pos); AssistiveType action = ProposeAssistiveAction(text_before_cursor); if (action != AssistiveType::kGenericAction) @@ -117,7 +118,7 @@ } } -bool AssistiveSuggester::OnSurroundingTextChanged(const std::string& text, +bool AssistiveSuggester::OnSurroundingTextChanged(const base::string16& text, int cursor_pos, int anchor_pos) { if (suggestion_dismissed_) { @@ -131,7 +132,7 @@ return suggestion_shown_; } -void AssistiveSuggester::Suggest(const std::string& text, +void AssistiveSuggester::Suggest(const base::string16& text, int cursor_pos, int anchor_pos) { int len = static_cast<int>(text.length()); @@ -142,9 +143,10 @@ // |text| could be very long, we get at most |kMaxTextBeforeCursorLength| // characters before cursor. int start_pos = std::max(0, cursor_pos - kMaxTextBeforeCursorLength); - std::string text_before_cursor = + base::string16 text_before_cursor = text.substr(start_pos, cursor_pos - start_pos); - std::string suggestion_text = GetPersonalInfoSuggestion(text_before_cursor); + base::string16 suggestion_text = + GetPersonalInfoSuggestion(text_before_cursor); if (!suggestion_text.empty()) { ShowSuggestion(suggestion_text); suggestion_shown_ = true; @@ -152,18 +154,18 @@ } } -std::string AssistiveSuggester::GetPersonalInfoSuggestion( - const std::string& text) { +base::string16 AssistiveSuggester::GetPersonalInfoSuggestion( + const base::string16& text) { AssistiveType action = ProposeAssistiveAction(text); if (action == AssistiveType::kGenericAction) - return ""; + return base::EmptyString16(); if (action == AssistiveType::kPersonalEmail) - return profile_->GetProfileUserName(); + return base::UTF8ToUTF16(profile_->GetProfileUserName()); auto autofill_profiles = personal_data_manager_->GetProfilesToSuggest(); if (autofill_profiles.empty()) - return ""; + return base::EmptyString16(); // Currently, we are just picking the first candidate, will improve the // strategy in the future. @@ -185,13 +187,14 @@ NOTREACHED(); break; } - return base::UTF16ToUTF8(suggestion); + return suggestion; } -void AssistiveSuggester::ShowSuggestion(const std::string& text) { +void AssistiveSuggester::ShowSuggestion(const base::string16& text) { std::string error; std::vector<InputMethodEngineBase::SegmentInfo> segments; - engine_->SetComposition(context_id_, text.c_str(), 0, 0, 0, segments, &error); + engine_->SetComposition(context_id_, base::UTF16ToUTF8(text).c_str(), 0, 0, 0, + segments, &error); if (!error.empty()) { LOG(ERROR) << "Fail to show suggestion. " << error; }
diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.h b/chrome/browser/chromeos/input_method/assistive_suggester.h index 822a6f2..a9c9ac4f 100644 --- a/chrome/browser/chromeos/input_method/assistive_suggester.h +++ b/chrome/browser/chromeos/input_method/assistive_suggester.h
@@ -32,14 +32,14 @@ // Checks the text before cursor, emits metric if any assistive prefix is // matched. - void RecordAssitiveCoverageMetrics(const std::string& text, + void RecordAssitiveCoverageMetrics(const base::string16& text, int cursor_pos, int anchor_pos); // Called when a surrounding text is changed. // Returns true if it changes the surrounding text, e.g. a suggestion is // generated or dismissed. - bool OnSurroundingTextChanged(const std::string& text, + bool OnSurroundingTextChanged(const base::string16& text, int cursor_pos, int anchor_pos); @@ -50,13 +50,14 @@ private: // Get the suggestion according to |text_before_cursor|. - std::string GetPersonalInfoSuggestion(const std::string& text_before_cursor); + base::string16 GetPersonalInfoSuggestion( + const base::string16& text_before_cursor); // Check if any suggestion text should be displayed according to the // surrounding text information. - void Suggest(const std::string& text, int cursor_pos, int anchor_pos); + void Suggest(const base::string16& text, int cursor_pos, int anchor_pos); - void ShowSuggestion(const std::string& text); + void ShowSuggestion(const base::string16& text); void DismissSuggestion(); InputMethodEngine* const engine_;
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc index 6bb465d..04d624f 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_browsertests.cc
@@ -231,10 +231,11 @@ // onSurroundingTextChange should be fired if SetSurroundingText is called. ExtensionTestMessageListener surrounding_text_listener( "onSurroundingTextChanged", false); - engine_handler->SetSurroundingText("text", // Surrounding text. - 0, // focused position. - 1, // anchor position. - 0); // offset position. + engine_handler->SetSurroundingText( + base::UTF8ToUTF16("text"), // Surrounding text. + 0, // focused position. + 1, // anchor position. + 0); // offset position. ASSERT_TRUE(surrounding_text_listener.WaitUntilSatisfied()); ASSERT_TRUE(surrounding_text_listener.was_satisfied());
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc index d5c601d4..866339c 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
@@ -114,7 +114,7 @@ void OnMenuItemActivated(const std::string& engine_id, const std::string& menu_id) override {} void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset) override {}
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_engine.cc b/chrome/browser/chromeos/input_method/mock_input_method_engine.cc index 8610e103..d311574d 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_engine.cc +++ b/chrome/browser/chromeos/input_method/mock_input_method_engine.cc
@@ -31,7 +31,7 @@ void MockInputMethodEngine::ProcessKeyEvent(const ui::KeyEvent& key_event, KeyEventDoneCallback callback) {} -void MockInputMethodEngine::SetSurroundingText(const std::string& text, +void MockInputMethodEngine::SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) {}
diff --git a/chrome/browser/chromeos/input_method/mock_input_method_engine.h b/chrome/browser/chromeos/input_method/mock_input_method_engine.h index 7ec3b70..15b595a 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_engine.h +++ b/chrome/browser/chromeos/input_method/mock_input_method_engine.h
@@ -35,7 +35,7 @@ void Reset() override; void ProcessKeyEvent(const ui::KeyEvent& key_event, KeyEventDoneCallback callback) override; - void SetSurroundingText(const std::string& text, + void SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) override;
diff --git a/chrome/browser/chromeos/input_method/native_input_method_engine.cc b/chrome/browser/chromeos/input_method/native_input_method_engine.cc index 9d9b9ee..68a1f32 100644 --- a/chrome/browser/chromeos/input_method/native_input_method_engine.cc +++ b/chrome/browser/chromeos/input_method/native_input_method_engine.cc
@@ -195,7 +195,7 @@ void NativeInputMethodEngine::ImeObserver::OnSurroundingTextChanged( const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) {
diff --git a/chrome/browser/chromeos/input_method/native_input_method_engine.h b/chrome/browser/chromeos/input_method/native_input_method_engine.h index 6819964..8fd496f 100644 --- a/chrome/browser/chromeos/input_method/native_input_method_engine.h +++ b/chrome/browser/chromeos/input_method/native_input_method_engine.h
@@ -66,7 +66,7 @@ void OnCompositionBoundsChanged( const std::vector<gfx::Rect>& bounds) override; void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) override;
diff --git a/chrome/browser/chromeos/input_method/native_input_method_engine_browsertest.cc b/chrome/browser/chromeos/input_method/native_input_method_engine_browsertest.cc index 3775ae3..3de17d97 100644 --- a/chrome/browser/chromeos/input_method/native_input_method_engine_browsertest.cc +++ b/chrome/browser/chromeos/input_method/native_input_method_engine_browsertest.cc
@@ -50,7 +50,7 @@ void OnMenuItemActivated(const std::string& engine_id, const std::string& menu_id) override {} void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset) override {}
diff --git a/chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.cc b/chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.cc index abeaf02..9611ec1 100644 --- a/chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.cc +++ b/chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.cc
@@ -46,7 +46,8 @@ AutoEnrollmentCheckScreenView* view, ErrorScreen* error_screen, const base::RepeatingClosure& exit_callback) - : BaseScreen(AutoEnrollmentCheckScreenView::kScreenId), + : BaseScreen(AutoEnrollmentCheckScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), error_screen_(error_screen), exit_callback_(exit_callback),
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc b/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc index 5483921..572f473 100644 --- a/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc +++ b/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc
@@ -110,7 +110,7 @@ EnrollmentScreen::EnrollmentScreen(EnrollmentScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(EnrollmentScreenView::kScreenId), + : BaseScreen(EnrollmentScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { retry_policy_.num_errors_to_ignore = 0;
diff --git a/chrome/browser/chromeos/login/guest_login_browsertest.cc b/chrome/browser/chromeos/login/guest_login_browsertest.cc index 862957e..f8d3bdc1 100644 --- a/chrome/browser/chromeos/login/guest_login_browsertest.cc +++ b/chrome/browser/chromeos/login/guest_login_browsertest.cc
@@ -4,7 +4,10 @@ #include "ash/public/cpp/login_screen_test_api.h" #include "chrome/browser/chromeos/login/test/login_manager_mixin.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" #include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/session_manager/fake_session_manager_client.h" #include "components/user_manager/user_manager.h" @@ -66,6 +69,30 @@ EXPECT_TRUE(user_manager->IsLoggedInAsGuest()); } +IN_PROC_BROWSER_TEST_F(GuestLoginTest, PRE_ExitFullscreenOnSuspend) { + base::RunLoop restart_job_waiter; + FakeSessionManagerClient::Get()->set_restart_job_callback( + restart_job_waiter.QuitClosure()); + + ASSERT_TRUE(ash::LoginScreenTestApi::ClickGuestButton()); + + restart_job_waiter.Run(); + EXPECT_TRUE(FakeSessionManagerClient::Get()->restart_job_argv().has_value()); +} + +IN_PROC_BROWSER_TEST_F(GuestLoginTest, ExitFullscreenOnSuspend) { + login_manager_.WaitForActiveSession(); + BrowserWindow* browser_window = browser()->window(); + browser() + ->exclusive_access_manager() + ->fullscreen_controller() + ->ToggleBrowserFullscreenMode(); + EXPECT_TRUE(browser_window->IsFullscreen()); + FakePowerManagerClient::Get()->SendSuspendImminent( + power_manager::SuspendImminent_Reason_OTHER); + EXPECT_FALSE(browser_window->IsFullscreen()); +} + IN_PROC_BROWSER_TEST_F(GuestLoginWithLoginSwitchesTest, PRE_Login) { base::RunLoop restart_job_waiter; FakeSessionManagerClient::Get()->set_restart_job_callback(
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc index c3b4b65..02e7207 100644 --- a/chrome/browser/chromeos/login/kiosk_browsertest.cc +++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc
@@ -585,7 +585,7 @@ chromeos::WizardController* wizard_controller = chromeos::WizardController::default_controller(); if (wizard_controller) - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); OobeScreenWaiter(GaiaView::kScreenId).Wait(); } @@ -1081,7 +1081,7 @@ ReloadAutolaunchKioskApps(); EXPECT_FALSE(KioskAppManager::Get()->GetAutoLaunchApp().empty()); EXPECT_FALSE(KioskAppManager::Get()->IsAutoLaunchEnabled()); - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); // Wait for the auto launch warning come up. content::WindowedNotificationObserver( @@ -1114,7 +1114,7 @@ ReloadAutolaunchKioskApps(); EXPECT_FALSE(KioskAppManager::Get()->GetAutoLaunchApp().empty()); EXPECT_FALSE(KioskAppManager::Get()->IsAutoLaunchEnabled()); - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); // Wait for the auto launch warning come up. content::WindowedNotificationObserver( @@ -1152,7 +1152,7 @@ GetConsumerKioskModeStatus()); // Wait for the login UI to come up and switch to the kiosk_enable screen. - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); OobeScreenWaiter(GaiaView::kScreenId).Wait(); GetLoginUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.handleAccelerator", base::Value("kiosk_enable")); @@ -1187,7 +1187,7 @@ GetConsumerKioskModeStatus()); // Wait for the login UI to come up and switch to the kiosk_enable screen. - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); OobeScreenWaiter(GaiaView::kScreenId).Wait(); GetLoginUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.handleAccelerator", base::Value("kiosk_enable")); @@ -1216,7 +1216,7 @@ GetConsumerKioskModeStatus()); // Wait for the login UI to come up and switch to the kiosk_enable screen. - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); OobeScreenWaiter(GaiaView::kScreenId).Wait(); GetLoginUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.handleAccelerator", base::Value("kiosk_enable")); @@ -1287,7 +1287,7 @@ ASSERT_TRUE(wizard_controller); wizard_controller->AdvanceToScreen(WelcomeView::kScreenId); ReloadAutolaunchKioskApps(); - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); content::WindowedNotificationObserver( chrome::NOTIFICATION_KIOSK_AUTOLAUNCH_WARNING_VISIBLE, content::NotificationService::AllSources()) @@ -2495,7 +2495,7 @@ // is triggered when switching to login screen. wizard_controller->AdvanceToScreen(WelcomeView::kScreenId); ReloadAutolaunchKioskApps(); - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); EXPECT_FALSE(KioskAppManager::Get()->GetAutoLaunchApp().empty()); EXPECT_FALSE(KioskAppManager::Get()->IsAutoLaunchEnabled());
diff --git a/chrome/browser/chromeos/login/lock/screen_locker_browsertest.cc b/chrome/browser/chromeos/login/lock/screen_locker_browsertest.cc index 7ed62f8..284723d 100644 --- a/chrome/browser/chromeos/login/lock/screen_locker_browsertest.cc +++ b/chrome/browser/chromeos/login/lock/screen_locker_browsertest.cc
@@ -120,7 +120,7 @@ IN_PROC_BROWSER_TEST_F(ScreenLockerTest, TestFullscreenExit) { // 1) If the active browser window is in fullscreen and the fullscreen window // does not have all the pixels (e.g. the shelf is auto hidden instead of - // hidden), locking the screen should not exit fullscreen. The shelf is + // hidden), locking the screen should exit fullscreen. The shelf is // auto hidden when in immersive fullscreen. ScreenLockerTester tester; BrowserWindow* browser_window = browser()->window(); @@ -139,30 +139,23 @@ } { tester.Lock(); - EXPECT_TRUE(browser_window->IsFullscreen()); - EXPECT_FALSE(window_state->GetHideShelfWhenFullscreen()); + EXPECT_FALSE(browser_window->IsFullscreen()); + EXPECT_TRUE(window_state->GetHideShelfWhenFullscreen()); EXPECT_TRUE(tester.IsLocked()); } tester.SetUnlockPassword(user_manager::StubAccountId(), "pass"); tester.UnlockWithPassword(user_manager::StubAccountId(), "pass"); EXPECT_FALSE(tester.IsLocked()); - { - FullscreenNotificationObserver fullscreen_waiter(browser()); - browser() - ->exclusive_access_manager() - ->fullscreen_controller() - ->ToggleBrowserFullscreenMode(); - fullscreen_waiter.Wait(); - EXPECT_FALSE(browser_window->IsFullscreen()); - } + EXPECT_FALSE(browser_window->IsFullscreen()); // Browser window should be activated after screen locker is gone. Otherwise, // the rest of the test would fail. ASSERT_EQ(window_state, ash::WindowState::ForActiveWindow()); - // 2) If the active browser window is in fullscreen and the fullscreen window - // has all of the pixels, locking the screen should exit fullscreen. The - // fullscreen window has all of the pixels when in tab fullscreen. + // 2) Similar to 1) if the active browser window is in fullscreen and the + // fullscreen window has all of the pixels, locking the screen should exit + // fullscreen. The fullscreen window has all of the pixels when in tab + // fullscreen. { FullscreenNotificationObserver fullscreen_waiter(browser()); content::WebContents* web_contents =
diff --git a/chrome/browser/chromeos/login/login_manager_test.cc b/chrome/browser/chromeos/login/login_manager_test.cc index f6a5f13..f6c00143 100644 --- a/chrome/browser/chromeos/login/login_manager_test.cc +++ b/chrome/browser/chromeos/login/login_manager_test.cc
@@ -34,22 +34,6 @@ namespace chromeos { -namespace { - -UserContext CreateUserContext(const AccountId& account_id) { - UserContext user_context(user_manager::UserType::USER_TYPE_REGULAR, - account_id); - user_context.SetKey(Key("password")); - if (account_id.GetUserEmail() == FakeGaiaMixin::kEnterpriseUser1) { - user_context.SetRefreshToken(FakeGaiaMixin::kTestRefreshToken1); - } else if (account_id.GetUserEmail() == FakeGaiaMixin::kEnterpriseUser2) { - user_context.SetRefreshToken(FakeGaiaMixin::kTestRefreshToken2); - } - return user_context; -} - -} // namespace - LoginManagerTest::LoginManagerTest(bool should_launch_browser, bool should_initialize_webui) : should_launch_browser_(should_launch_browser), @@ -93,8 +77,26 @@ ListPrefUpdate users_pref(g_browser_process->local_state(), "LoggedInUsers"); users_pref->AppendIfNotPresent( std::make_unique<base::Value>(account_id.GetUserEmail())); - if (user_manager::UserManager::IsInitialized()) + if (user_manager::UserManager::IsInitialized()) { user_manager::known_user::SaveKnownUser(account_id); + user_manager::UserManager::Get()->SaveUserOAuthStatus( + account_id, user_manager::User::OAUTH2_TOKEN_STATUS_VALID); + } +} + +constexpr char LoginManagerTest::kPassword[] = "password"; + +UserContext LoginManagerTest::CreateUserContext(const AccountId& account_id, + const std::string& password) { + UserContext user_context(user_manager::UserType::USER_TYPE_REGULAR, + account_id); + user_context.SetKey(Key(password)); + if (account_id.GetUserEmail() == FakeGaiaMixin::kEnterpriseUser1) { + user_context.SetRefreshToken(FakeGaiaMixin::kTestRefreshToken1); + } else if (account_id.GetUserEmail() == FakeGaiaMixin::kEnterpriseUser2) { + user_context.SetRefreshToken(FakeGaiaMixin::kTestRefreshToken2); + } + return user_context; } void LoginManagerTest::SetExpectedCredentials(const UserContext& user_context) { @@ -133,13 +135,13 @@ } void LoginManagerTest::LoginUser(const AccountId& account_id) { - const UserContext user_context = CreateUserContext(account_id); + const UserContext user_context = CreateUserContext(account_id, kPassword); SetExpectedCredentials(user_context); EXPECT_TRUE(TryToLogin(user_context)); } void LoginManagerTest::AddUser(const AccountId& account_id) { - const UserContext user_context = CreateUserContext(account_id); + const UserContext user_context = CreateUserContext(account_id, kPassword); SetExpectedCredentials(user_context); EXPECT_TRUE(AddUserToSession(user_context)); }
diff --git a/chrome/browser/chromeos/login/login_manager_test.h b/chrome/browser/chromeos/login/login_manager_test.h index 93ed3db..b9b8f8bd 100644 --- a/chrome/browser/chromeos/login/login_manager_test.h +++ b/chrome/browser/chromeos/login/login_manager_test.h
@@ -37,6 +37,10 @@ // TODO(dzhioev): Add the ability to register users without a PRE_* test. void RegisterUser(const AccountId& account_id); + static const char kPassword[]; + UserContext CreateUserContext(const AccountId& account_id, + const std::string& password); + // Set expected credentials for next login attempt. void SetExpectedCredentials(const UserContext& user_context);
diff --git a/chrome/browser/chromeos/login/oobe_screen.h b/chrome/browser/chromeos/login/oobe_screen.h index 404a0e3b..33e77f8 100644 --- a/chrome/browser/chromeos/login/oobe_screen.h +++ b/chrome/browser/chromeos/login/oobe_screen.h
@@ -10,6 +10,20 @@ namespace chromeos { +// Lists the priority of the OOBE screens with the highest priority at the top +// and the lowest priority at the bottom. This is used to check if screen +// transition is allowed as only higher or equal priority screen replaces the +// current screen. +enum OobeScreenPriority { + SCREEN_DEVICE_DISABLED = 1, + SCREEN_RESET, + SCREEN_WRONG_HWID, + SCREEN_ENABLE_DEBUGGING, + SCREEN_ADB_SIDELOADING, + SCREEN_UPDATE_REQUIRED, + DEFAULT = 100 +}; + struct StaticOobeScreenId; // Identifiers an OOBE screen.
diff --git a/chrome/browser/chromeos/login/password_change_browsertest.cc b/chrome/browser/chromeos/login/password_change_browsertest.cc index 1964b63..c287572 100644 --- a/chrome/browser/chromeos/login/password_change_browsertest.cc +++ b/chrome/browser/chromeos/login/password_change_browsertest.cc
@@ -36,7 +36,6 @@ constexpr char kTestUser[] = "test-user1@gmail.com"; constexpr char kTestUserGaiaId[] = "test-user1@gmail.com"; -constexpr char kPassword[] = "test user password"; // Used to wait for session manager to become active.
diff --git a/chrome/browser/chromeos/login/profile_auth_data.cc b/chrome/browser/chromeos/login/profile_auth_data.cc index 5dded41..e30044c 100644 --- a/chrome/browser/chromeos/login/profile_auth_data.cc +++ b/chrome/browser/chromeos/login/profile_auth_data.cc
@@ -89,7 +89,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( cookie, "https", options, base::BindOnce(&OnCookieSet, cookie_completion_callback));
diff --git a/chrome/browser/chromeos/login/screens/app_downloading_screen.cc b/chrome/browser/chromeos/login/screens/app_downloading_screen.cc index ddacc7b..e638e431 100644 --- a/chrome/browser/chromeos/login/screens/app_downloading_screen.cc +++ b/chrome/browser/chromeos/login/screens/app_downloading_screen.cc
@@ -19,7 +19,8 @@ AppDownloadingScreen::AppDownloadingScreen( AppDownloadingScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(AppDownloadingScreenView::kScreenId), + : BaseScreen(AppDownloadingScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.cc b/chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.cc index 6008f8e3..a62d1b2e 100644 --- a/chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.cc +++ b/chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.cc
@@ -39,7 +39,8 @@ ArcTermsOfServiceScreen::ArcTermsOfServiceScreen( ArcTermsOfServiceScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(ArcTermsOfServiceScreenView::kScreenId), + : BaseScreen(ArcTermsOfServiceScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc index 70533de..fcdf4f1 100644 --- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc +++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
@@ -21,7 +21,8 @@ AssistantOptInFlowScreen::AssistantOptInFlowScreen( AssistantOptInFlowScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(AssistantOptInFlowScreenView::kScreenId), + : BaseScreen(AssistantOptInFlowScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/base_screen.cc b/chrome/browser/chromeos/login/screens/base_screen.cc index f5dcf7cc..cec7c2d 100644 --- a/chrome/browser/chromeos/login/screens/base_screen.cc +++ b/chrome/browser/chromeos/login/screens/base_screen.cc
@@ -8,7 +8,9 @@ namespace chromeos { -BaseScreen::BaseScreen(OobeScreenId screen_id) : screen_id_(screen_id) {} +BaseScreen::BaseScreen(OobeScreenId screen_id, + OobeScreenPriority screen_priority) + : screen_id_(screen_id), screen_priority_(screen_priority) {} BaseScreen::~BaseScreen() {}
diff --git a/chrome/browser/chromeos/login/screens/base_screen.h b/chrome/browser/chromeos/login/screens/base_screen.h index e9735698..35d1c287 100644 --- a/chrome/browser/chromeos/login/screens/base_screen.h +++ b/chrome/browser/chromeos/login/screens/base_screen.h
@@ -21,7 +21,7 @@ // method called just once. class BaseScreen { public: - explicit BaseScreen(OobeScreenId screen_id); + BaseScreen(OobeScreenId screen_id, OobeScreenPriority screen_priority); virtual ~BaseScreen(); // Makes wizard screen visible. @@ -36,6 +36,9 @@ // Returns the identifier of the screen. OobeScreenId screen_id() const { return screen_id_; } + // Returns the priority of the screen. + OobeScreenPriority screen_priority() const { return screen_priority_; } + // Change the configuration for the screen. |configuration| is unowned. virtual void SetConfiguration(base::Value* configuration); @@ -69,6 +72,8 @@ const OobeScreenId screen_id_; + const OobeScreenPriority screen_priority_; + DISALLOW_COPY_AND_ASSIGN(BaseScreen); };
diff --git a/chrome/browser/chromeos/login/screens/demo_preferences_screen.cc b/chrome/browser/chromeos/login/screens/demo_preferences_screen.cc index 55cb1d02..f89ea24 100644 --- a/chrome/browser/chromeos/login/screens/demo_preferences_screen.cc +++ b/chrome/browser/chromeos/login/screens/demo_preferences_screen.cc
@@ -40,7 +40,8 @@ DemoPreferencesScreen::DemoPreferencesScreen( DemoPreferencesScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(DemoPreferencesScreenView::kScreenId), + : BaseScreen(DemoPreferencesScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/demo_setup_screen.cc b/chrome/browser/chromeos/login/screens/demo_setup_screen.cc index 88379c34..45d07f48 100644 --- a/chrome/browser/chromeos/login/screens/demo_setup_screen.cc +++ b/chrome/browser/chromeos/login/screens/demo_setup_screen.cc
@@ -21,7 +21,7 @@ DemoSetupScreen::DemoSetupScreen(DemoSetupScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(DemoSetupScreenView::kScreenId), + : BaseScreen(DemoSetupScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc index d0c90d7b7..952cacc8 100644 --- a/chrome/browser/chromeos/login/screens/device_disabled_screen.cc +++ b/chrome/browser/chromeos/login/screens/device_disabled_screen.cc
@@ -21,7 +21,9 @@ } // namespace DeviceDisabledScreen::DeviceDisabledScreen(DeviceDisabledScreenView* view) - : BaseScreen(DeviceDisabledScreenView::kScreenId), view_(view) { + : BaseScreen(DeviceDisabledScreenView::kScreenId, + OobeScreenPriority::SCREEN_DEVICE_DISABLED), + view_(view) { view_->SetDelegate(this); }
diff --git a/chrome/browser/chromeos/login/screens/discover_screen.cc b/chrome/browser/chromeos/login/screens/discover_screen.cc index c6789c41..df5a9b9 100644 --- a/chrome/browser/chromeos/login/screens/discover_screen.cc +++ b/chrome/browser/chromeos/login/screens/discover_screen.cc
@@ -21,7 +21,7 @@ DiscoverScreen::DiscoverScreen(DiscoverScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(DiscoverScreenView::kScreenId), + : BaseScreen(DiscoverScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.cc b/chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.cc index 3e20072..622d035 100644 --- a/chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.cc +++ b/chrome/browser/chromeos/login/screens/enable_adb_sideloading_screen.cc
@@ -42,7 +42,8 @@ EnableAdbSideloadingScreen::EnableAdbSideloadingScreen( EnableAdbSideloadingScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(EnableAdbSideloadingScreenView::kScreenId), + : BaseScreen(EnableAdbSideloadingScreenView::kScreenId, + OobeScreenPriority::SCREEN_ADB_SIDELOADING), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/enable_debugging_screen.cc b/chrome/browser/chromeos/login/screens/enable_debugging_screen.cc index 799eee2..b37ca847 100644 --- a/chrome/browser/chromeos/login/screens/enable_debugging_screen.cc +++ b/chrome/browser/chromeos/login/screens/enable_debugging_screen.cc
@@ -12,7 +12,8 @@ EnableDebuggingScreen::EnableDebuggingScreen( EnableDebuggingScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(EnableDebuggingScreenView::kScreenId), + : BaseScreen(EnableDebuggingScreenView::kScreenId, + OobeScreenPriority::SCREEN_ENABLE_DEBUGGING), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc index e2a5a90..520462b 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc
@@ -14,7 +14,9 @@ EncryptionMigrationScreen::EncryptionMigrationScreen( EncryptionMigrationScreenView* view) - : BaseScreen(EncryptionMigrationScreenView::kScreenId), view_(view) { + : BaseScreen(EncryptionMigrationScreenView::kScreenId, + OobeScreenPriority::DEFAULT), + view_(view) { DCHECK(view_); if (view_) view_->SetDelegate(this);
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc index 033c0195..e8f0bf1 100644 --- a/chrome/browser/chromeos/login/screens/error_screen.cc +++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -76,7 +76,8 @@ "network-connected"; ErrorScreen::ErrorScreen(ErrorScreenView* view) - : BaseScreen(ErrorScreenView::kScreenId), view_(view) { + : BaseScreen(ErrorScreenView::kScreenId, OobeScreenPriority::DEFAULT), + view_(view) { network_state_informer_ = new NetworkStateInformer(); network_state_informer_->Init(); NetworkHandler::Get()->network_connection_handler()->AddObserver(this);
diff --git a/chrome/browser/chromeos/login/screens/eula_screen.cc b/chrome/browser/chromeos/login/screens/eula_screen.cc index 621bcd9..84925a7 100644 --- a/chrome/browser/chromeos/login/screens/eula_screen.cc +++ b/chrome/browser/chromeos/login/screens/eula_screen.cc
@@ -30,7 +30,7 @@ } // namespace EulaScreen::EulaScreen(EulaView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(EulaView::kScreenId), + : BaseScreen(EulaView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback), password_fetcher_(this) {
diff --git a/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc b/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc index 280577e..58928b1 100644 --- a/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc +++ b/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc
@@ -23,7 +23,8 @@ FingerprintSetupScreen::FingerprintSetupScreen( FingerprintSetupScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(FingerprintSetupScreenView::kScreenId), + : BaseScreen(FingerprintSetupScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/gesture_navigation_screen.cc b/chrome/browser/chromeos/login/screens/gesture_navigation_screen.cc index 5a17953..1639d4e 100644 --- a/chrome/browser/chromeos/login/screens/gesture_navigation_screen.cc +++ b/chrome/browser/chromeos/login/screens/gesture_navigation_screen.cc
@@ -31,7 +31,8 @@ GestureNavigationScreen::GestureNavigationScreen( GestureNavigationScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(GestureNavigationScreenView::kScreenId), + : BaseScreen(GestureNavigationScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/hid_detection_screen.cc b/chrome/browser/chromeos/login/screens/hid_detection_screen.cc index 6d2d260f..0df0610d 100644 --- a/chrome/browser/chromeos/login/screens/hid_detection_screen.cc +++ b/chrome/browser/chromeos/login/screens/hid_detection_screen.cc
@@ -65,7 +65,7 @@ HIDDetectionView* view, CoreOobeView* core_oobe_view, const base::RepeatingClosure& exit_callback) - : BaseScreen(HIDDetectionView::kScreenId), + : BaseScreen(HIDDetectionView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), core_oobe_view_(core_oobe_view), exit_callback_(exit_callback) {
diff --git a/chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.cc b/chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.cc index 89248b8..828ab7d 100644 --- a/chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.cc +++ b/chrome/browser/chromeos/login/screens/kiosk_autolaunch_screen.cc
@@ -14,7 +14,8 @@ KioskAutolaunchScreen::KioskAutolaunchScreen( KioskAutolaunchScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(KioskAutolaunchScreenView::kScreenId), + : BaseScreen(KioskAutolaunchScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/kiosk_enable_screen.cc b/chrome/browser/chromeos/login/screens/kiosk_enable_screen.cc index 46bf276..8d67886b 100644 --- a/chrome/browser/chromeos/login/screens/kiosk_enable_screen.cc +++ b/chrome/browser/chromeos/login/screens/kiosk_enable_screen.cc
@@ -23,7 +23,7 @@ KioskEnableScreen::KioskEnableScreen( KioskEnableScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(KioskEnableScreenView::kScreenId), + : BaseScreen(KioskEnableScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc b/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc index 13bc9fc..14bc36a 100644 --- a/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc +++ b/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc
@@ -28,7 +28,8 @@ MarketingOptInScreenView* view, bool is_fullscreen, const base::RepeatingClosure& exit_callback) - : BaseScreen(MarketingOptInScreenView::kScreenId), + : BaseScreen(MarketingOptInScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), is_fullscreen_(is_fullscreen), exit_callback_(exit_callback) {
diff --git a/chrome/browser/chromeos/login/screens/multidevice_setup_screen.cc b/chrome/browser/chromeos/login/screens/multidevice_setup_screen.cc index 1d48c4b9a..1fc9600 100644 --- a/chrome/browser/chromeos/login/screens/multidevice_setup_screen.cc +++ b/chrome/browser/chromeos/login/screens/multidevice_setup_screen.cc
@@ -27,7 +27,8 @@ MultiDeviceSetupScreen::MultiDeviceSetupScreen( MultiDeviceSetupScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(MultiDeviceSetupScreenView::kScreenId), + : BaseScreen(MultiDeviceSetupScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/network_screen.cc b/chrome/browser/chromeos/login/screens/network_screen.cc index 7a9d426..88f896b 100644 --- a/chrome/browser/chromeos/login/screens/network_screen.cc +++ b/chrome/browser/chromeos/login/screens/network_screen.cc
@@ -38,7 +38,7 @@ NetworkScreen::NetworkScreen(NetworkScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(NetworkScreenView::kScreenId), + : BaseScreen(NetworkScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback), network_state_helper_(std::make_unique<login::NetworkStateHelper>()) {
diff --git a/chrome/browser/chromeos/login/screens/packaged_license_screen.cc b/chrome/browser/chromeos/login/screens/packaged_license_screen.cc index b62050f..5cbea037 100644 --- a/chrome/browser/chromeos/login/screens/packaged_license_screen.cc +++ b/chrome/browser/chromeos/login/screens/packaged_license_screen.cc
@@ -18,7 +18,7 @@ PackagedLicenseScreen::PackagedLicenseScreen( PackagedLicenseView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(PackagedLicenseView::kScreenId), + : BaseScreen(PackagedLicenseView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { if (view_)
diff --git a/chrome/browser/chromeos/login/screens/recommend_apps_screen.cc b/chrome/browser/chromeos/login/screens/recommend_apps_screen.cc index f315165..47acbf8 100644 --- a/chrome/browser/chromeos/login/screens/recommend_apps_screen.cc +++ b/chrome/browser/chromeos/login/screens/recommend_apps_screen.cc
@@ -12,7 +12,8 @@ RecommendAppsScreen::RecommendAppsScreen( RecommendAppsScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(RecommendAppsScreenView::kScreenId), + : BaseScreen(RecommendAppsScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.cc b/chrome/browser/chromeos/login/screens/reset_screen.cc index 33107d5..5413915 100644 --- a/chrome/browser/chromeos/login/screens/reset_screen.cc +++ b/chrome/browser/chromeos/login/screens/reset_screen.cc
@@ -151,7 +151,7 @@ ResetScreen::ResetScreen(ResetView* view, ErrorScreen* error_screen, const base::RepeatingClosure& exit_callback) - : BaseScreen(ResetView::kScreenId), + : BaseScreen(ResetView::kScreenId, OobeScreenPriority::SCREEN_RESET), view_(view), error_screen_(error_screen), exit_callback_(exit_callback),
diff --git a/chrome/browser/chromeos/login/screens/supervision_transition_screen.cc b/chrome/browser/chromeos/login/screens/supervision_transition_screen.cc index b2e98b5..19e63a02 100644 --- a/chrome/browser/chromeos/login/screens/supervision_transition_screen.cc +++ b/chrome/browser/chromeos/login/screens/supervision_transition_screen.cc
@@ -11,7 +11,8 @@ SupervisionTransitionScreen::SupervisionTransitionScreen( SupervisionTransitionScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(SupervisionTransitionScreenView::kScreenId), + : BaseScreen(SupervisionTransitionScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { if (view_)
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc b/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc index d3c4881..72e903d7 100644 --- a/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc +++ b/chrome/browser/chromeos/login/screens/sync_consent_browsertest.cc
@@ -120,8 +120,7 @@ } void LoginToSyncConsentScreen() { - WizardController::default_controller()->SkipToLoginForTesting( - LoginScreenContext()); + WizardController::default_controller()->SkipToLoginForTesting(); WaitForGaiaPageEvent("ready"); LoginDisplayHost::default_host() ->GetOobeUI()
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc index 851acfa..377654a7 100644 --- a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc +++ b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
@@ -69,7 +69,7 @@ SyncConsentScreen::SyncConsentScreen( SyncConsentScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(SyncConsentScreenView::kScreenId), + : BaseScreen(SyncConsentScreenView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc b/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc index 0e95480..386d0bc 100644 --- a/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc +++ b/chrome/browser/chromeos/login/screens/terms_of_service_screen.cc
@@ -39,7 +39,8 @@ TermsOfServiceScreen::TermsOfServiceScreen( TermsOfServiceScreenView* view, const ScreenExitCallback& exit_callback) - : BaseScreen(TermsOfServiceScreenView::kScreenId), + : BaseScreen(TermsOfServiceScreenView::kScreenId, + OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/screens/update_required_screen.cc b/chrome/browser/chromeos/login/screens/update_required_screen.cc index 9f8528c..73542812 100644 --- a/chrome/browser/chromeos/login/screens/update_required_screen.cc +++ b/chrome/browser/chromeos/login/screens/update_required_screen.cc
@@ -41,7 +41,8 @@ UpdateRequiredScreen::UpdateRequiredScreen(UpdateRequiredView* view, ErrorScreen* error_screen) - : BaseScreen(UpdateRequiredView::kScreenId), + : BaseScreen(UpdateRequiredView::kScreenId, + OobeScreenPriority::SCREEN_UPDATE_REQUIRED), view_(view), error_screen_(error_screen), histogram_helper_(
diff --git a/chrome/browser/chromeos/login/screens/update_screen.cc b/chrome/browser/chromeos/login/screens/update_screen.cc index 1c46ca56..0e4e808 100644 --- a/chrome/browser/chromeos/login/screens/update_screen.cc +++ b/chrome/browser/chromeos/login/screens/update_screen.cc
@@ -49,7 +49,7 @@ UpdateScreen::UpdateScreen(UpdateView* view, ErrorScreen* error_screen, const ScreenExitCallback& exit_callback) - : BaseScreen(UpdateView::kScreenId), + : BaseScreen(UpdateView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), error_screen_(error_screen), exit_callback_(exit_callback),
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index b82082c..48e9803 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -368,7 +368,8 @@ }; UserSelectionScreen::UserSelectionScreen(const std::string& display_type) - : BaseScreen(UserBoardView::kScreenId), display_type_(display_type) {} + : BaseScreen(UserBoardView::kScreenId, OobeScreenPriority::DEFAULT), + display_type_(display_type) {} UserSelectionScreen::~UserSelectionScreen() { proximity_auth::ScreenlockBridge::Get()->SetLockHandler(nullptr);
diff --git a/chrome/browser/chromeos/login/screens/welcome_screen.cc b/chrome/browser/chromeos/login/screens/welcome_screen.cc index b69565f..a96038d3 100644 --- a/chrome/browser/chromeos/login/screens/welcome_screen.cc +++ b/chrome/browser/chromeos/login/screens/welcome_screen.cc
@@ -49,7 +49,7 @@ WelcomeScreen::WelcomeScreen(WelcomeView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(WelcomeView::kScreenId), + : BaseScreen(WelcomeView::kScreenId, OobeScreenPriority::DEFAULT), view_(view), exit_callback_(exit_callback) { if (view_)
diff --git a/chrome/browser/chromeos/login/screens/wrong_hwid_screen.cc b/chrome/browser/chromeos/login/screens/wrong_hwid_screen.cc index d1db3699..649dbaa9 100644 --- a/chrome/browser/chromeos/login/screens/wrong_hwid_screen.cc +++ b/chrome/browser/chromeos/login/screens/wrong_hwid_screen.cc
@@ -11,7 +11,8 @@ WrongHWIDScreen::WrongHWIDScreen(WrongHWIDScreenView* view, const base::RepeatingClosure& exit_callback) - : BaseScreen(WrongHWIDScreenView::kScreenId), + : BaseScreen(WrongHWIDScreenView::kScreenId, + OobeScreenPriority::SCREEN_WRONG_HWID), view_(view), exit_callback_(exit_callback) { DCHECK(view_);
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc index 3c921ba0..2d9249f3 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
@@ -89,7 +89,7 @@ WizardController* wizard_controller = WizardController::default_controller(); ASSERT_TRUE(wizard_controller); - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); OobeScreenWaiter(GaiaView::kScreenId).Wait(); }
diff --git a/chrome/browser/chromeos/login/test/oobe_base_test.cc b/chrome/browser/chromeos/login/test/oobe_base_test.cc index d2e0896..55dd83b 100644 --- a/chrome/browser/chromeos/login/test/oobe_base_test.cc +++ b/chrome/browser/chromeos/login/test/oobe_base_test.cc
@@ -154,7 +154,7 @@ void OobeBaseTest::WaitForSigninScreen() { WizardController* wizard_controller = WizardController::default_controller(); if (wizard_controller) - wizard_controller->SkipToLoginForTesting(LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); WizardController::SkipPostLoginScreensForTesting();
diff --git a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc index 746acb2..2a10ba3 100644 --- a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc +++ b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc
@@ -12,7 +12,7 @@ class FakeLoginDisplayHost::FakeBaseScreen : public chromeos::BaseScreen { public: explicit FakeBaseScreen(chromeos::OobeScreenId screen_id) - : BaseScreen(screen_id) {} + : BaseScreen(screen_id, OobeScreenPriority::DEFAULT) {} ~FakeBaseScreen() override = default;
diff --git a/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc b/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc index 6ff58913..15b82c2 100644 --- a/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "ash/public/cpp/ash_pref_names.h" +#include "ash/public/cpp/login_screen_test_api.h" #include "base/run_loop.h" #include "base/stl_util.h" #include "chrome/browser/chrome_notification_types.h" @@ -10,7 +11,9 @@ #include "chrome/browser/chromeos/login/lock/screen_locker_tester.h" #include "chrome/browser/chromeos/login/login_manager_test.h" #include "chrome/browser/chromeos/login/startup_utils.h" +#include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" +#include "chrome/browser/chromeos/login/test/session_manager_state_waiter.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" #include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" @@ -27,6 +30,19 @@ namespace chromeos { +namespace { + +constexpr char kLoginFormatJS[] = R"({ + var pod = $('pod-row').getPodWithUsername_('%s'); + $('pod-row').focusPod(pod, true); + pod.passwordElement.value = '%s'; + pod.passwordElement.dispatchEvent( + new Event('input', { bubbles: true, cancelable: true })); + pod.submitButton.click(); + })"; + +} // namespace + class UserAddingScreenTest : public LoginManagerTest, public UserAddingScreen::Observer { public: @@ -72,11 +88,26 @@ user->set_can_lock(can_lock); } + void UILoginUser(const AccountId& account_id, const std::string& password) { + // Wait for pods to load. + test::OobeJS().CreateWaiter("$(\'pod-row\').pods.length > 0")->Wait(); + + SetExpectedCredentials(CreateUserContext(account_id, password)); + SessionStateWaiter waiter; + + const std::string login_js = base::StringPrintf( + kLoginFormatJS, account_id.Serialize().c_str(), password.c_str()); + test::ExecuteOobeJS(login_js); + + waiter.Wait(); + } + int user_adding_started() { return user_adding_started_; } int user_adding_finished() { return user_adding_finished_; } std::vector<AccountId> test_users_; + std::vector<AccountId> users_in_session_order_; private: int user_adding_started_ = 0; @@ -112,7 +143,9 @@ EXPECT_EQ(session_manager::SessionState::LOGIN_SECONDARY, session_manager::SessionManager::Get()->session_state()); - UserAddingScreen::Get()->Cancel(); + EXPECT_TRUE(ash::LoginScreenTestApi::IsCancelButtonShown()); + EXPECT_TRUE(ash::LoginScreenTestApi::ClickCancelButton()); + WaitUntilUserAddingFinishedOrCancelled(); content::RunAllPendingInMessageLoop(); EXPECT_EQ(1, user_adding_finished()); @@ -137,20 +170,24 @@ session_manager::SessionManager::Get()->session_state()); LoginUser(test_users_[0]); + users_in_session_order_.push_back(test_users_[0]); EXPECT_EQ(session_manager::SessionState::ACTIVE, session_manager::SessionManager::Get()->session_state()); user_manager::UserManager* user_manager = user_manager::UserManager::Get(); - for (int i = 1; i < 3; ++i) { + const int n = test_users_.size(); + for (int i = 1; i < n; ++i) { UserAddingScreen::Get()->Start(); - content::RunAllPendingInMessageLoop(); + OobeScreenWaiter(OobeScreen::SCREEN_ACCOUNT_PICKER).Wait(); EXPECT_EQ(i, user_adding_started()); EXPECT_EQ(session_manager::SessionState::LOGIN_SECONDARY, session_manager::SessionManager::Get()->session_state()); - AddUser(test_users_[i]); - WaitUntilUserAddingFinishedOrCancelled(); - content::RunAllPendingInMessageLoop(); + EXPECT_TRUE(ash::LoginScreenTestApi::IsCancelButtonShown()); + + UILoginUser(test_users_[n - i], kPassword); + users_in_session_order_.push_back(test_users_[n - i]); + EXPECT_EQ(i, user_adding_finished()); EXPECT_EQ(session_manager::SessionState::ACTIVE, session_manager::SessionManager::Get()->session_state()); @@ -205,21 +242,21 @@ unlock_users = user_manager->GetUnlockUsers(); ASSERT_EQ(3UL, unlock_users.size()); for (int i = 0; i < 3; ++i) - EXPECT_EQ(test_users_[i], unlock_users[i]->GetAccountId()); + EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId()); // This preference doesn't affect list of unlock users. prefs2->SetBoolean(ash::prefs::kEnableAutoScreenLock, true); unlock_users = user_manager->GetUnlockUsers(); ASSERT_EQ(3UL, unlock_users.size()); for (int i = 0; i < 3; ++i) - EXPECT_EQ(test_users_[i], unlock_users[i]->GetAccountId()); + EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId()); // Now one of the users is unable to unlock. SetUserCanLock(user_manager->GetLoggedInUsers()[2], false); unlock_users = user_manager->GetUnlockUsers(); ASSERT_EQ(2UL, unlock_users.size()); for (int i = 0; i < 2; ++i) - EXPECT_EQ(test_users_[i], unlock_users[i]->GetAccountId()); + EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId()); SetUserCanLock(user_manager->GetLoggedInUsers()[2], true); // Now one of the users has not-allowed policy. @@ -231,7 +268,7 @@ unlock_users = user_manager->GetUnlockUsers(); ASSERT_EQ(2UL, unlock_users.size()); for (int i = 0; i < 2; ++i) - EXPECT_EQ(test_users_[i], unlock_users[i]->GetAccountId()); + EXPECT_EQ(users_in_session_order_[i], unlock_users[i]->GetAccountId()); } IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, PRE_ScreenVisibility) { @@ -245,7 +282,10 @@ UserAddingScreen::Get()->Start(); OobeScreenWaiter(OobeScreen::SCREEN_ACCOUNT_PICKER).Wait(); - UserAddingScreen::Get()->Cancel(); + + EXPECT_TRUE(ash::LoginScreenTestApi::IsCancelButtonShown()); + EXPECT_TRUE(ash::LoginScreenTestApi::ClickCancelButton()); + WaitUntilUserAddingFinishedOrCancelled(); content::RunAllPendingInMessageLoop(); @@ -267,7 +307,10 @@ UserAddingScreen::Get()->Start(); OobeScreenWaiter(OobeScreen::SCREEN_ACCOUNT_PICKER).Wait(); - UserAddingScreen::Get()->Cancel(); + + EXPECT_TRUE(ash::LoginScreenTestApi::IsCancelButtonShown()); + EXPECT_TRUE(ash::LoginScreenTestApi::ClickCancelButton()); + WaitUntilUserAddingFinishedOrCancelled(); content::RunAllPendingInMessageLoop(); }
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index 9daeef89..8de5c14 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -424,7 +424,7 @@ if (base::CommandLine::ForCurrentProcess()->HasSwitch( chromeos::switches::kOobeSkipToLogin)) { - SkipToLoginForTesting(LoginScreenContext()); + SkipToLoginForTesting(); } } @@ -607,10 +607,11 @@ if (status == DeviceSettingsService::OWNERSHIP_NONE) ShowPackagedLicenseScreen(); else - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); } -void WizardController::ShowLoginScreen(const LoginScreenContext& context) { +void WizardController::ShowLoginScreen() { + LoginScreenContext context; // This may be triggered by multiply asynchronous events from the JS side. if (login_screen_started_) return; @@ -770,11 +771,10 @@ if (should_show_packaged_license_screen()) SetCurrentScreen(GetScreen(PackagedLicenseView::kScreenId)); else - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); } -void WizardController::SkipToLoginForTesting( - const LoginScreenContext& context) { +void WizardController::SkipToLoginForTesting() { VLOG(1) << "SkipToLoginForTesting."; StartupUtils::MarkEulaAccepted(); @@ -1006,7 +1006,7 @@ else if (WebKioskAppManager::Get()->GetAutoLaunchAccountId().is_valid()) AutoLaunchWebKioskApp(); else - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); } void WizardController::OnEnableAdbSideloadingScreenExit() { @@ -1024,7 +1024,7 @@ void WizardController::OnKioskEnableScreenExit() { OnScreenExit(KioskEnableScreenView::kScreenId, 0 /* exit_code */); - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); } void WizardController::OnKioskAutolaunchScreenExit( @@ -1037,7 +1037,7 @@ AutoLaunchKioskApp(); break; case KioskAutolaunchScreen::Result::CANCELED: - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); break; } } @@ -1068,7 +1068,7 @@ switch (result) { case DemoSetupScreen::Result::COMPLETED: PerformOOBECompletedActions(); - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); break; case DemoSetupScreen::Result::CANCELED: ShowWelcomeScreen(); @@ -1249,7 +1249,7 @@ OnScreenExit(PackagedLicenseView::kScreenId, 0 /* exit_code */); switch (result) { case PackagedLicenseScreen::Result::DONT_ENROLL: - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); break; case PackagedLicenseScreen::Result::ENROLL: ShowEnrollmentScreen(); @@ -1485,7 +1485,7 @@ } else if (screen == NetworkScreenView::kScreenId) { ShowNetworkScreen(); } else if (screen == OobeScreen::SCREEN_SPECIAL_LOGIN) { - ShowLoginScreen(LoginScreenContext()); + ShowLoginScreen(); } else if (screen == PackagedLicenseView::kScreenId) { ShowPackagedLicenseScreen(); } else if (screen == UpdateView::kScreenId) {
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h index 044c4ab0..114a522d 100644 --- a/chrome/browser/chromeos/login/wizard_controller.h +++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -49,7 +49,6 @@ class ErrorScreen; struct Geoposition; class LoginDisplayHost; -class LoginScreenContext; class SimpleGeolocationProvider; class TimeZoneProvider; struct TimeZoneResponseData; @@ -116,7 +115,7 @@ base::Optional<DemoSession::DemoModeConfig> demo_config = base::nullopt); // Advances to login/update screen. Should be used in for testing only. - void SkipToLoginForTesting(const LoginScreenContext& context); + void SkipToLoginForTesting(); void SkipToUpdateForTesting(); // Skip update, go straight to enrollment after EULA is accepted. @@ -198,7 +197,7 @@ void ShowPackagedLicenseScreen(); // Shows images login screen. - void ShowLoginScreen(const LoginScreenContext& context); + void ShowLoginScreen(); // Shows default screen depending on device ownership. void OnOwnershipStatusCheckDone(
diff --git a/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl.cc b/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl.cc index aec7111..c31f521 100644 --- a/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl.cc +++ b/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl.cc
@@ -428,9 +428,8 @@ DCHECK(url_loader_factory); } - device_identity_provider_ = - std::make_unique<chromeos::DeviceIdentityProvider>( - chromeos::DeviceOAuth2TokenServiceFactory::Get()); + device_identity_provider_ = std::make_unique<DeviceIdentityProvider>( + DeviceOAuth2TokenServiceFactory::Get()); device_instance_id_driver_ = std::make_unique<instance_id::InstanceIDDriver>( g_browser_process->gcm_driver());
diff --git a/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl_unittest.cc b/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl_unittest.cc index 2820239..2fb1a80 100644 --- a/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl_unittest.cc +++ b/chrome/browser/chromeos/policy/affiliated_invalidation_service_provider_impl_unittest.cc
@@ -221,7 +221,7 @@ chromeos::CryptohomeClient::InitializeFake(); ASSERT_TRUE(profile_manager_.SetUp()); - chromeos::DeviceOAuth2TokenServiceFactory::Initialize( + DeviceOAuth2TokenServiceFactory::Initialize( test_url_loader_factory_.GetSafeWeakWrapper(), TestingBrowserProcess::GetGlobal()->local_state()); @@ -240,7 +240,7 @@ invalidation::ProfileInvalidationProviderFactory::GetInstance() ->RegisterTestingFactory( BrowserContextKeyedServiceFactory::TestingFactory()); - chromeos::DeviceOAuth2TokenServiceFactory::Shutdown(); + DeviceOAuth2TokenServiceFactory::Shutdown(); chromeos::CryptohomeClient::Shutdown(); chromeos::SystemSaltGetter::Shutdown(); }
diff --git a/chrome/browser/chromeos/policy/device_account_initializer.cc b/chrome/browser/chromeos/policy/device_account_initializer.cc index 97a11dfb..b395d56 100644 --- a/chrome/browser/chromeos/policy/device_account_initializer.cc +++ b/chrome/browser/chromeos/policy/device_account_initializer.cc
@@ -138,7 +138,7 @@ void DeviceAccountInitializer::StoreToken() { handling_request_ = true; - chromeos::DeviceOAuth2TokenServiceFactory::Get()->SetAndSaveRefreshToken( + DeviceOAuth2TokenServiceFactory::Get()->SetAndSaveRefreshToken( robot_refresh_token_, base::AdaptCallbackForRepeating(base::BindOnce( &DeviceAccountInitializer::HandleStoreRobotAuthTokenResult,
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc index f3989be1..ca5c339 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
@@ -184,7 +184,7 @@ // SystemSaltGetter is used in DeviceOAuth2TokenService. chromeos::SystemSaltGetter::Initialize(); - chromeos::DeviceOAuth2TokenServiceFactory::Initialize( + DeviceOAuth2TokenServiceFactory::Initialize( test_url_loader_factory_.GetSafeWeakWrapper(), &local_state_); url_fetcher_response_code_ = net::HTTP_OK; @@ -205,7 +205,7 @@ manager_.reset(); install_attributes_.reset(); - chromeos::DeviceOAuth2TokenServiceFactory::Shutdown(); + DeviceOAuth2TokenServiceFactory::Shutdown(); chromeos::SystemSaltGetter::Shutdown(); TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr); @@ -685,8 +685,8 @@ // Verify the state only if the task is not yet failed. // Note that, if the flow is not yet |done_| here, assume that it is // in the "succeeding" flow, so verify here, too. - chromeos::DeviceOAuth2TokenService* token_service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* token_service = + DeviceOAuth2TokenServiceFactory::Get(); // For the refresh token for the robot account to be visible, the robot // account ID must not be empty.
diff --git a/chrome/browser/chromeos/policy/policy_certs_browsertest.cc b/chrome/browser/chromeos/policy/policy_certs_browsertest.cc index b091f1a..8db8830 100644 --- a/chrome/browser/chromeos/policy/policy_certs_browsertest.cc +++ b/chrome/browser/chromeos/policy/policy_certs_browsertest.cc
@@ -580,7 +580,7 @@ chromeos::WizardController* const wizard_controller = chromeos::WizardController::default_controller(); ASSERT_TRUE(wizard_controller); - wizard_controller->SkipToLoginForTesting(chromeos::LoginScreenContext()); + wizard_controller->SkipToLoginForTesting(); content::WindowedNotificationObserver( chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc index 9d6a9c0..2f6efcf 100644 --- a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc +++ b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc
@@ -92,8 +92,7 @@ CRDHostDelegate::CRDHostDelegate() : OAuth2AccessTokenManager::Consumer("crd_host_delegate") {} -CRDHostDelegate::~CRDHostDelegate() { -} +CRDHostDelegate::~CRDHostDelegate() {} bool CRDHostDelegate::HasActiveSession() const { return host_ != nullptr; @@ -108,7 +107,7 @@ return user_manager::UserManager::IsInitialized() && ui::UserActivityDetector::Get() != nullptr && chromeos::ProfileHelper::Get() != nullptr && - chromeos::DeviceOAuth2TokenServiceFactory::Get() != nullptr; + DeviceOAuth2TokenServiceFactory::Get() != nullptr; } bool CRDHostDelegate::IsRunningKiosk() const { @@ -147,8 +146,8 @@ DeviceCommandStartCRDSessionJob::ErrorCallback error_callback) { DCHECK(!oauth_success_callback_); DCHECK(!error_callback_); - chromeos::DeviceOAuth2TokenService* oauth_service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* oauth_service = + DeviceOAuth2TokenServiceFactory::Get(); OAuth2AccessTokenManager::ScopeSet scopes; scopes.insert(GaiaConstants::kGoogleUserInfoEmail); @@ -196,7 +195,7 @@ // Store all parameters for future connect call. base::Value connect_params(base::Value::Type::DICTIONARY); CoreAccountId account_id = - chromeos::DeviceOAuth2TokenServiceFactory::Get()->GetRobotAccountId(); + DeviceOAuth2TokenServiceFactory::Get()->GetRobotAccountId(); // TODO(msarda): This conversion will not be correct once account id is // migrated to be the Gaia ID on ChromeOS. Fix it.
diff --git a/chrome/browser/chromeos/policy/remote_commands/screenshot_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/screenshot_delegate.cc index b66d3f0e..ac23eea 100644 --- a/chrome/browser/chromeos/policy/remote_commands/screenshot_delegate.cc +++ b/chrome/browser/chromeos/policy/remote_commands/screenshot_delegate.cc
@@ -24,8 +24,7 @@ ScreenshotDelegate::ScreenshotDelegate() {} -ScreenshotDelegate::~ScreenshotDelegate() { -} +ScreenshotDelegate::~ScreenshotDelegate() {} bool ScreenshotDelegate::IsScreenshotAllowed() { BrowserPolicyConnectorChromeOS* connector = @@ -52,8 +51,8 @@ std::unique_ptr<UploadJob> ScreenshotDelegate::CreateUploadJob( const GURL& upload_url, UploadJob::Delegate* delegate) { - chromeos::DeviceOAuth2TokenService* device_oauth2_token_service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* device_oauth2_token_service = + DeviceOAuth2TokenServiceFactory::Get(); CoreAccountId robot_account_id = device_oauth2_token_service->GetRobotAccountId();
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc index 010047e..b7432c388 100644 --- a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc +++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc
@@ -1903,21 +1903,29 @@ const std::string required_platform_version_string = chromeos::KioskAppManager::Get() ->GetAutoLaunchAppRequiredPlatformVersion(); - if (required_platform_version_string.empty()) - return false; - - const base::Version required_platfrom_version( - required_platform_version_string); - em::OsUpdateStatus* os_update_status = status->mutable_os_update_status(); - os_update_status->set_new_required_platform_version( - required_platfrom_version.GetString()); const update_engine::StatusResult update_engine_status = chromeos::DBusThreadManager::Get() ->GetUpdateEngineClient() ->GetLastStatus(); + base::Optional<base::Version> required_platform_version; + + if (required_platform_version_string.empty()) { + // If this is non-Kiosk session, the OS is considered as up-to-date if the + // status of UpdateEngineClient is idle. + if (update_engine_status.current_operation() == + update_engine::Operation::IDLE) + required_platform_version = base::Version(platform_version); + } else { + // If this is Kiosk session, |required_platform_version| can be searched + // from the KioskAppClient instance. + required_platform_version = base::Version(required_platform_version_string); + os_update_status->set_new_required_platform_version( + required_platform_version->GetString()); + } + // Get last reboot timestamp. const base::Time last_reboot_timestamp = base::Time::Now() - base::SysInfo::Uptime(); @@ -1934,7 +1942,8 @@ os_update_status->set_last_checked_timestamp( last_checked_timestamp.ToJavaTime()); - if (platform_version == required_platfrom_version) { + if (required_platform_version && + platform_version == *required_platform_version) { os_update_status->set_update_status(em::OsUpdateStatus::OS_UP_TO_DATE); return true; }
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc b/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc index db49b69..dd6aa7c 100644 --- a/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc +++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector_browsertest.cc
@@ -2252,6 +2252,19 @@ } } +TEST_F(DeviceStatusCollectorTest, ReportOsUpdateStatusUpToDate_NonKiosk) { + MockPlatformVersion(kDefaultPlatformVersion); + scoped_testing_cros_settings_.device_settings()->SetBoolean( + chromeos::kReportOsUpdateStatus, true); + GetStatus(); + ASSERT_TRUE(device_status_.has_os_update_status()); + EXPECT_EQ(em::OsUpdateStatus::OS_UP_TO_DATE, + device_status_.os_update_status().update_status()); + ASSERT_TRUE(device_status_.os_update_status().has_last_checked_timestamp()); + ASSERT_TRUE(device_status_.os_update_status().has_last_reboot_timestamp()); + ASSERT_FALSE(device_status_.os_update_status().has_new_platform_version()); +} + TEST_F(DeviceStatusCollectorTest, ReportOsUpdateStatus) { MockPlatformVersion(kDefaultPlatformVersion); scoped_testing_cros_settings_.device_settings()->SetBoolean( @@ -2298,6 +2311,59 @@ device_status_.os_update_status().update_status()); } +TEST_F(DeviceStatusCollectorTest, ReportOsUpdateStatus_NonKiosk) { + MockPlatformVersion(kDefaultPlatformVersion); + scoped_testing_cros_settings_.device_settings()->SetBoolean( + chromeos::kReportOsUpdateStatus, true); + + update_engine::StatusResult update_status; + update_status.set_current_operation(update_engine::Operation::IDLE); + + GetStatus(); + ASSERT_TRUE(device_status_.has_os_update_status()); + EXPECT_EQ(em::OsUpdateStatus::OS_UP_TO_DATE, + device_status_.os_update_status().update_status()); + ASSERT_TRUE(device_status_.os_update_status().has_last_checked_timestamp()); + ASSERT_TRUE(device_status_.os_update_status().has_last_reboot_timestamp()); + ASSERT_FALSE( + device_status_.os_update_status().has_new_required_platform_version()); + + const update_engine::Operation kUpdateEngineOps[] = { + update_engine::Operation::DOWNLOADING, + update_engine::Operation::VERIFYING, + update_engine::Operation::FINALIZING, + }; + + for (size_t i = 0; i < base::size(kUpdateEngineOps); ++i) { + update_status.set_current_operation(kUpdateEngineOps[i]); + update_status.set_new_version("1235.1.2"); + update_engine_client_->PushLastStatus(update_status); + + GetStatus(); + ASSERT_TRUE(device_status_.has_os_update_status()); + EXPECT_EQ(em::OsUpdateStatus::OS_IMAGE_DOWNLOAD_IN_PROGRESS, + device_status_.os_update_status().update_status()); + EXPECT_EQ("1235.1.2", + device_status_.os_update_status().new_platform_version()); + ASSERT_TRUE(device_status_.os_update_status().has_last_checked_timestamp()); + ASSERT_TRUE(device_status_.os_update_status().has_last_reboot_timestamp()); + ASSERT_FALSE( + device_status_.os_update_status().has_new_required_platform_version()); + } + + update_status.set_current_operation( + update_engine::Operation::UPDATED_NEED_REBOOT); + update_engine_client_->PushLastStatus(update_status); + GetStatus(); + ASSERT_TRUE(device_status_.has_os_update_status()); + EXPECT_EQ(em::OsUpdateStatus::OS_UPDATE_NEED_REBOOT, + device_status_.os_update_status().update_status()); + ASSERT_TRUE(device_status_.os_update_status().has_last_checked_timestamp()); + ASSERT_TRUE(device_status_.os_update_status().has_last_reboot_timestamp()); + ASSERT_FALSE( + device_status_.os_update_status().has_new_required_platform_version()); +} + TEST_F(DeviceStatusCollectorTest, NoLastCheckedTimestampByDefault) { MockPlatformVersion(kDefaultPlatformVersion); MockAutoLaunchKioskAppWithRequiredPlatformVersion(
diff --git a/chrome/browser/chromeos/policy/system_log_uploader.cc b/chrome/browser/chromeos/policy/system_log_uploader.cc index 21f0f3f4..5f856ef5 100644 --- a/chrome/browser/chromeos/policy/system_log_uploader.cc +++ b/chrome/browser/chromeos/policy/system_log_uploader.cc
@@ -205,8 +205,8 @@ std::unique_ptr<UploadJob> SystemLogDelegate::CreateUploadJob( const GURL& upload_url, UploadJob::Delegate* delegate) { - chromeos::DeviceOAuth2TokenService* device_oauth2_token_service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* device_oauth2_token_service = + DeviceOAuth2TokenServiceFactory::Get(); CoreAccountId robot_account_id = device_oauth2_token_service->GetRobotAccountId();
diff --git a/chrome/browser/chromeos/printing/printer_error_codes.cc b/chrome/browser/chromeos/printing/printer_error_codes.cc index 0bd0a232..8765b559 100644 --- a/chrome/browser/chromeos/printing/printer_error_codes.cc +++ b/chrome/browser/chromeos/printing/printer_error_codes.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/printing/printer_error_codes.h" #include "printing/backend/cups_jobs.h" +#include "printing/printer_status_chromeos.h" namespace chromeos {
diff --git a/chrome/browser/chromeos/printing/printer_info.h b/chrome/browser/chromeos/printing/printer_info.h index 5fb1c9e..741a117 100644 --- a/chrome/browser/chromeos/printing/printer_info.h +++ b/chrome/browser/chromeos/printing/printer_info.h
@@ -11,15 +11,20 @@ #include "base/callback_forward.h" #include "printing/printer_query_result_chromeos.h" +namespace printing { +struct PrinterStatus; +} // namespace printing + namespace chromeos { -// Callback for basic printer information. |success| indicates if the request -// succeeded at all. |make| represents the printer manufacturer. |model| is -// the printer model. |make_and_model| is the raw printer-make-and-model value -// from the printer. |autoconf| indicates if we think we can compute the -// printer capabilites without a PPD. +// Callback for basic printer information. |result| indicates if the request +// succeeded at all. |status| contains current status. |make| represents the +// printer manufacturer. |model| is the printer model. |make_and_model| is +// the raw printer-make-and-model value from the printer. |autoconf| indicates +// if we think we can compute the printer capabilities without a PPD. using PrinterInfoCallback = - base::OnceCallback<void(::printing::PrinterQueryResult result, + base::OnceCallback<void(printing::PrinterQueryResult result, + const printing::PrinterStatus& status, const std::string& make, const std::string& model, const std::string& make_and_model,
diff --git a/chrome/browser/chromeos/printing/printer_info_cups.cc b/chrome/browser/chromeos/printing/printer_info_cups.cc index b02c70bd..4a4b9a5c 100644 --- a/chrome/browser/chromeos/printing/printer_info_cups.cc +++ b/chrome/browser/chromeos/printing/printer_info_cups.cc
@@ -18,6 +18,7 @@ #include "base/version.h" #include "chrome/browser/chromeos/printing/printer_info.h" #include "printing/backend/cups_jobs.h" +#include "printing/printer_status_chromeos.h" namespace { @@ -32,11 +33,12 @@ const std::array<const char* const, 4> kMultiWordManufacturers{ {"FUJI XEROX", "KODAK FUNAI", "KONICA MINOLTA", "TEXAS INSTRUMENTS"}}; -// Wraps a PrinterQueryResult and a PrinterInfo so that we can use -// PostTaskAndResplyWithResult. +// Wraps several printing data structures so that we can use +// PostTaskAndReplyWithResult(). struct QueryResult { - ::printing::PrinterQueryResult result; - ::printing::PrinterInfo printer_info; + printing::PrinterQueryResult result; + printing::PrinterInfo printer_info; + printing::PrinterStatus printer_status; }; // Enums for Printing.CUPS.HighestIppVersion. Do not delete entries. Keep @@ -141,8 +143,9 @@ const std::string& path, bool encrypted) { QueryResult result; - result.result = ::printing::GetPrinterInfo(host, port, path, encrypted, - &result.printer_info); + result.result = + ::printing::GetPrinterInfo(host, port, path, encrypted, + &result.printer_info, &result.printer_status); if (result.result != ::printing::PrinterQueryResult::SUCCESS) { LOG(ERROR) << "Could not retrieve printer info"; } @@ -156,10 +159,11 @@ const QueryResult& query_result) { const ::printing::PrinterQueryResult& result = query_result.result; const ::printing::PrinterInfo& printer_info = query_result.printer_info; + const ::printing::PrinterStatus& printer_status = query_result.printer_status; if (result != ::printing::PrinterQueryResult::SUCCESS) { VLOG(1) << "Could not reach printer"; - std::move(callback).Run(result, std::string(), std::string(), std::string(), - {}, false); + std::move(callback).Run(result, ::printing::PrinterStatus(), std::string(), + std::string(), std::string(), {}, false); return; } @@ -185,9 +189,10 @@ ToIppVersion(*std::max_element(printer_info.ipp_versions.begin(), printer_info.ipp_versions.end()))); - std::move(callback).Run( - result, make.as_string(), model.as_string(), printer_info.make_and_model, - printer_info.document_formats, IsAutoconf(printer_info)); + std::move(callback).Run(result, printer_status, make.as_string(), + model.as_string(), printer_info.make_and_model, + printer_info.document_formats, + IsAutoconf(printer_info)); } } // namespace
diff --git a/chrome/browser/chromeos/printing/printer_info_stub.cc b/chrome/browser/chromeos/printing/printer_info_stub.cc index 04a34b6..d03b418c0 100644 --- a/chrome/browser/chromeos/printing/printer_info_stub.cc +++ b/chrome/browser/chromeos/printing/printer_info_stub.cc
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/task/post_task.h" #include "base/threading/sequenced_task_runner_handle.h" +#include "printing/printer_status_chromeos.h" namespace chromeos { @@ -19,10 +20,10 @@ DCHECK(!host.empty()); base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), - printing::PrinterQueryResult::UNKNOWN_FAILURE, "Foo", - "Bar", "Foo Bar", std::vector<std::string>{}, false)); + FROM_HERE, base::BindOnce(std::move(callback), + printing::PrinterQueryResult::UNKNOWN_FAILURE, + printing::PrinterStatus(), "Foo", "Bar", + "Foo Bar", std::vector<std::string>{}, false)); } } // namespace chromeos
diff --git a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc index 4b015c5..d5a1d9d 100644 --- a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc +++ b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
@@ -54,6 +54,7 @@ using ::testing::Field; using ::testing::Invoke; using ::testing::Ne; +using ::testing::NiceMock; using ::testing::WithArg; using ::testing::WithArgs; @@ -575,6 +576,16 @@ class SmbServiceWithSmbfsTest : public testing::Test { protected: + // Mojo endpoints owned by the smbfs instance. + struct TestSmbFsInstance { + explicit TestSmbFsInstance( + mojo::PendingReceiver<smbfs::mojom::SmbFs> pending) + : mock_smbfs(std::move(pending)) {} + + MockSmbFsImpl mock_smbfs; + mojo::Remote<smbfs::mojom::SmbFsDelegate> delegate; + }; + SmbServiceWithSmbfsTest() { scoped_feature_list_.InitWithFeatures({features::kSmbFs}, {}); @@ -655,6 +666,63 @@ disk_mount_manager_); } + // Helper function for creating a basic smbfs mount with an empty + // username/password. + std::unique_ptr<TestSmbFsInstance> MountBasicShare( + const std::string& share_path, + const std::string& mount_path, + SmbService::MountResponse callback) { + mojo::Remote<smbfs::mojom::SmbFs> smbfs_remote; + std::unique_ptr<TestSmbFsInstance> instance = + std::make_unique<TestSmbFsInstance>( + smbfs_remote.BindNewPipeAndPassReceiver()); + + smbfs::SmbFsHost::Delegate* smbfs_host_delegate = nullptr; + // Use a NiceMock<> so that the ON_CALL below doesn't complain. + std::unique_ptr<MockSmbFsMounter> mock_mounter = + std::make_unique<NiceMock<MockSmbFsMounter>>(); + + smb_service_->SetSmbFsMounterCreationCallbackForTesting( + base::BindLambdaForTesting([&mock_mounter, &smbfs_host_delegate]( + const std::string& share_path, + const std::string& mount_dir_name, + const SmbFsShare::MountOptions& options, + smbfs::SmbFsHost::Delegate* delegate) + -> std::unique_ptr<smbfs::SmbFsMounter> { + smbfs_host_delegate = delegate; + return std::move(mock_mounter); + })); + + // Use ON_CALL instead of EXPECT_CALL because there might be a failure + // earlier in the mount process and this won't be called. + ON_CALL(*mock_mounter, Mount(_)) + .WillByDefault( + [this, &smbfs_host_delegate, &smbfs_remote, &instance, + &mount_path](smbfs::SmbFsMounter::DoneCallback mount_callback) { + std::move(mount_callback) + .Run(smbfs::mojom::MountError::kOk, + std::make_unique<smbfs::SmbFsHost>( + MakeMountPoint(base::FilePath(mount_path)), + smbfs_host_delegate, std::move(smbfs_remote), + instance->delegate.BindNewPipeAndPassReceiver())); + }); + + base::RunLoop run_loop; + smb_service_->Mount(mount_options_, base::FilePath(share_path), + "" /* username */, "" /* password */, + false /* use_chromad_kerberos */, + false /* should_open_file_manager_after_mount */, + false /* save_credentials */, + base::BindLambdaForTesting( + [&run_loop, &callback](SmbMountResult result) { + std::move(callback).Run(result); + run_loop.Quit(); + })); + run_loop.Run(); + + return instance; + } + content::BrowserTaskEnvironment task_environment_{ content::BrowserTaskEnvironment::REAL_IO_THREAD}; base::test::ScopedFeatureList scoped_feature_list_; @@ -935,93 +1003,26 @@ // Check: It is possible to mount the maximum number of shares. for (size_t i = 0; i < kMaxSmbFsShares; ++i) { - mojo::Remote<smbfs::mojom::SmbFs> smbfs_remote; - MockSmbFsImpl smbfs_impl(smbfs_remote.BindNewPipeAndPassReceiver()); - mojo::Remote<smbfs::mojom::SmbFsDelegate> smbfs_delegate_remote; - - smbfs::SmbFsHost::Delegate* smbfs_host_delegate = nullptr; - std::unique_ptr<MockSmbFsMounter> mock_mounter = - std::make_unique<MockSmbFsMounter>(); - - smb_service_->SetSmbFsMounterCreationCallbackForTesting( - base::BindLambdaForTesting([&mock_mounter, &smbfs_host_delegate]( - const std::string& share_path, - const std::string& mount_dir_name, - const SmbFsShare::MountOptions& options, - smbfs::SmbFsHost::Delegate* delegate) - -> std::unique_ptr<smbfs::SmbFsMounter> { - smbfs_host_delegate = delegate; - return std::move(mock_mounter); - })); - const std::string share_path = std::string(kSharePath) + base::NumberToString(i); const std::string mount_path = std::string(kMountPath) + base::NumberToString(i); - - EXPECT_CALL(*mock_mounter, Mount(_)) - .WillOnce([this, &smbfs_host_delegate, &smbfs_remote, - &smbfs_delegate_remote, - &mount_path](smbfs::SmbFsMounter::DoneCallback callback) { - std::move(callback).Run( - smbfs::mojom::MountError::kOk, - std::make_unique<smbfs::SmbFsHost>( - MakeMountPoint(base::FilePath(mount_path)), - smbfs_host_delegate, std::move(smbfs_remote), - smbfs_delegate_remote.BindNewPipeAndPassReceiver())); - }); - - base::RunLoop run_loop; - smb_service_->Mount( - mount_options_, base::FilePath(share_path), kTestUser, kTestPassword, - false /* use_chromad_kerberos */, - false /* should_open_file_manager_after_mount */, - false /* save_credentials */, - base::BindLambdaForTesting([&run_loop](SmbMountResult result) { - EXPECT_EQ(SmbMountResult::kSuccess, result); - run_loop.Quit(); - })); - run_loop.Run(); + ignore_result(MountBasicShare(share_path, mount_path, + base::BindOnce([](SmbMountResult result) { + EXPECT_EQ(SmbMountResult::kSuccess, result); + }))); } // Check: After mounting the maximum number of shares, requesting to mount an // additional share should fail. - mojo::Remote<smbfs::mojom::SmbFs> smbfs_remote; - MockSmbFsImpl smbfs_impl(smbfs_remote.BindNewPipeAndPassReceiver()); - mojo::Remote<smbfs::mojom::SmbFsDelegate> smbfs_delegate_remote; - - smbfs::SmbFsHost::Delegate* smbfs_host_delegate = nullptr; - std::unique_ptr<MockSmbFsMounter> mock_mounter = - std::make_unique<MockSmbFsMounter>(); - - smb_service_->SetSmbFsMounterCreationCallbackForTesting( - base::BindLambdaForTesting([&mock_mounter, &smbfs_host_delegate]( - const std::string& share_path, - const std::string& mount_dir_name, - const SmbFsShare::MountOptions& options, - smbfs::SmbFsHost::Delegate* delegate) - -> std::unique_ptr<smbfs::SmbFsMounter> { - smbfs_host_delegate = delegate; - return std::move(mock_mounter); - })); - const std::string share_path = std::string(kSharePath) + base::NumberToString(kMaxSmbFsShares); const std::string mount_path = std::string(kMountPath) + base::NumberToString(kMaxSmbFsShares); - - base::RunLoop run_loop; - smb_service_->Mount( - mount_options_, base::FilePath(share_path), kTestUser, kTestPassword, - false /* use_chromad_kerberos */, - false /* should_open_file_manager_after_mount */, - false /* save_credentials */, - base::BindLambdaForTesting([&run_loop](SmbMountResult result) { + ignore_result(MountBasicShare( + share_path, mount_path, base::BindOnce([](SmbMountResult result) { EXPECT_EQ(SmbMountResult::kTooManyOpened, result); - run_loop.Quit(); - })); - - run_loop.Run(); + }))); } } // namespace smb_client
diff --git a/chrome/browser/chromeos/web_applications/chrome_help_app_ui_delegate.cc b/chrome/browser/chromeos/web_applications/chrome_help_app_ui_delegate.cc index 8b14e57..831982e 100644 --- a/chrome/browser/chromeos/web_applications/chrome_help_app_ui_delegate.cc +++ b/chrome/browser/chromeos/web_applications/chrome_help_app_ui_delegate.cc
@@ -44,13 +44,16 @@ source->AddString("boardName", base::SysInfo::GetLsbReleaseBoard()); source->AddString("chromeOSVersion", base::SysInfo::OperatingSystemVersion()); std::string customization_id; + std::string hwid; chromeos::system::StatisticsProvider* provider = chromeos::system::StatisticsProvider::GetInstance(); - // Customization id does not exist for browser tests, but it is fine for this - // to be an empty string. + // MachineStatistics may not exist for browser tests, but it is fine for these + // to be empty strings. provider->GetMachineStatistic(chromeos::system::kCustomizationIdKey, &customization_id); + provider->GetMachineStatistic(chromeos::system::kHardwareClassKey, &hwid); source->AddString("customizationId", customization_id); + source->AddString("hwid", hwid); Profile* profile = Profile::FromWebUI(web_ui_); PrefService* pref_service = profile->GetPrefs();
diff --git a/chrome/browser/chromeos/web_applications/media_app_integration_browsertest.cc b/chrome/browser/chromeos/web_applications/media_app_integration_browsertest.cc index 4f35eb15..f3b1bf5f 100644 --- a/chrome/browser/chromeos/web_applications/media_app_integration_browsertest.cc +++ b/chrome/browser/chromeos/web_applications/media_app_integration_browsertest.cc
@@ -49,10 +49,7 @@ class MediaAppIntegrationTest : public SystemWebAppIntegrationTest { public: MediaAppIntegrationTest() { - scoped_feature_list_.InitWithFeatures( - {chromeos::features::kMediaApp, blink::features::kNativeFileSystemAPI, - blink::features::kFileHandlingAPI}, - {}); + scoped_feature_list_.InitWithFeatures({chromeos::features::kMediaApp}, {}); } private:
diff --git a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc index ed8fb33..385af0e 100644 --- a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc +++ b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.cc
@@ -9,6 +9,7 @@ #include "chrome/common/pref_names.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/settings/cros_settings_names.h" +#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" namespace chromeos { @@ -26,6 +27,13 @@ FlushTokenSaveCallbacks(false); } +// static +void DeviceOAuth2TokenStoreChromeOS::RegisterPrefs( + PrefRegistrySimple* registry) { + registry->RegisterStringPref(prefs::kDeviceRobotAnyApiRefreshToken, + std::string()); +} + void DeviceOAuth2TokenStoreChromeOS::Init(InitCallback callback) { state_ = State::INITIALIZING; // Pull in the system salt. @@ -51,7 +59,7 @@ // If the robot account ID is not available yet, do not announce the token. It // will be done from OnServiceAccountIdentityChanged() once the robot account // ID becomes available as well. - if (!GetAccountId().empty()) + if (observer() && !GetAccountId().empty()) observer()->OnRefreshTokenAvailable(); token_save_callbacks_.push_back(std::move(callback)); @@ -151,7 +159,7 @@ } void DeviceOAuth2TokenStoreChromeOS::OnServiceAccountIdentityChanged() { - if (!GetAccountId().empty() && !refresh_token_.empty()) + if (observer() && !GetAccountId().empty() && !refresh_token_.empty()) observer()->OnRefreshTokenAvailable(); }
diff --git a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h index 8023447..ec23125 100644 --- a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h +++ b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h
@@ -9,6 +9,8 @@ #include "chrome/browser/chromeos/settings/cros_settings.h" +class PrefRegistrySimple; + namespace chromeos { // ChromeOS specific implementation of the DeviceOAuth2TokenStore interface used @@ -25,6 +27,13 @@ explicit DeviceOAuth2TokenStoreChromeOS(PrefService* local_state); ~DeviceOAuth2TokenStoreChromeOS() override; + DeviceOAuth2TokenStoreChromeOS(const DeviceOAuth2TokenStoreChromeOS& other) = + delete; + DeviceOAuth2TokenStoreChromeOS& operator=( + const DeviceOAuth2TokenStoreChromeOS& other) = delete; + + static void RegisterPrefs(PrefRegistrySimple* registry); + // DeviceOAuth2TokenStore: void Init(InitCallback callback) override; CoreAccountId GetAccountId() const override;
diff --git a/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos_unittest.cc b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos_unittest.cc new file mode 100644 index 0000000..f9eba7c --- /dev/null +++ b/chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos_unittest.cc
@@ -0,0 +1,250 @@ +// Copyright 2020 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/device_identity/chromeos/device_oauth2_token_store_chromeos.h" + +#include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" +#include "base/test/bind_test_util.h" +#include "chrome/browser/chromeos/policy/device_policy_builder.h" +#include "chrome/browser/chromeos/settings/cros_settings.h" +#include "chrome/browser/chromeos/settings/device_settings_service.h" +#include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" +#include "chrome/browser/chromeos/settings/token_encryptor.h" +#include "chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h" +#include "chrome/common/pref_names.h" +#include "chrome/test/base/scoped_testing_local_state.h" +#include "chrome/test/base/testing_browser_process.h" +#include "chromeos/cryptohome/system_salt_getter.h" +#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" +#include "chromeos/dbus/session_manager/fake_session_manager_client.h" +#include "chromeos/tpm/stub_install_attributes.h" +#include "components/ownership/mock_owner_key_util.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { +// Helper class for tests to wait until the store's init procedure is completed. +class DeviceOAuth2TokenStoreInitWaiter { + public: + DeviceOAuth2TokenStoreInitWaiter() = default; + // The caller must ensure that the DeviceOAuth2TokenStoreInitWaiter outlives + // the callback it returns. + DeviceOAuth2TokenStore::InitCallback GetCallback() { + return base::BindOnce(&DeviceOAuth2TokenStoreInitWaiter::OnInit, + base::Unretained(this)); + } + void Wait() { run_loop_.Run(); } + bool HasInitBeenCalled() { return init_called_; } + bool GetInitResult() { + CHECK(init_called_); + return init_result_; + } + bool GetValidationRequired() { + CHECK(init_called_); + return validation_required_; + } + + private: + void OnInit(bool init_result, bool validation_required) { + ASSERT_FALSE(init_called_); + init_called_ = true; + init_result_ = init_result; + validation_required_ = validation_required; + run_loop_.Quit(); + } + base::RunLoop run_loop_; + bool init_called_ = false; + bool init_result_ = false; + bool validation_required_ = false; +}; +} // namespace + +class DeviceOAuth2TokenStoreChromeOSTest : public testing::Test { + public: + DeviceOAuth2TokenStoreChromeOSTest() + : scoped_testing_local_state_(TestingBrowserProcess::GetGlobal()) {} + + void SetUp() override { + chromeos::CryptohomeClient::InitializeFake(); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + chromeos::FakeCryptohomeClient::GetStubSystemSalt()); + + chromeos::SystemSaltGetter::Initialize(); + + scoped_refptr<ownership::MockOwnerKeyUtil> owner_key_util_( + new ownership::MockOwnerKeyUtil()); + owner_key_util_->SetPublicKeyFromPrivateKey( + *device_policy_.GetSigningKey()); + chromeos::DeviceSettingsService::Get()->SetSessionManager( + &session_manager_client_, owner_key_util_); + } + + void TearDown() override { + base::ThreadPoolInstance::Get()->FlushForTesting(); + chromeos::DeviceSettingsService::Get()->UnsetSessionManager(); + chromeos::SystemSaltGetter::Shutdown(); + chromeos::CryptohomeClient::Shutdown(); + } + + void SetUpDefaultValues() { + SetDeviceRefreshTokenInLocalState("device_refresh_token_4_test"); + SetRobotAccountId("service_acct@g.com"); + } + + void InitWithPendingSalt(chromeos::DeviceOAuth2TokenStoreChromeOS* store) { + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + std::vector<uint8_t>()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(false); + store->Init(base::BindLambdaForTesting([](bool, bool) {})); + SetUpDefaultValues(); + } + + void InitStore(chromeos::DeviceOAuth2TokenStoreChromeOS* store) { + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + std::vector<uint8_t>()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(false); + + DeviceOAuth2TokenStoreInitWaiter init_waiter; + store->Init(init_waiter.GetCallback()); + + // Make the system salt available. + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + chromeos::FakeCryptohomeClient::GetStubSystemSalt()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); + + // Wait for init to complete before continuing with the test. + init_waiter.Wait(); + } + + void SetRobotAccountId(const std::string& account_id) { + device_policy_.policy_data().set_service_account_identity(account_id); + device_policy_.Build(); + session_manager_client_.set_device_policy(device_policy_.GetBlob()); + chromeos::DeviceSettingsService::Get()->Load(); + content::RunAllTasksUntilIdle(); + } + + void SetDeviceRefreshTokenInLocalState(const std::string& refresh_token) { + scoped_testing_local_state_.Get()->SetUserPref( + prefs::kDeviceRobotAnyApiRefreshToken, + std::make_unique<base::Value>(refresh_token)); + } + + content::BrowserTaskEnvironment task_environment_; + ScopedTestingLocalState scoped_testing_local_state_; + chromeos::ScopedStubInstallAttributes scoped_stub_install_attributes_; + chromeos::ScopedTestDeviceSettingsService scoped_device_settings_service_; + chromeos::ScopedTestCrosSettings scoped_test_cros_settings_{ + scoped_testing_local_state_.Get()}; + chromeos::FakeSessionManagerClient session_manager_client_; + policy::DevicePolicyBuilder device_policy_; +}; + +TEST_F(DeviceOAuth2TokenStoreChromeOSTest, InitSuccessful) { + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + std::vector<uint8_t>()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(false); + + chromeos::DeviceOAuth2TokenStoreChromeOS store( + scoped_testing_local_state_.Get()); + + EXPECT_TRUE(store.GetAccountId().empty()); + EXPECT_TRUE(store.GetRefreshToken().empty()); + + DeviceOAuth2TokenStoreInitWaiter init_waiter; + store.Init(init_waiter.GetCallback()); + + EXPECT_FALSE(init_waiter.HasInitBeenCalled()); + + // Make the system salt available. + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + chromeos::FakeCryptohomeClient::GetStubSystemSalt()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); + init_waiter.Wait(); + + EXPECT_TRUE(init_waiter.HasInitBeenCalled()); + EXPECT_TRUE(init_waiter.GetInitResult()); + EXPECT_TRUE(init_waiter.GetValidationRequired()); +} + +TEST_F(DeviceOAuth2TokenStoreChromeOSTest, SaveToken) { + chromeos::DeviceOAuth2TokenStoreChromeOS store( + scoped_testing_local_state_.Get()); + + InitStore(&store); + + store.SetAndSaveRefreshToken("test-token", + DeviceOAuth2TokenStore::StatusCallback()); + EXPECT_EQ("test-token", store.GetRefreshToken()); +} + +TEST_F(DeviceOAuth2TokenStoreChromeOSTest, SaveEncryptedTokenEarly) { + chromeos::DeviceOAuth2TokenStoreChromeOS store( + scoped_testing_local_state_.Get()); + + // Set a new refresh token without the system salt available. + InitWithPendingSalt(&store); + + store.SetAndSaveRefreshToken("test-token", + DeviceOAuth2TokenStore::StatusCallback()); + EXPECT_EQ("test-token", store.GetRefreshToken()); + + // Make the system salt available. + chromeos::FakeCryptohomeClient::Get()->set_system_salt( + chromeos::FakeCryptohomeClient::GetStubSystemSalt()); + chromeos::FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); + base::RunLoop().RunUntilIdle(); + + // The original token should still be present. + EXPECT_EQ("test-token", store.GetRefreshToken()); + + // Reloading shouldn't change the token either. + chromeos::DeviceOAuth2TokenStoreChromeOS other_store( + scoped_testing_local_state_.Get()); + InitStore(&other_store); + + EXPECT_EQ("test-token", other_store.GetRefreshToken()); +} + +TEST_F(DeviceOAuth2TokenStoreChromeOSTest, DoNotAnnounceTokenWithoutAccountID) { + chromeos::DeviceOAuth2TokenStoreChromeOS store( + scoped_testing_local_state_.Get()); + InitStore(&store); + + class StoreObserver : public DeviceOAuth2TokenStore::Observer { + public: + using Callback = base::Callback<void()>; + explicit StoreObserver(Callback callback) : callback_(callback) {} + + void OnRefreshTokenAvailable() override { callback_.Run(); } + + Callback callback_; + }; + + auto callback_that_should_not_be_called = + base::BindRepeating([]() { FAIL(); }); + StoreObserver observer_not_called( + std::move(callback_that_should_not_be_called)); + store.SetObserver(&observer_not_called); + + // Make a token available during enrollment. Verify that the token is not + // announced yet. + store.SetAndSaveRefreshToken("test-token", + DeviceOAuth2TokenStore::StatusCallback()); + + base::RunLoop run_loop; + auto callback_that_should_be_called_once = + base::BindRepeating([](base::RunLoop* loop) { loop->Quit(); }, &run_loop); + StoreObserver observer_called_once( + std::move(callback_that_should_be_called_once)); + store.SetObserver(&observer_called_once); + + // Also make the robot account ID available. Verify that the token is + // announced now. + SetRobotAccountId("robot@example.com"); + run_loop.Run(); +}
diff --git a/chrome/browser/device_identity/device_identity_provider.cc b/chrome/browser/device_identity/device_identity_provider.cc index 34972082..dfed68a 100644 --- a/chrome/browser/device_identity/device_identity_provider.cc +++ b/chrome/browser/device_identity/device_identity_provider.cc
@@ -7,8 +7,6 @@ #include "base/bind_helpers.h" #include "chrome/browser/device_identity/device_oauth2_token_service.h" -namespace chromeos { - namespace { // An implementation of ActiveAccountAccessTokenFetcher that is backed by @@ -83,7 +81,7 @@ } DeviceIdentityProvider::DeviceIdentityProvider( - chromeos::DeviceOAuth2TokenService* token_service) + DeviceOAuth2TokenService* token_service) : token_service_(token_service) { // TODO(blundell): Can |token_service_| ever actually be non-null? if (token_service_) { @@ -147,5 +145,3 @@ void DeviceIdentityProvider::OnRefreshTokenAvailable() { ProcessRefreshTokenUpdateForAccount(GetActiveAccountId()); } - -} // namespace chromeos
diff --git a/chrome/browser/device_identity/device_identity_provider.h b/chrome/browser/device_identity/device_identity_provider.h index b08fc9b..4660cbe 100644 --- a/chrome/browser/device_identity/device_identity_provider.h +++ b/chrome/browser/device_identity/device_identity_provider.h
@@ -8,15 +8,12 @@ #include "base/macros.h" #include "components/invalidation/public/identity_provider.h" -namespace chromeos { - class DeviceOAuth2TokenService; // Identity provider implementation backed by DeviceOAuth2TokenService. class DeviceIdentityProvider : public invalidation::IdentityProvider { public: - explicit DeviceIdentityProvider( - chromeos::DeviceOAuth2TokenService* token_service); + explicit DeviceIdentityProvider(DeviceOAuth2TokenService* token_service); ~DeviceIdentityProvider() override; // IdentityProvider: @@ -34,11 +31,9 @@ private: void OnRefreshTokenAvailable(); - chromeos::DeviceOAuth2TokenService* token_service_; + DeviceOAuth2TokenService* token_service_; DISALLOW_COPY_AND_ASSIGN(DeviceIdentityProvider); }; -} // namespace chromeos - #endif // CHROME_BROWSER_DEVICE_IDENTITY_DEVICE_IDENTITY_PROVIDER_H_
diff --git a/chrome/browser/device_identity/device_oauth2_token_service.cc b/chrome/browser/device_identity/device_oauth2_token_service.cc index b16712bd..974dbe7 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service.cc +++ b/chrome/browser/device_identity/device_oauth2_token_service.cc
@@ -15,9 +15,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "chrome/browser/device_identity/device_oauth2_token_store.h" -#include "chrome/common/pref_names.h" #include "components/policy/proto/device_management_backend.pb.h" -#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_urls.h" @@ -27,8 +25,6 @@ #include "google_apis/gaia/oauth2_access_token_fetcher_impl.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -namespace chromeos { - struct DeviceOAuth2TokenService::PendingRequest { PendingRequest( const base::WeakPtr<OAuth2AccessTokenManager::RequestImpl>& request, @@ -65,12 +61,6 @@ FlushPendingRequests(false, GoogleServiceAuthError::REQUEST_CANCELED); } -// static -void DeviceOAuth2TokenService::RegisterPrefs(PrefRegistrySimple* registry) { - registry->RegisterStringPref(prefs::kDeviceRobotAnyApiRefreshToken, - std::string()); -} - void DeviceOAuth2TokenService::SetAndSaveRefreshToken( const std::string& refresh_token, const StatusCallback& result_callback) { @@ -137,6 +127,13 @@ return token_manager_.get(); } +#if !defined(OS_CHROMEOS) +void DeviceOAuth2TokenService::SetServiceAccountEmail( + const std::string& account_email) { + store_->SetAccountEmail(account_email); +} +#endif + void DeviceOAuth2TokenService::OnRefreshTokenResponse( const std::string& access_token, int expires_in_seconds) { @@ -385,5 +382,3 @@ else FlushPendingRequests(false, error); } - -} // namespace chromeos
diff --git a/chrome/browser/device_identity/device_oauth2_token_service.h b/chrome/browser/device_identity/device_oauth2_token_service.h index 15f1d19..60544ace 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service.h +++ b/chrome/browser/device_identity/device_oauth2_token_service.h
@@ -23,9 +23,6 @@ class OAuth2AccessTokenFetcher; class OAuth2AccessTokenConsumer; -class PrefRegistrySimple; - -namespace chromeos { // DeviceOAuth2TokenService retrieves OAuth2 access tokens for a given // set of scopes using the device-level OAuth2 any-api refresh token @@ -45,8 +42,6 @@ void SetAndSaveRefreshToken(const std::string& refresh_token, const StatusCallback& callback); - static void RegisterPrefs(PrefRegistrySimple* registry); - // Pull the robot account ID from device policy. CoreAccountId GetRobotAccountId() const; @@ -79,6 +74,13 @@ OAuth2AccessTokenManager* GetAccessTokenManager(); +#if !defined(OS_CHROMEOS) + // Used on non-ChromeOS platforms to set the email associated with the + // current service account. On ChromeOS, this function isn't used because + // the service account identity comes from CrosSettings. + void SetServiceAccountEmail(const std::string& account_email); +#endif + // Can be used to override the robot account ID for testing purposes. Most // common use case is to easily inject a non-empty account ID to make the // refresh token for the robot account visible via GetAccounts() and @@ -194,6 +196,4 @@ DISALLOW_COPY_AND_ASSIGN(DeviceOAuth2TokenService); }; -} // namespace chromeos - #endif // CHROME_BROWSER_DEVICE_IDENTITY_DEVICE_OAUTH2_TOKEN_SERVICE_H_
diff --git a/chrome/browser/device_identity/device_oauth2_token_service_factory.cc b/chrome/browser/device_identity/device_oauth2_token_service_factory.cc index 1d4a6c83..a14ba71 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service_factory.cc +++ b/chrome/browser/device_identity/device_oauth2_token_service_factory.cc
@@ -6,19 +6,37 @@ #include <memory> +#include "build/build_config.h" #include "chrome/browser/chromeos/settings/token_encryptor.h" +#if defined(OS_CHROMEOS) #include "chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h" +#else +#include "chrome/browser/device_identity/device_oauth2_token_store_desktop.h" +#endif #include "chrome/browser/device_identity/device_oauth2_token_service.h" #include "chromeos/cryptohome/system_salt_getter.h" +#include "components/policy/core/common/features.h" #include "content/public/browser/browser_thread.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -namespace chromeos { - namespace { static DeviceOAuth2TokenService* g_device_oauth2_token_service_ = nullptr; +std::unique_ptr<DeviceOAuth2TokenStore> CreatePlatformTokenStore( + PrefService* local_state) { +#if defined(OS_CHROMEOS) + return std::make_unique<chromeos::DeviceOAuth2TokenStoreChromeOS>( + local_state); +#elif defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) + DCHECK(base::FeatureList::IsEnabled(policy::features::kCBCMServiceAccounts)); + return std::make_unique<DeviceOAuth2TokenStoreDesktop>(local_state); +#else + NOTREACHED(); + return nullptr; +#endif +} + } // namespace // static @@ -34,8 +52,7 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(!g_device_oauth2_token_service_); g_device_oauth2_token_service_ = new DeviceOAuth2TokenService( - url_loader_factory, std::unique_ptr<DeviceOAuth2TokenStore>( - new DeviceOAuth2TokenStoreChromeOS(local_state))); + url_loader_factory, CreatePlatformTokenStore(local_state)); } // static @@ -46,5 +63,3 @@ g_device_oauth2_token_service_ = nullptr; } } - -} // namespace chromeos
diff --git a/chrome/browser/device_identity/device_oauth2_token_service_factory.h b/chrome/browser/device_identity/device_oauth2_token_service_factory.h index 9dba99d..2b1c1731 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service_factory.h +++ b/chrome/browser/device_identity/device_oauth2_token_service_factory.h
@@ -17,8 +17,6 @@ class SharedURLLoaderFactory; } -namespace chromeos { - class DeviceOAuth2TokenService; class DeviceOAuth2TokenServiceFactory { @@ -51,6 +49,4 @@ DISALLOW_COPY_AND_ASSIGN(DeviceOAuth2TokenServiceFactory); }; -} // namespace chromeos - #endif // CHROME_BROWSER_DEVICE_IDENTITY_DEVICE_OAUTH2_TOKEN_SERVICE_FACTORY_H_
diff --git a/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc b/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc index 9087d92..90860b2 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc +++ b/chrome/browser/device_identity/device_oauth2_token_service_unittest.cc
@@ -13,20 +13,9 @@ #include "base/run_loop.h" #include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/chromeos/policy/device_policy_builder.h" -#include "chrome/browser/chromeos/settings/cros_settings.h" -#include "chrome/browser/chromeos/settings/device_settings_service.h" -#include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" -#include "chrome/browser/chromeos/settings/token_encryptor.h" -#include "chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/testing_browser_process.h" -#include "chromeos/cryptohome/system_salt_getter.h" -#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" -#include "chromeos/dbus/session_manager/fake_session_manager_client.h" -#include "chromeos/tpm/stub_install_attributes.h" -#include "components/ownership/mock_owner_key_util.h" #include "components/prefs/testing_pref_service.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" @@ -41,7 +30,64 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { +class MockDeviceOAuth2TokenStore : public DeviceOAuth2TokenStore { + public: + MockDeviceOAuth2TokenStore() = default; + ~MockDeviceOAuth2TokenStore() override = default; + + // DeviceOAuth2TokenStore: + void Init(InitCallback callback) override { + pending_init_callback_ = std::move(callback); + } + CoreAccountId GetAccountId() const override { return account_id_; } + std::string GetRefreshToken() const override { return refresh_token_; } + + void SetAndSaveRefreshToken(const std::string& refresh_token, + StatusCallback result_callback) override { + refresh_token_ = refresh_token; + pending_status_callback_ = std::move(result_callback); + } + + void PrepareTrustedAccountId(TrustedAccountIdCallback callback) override { + pending_trusted_account_id_callback_ = std::move(callback); + TriggerTrustedAccountIdCallback(true); + } + +#if !defined(OS_CHROMEOS) + void SetAccountEmail(const std::string& account_email) override { + account_id_ = CoreAccountId::FromEmail(account_email); + } +#endif + + // Mock-specific functions: + void SetRefreshTokenForTesting(const std::string& token) { + refresh_token_ = token; + } + + void SetAccountIdForTesting(CoreAccountId account_id) { + account_id_ = account_id; + } + + void TriggerInitCallback(bool success, bool validation_required) { + std::move(pending_init_callback_).Run(success, validation_required); + } + + void TriggerStatusCallback(bool success) { + std::move(pending_status_callback_).Run(success); + } + + void TriggerTrustedAccountIdCallback(bool account_present) { + std::move(pending_trusted_account_id_callback_).Run(account_present); + } + + private: + CoreAccountId account_id_; + std::string refresh_token_; + + InitCallback pending_init_callback_; + StatusCallback pending_status_callback_; + TrustedAccountIdCallback pending_trusted_account_id_callback_; +}; class DeviceOAuth2TokenServiceTest : public testing::Test { public: @@ -51,26 +97,16 @@ // Most tests just want a noop crypto impl with a dummy refresh token value in // Local State (if the value is an empty string, it will be ignored). void SetUpDefaultValues() { - SetDeviceRefreshTokenInLocalState("device_refresh_token_4_test"); - SetRobotAccountId("service_acct@g.com"); CreateService(); + token_store_->SetRefreshTokenForTesting("device_refresh_token_4_test"); + SetRobotAccountId("service_acct@g.com"); AssertConsumerTokensAndErrors(0, 0); - base::RunLoop().RunUntilIdle(); - } - - void SetUpWithPendingSalt() { - FakeCryptohomeClient::Get()->set_system_salt(std::vector<uint8_t>()); - FakeCryptohomeClient::Get()->SetServiceIsAvailable(false); - SetUpDefaultValues(); + token_store_->TriggerInitCallback(true, true); } void SetRobotAccountId(const std::string& account_id) { - device_policy_.policy_data().set_service_account_identity(account_id); - device_policy_.Build(); - session_manager_client_.set_device_policy(device_policy_.GetBlob()); - DeviceSettingsService::Get()->Load(); - content::RunAllTasksUntilIdle(); + token_store_->SetAccountIdForTesting(CoreAccountId::FromEmail(account_id)); } std::unique_ptr<OAuth2AccessTokenManager::Request> StartTokenRequest() { @@ -78,50 +114,27 @@ &consumer_); } - void SetUp() override { - CryptohomeClient::InitializeFake(); - FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); - FakeCryptohomeClient::Get()->set_system_salt( - FakeCryptohomeClient::GetStubSystemSalt()); - - SystemSaltGetter::Initialize(); - - scoped_refptr<ownership::MockOwnerKeyUtil> owner_key_util_( - new ownership::MockOwnerKeyUtil()); - owner_key_util_->SetPublicKeyFromPrivateKey( - *device_policy_.GetSigningKey()); - DeviceSettingsService::Get()->SetSessionManager(&session_manager_client_, - owner_key_util_); - } + void SetUp() override {} void TearDown() override { oauth2_service_.reset(); base::ThreadPoolInstance::Get()->FlushForTesting(); - DeviceSettingsService::Get()->UnsetSessionManager(); - SystemSaltGetter::Shutdown(); - CryptohomeClient::Shutdown(); base::RunLoop().RunUntilIdle(); } + MockDeviceOAuth2TokenStore* token_store() { return token_store_; } + void CreateService() { + auto store = std::make_unique<MockDeviceOAuth2TokenStore>(); + token_store_ = store.get(); + oauth2_service_.reset(new DeviceOAuth2TokenService( - test_url_loader_factory_.GetSafeWeakWrapper(), - std::unique_ptr<DeviceOAuth2TokenStore>( - new DeviceOAuth2TokenStoreChromeOS( - scoped_testing_local_state_.Get())))); + test_url_loader_factory_.GetSafeWeakWrapper(), std::move(store))); oauth2_service_->max_refresh_token_validation_retries_ = 0; oauth2_service_->GetAccessTokenManager() ->set_max_authorization_token_fetch_retries_for_testing(0); } - // Utility method to set a value in Local State for the device refresh token - // (it must have a non-empty value or it won't be used). - void SetDeviceRefreshTokenInLocalState(const std::string& refresh_token) { - scoped_testing_local_state_.Get()->SetUserPref( - prefs::kDeviceRobotAnyApiRefreshToken, - std::make_unique<base::Value>(refresh_token)); - } - std::string GetValidTokenInfoResponse(const std::string& email) { return "{ \"email\": \"" + email + "\"," @@ -135,7 +148,6 @@ std::string GetRefreshToken() { if (!RefreshTokenIsAvailable()) return std::string(); - return oauth2_service_->GetRefreshToken(); } @@ -175,17 +187,12 @@ }; content::BrowserTaskEnvironment task_environment_; - ScopedStubInstallAttributes scoped_stub_install_attributes_; ScopedTestingLocalState scoped_testing_local_state_; - ScopedTestDeviceSettingsService scoped_device_settings_service_; - ScopedTestCrosSettings scoped_test_cros_settings_{ - scoped_testing_local_state_.Get()}; network::TestURLLoaderFactory test_url_loader_factory_; - FakeSessionManagerClient session_manager_client_; - policy::DevicePolicyBuilder device_policy_; std::unique_ptr<DeviceOAuth2TokenService, TokenServiceDeleter> oauth2_service_; TestingOAuth2AccessTokenManagerConsumer consumer_; + MockDeviceOAuth2TokenStore* token_store_; }; void DeviceOAuth2TokenServiceTest::ReturnOAuthUrlFetchResults( @@ -233,41 +240,6 @@ EXPECT_EQ(num_errors, consumer_.number_of_errors_); } -TEST_F(DeviceOAuth2TokenServiceTest, SaveEncryptedToken) { - CreateService(); - - // The token service won't report there being a token if the robot account ID - // is not set, which would cause the expectation below to fail. - SetRobotAccountId("service_acct@g.com"); - - oauth2_service_->SetAndSaveRefreshToken( - "test-token", DeviceOAuth2TokenService::StatusCallback()); - EXPECT_EQ("test-token", GetRefreshToken()); -} - -TEST_F(DeviceOAuth2TokenServiceTest, SaveEncryptedTokenEarly) { - // Set a new refresh token without the system salt available. - SetUpWithPendingSalt(); - - oauth2_service_->SetAndSaveRefreshToken( - "test-token", DeviceOAuth2TokenService::StatusCallback()); - EXPECT_EQ("test-token", GetRefreshToken()); - - // Make the system salt available. - FakeCryptohomeClient::Get()->set_system_salt( - FakeCryptohomeClient::GetStubSystemSalt()); - FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); - base::RunLoop().RunUntilIdle(); - - // The original token should still be present. - EXPECT_EQ("test-token", GetRefreshToken()); - - // Reloading shouldn't change the token either. - CreateService(); - base::RunLoop().RunUntilIdle(); - EXPECT_EQ("test-token", GetRefreshToken()); -} - TEST_F(DeviceOAuth2TokenServiceTest, RefreshTokenValidation_Success) { SetUpDefaultValues(); std::unique_ptr<OAuth2AccessTokenManager::Request> request = @@ -280,16 +252,16 @@ } TEST_F(DeviceOAuth2TokenServiceTest, RefreshTokenValidation_SuccessAsyncLoad) { - SetUpWithPendingSalt(); + CreateService(); + token_store()->SetRefreshTokenForTesting("device_refresh_token_4_test"); + SetRobotAccountId("service_acct@g.com"); std::unique_ptr<OAuth2AccessTokenManager::Request> request = StartTokenRequest(); PerformURLFetches(); AssertConsumerTokensAndErrors(0, 0); - FakeCryptohomeClient::Get()->set_system_salt( - FakeCryptohomeClient::GetStubSystemSalt()); - FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); + token_store()->TriggerInitCallback(true, true); base::RunLoop().RunUntilIdle(); PerformURLFetches(); @@ -309,10 +281,11 @@ // Test succeeds if this line is reached without a crash. } -TEST_F(DeviceOAuth2TokenServiceTest, RefreshTokenValidation_NoSalt) { - FakeCryptohomeClient::Get()->set_system_salt(std::vector<uint8_t>()); - FakeCryptohomeClient::Get()->SetServiceIsAvailable(true); - SetUpDefaultValues(); +TEST_F(DeviceOAuth2TokenServiceTest, RefreshTokenValidation_InitFailure) { + CreateService(); + token_store()->SetRefreshTokenForTesting("device_refresh_token_4_test"); + SetRobotAccountId("service_acct@g.com"); + token_store()->TriggerInitCallback(false, true); EXPECT_FALSE(RefreshTokenIsAvailable()); @@ -439,30 +412,3 @@ PerformURLFetches(); AssertConsumerTokensAndErrors(1, 1); } - -TEST_F(DeviceOAuth2TokenServiceTest, DoNotAnnounceTokenWithoutAccountID) { - CreateService(); - - auto callback_that_should_not_be_called = - base::BindRepeating([]() { FAIL(); }); - oauth2_service_->SetRefreshTokenAvailableCallback( - std::move(callback_that_should_not_be_called)); - - // Make a token available during enrollment. Verify that the token is not - // announced yet. - oauth2_service_->SetAndSaveRefreshToken( - "test-token", DeviceOAuth2TokenService::StatusCallback()); - - base::RunLoop run_loop; - auto callback_that_should_be_called_once = - base::BindRepeating([](base::RunLoop* loop) { loop->Quit(); }, &run_loop); - oauth2_service_->SetRefreshTokenAvailableCallback( - std::move(callback_that_should_be_called_once)); - - // Also make the robot account ID available. Verify that the token is - // announced now. - SetRobotAccountId("robot@example.com"); - run_loop.Run(); -} - -} // namespace chromeos
diff --git a/chrome/browser/device_identity/device_oauth2_token_store.h b/chrome/browser/device_identity/device_oauth2_token_store.h index 20ea339e..54ee49e 100644 --- a/chrome/browser/device_identity/device_oauth2_token_store.h +++ b/chrome/browser/device_identity/device_oauth2_token_store.h
@@ -73,6 +73,14 @@ // Invokes |callback| when the operation completes. virtual void PrepareTrustedAccountId(TrustedAccountIdCallback callback) = 0; +#if !defined(OS_CHROMEOS) + // Requests that this store persist the current service account's associated + // email. + // On ChromeOS, the account email comes from CrosSettings so this should never + // be called. + virtual void SetAccountEmail(const std::string& account_email) = 0; +#endif + void SetObserver(Observer* observer) { observer_ = observer; } Observer* observer() { return observer_; }
diff --git a/chrome/browser/device_identity/device_oauth2_token_store_desktop.cc b/chrome/browser/device_identity/device_oauth2_token_store_desktop.cc new file mode 100644 index 0000000..471c77c --- /dev/null +++ b/chrome/browser/device_identity/device_oauth2_token_store_desktop.cc
@@ -0,0 +1,118 @@ +// Copyright 2020 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/device_identity/device_oauth2_token_store_desktop.h" + +#include <string> + +#include "base/base64.h" +#include "base/bind.h" +#include "chrome/common/pref_names.h" +#include "components/os_crypt/os_crypt.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" + +// This pref will hold the base64-encoded representation of the encrypted +// refresh token for the browser's service account. +const char kCBCMServiceAccountRefreshToken[] = + "cbcm.service_account_refresh_token"; + +// The account email for the robot account used for policy invalidations on +// Desktop platforms by Chrome Browser Cloud Management (CBCM). This is similar +// to kDeviceRobotAnyApiRefreshToken on ChromeOS. +const char kCBCMServiceAccountEmail[] = "cbcm.service_account_email"; + +DeviceOAuth2TokenStoreDesktop::DeviceOAuth2TokenStoreDesktop( + PrefService* local_state) + : local_state_(local_state) {} +DeviceOAuth2TokenStoreDesktop::~DeviceOAuth2TokenStoreDesktop() = default; + +// static +void DeviceOAuth2TokenStoreDesktop::RegisterPrefs( + PrefRegistrySimple* registry) { + registry->RegisterStringPref(kCBCMServiceAccountRefreshToken, std::string()); + registry->RegisterStringPref(kCBCMServiceAccountEmail, std::string()); +} + +void DeviceOAuth2TokenStoreDesktop::Init(InitCallback callback) { + std::string base64_encrypted_token = + local_state_->GetString(kCBCMServiceAccountRefreshToken); + + if (base64_encrypted_token.empty()) { + // It's valid for the refresh token to not exist in the store, in + // which case init is successful and there shouldn't be a token + // validation step. + std::move(callback).Run(true, false); + return; + } + + std::string decoded; + if (!base::Base64Decode(base64_encrypted_token, &decoded)) { + std::move(callback).Run(false, true); + return; + } + + std::string decrypted_token; + bool success = OSCrypt::DecryptString(decoded, &decrypted_token); + if (success) { + refresh_token_ = decrypted_token; + // If the robot account ID is not available yet, do not announce the token. + // It will be done from OnServiceAccountIdentityChanged() once the robot + // account ID becomes available as well. + if (observer() && !GetAccountId().empty()) + observer()->OnRefreshTokenAvailable(); + } + + std::move(callback).Run(success, true); +} + +CoreAccountId DeviceOAuth2TokenStoreDesktop::GetAccountId() const { + return CoreAccountId::FromEmail( + local_state_->GetString(kCBCMServiceAccountEmail)); +} + +std::string DeviceOAuth2TokenStoreDesktop::GetRefreshToken() const { + return refresh_token_; +} + +void DeviceOAuth2TokenStoreDesktop::SetAndSaveRefreshToken( + const std::string& refresh_token, + StatusCallback result_callback) { + std::string encrypted_token; + bool success = OSCrypt::EncryptString(refresh_token, &encrypted_token); + + if (success) { + refresh_token_ = refresh_token; + + // The string must be encoded as base64 for storage in local state. + std::string encoded; + base::Base64Encode(encrypted_token, &encoded); + + local_state_->SetString(kCBCMServiceAccountRefreshToken, encoded); + } + + std::move(result_callback).Run(success); +} + +void DeviceOAuth2TokenStoreDesktop::PrepareTrustedAccountId( + TrustedAccountIdCallback callback) { + // There's no cryptohome or anything similar to initialize on non-chromeos + // platforms, so just run the callback as a success now. + callback.Run(true); +} + +void DeviceOAuth2TokenStoreDesktop::SetAccountEmail( + const std::string& account_email) { + if (GetAccountId() == CoreAccountId::FromEmail(account_email)) + return; + + local_state_->SetString(kCBCMServiceAccountEmail, account_email); + OnServiceAccountIdentityChanged(); +} + +void DeviceOAuth2TokenStoreDesktop::OnServiceAccountIdentityChanged() { + if (observer() && !GetAccountId().empty() && !refresh_token_.empty()) + observer()->OnRefreshTokenAvailable(); +}
diff --git a/chrome/browser/device_identity/device_oauth2_token_store_desktop.h b/chrome/browser/device_identity/device_oauth2_token_store_desktop.h new file mode 100644 index 0000000..835a3dff --- /dev/null +++ b/chrome/browser/device_identity/device_oauth2_token_store_desktop.h
@@ -0,0 +1,56 @@ +// Copyright 2020 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_DEVICE_IDENTITY_DEVICE_OAUTH2_TOKEN_STORE_DESKTOP_H_ +#define CHROME_BROWSER_DEVICE_IDENTITY_DEVICE_OAUTH2_TOKEN_STORE_DESKTOP_H_ + +#include <string> + +#include "base/memory/weak_ptr.h" +#include "chrome/browser/device_identity/device_oauth2_token_store.h" +#include "google_apis/gaia/core_account_id.h" + +class PrefRegistrySimple; +class PrefService; + +// The pref name where this class stores the encrypted refresh token. +extern const char kCBCMServiceAccountRefreshToken[]; + +// The pref name where this class stores the service account's email. +extern const char kCBCMServiceAccountEmail[]; + +// The desktop (mac, win, linux) implementation of DeviceOAuth2TokenStore. This +// is used by the DeviceOAuth2TokenService on those platforms to encrypt and +// persist the refresh token of the service account to LocalState. +class DeviceOAuth2TokenStoreDesktop : public DeviceOAuth2TokenStore { + public: + explicit DeviceOAuth2TokenStoreDesktop(PrefService* local_state); + ~DeviceOAuth2TokenStoreDesktop() override; + + DeviceOAuth2TokenStoreDesktop(const DeviceOAuth2TokenStoreDesktop& other) = + delete; + DeviceOAuth2TokenStoreDesktop& operator=( + const DeviceOAuth2TokenStoreDesktop& other) = delete; + + static void RegisterPrefs(PrefRegistrySimple* registry); + + // DeviceOAuth2TokenStore: + void Init(InitCallback callback) override; + CoreAccountId GetAccountId() const override; + std::string GetRefreshToken() const override; + void SetAndSaveRefreshToken(const std::string& refresh_token, + StatusCallback result_callback) override; + void PrepareTrustedAccountId(TrustedAccountIdCallback callback) override; + void SetAccountEmail(const std::string& account_email) override; + + private: + void OnServiceAccountIdentityChanged(); + + PrefService* const local_state_; + std::string refresh_token_; + + base::WeakPtrFactory<DeviceOAuth2TokenStoreDesktop> weak_ptr_factory_{this}; +}; + +#endif // CHROME_BROWSER_DEVICE_IDENTITY_DEVICE_OAUTH2_TOKEN_STORE_DESKTOP_H_
diff --git a/chrome/browser/device_identity/device_oauth2_token_store_desktop_unittest.cc b/chrome/browser/device_identity/device_oauth2_token_store_desktop_unittest.cc new file mode 100644 index 0000000..a4643a9 --- /dev/null +++ b/chrome/browser/device_identity/device_oauth2_token_store_desktop_unittest.cc
@@ -0,0 +1,158 @@ +// Copyright 2020 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/device_identity/device_oauth2_token_store_desktop.h" + +#include "base/base64.h" +#include "base/test/bind_test_util.h" +#include "chrome/common/pref_names.h" +#include "chrome/test/base/scoped_testing_local_state.h" +#include "chrome/test/base/testing_browser_process.h" +#include "components/os_crypt/os_crypt.h" +#include "components/os_crypt/os_crypt_mocker.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { +class TestObserver : public DeviceOAuth2TokenStore::Observer { + public: + int called_count() const { return called_count_; } + + private: + void OnRefreshTokenAvailable() override { ++called_count_; } + + int called_count_ = 0; +}; +} // namespace + +class DeviceOAuth2TokenStoreDesktopTest : public testing::Test { + public: + DeviceOAuth2TokenStoreDesktopTest() + : scoped_testing_local_state_(TestingBrowserProcess::GetGlobal()) {} + ~DeviceOAuth2TokenStoreDesktopTest() override = default; + + ScopedTestingLocalState* scoped_testing_local_state() { + return &scoped_testing_local_state_; + } + + void SetUp() override { + testing::Test::SetUp(); + OSCryptMocker::SetUp(); + } + + void TearDown() override { + OSCryptMocker::TearDown(); + testing::Test::TearDown(); + } + + private: + ScopedTestingLocalState scoped_testing_local_state_; +}; + +TEST_F(DeviceOAuth2TokenStoreDesktopTest, InitWithoutSavedToken) { + DeviceOAuth2TokenStoreDesktop store(scoped_testing_local_state()->Get()); + + EXPECT_TRUE(store.GetAccountId().empty()); + EXPECT_TRUE(store.GetRefreshToken().empty()); + + store.Init(base::BindOnce([](bool, bool) {})); + + TestObserver observer; + store.SetObserver(&observer); + + // Observer shouldn't have been called because there's no account ID available + // yet. + EXPECT_EQ(0, observer.called_count()); + EXPECT_TRUE(store.GetAccountId().empty()); + EXPECT_TRUE(store.GetRefreshToken().empty()); +} + +TEST_F(DeviceOAuth2TokenStoreDesktopTest, InitWithSavedToken) { + scoped_testing_local_state()->Get()->SetString(kCBCMServiceAccountEmail, + "foo@g.com"); + + std::string token = "test_token"; + std::string encrypted_token; + OSCrypt::EncryptString(token, &encrypted_token); + + std::string encoded; + base::Base64Encode(encrypted_token, &encoded); + + scoped_testing_local_state()->Get()->SetString( + kCBCMServiceAccountRefreshToken, encoded); + + DeviceOAuth2TokenStoreDesktop store(scoped_testing_local_state()->Get()); + + EXPECT_TRUE(store.GetRefreshToken().empty()); + + TestObserver observer; + store.SetObserver(&observer); + + store.Init(base::BindOnce([](bool, bool) {})); + + EXPECT_EQ(1, observer.called_count()); + EXPECT_EQ(store.GetAccountId(), CoreAccountId::FromEmail("foo@g.com")); + EXPECT_EQ(store.GetRefreshToken(), token); +} + +TEST_F(DeviceOAuth2TokenStoreDesktopTest, ObserverNotifiedWhenAccountChanges) { + scoped_testing_local_state()->Get()->SetString(kCBCMServiceAccountEmail, + "foo@g.com"); + + std::string token = "test_token"; + std::string encrypted_token; + OSCrypt::EncryptString(token, &encrypted_token); + + std::string encoded; + base::Base64Encode(encrypted_token, &encoded); + + scoped_testing_local_state()->Get()->SetString( + kCBCMServiceAccountRefreshToken, encoded); + + DeviceOAuth2TokenStoreDesktop store(scoped_testing_local_state()->Get()); + + TestObserver test_observer; + store.SetObserver(&test_observer); + + EXPECT_TRUE(store.GetRefreshToken().empty()); + + store.Init(base::BindOnce([](bool, bool) {})); + + EXPECT_EQ(1, test_observer.called_count()); + + EXPECT_EQ(store.GetAccountId(), CoreAccountId::FromEmail("foo@g.com")); + EXPECT_EQ(store.GetRefreshToken(), token); + + store.SetAccountEmail("bar@g.com"); + + EXPECT_EQ(2, test_observer.called_count()); +} + +TEST_F(DeviceOAuth2TokenStoreDesktopTest, SaveToken) { + std::string token = "test_token"; + + DeviceOAuth2TokenStoreDesktop store(scoped_testing_local_state()->Get()); + store.Init(base::BindOnce([](bool, bool) {})); + + EXPECT_TRUE(store.GetRefreshToken().empty()); + + bool callback_success = false; + store.SetAndSaveRefreshToken( + token, base::BindLambdaForTesting([&callback_success](bool success) { + callback_success = success; + })); + + EXPECT_TRUE(callback_success); + + std::string persisted_token = scoped_testing_local_state()->Get()->GetString( + kCBCMServiceAccountRefreshToken); + + std::string decoded; + base::Base64Decode(persisted_token, &decoded); + std::string decrypted; + OSCrypt::DecryptString(decoded, &decrypted); + + EXPECT_EQ(token, store.GetRefreshToken()); + EXPECT_EQ(token, decrypted); +}
diff --git a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc index c257161..83041ce 100644 --- a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc +++ b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.cc
@@ -41,6 +41,7 @@ ExtensionFunction::ResponseAction AutofillAssistantPrivateCreateFunction::Run() { auto* web_contents = GetActiveWebContents(this); + CHECK(web_contents); AutofillAssistantPrivateAPI::GetFactoryInstance() ->Get(browser_context()) ->CreateAutofillAssistantController(web_contents); @@ -205,11 +206,15 @@ const autofill_assistant::UiDelegate::OverlayColors& colors) {} void AutofillAssistantPrivateEventRouter::OnFormChanged( - const autofill_assistant::FormProto* form) {} + const autofill_assistant::FormProto* form, + const autofill_assistant::FormProto::Result* result) {} void AutofillAssistantPrivateEventRouter::OnClientSettingsChanged( const autofill_assistant::ClientSettings& settings) {} +void AutofillAssistantPrivateEventRouter::OnGenericUserInterfaceChanged( + const autofill_assistant::GenericUserInterfaceProto* generic_ui) {} + void AutofillAssistantPrivateEventRouter::OnExpandBottomSheet() {} void AutofillAssistantPrivateEventRouter::OnCollapseBottomSheet() {} @@ -309,13 +314,13 @@ void AutofillAssistantPrivateAPI::DestroyUI() {} -std::string AutofillAssistantPrivateAPI::GetApiKey() { +std::string AutofillAssistantPrivateAPI::GetApiKey() const { // TODO(crbug.com/1015753): Use chromium's keys and also consider the // autofill-assistant-key here to override that particular key. return "invalid"; } -std::string AutofillAssistantPrivateAPI::GetAccountEmailAddress() { +std::string AutofillAssistantPrivateAPI::GetAccountEmailAddress() const { return "joe@example.com"; } @@ -325,33 +330,39 @@ } autofill::PersonalDataManager* -AutofillAssistantPrivateAPI::GetPersonalDataManager() { +AutofillAssistantPrivateAPI::GetPersonalDataManager() const { return autofill::PersonalDataManagerFactory::GetForProfile( Profile::FromBrowserContext(browser_context_)); } -autofill_assistant::WebsiteLoginFetcher* -AutofillAssistantPrivateAPI::GetWebsiteLoginFetcher() { +password_manager::PasswordManagerClient* +AutofillAssistantPrivateAPI::GetPasswordManagerClient() const { + // TODO(crbug.com/1015753): Support credential leak flows. return nullptr; } -std::string AutofillAssistantPrivateAPI::GetServerUrl() { +autofill_assistant::WebsiteLoginFetcher* +AutofillAssistantPrivateAPI::GetWebsiteLoginFetcher() const { + return nullptr; +} + +std::string AutofillAssistantPrivateAPI::GetServerUrl() const { // TODO(crbug.com/1015753): Consider the autofill-assistant-url for endpoint // overrides and share the kDefaultAutofillAssistantServerUrl to expose it // here. return "https://automate-pa.googleapis.com"; } -std::string AutofillAssistantPrivateAPI::GetLocale() { +std::string AutofillAssistantPrivateAPI::GetLocale() const { return "en-us"; } -std::string AutofillAssistantPrivateAPI::GetCountryCode() { +std::string AutofillAssistantPrivateAPI::GetCountryCode() const { return "us"; } autofill_assistant::DeviceContext -AutofillAssistantPrivateAPI::GetDeviceContext() { +AutofillAssistantPrivateAPI::GetDeviceContext() const { return autofill_assistant::DeviceContext(); } @@ -363,7 +374,7 @@ // to use this method in this context. // TODO(crbug.com/1015753): Revisit the interfaces used for this extension API // and introduce new, more concise ones if needed. -content::WebContents* AutofillAssistantPrivateAPI::GetWebContents() { +content::WebContents* AutofillAssistantPrivateAPI::GetWebContents() const { if (!active_autofill_assistant_) return nullptr; return active_autofill_assistant_->controller->GetWebContents();
diff --git a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.h b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.h index 649fa9e1f..d047699d 100644 --- a/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.h +++ b/chrome/browser/extensions/api/autofill_assistant_private/autofill_assistant_private_api.h
@@ -149,9 +149,14 @@ peek_mode) override; void OnOverlayColorsChanged( const autofill_assistant::UiDelegate::OverlayColors& colors) override; - void OnFormChanged(const autofill_assistant::FormProto* form) override; + void OnFormChanged( + const autofill_assistant::FormProto* form, + const autofill_assistant::FormProto::Result* result) override; void OnClientSettingsChanged( const autofill_assistant::ClientSettings& settings) override; + void OnGenericUserInterfaceChanged( + const autofill_assistant::GenericUserInterfaceProto* generic_ui) override; + void OnExpandBottomSheet() override; void OnCollapseBottomSheet() override; @@ -191,17 +196,20 @@ // autofill_assistant::Client: void AttachUI() override; void DestroyUI() override; - std::string GetApiKey() override; - std::string GetAccountEmailAddress() override; + std::string GetApiKey() const override; + std::string GetAccountEmailAddress() const override; autofill_assistant::AccessTokenFetcher* GetAccessTokenFetcher() override; - autofill::PersonalDataManager* GetPersonalDataManager() override; - autofill_assistant::WebsiteLoginFetcher* GetWebsiteLoginFetcher() override; - std::string GetServerUrl() override; - std::string GetLocale() override; - std::string GetCountryCode() override; - autofill_assistant::DeviceContext GetDeviceContext() override; + autofill::PersonalDataManager* GetPersonalDataManager() const override; + password_manager::PasswordManagerClient* GetPasswordManagerClient() + const override; + autofill_assistant::WebsiteLoginFetcher* GetWebsiteLoginFetcher() + const override; + std::string GetServerUrl() const override; + std::string GetLocale() const override; + std::string GetCountryCode() const override; + autofill_assistant::DeviceContext GetDeviceContext() const override; void Shutdown(autofill_assistant::Metrics::DropOutReason reason) override; - content::WebContents* GetWebContents() override; + content::WebContents* GetWebContents() const override; // BrowserContextKeyedAPI: void Shutdown() override;
diff --git a/chrome/browser/extensions/api/cookies/cookies_api.cc b/chrome/browser/extensions/api/cookies/cookies_api.cc index e30f454..8e0a716 100644 --- a/chrome/browser/extensions/api/cookies/cookies_api.cc +++ b/chrome/browser/extensions/api/cookies/cookies_api.cc
@@ -447,7 +447,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); DCHECK(!url_.is_empty() && url_.is_valid()); cookie_manager->SetCanonicalCookie( *cc, url_.scheme(), options,
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc index d93c41b..4aa815f 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
@@ -100,9 +100,8 @@ std::unique_ptr<api::identity::GetAuthToken::Params> params( api::identity::GetAuthToken::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get()); - interactive_ = params->details.get() && - params->details->interactive.get() && - *params->details->interactive; + interactive_ = params->details.get() && params->details->interactive.get() && + *params->details->interactive; should_prompt_for_scopes_ = interactive_; should_prompt_for_signin_ = @@ -414,8 +413,7 @@ const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension()); IdentityAPI* id_api = IdentityAPI::GetFactoryInstance()->Get(GetProfile()); IdentityTokenCacheValue cache_entry = id_api->GetCachedToken(token_key_); - IdentityTokenCacheValue::CacheValueStatus cache_status = - cache_entry.status(); + IdentityTokenCacheValue::CacheValueStatus cache_status = cache_entry.status(); if (type == IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE) { switch (cache_status) { @@ -545,8 +543,8 @@ break; } - CompleteFunctionWithError( - std::string(identity_constants::kAuthFailure) + error.ToString()); + CompleteFunctionWithError(std::string(identity_constants::kAuthFailure) + + error.ToString()); } void IdentityGetAuthTokenFunction::OnIssueAdviceSuccess( @@ -659,7 +657,7 @@ } } error = std::string(identity_constants::kAuthFailure) + - service_error.ToString(); + service_error.ToString(); break; case GaiaWebAuthFlow::OAUTH_ERROR: @@ -824,9 +822,12 @@ } #if defined(OS_CHROMEOS) +// Even though the DeviceOAuth2TokenService may be available on non-ChromeOS +// platforms, its robot account is not made available because it should only be +// used for very specific policy-related things. In fact, the device account on +// desktop isn't scoped for anything other than policy invalidations. void IdentityGetAuthTokenFunction::StartDeviceAccessTokenRequest() { - chromeos::DeviceOAuth2TokenService* service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* service = DeviceOAuth2TokenServiceFactory::Get(); // Since robot account refresh tokens are scoped down to [any-api] only, // request access token for [any-api] instead of login. OAuth2AccessTokenManager::ScopeSet scopes; @@ -856,9 +857,9 @@ if (chrome::IsRunningInForcedAppMode()) { std::string app_client_id; std::string app_client_secret; - if (chromeos::UserSessionManager::GetInstance()-> - GetAppModeChromeClientOAuthInfo(&app_client_id, - &app_client_secret)) { + if (chromeos::UserSessionManager::GetInstance() + ->GetAppModeChromeClientOAuthInfo(&app_client_id, + &app_client_secret)) { token_key_account_access_token_fetcher_ = identity_manager->CreateAccessTokenFetcherForClient( token_key_.account_id, app_client_id, app_client_secret,
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.cc b/chrome/browser/extensions/api/input_ime/input_ime_api.cc index a7cea04..c7ed15c 100644 --- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc +++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/lazy_instance.h" #include "base/strings/stringprintf.h" +#include "base/strings/utf_string_conversions.h" #include "extensions/browser/extension_registry.h" #include "ui/base/ime/ime_bridge.h" @@ -164,7 +165,7 @@ const std::vector<gfx::Rect>& bounds) {} void ImeObserver::OnSurroundingTextChanged(const std::string& component_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) { @@ -173,7 +174,10 @@ return; input_ime::OnSurroundingTextChanged::SurroundingInfo info; - info.text = text; + // |info.text| is encoded in UTF8 here so |info.focus| etc may not match the + // index in |info.text|, the javascript code on the extension side should + // handle it. + info.text = base::UTF16ToUTF8(text); info.focus = cursor_pos; info.anchor = anchor_pos; info.offset = offset_pos;
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.h b/chrome/browser/extensions/api/input_ime/input_ime_api.h index 7386a06..0c4eaac 100644 --- a/chrome/browser/extensions/api/input_ime/input_ime_api.h +++ b/chrome/browser/extensions/api/input_ime/input_ime_api.h
@@ -59,7 +59,7 @@ void OnCompositionBoundsChanged( const std::vector<gfx::Rect>& bounds) override; void OnSurroundingTextChanged(const std::string& component_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) override;
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc index 07d896e0..9654ebb2 100644 --- a/chrome/browser/extensions/api/management/management_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -250,13 +250,7 @@ EXPECT_TRUE(IsExtensionAtVersion(extension, "1.0")); } -#if defined(OS_WIN) -// http://crbug.com/141913 -#define MAYBE_InstallRequiresConfirm DISABLED_InstallRequiresConfirm -#else -#define MAYBE_InstallRequiresConfirm InstallRequiresConfirm -#endif -IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, MAYBE_InstallRequiresConfirm) { +IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, InstallRequiresConfirm) { // Installing the extension without an auto confirming UI should result in // it being disabled, since good.crx has permissions that require approval. std::string id = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
diff --git a/chrome/browser/extensions/api/processes/processes_api.cc b/chrome/browser/extensions/api/processes/processes_api.cc index dbcc5d2..e5ef867f 100644 --- a/chrome/browser/extensions/api/processes/processes_api.cc +++ b/chrome/browser/extensions/api/processes/processes_api.cc
@@ -152,10 +152,13 @@ if (!include_optional) return; - out_process->cpu.reset( - new double(task_manager->GetPlatformIndependentCPUUsage(id))); - out_process->network.reset(new double(static_cast<double>( - task_manager->GetProcessTotalNetworkUsage(id)))); + const double cpu_usage = task_manager->GetPlatformIndependentCPUUsage(id); + if (!std::isnan(cpu_usage)) + out_process->cpu.reset(new double(cpu_usage)); + + const int64_t network_usage = task_manager->GetProcessTotalNetworkUsage(id); + if (network_usage != -1) + out_process->network.reset(new double(static_cast<double>(network_usage))); int64_t v8_allocated = 0; int64_t v8_used = 0;
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc index ee08d48..8e10ae9e 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
@@ -42,12 +42,8 @@ #include "ui/gl/gl_switches.h" #if BUILDFLAG(ENABLE_SUPERVISED_USERS) -#include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" #include "chrome/browser/supervised_user/logged_in_user_mixin.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" -#include "chrome/browser/supervised_user/supervised_user_features.h" -#include "chrome/browser/supervised_user/supervised_user_service.h" #if defined(OS_CHROMEOS) #include "chromeos/constants/chromeos_switches.h" @@ -457,48 +453,14 @@ chromeos::LoggedInUserMixin logged_in_user_mixin_; }; -class ExtensionWebstorePrivateApiTestChildWithAllowlistDisabled - : public ExtensionWebstorePrivateApiTestChild { - public: - ExtensionWebstorePrivateApiTestChildWithAllowlistDisabled() { - scoped_feature_list_.InitAndDisableFeature( - supervised_users::kSupervisedUserAllowlistExtensionInstall); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - // Tests that extension installation is blocked for child accounts, and // attempting to do so produces a special error code. // Note: This will have to be updated when we enable child-initiated installs. -IN_PROC_BROWSER_TEST_F( - ExtensionWebstorePrivateApiTestChildWithAllowlistDisabled, - InstallBlocked) { +IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTestChild, InstallBlocked) { ASSERT_TRUE(browser()); ASSERT_TRUE(RunInstallTest("begin_install_fail_child.html", "extension.crx")); } -// Tests that extension installation is not blocked for child accounts, if the -// extension id is allowlisted. -IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTestChild, - InstallAllowlisted) { - ASSERT_TRUE(browser()); - base::HistogramTester histogram_tester; - - histogram_tester.ExpectTotalCount("SupervisedUsers.ExtensionsAllowlist", 0); - - ASSERT_TRUE(RunInstallTest("begin_install.html", "extension.crx")); - - // begin_install.html successfully installs two different extensions. - histogram_tester.ExpectBucketCount( - "SupervisedUsers.ExtensionsAllowlist", - /*sample=*/ - SupervisedUserService::UmaExtensionStateAllowlist::kAllowlistHit, - /*expected_count=*/2); - histogram_tester.ExpectTotalCount("SupervisedUsers.ExtensionsAllowlist", 2); -} - #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) class ExtensionWebstoreGetWebGLStatusTest : public InProcessBrowserTest {
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc index 8f581191..e9b0a80 100644 --- a/chrome/browser/extensions/content_script_apitest.cc +++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -10,7 +10,6 @@ #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "build/build_config.h" #include "chrome/browser/extensions/api/permissions/permissions_api.h" @@ -46,7 +45,6 @@ #include "extensions/test/test_extension_dir.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" -#include "services/network/public/cpp/features.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" @@ -875,100 +873,6 @@ ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); } -class ContentScriptWithLegacyCorsBehaviorApiTest : public ContentScriptApiTest { - public: - ContentScriptWithLegacyCorsBehaviorApiTest() { - // TODO(lukasza): https://crbug.com/1061567: Migrate tests related to - // cross-origin requests from content scripts into the - // CrossOriginReadBlockingExtensionTest suite (which already covers test - // matrix of various enabled/disabled features). - // - // Affected tests: - // - ContentScriptApiTest.CrossOriginXhr - scoped_feature_list_.InitAndDisableFeature( - network::features::kCorbAllowlistAlsoAppliesToOorCors); - } - - private: - base::test::ScopedFeatureList scoped_feature_list_; -}; - -// Tests the cross-origin access of content scripts. -IN_PROC_BROWSER_TEST_F(ContentScriptWithLegacyCorsBehaviorApiTest, - CrossOriginXhr) { - ASSERT_TRUE(StartEmbeddedTestServer()); - - TestExtensionDir test_dir; - test_dir.WriteManifest( - R"({ - "name": "Cross Origin XHR", - "description": "Content script cross origin XHR", - "version": "0.1", - "manifest_version": 2, - "content_scripts": [{ - "matches": ["*://example.com:*/*"], - "js": ["script.js"] - }], - "permissions": ["http://chromium.org:*/*"] - })"); - constexpr char kScript[] = - R"(document.getElementById('go-button').addEventListener( - 'click', - function() { - fetch('%s').then((response) => { - domAutomationController.send('Fetched'); - }).catch((e) => { - domAutomationController.send('Not Fetched'); - }); - });)"; - - const GURL cross_origin_url = - embedded_test_server()->GetURL("chromium.org", "/extensions/body1.html"); - test_dir.WriteFile( - FILE_PATH_LITERAL("script.js"), - base::StringPrintf(kScript, cross_origin_url.spec().c_str())); - - const Extension* extension = LoadExtension(test_dir.UnpackedPath()); - ASSERT_TRUE(extension); - - const GURL example_com_url = embedded_test_server()->GetURL( - "example.com", "/extensions/page_with_button.html"); - ui_test_utils::NavigateToURL(browser(), example_com_url); - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - - constexpr char kClickButtonScript[] = - "document.getElementById('go-button').click();"; - - { - // Since the extension has permission to access chromium.org, it should be - // able to make a cross-origin fetch. - content::DOMMessageQueue message_queue; - content::ExecuteScriptAsync(web_contents, kClickButtonScript); - std::string message; - EXPECT_TRUE(message_queue.WaitForMessage(&message)); - EXPECT_EQ(R"("Fetched")", message); - } - - extension_service()->DisableExtension(extension->id(), - disable_reason::DISABLE_USER_ACTION); - EXPECT_FALSE(ExtensionRegistry::Get(profile())->enabled_extensions().GetByID( - extension->id())); - - { - // When the extension is unloaded, the content script remains injected - // (since we don't currently have any means of "uninjecting" JS). However, - // it should no longer have the extra cross-origin permissions, so a - // cross-origin fetch should fail. - // https://crbug.com/843381. - content::DOMMessageQueue message_queue; - content::ExecuteScriptAsync(web_contents, kClickButtonScript); - std::string message; - EXPECT_TRUE(message_queue.WaitForMessage(&message)); - EXPECT_EQ(R"("Not Fetched")", message); - } -} - // Regression test for https://crbug.com/883526. IN_PROC_BROWSER_TEST_F(ContentScriptApiTest, InifiniteLoopInGetEffectiveURL) { // Create an extension that injects content scripts into about:blank frames
diff --git a/chrome/browser/extensions/cross_origin_read_blocking_browsertest.cc b/chrome/browser/extensions/cross_origin_read_blocking_browsertest.cc index 43058a20..880823c0 100644 --- a/chrome/browser/extensions/cross_origin_read_blocking_browsertest.cc +++ b/chrome/browser/extensions/cross_origin_read_blocking_browsertest.cc
@@ -17,6 +17,7 @@ #include "chrome/browser/extensions/api/tabs/tabs_api.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_function_test_utils.h" +#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/metrics/subprocess_metrics_provider.h" @@ -490,12 +491,19 @@ } } - void VerifyFetchFromContentScriptWasBlocked( + void VerifyFetchFromContentScriptWasBlockedByCorb( const base::HistogramTester& histograms) { // Make sure that histograms logged in other processes (e.g. in // NetworkService process) get synced. SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); + if (IsCorbExpectedToBeTurnedOffAltogether()) { + EXPECT_EQ(0u, + histograms.GetTotalCountsForPrefix("SiteIsolation.XSD.Browser") + .size()); + return; + } + histograms.ExpectBucketCount("SiteIsolation.XSD.Browser.Action", CORBAction::kResponseStarted, 1); histograms.ExpectBucketCount("SiteIsolation.XSD.Browser.Action", @@ -506,7 +514,7 @@ VerifyPassiveUmaForAllowlistForCors(histograms, base::nullopt); } - void VerifyFetchFromContentScriptWasAllowed( + void VerifyFetchFromContentScriptWasAllowedByCorb( const base::HistogramTester& histograms, bool expecting_sniffing = false) { // Make sure that histograms logged in other processes (e.g. in @@ -561,12 +569,12 @@ } else { // Verify the fetch was blocked by CORB, but not blocked by CORS. EXPECT_EQ(std::string(), actual_fetch_result); - VerifyFetchFromContentScriptWasBlocked(histograms); + VerifyFetchFromContentScriptWasBlockedByCorb(histograms); } } else { // Verify the fetch was allowed. EXPECT_EQ(expected_fetch_result, actual_fetch_result); - VerifyFetchFromContentScriptWasAllowed(histograms); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms); } } @@ -665,6 +673,101 @@ "nosniff.xml - body\n"); } +// Tests that extension permission to bypass CORS is revoked after the extension +// is unloaded. See also https://crbug.com/843381. +IN_PROC_BROWSER_TEST_P(CrossOriginReadBlockingExtensionAllowlistingTest, + FromProgrammaticContentScript_UnloadedExtension) { + ASSERT_TRUE(embedded_test_server()->Start()); + const extensions::Extension* extension = InstallExtension(); + ASSERT_TRUE(extension); + + // Navigate to a fetch-initiator.com page. + GURL page_url = GetTestPageUrl("fetch-initiator.com"); + ui_test_utils::NavigateToURL(browser(), page_url); + ASSERT_EQ(page_url, + active_web_contents()->GetMainFrame()->GetLastCommittedURL()); + ASSERT_EQ(url::Origin::Create(page_url), + active_web_contents()->GetMainFrame()->GetLastCommittedOrigin()); + + // Inject a content script that adds a link that initiates a fetch from + // cross-site.com. + GURL cross_site_resource( + embedded_test_server()->GetURL("cross-site.com", "/nosniff.xml")); + { + const char kNewButtonScriptTemplate[] = R"( + function startFetch() { + %s + } + + var link = document.createElement('a'); + link.href = '#foo'; + link.addEventListener('click', function() { + startFetch(); + }); + link.id = 'fetch-button'; + link.innerText = 'start-fetch'; + + document.body.appendChild(link); + domAutomationController.send('READY'); + )"; + content::DOMMessageQueue queue; + ASSERT_TRUE(ExecuteContentScript( + active_web_contents(), + base::StringPrintf(kNewButtonScriptTemplate, + CreateFetchScript(cross_site_resource).c_str()))); + ASSERT_EQ("READY", PopString(&queue)); + } + + // Click the button - the fetch should work if the extension is allowlisted. + // + // Clicking the button will execute the 'click' handler belonging to the + // content script (i.e. the `startFetch` method defined in the + // kNewButtonScriptTemplate above). Directly executing the script via + // content::ExecuteScript would have executed the script in the main world + // (which is not what we want). + const char kFetchInitiatingScript[] = R"( + document.getElementById('fetch-button').click(); + )"; + { + SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); + base::HistogramTester histograms; + + content::DOMMessageQueue queue; + content::ExecuteScriptAsync(active_web_contents(), kFetchInitiatingScript); + std::string fetch_result = PopString(&queue); + + VerifyFetchFromContentScript(histograms, fetch_result, + "nosniff.xml - body\n"); + } + + // Unload the extension and try fetching again. The content script should + // still be present and work, but after the extension is unloaded, the fetch + // should always fail. See also https://crbug.com/843381. + extension_service()->DisableExtension(extension->id(), + disable_reason::DISABLE_USER_ACTION); + EXPECT_FALSE(ExtensionRegistry::Get(profile())->enabled_extensions().GetByID( + extension->id())); + { + SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); + base::HistogramTester histograms; + + content::DOMMessageQueue queue; + content::ExecuteScriptAsync(active_web_contents(), kFetchInitiatingScript); + std::string fetch_result = PopString(&queue); + + if (IsExtensionAllowlisted() && IsOutOfBlinkCorsEnabled()) { + // TODO(lukasza): https://crbug.com/1062043: Revoking of extension + // permissions doesn't cover + // URLLoaderFactoryParams::factory_bound_access_patterns. + EXPECT_EQ("nosniff.xml - body\n", fetch_result); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms); + } else { + EXPECT_EQ(kCorsErrorWhenFetching, fetch_result); + VerifyFetchFromContentScriptWasBlockedByCorb(histograms); + } + } +} + // Test that verifies the current, baked-in (but not necessarily desirable // behavior) where a content script injected by an extension can bypass // CORS (and CORB) for any hosts the extension has access to. @@ -724,7 +827,7 @@ // Verify whether the fetch worked or not. EXPECT_EQ("cors-ok.txt - body\n", fetch_result); - VerifyFetchFromContentScriptWasAllowed(histograms); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms); } // Tests that same-origin fetches (same-origin relative to the webpage the @@ -753,8 +856,8 @@ // Verify that no blocking occurred. EXPECT_THAT(fetch_result, ::testing::StartsWith("nosniff.xml - body")); - VerifyFetchFromContentScriptWasAllowed(histograms, - false /* expecting_sniffing */); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms, + false /* expecting_sniffing */); // Same-origin requests are not at risk of being broken. VerifyPassiveUmaForAllowlistForCors(histograms, false); @@ -791,8 +894,8 @@ histograms.GetTotalCountsForPrefix("SiteIsolation.XSD.Browser").size()); } else { // Verify that CORB sniffing allowed the response. - VerifyFetchFromContentScriptWasAllowed(histograms, - true /* expecting_sniffing */); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms, + true /* expecting_sniffing */); } if (ShouldAllowlistAlsoApplyToOorCors() && @@ -847,8 +950,8 @@ histograms.GetTotalCountsForPrefix("SiteIsolation.XSD.Browser").size()); } else { // Verify that CORB sniffing allowed the response. - VerifyFetchFromContentScriptWasAllowed(histograms, - true /* expecting_sniffing */); + VerifyFetchFromContentScriptWasAllowedByCorb(histograms, + true /* expecting_sniffing */); } if (ShouldAllowlistAlsoApplyToOorCors() &&
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc index 23b8063..eb2a09dd3 100644 --- a/chrome/browser/extensions/crx_installer_browsertest.cc +++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -530,21 +530,14 @@ // Tests that scopes are only granted if |record_oauth2_grant_| on the prompt is // true. -#if defined(OS_WIN) -#define MAYBE_GrantScopes DISABLED_GrantScopes -#define MAYBE_GrantScopes_WithCallback DISABLED_GrantScopes_WithCallback -#else -#define MAYBE_GrantScopes GrantScopes -#define MAYBE_GrantScopes_WithCallback GrantScopes_WithCallback -#endif IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTestWithExperimentalApis, - MAYBE_GrantScopes) { + GrantScopes) { EXPECT_NO_FATAL_FAILURE(CheckHasEmptyScopesAfterInstall( "browsertest/scopes", CrxInstaller::InstallerResultCallback(), true)); } IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTestWithExperimentalApis, - MAYBE_GrantScopes_WithCallback) { + GrantScopes_WithCallback) { EXPECT_NO_FATAL_FAILURE(CheckHasEmptyScopesAfterInstall( "browsertest/scopes", base::BindOnce([](const base::Optional<CrxInstallError>& error) {
diff --git a/chrome/browser/extensions/extension_browser_window_helper.cc b/chrome/browser/extensions/extension_browser_window_helper.cc index fd61f4c..9b166d4 100644 --- a/chrome/browser/extensions/extension_browser_window_helper.cc +++ b/chrome/browser/extensions/extension_browser_window_helper.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/extensions/extension_browser_window_helper.h" -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 576516f..8ed2b67 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1479,6 +1479,11 @@ "expiry_milestone": 83 }, { + "name": "enable-google-srp-isolated-prerenders", + "owners": [ "//chrome/browser/prerender/OWNERS" ], + "expiry_milestone": 90 + }, + { "name": "enable-gpu-rasterization", "owners": [ "enne", "vmiura", "ericrk" ], // A debugging flag intended for end-users where there may not be any other
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 8342320..82d6bd7e 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -639,6 +639,11 @@ const char kEnablePreviewsCoinFlipDescription[] = "Enable coin flip experimentation of Previews."; +const char kEnableSRPIsolatedPrerendersName[] = + "Enable Navigation Predictor Isolated Prerenders"; +const char kEnableSRPIsolatedPrerendersDescription[] = + "Enable Navigation Predictions on the Google SRP to be fully isolated."; + const char kDownloadAutoResumptionNativeName[] = "Enable download auto-resumption in native"; const char kDownloadAutoResumptionNativeDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index f497d61..fededae4 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -456,6 +456,9 @@ extern const char kEnablePreviewsCoinFlipName[]; extern const char kEnablePreviewsCoinFlipDescription[]; +extern const char kEnableSRPIsolatedPrerendersName[]; +extern const char kEnableSRPIsolatedPrerendersDescription[]; + extern const char kEnableResamplingInputEventsName[]; extern const char kEnableResamplingInputEventsDescription[]; extern const char kEnableResamplingScrollEventsName[];
diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc index be1fd42..d4d8440 100644 --- a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc
@@ -125,8 +125,8 @@ if (user_manager::UserManager::IsInitialized() && user_manager::UserManager::Get()->IsLoggedInAsKioskApp() && connector->IsEnterpriseManaged()) { - identity_provider.reset(new chromeos::DeviceIdentityProvider( - chromeos::DeviceOAuth2TokenServiceFactory::Get())); + identity_provider = std::make_unique<DeviceIdentityProvider>( + DeviceOAuth2TokenServiceFactory::Get()); } #endif // defined(OS_CHROMEOS)
diff --git a/chrome/browser/mac/keystone_glue.mm b/chrome/browser/mac/keystone_glue.mm index cae4be3..f5059e5 100644 --- a/chrome/browser/mac/keystone_glue.mm +++ b/chrome/browser/mac/keystone_glue.mm
@@ -19,6 +19,7 @@ #include "base/mac/foundation_util.h" #include "base/mac/mac_logging.h" #include "base/memory/ref_counted.h" +#include "base/no_destructor.h" #include "base/strings/string_number_conversions.h" #include "base/strings/sys_string_conversions.h" #include "base/task/post_task.h" @@ -39,41 +40,49 @@ namespace ksr = keystone_registration; -// Constants for the brand file (uses an external file so it can survive -// updates to Chrome.) - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) -#define kStableBrandFileName @"Google Chrome Brand.plist" -#define kCanaryBrandFileName @"Google Chrome Canary Brand.plist" -#elif BUILDFLAG(CHROMIUM_BRANDING) -#define kStableBrandFileName @"Chromium Brand.plist" -#define kCanaryBrandFileName @"Chromium Canary Brand.plist" -#else -#error Unknown branding -#endif -// These directories are hardcoded in Keystone promotion preflight and the -// Keystone install script, so NSSearchPathForDirectoriesInDomains isn't used -// since the scripts couldn't use anything like that. -NSString* kStableBrandUserFile = @"~/Library/Google/" kStableBrandFileName; -NSString* kStableBrandSystemFile = @"/Library/Google/" kStableBrandFileName; -NSString* kCanaryBrandUserFile = @"~/Library/Google/" kCanaryBrandFileName; -NSString* kCanaryBrandSystemFile = @"/Library/Google/" kCanaryBrandFileName; +// Functions to handle the brand file. +// +// Note that an external file is used so it can survive updates to Chrome. +// +// Note that these directories are hard-coded in Keystone scripts, so +// NSSearchPathForDirectoriesInDomains isn't used since the scripts couldn't use +// anything like that. + +NSString* BrandFileName(version_info::Channel channel) { + NSString* fragment; + + switch (channel) { + case version_info::Channel::CANARY: + fragment = @" Canary"; + break; + case version_info::Channel::DEV: + fragment = @" Dev"; + break; + case version_info::Channel::BETA: + fragment = @" Beta"; + break; + default: + fragment = @""; + break; + } + + return [NSString stringWithFormat:@"Google Chrome%@ Brand.plist", fragment]; +} NSString* UserBrandFilePath(version_info::Channel channel) { - NSString* file = (channel == version_info::Channel::CANARY) - ? kCanaryBrandUserFile - : kStableBrandUserFile; - return [file stringByStandardizingPath]; + return [[@"~/Library/Google/" stringByAppendingString:BrandFileName(channel)] + stringByStandardizingPath]; } NSString* SystemBrandFilePath(version_info::Channel channel) { - NSString* file = (channel == version_info::Channel::CANARY) - ? kCanaryBrandSystemFile - : kStableBrandSystemFile; - return [file stringByStandardizingPath]; + return [[@"/Library/Google/" stringByAppendingString:BrandFileName(channel)] + stringByStandardizingPath]; } +#endif + // Adaptor for scheduling an Objective-C method call in ThreadPool. class PerformBridge : public base::RefCountedThreadSafe<PerformBridge> { public: @@ -198,8 +207,10 @@ - (void)changePermissionsForPromotionWithTool:(NSString*)toolPath; - (void)changePermissionsForPromotionComplete; +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) // Returns the brand file path to use for Keystone. - (NSString*)brandFilePath; +#endif // YES if no update installation has succeeded since a binary diff patch // installation failed. This signals the need to attempt a full installer @@ -314,10 +325,8 @@ version_info::Channel channelType = chrome::GetChannelByName(channel); if (channelType == version_info::Channel::STABLE) { channel = base::SysNSStringToUTF8(ksr::KSRegistrationRemoveExistingTag); -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) DCHECK(chrome::GetChannelByName(channel) == version_info::Channel::STABLE) << "-channel name modification has side effect"; -#endif } _productID.reset([productID copy]); @@ -327,6 +336,8 @@ _channel = channel; } +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + - (NSString*)brandFilePath { DCHECK(_version != nil) << "-loadParameters must be called first"; @@ -341,29 +352,22 @@ // Default to none. _brandFile.reset(@"", base::scoped_policy::RETAIN); - // Only the stable and canary channel can have independent brand codes. + // Only a side-by-side capable Chromium can have an independent brand code. - if (channel == version_info::Channel::DEV || - channel == version_info::Channel::BETA) { - // If on the dev or beta channel, this installation may have replaced - // an older system-level installation. Check for a user brand file and - // nuke it if present. Don't try to remove the system brand file, there - // wouldn't be any permission to do so. - // - // Don't do this on the canary channel. The canary can run side-by-side - // with another Google Chrome installation whose brand code, if any, - // should remain intact. + if (!chrome::IsSideBySideCapable()) { + // If on the older dev or beta channels that were not side-by-side capable, + // this installation may have replaced an older system-level installation. + // Check for a user brand file and nuke it if present. Don't try to remove + // the system brand file, there wouldn't be any permission to do so. + + // Don't do this on a side-by-side capable channel. Those can run + // side-by-side with another Google Chrome installation whose brand code, if + // any, should remain intact. if ([fm fileExistsAtPath:userBrandFile]) { [fm removeItemAtPath:userBrandFile error:NULL]; } - - } else if (channel == version_info::Channel::STABLE || - channel == version_info::Channel::CANARY) { - // Stable and Canary use different app ids, so they can both have brand - // codes. Even if Canary does not actively use brand codes, we want to - // exercise the same logic, so that we can detect perf regressions early. - + } else { // If there is a system brand file, use it. if ([fm fileExistsAtPath:systemBrandFile]) { // System @@ -420,6 +424,8 @@ return _brandFile; } +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) + - (BOOL)loadKeystoneRegistration { if (!_productID || !_appPath || !_url || !_version) return NO; @@ -456,7 +462,10 @@ NSNumber* preserveTTToken = @YES; NSString* appInfoPlistPath = [self appInfoPlistPath]; NSString* brandKey = kBrandKey; - NSString* brandPath = [self brandFilePath]; + NSString* brandPath = @""; +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + brandPath = [self brandFilePath]; +#endif if ([brandPath length] == 0) { // Brand path and brand key must be cleared together or ksadmin seems @@ -464,7 +473,7 @@ brandKey = @""; } - // Note that channel_ is permitted to be an empty string, but it must not be + // Note that _channel is permitted to be an empty string, but it must not be // nil. NSString* tagSuffix = [self tagSuffix]; NSString* tagValue = @@ -924,6 +933,7 @@ [self updateStatus:kAutoupdatePromoting version:nil error:nil]; +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) // TODO(mark): Remove when able! // // keystone_promote_preflight will copy the current brand information out to @@ -1021,6 +1031,7 @@ if (synchronous) { CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false); } +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) } - (void)promotionComplete:(NSNotification*)notification { @@ -1144,6 +1155,8 @@ @end // @implementation KeystoneGlue +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + namespace { std::string BrandCodeInternal() { @@ -1164,12 +1177,17 @@ } // namespace +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) + namespace keystone_glue { std::string BrandCode() { - // |s_brand_code| is leaked. - static std::string* s_brand_code = new std::string(BrandCodeInternal()); +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + static base::NoDestructor<std::string> s_brand_code(BrandCodeInternal()); return *s_brand_code; +#else + return std::string(); +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) } bool KeystoneEnabled() {
diff --git a/chrome/browser/media/feeds/media_feeds_fetcher_unittest.cc b/chrome/browser/media/feeds/media_feeds_fetcher_unittest.cc index a00658d4..b2ae550 100644 --- a/chrome/browser/media/feeds/media_feeds_fetcher_unittest.cc +++ b/chrome/browser/media/feeds/media_feeds_fetcher_unittest.cc
@@ -86,7 +86,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( *cc.get(), url.scheme(), options, base::BindOnce(
diff --git a/chrome/browser/memory/memory_kills_monitor_unittest.cc b/chrome/browser/memory/memory_kills_monitor_unittest.cc index 172a447..e2667ea 100644 --- a/chrome/browser/memory/memory_kills_monitor_unittest.cc +++ b/chrome/browser/memory/memory_kills_monitor_unittest.cc
@@ -158,12 +158,13 @@ } // Call StartMonitoring multiple times. - base::PlatformThreadId tid1 = g_memory_kills_monitor_unittest_instance - ->non_joinable_worker_thread_->tid(); + base::DelegateSimpleThread* thread1 = g_memory_kills_monitor_unittest_instance + ->non_joinable_worker_thread_.get(); + EXPECT_NE(nullptr, thread1); g_memory_kills_monitor_unittest_instance->StartMonitoring(); - base::PlatformThreadId tid2 = g_memory_kills_monitor_unittest_instance - ->non_joinable_worker_thread_->tid(); - EXPECT_EQ(tid1, tid2); + base::DelegateSimpleThread* thread2 = g_memory_kills_monitor_unittest_instance + ->non_joinable_worker_thread_.get(); + EXPECT_EQ(thread1, thread2); lmk_count_histogram = GetLowMemoryKillsCountHistogram(); ASSERT_TRUE(lmk_count_histogram);
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc index 3b7943b..017450b 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
@@ -182,13 +182,17 @@ MemoryAllocatorDump::kNameObjectCount, EmitTo::kCountsInUkmOnly, &Memory_Experimental::SetNumberOfMojoHandles}, {"media/webmediaplayer/audio", "WebMediaPlayer.Audio", MetricSize::kSmall, - kSize, EmitTo::kSizeInUmaOnly, nullptr}, + kSize, EmitTo::kSizeInUkmAndUma, + &Memory_Experimental::SetWebMediaPlayer_Audio}, {"media/webmediaplayer/video", "WebMediaPlayer.Video", MetricSize::kLarge, - kSize, EmitTo::kSizeInUmaOnly, nullptr}, + kSize, EmitTo::kSizeInUkmAndUma, + &Memory_Experimental::SetWebMediaPlayer_Video}, {"media/webmediaplayer/data_source", "WebMediaPlayer.DataSource", - MetricSize::kLarge, kSize, EmitTo::kSizeInUmaOnly, nullptr}, + MetricSize::kLarge, kSize, EmitTo::kSizeInUkmAndUma, + &Memory_Experimental::SetWebMediaPlayer_DataSource}, {"media/webmediaplayer/demuxer", "WebMediaPlayer.Demuxer", - MetricSize::kLarge, kSize, EmitTo::kSizeInUmaOnly, nullptr}, + MetricSize::kLarge, kSize, EmitTo::kSizeInUkmAndUma, + &Memory_Experimental::SetWebMediaPlayer_Demuxer}, {"net", "Net", MetricSize::kSmall, kEffectiveSize, EmitTo::kSizeInUkmAndUma, &Memory_Experimental::SetNet}, {"net/url_request_context", "Net.UrlRequestContext", MetricSize::kSmall,
diff --git a/chrome/browser/net/samesite_cookies_policy_browsertest.cc b/chrome/browser/net/samesite_cookies_policy_browsertest.cc index 3e0024d..5028e15 100644 --- a/chrome/browser/net/samesite_cookies_policy_browsertest.cc +++ b/chrome/browser/net/samesite_cookies_policy_browsertest.cc
@@ -67,9 +67,10 @@ // Set a cookie from a same-site context. The cookie does not specify // SameSite, so it may default to Lax if the SameSite features are enabled. // Since the context used is same-site, it should always work. - EXPECT_TRUE(content::SetCookie( - profile, url, "samesite-unspecified=1", - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX)); + EXPECT_TRUE(content::SetCookie(profile, url, "samesite-unspecified=1", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX))); EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, url)); // Overwrite the cookie from a cross-site context. Because we have a policy @@ -77,15 +78,17 @@ // SameSite features are enabled. (It works regardless, if they are disabled.) EXPECT_TRUE(content::SetCookie( profile, url, "samesite-unspecified=2", - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE))); // Cookie has the new value because we were able to successfully overwrite it. EXPECT_EQ("samesite-unspecified=2", content::GetCookies(profile, url)); // Fetching the cookies from a cross-site context also works because of the // policy. - EXPECT_EQ( - "samesite-unspecified=2", - content::GetCookies( - profile, url, net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_EQ("samesite-unspecified=2", + content::GetCookies(profile, url, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); } IN_PROC_BROWSER_TEST_P(SameSiteCookiesPolicyTest, @@ -105,9 +108,10 @@ // Set a cookie from a same-site context. The cookie does not specify // SameSite, so it may default to Lax if the SameSite features are enabled. // Since the context used is same-site, it should always work. - EXPECT_TRUE(content::SetCookie( - profile, url, "samesite-unspecified=1", - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX)); + EXPECT_TRUE(content::SetCookie(profile, url, "samesite-unspecified=1", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX))); EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, url)); // Overwrite the cookie from a cross-site context. Because we have a policy @@ -116,14 +120,17 @@ // enabled.) EXPECT_FALSE(content::SetCookie( profile, url, "samesite-unspecified=2", - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE))); // Cookie still has the previous value because re-setting it failed. EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, url)); // Fetching the unspecified-samesite cookie from a cross-site context does not // work because of the policy. - EXPECT_EQ("", content::GetCookies( - profile, url, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_EQ("", + content::GetCookies(profile, url, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); } IN_PROC_BROWSER_TEST_P(SameSiteCookiesPolicyTest, @@ -150,15 +157,19 @@ // Set a cookie from a same-site context. The cookie does not specify // SameSite, so it may default to Lax if the SameSite features are enabled. // Since the context used is same-site, it should always work. - EXPECT_TRUE(content::SetCookie( - profile, legacy_allowed_domain_url, "samesite-unspecified=1", - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX)); + EXPECT_TRUE(content::SetCookie(profile, legacy_allowed_domain_url, + "samesite-unspecified=1", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX))); EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, legacy_allowed_domain_url)); // Do the same on the other domain... - EXPECT_TRUE(content::SetCookie( - profile, other_domain_url, "samesite-unspecified=1", - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX)); + EXPECT_TRUE(content::SetCookie(profile, other_domain_url, + "samesite-unspecified=1", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX))); EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, other_domain_url)); @@ -169,34 +180,44 @@ // disabled.) EXPECT_TRUE(content::SetCookie( profile, legacy_allowed_domain_url, "samesite-unspecified=2", - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE))); EXPECT_EQ("samesite-unspecified=2", content::GetCookies(profile, legacy_allowed_domain_url)); EXPECT_EQ("samesite-unspecified=2", - content::GetCookies( - profile, legacy_allowed_domain_url, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + content::GetCookies(profile, legacy_allowed_domain_url, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); // For the domain that is not Legacy by policy, we expect it to work only if // the SameSite features are disabled. if (AreSameSiteFeaturesEnabled()) { - EXPECT_FALSE(content::SetCookie( - profile, other_domain_url, "samesite-unspecified=2", - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_FALSE( + content::SetCookie(profile, other_domain_url, "samesite-unspecified=2", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); EXPECT_EQ("samesite-unspecified=1", content::GetCookies(profile, other_domain_url)); - EXPECT_EQ("", content::GetCookies( - profile, other_domain_url, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_EQ( + "", content::GetCookies(profile, other_domain_url, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); } else { - EXPECT_TRUE(content::SetCookie( - profile, other_domain_url, "samesite-unspecified=2", - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_TRUE( + content::SetCookie(profile, other_domain_url, "samesite-unspecified=2", + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); EXPECT_EQ("samesite-unspecified=2", content::GetCookies(profile, other_domain_url)); - EXPECT_EQ("samesite-unspecified=2", - content::GetCookies( - profile, other_domain_url, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE)); + EXPECT_EQ( + "samesite-unspecified=2", + content::GetCookies(profile, other_domain_url, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::CROSS_SITE))); } }
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc index 903b347..64f5cdf5 100644 --- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc +++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
@@ -740,12 +740,12 @@ if (!IsGoogleURL(source_document_url)) return; - // Extract the target hosts. Use a flat set to remove duplicates. + // Extract the target hosts and URLs. Use a flat set to remove duplicates. // |target_hosts_serialized| is the ordered list of non-duplicate hosts. // TODO(sophiechang): See if we can make this logic simpler. base::flat_set<std::string> target_hosts; std::vector<std::string> target_hosts_serialized; - base::flat_set<GURL> target_urls; + std::vector<GURL> target_urls; for (const auto& url : prediction->sorted_predicted_urls()) { if (!IsAllowedToFetchNavigationHints(url)) continue; @@ -762,7 +762,7 @@ DCHECK_EQ(target_hosts.size(), target_hosts_serialized.size()); if (!hint_cache_->HasURLKeyedEntryForURL(url)) - target_urls.insert(url); + target_urls.push_back(url); } if (target_hosts.empty() && target_urls.empty()) @@ -778,10 +778,8 @@ // the page navigation context. However, since we do want to load the hints // returned, we pass this through to the page navigation callback. batch_update_hints_fetcher_->FetchOptimizationGuideServiceHints( - target_hosts_serialized, - std::vector<GURL>(target_urls.begin(), target_urls.end()), - registered_optimization_types_, - optimization_guide::proto::CONTEXT_PAGE_NAVIGATION, + target_hosts_serialized, target_urls, registered_optimization_types_, + optimization_guide::proto::CONTEXT_BATCH_UPDATE, base::BindOnce( &OptimizationGuideHintsManager::OnPageNavigationHintsFetched, ui_weak_ptr_factory_.GetWeakPtr(), nullptr, base::nullopt,
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc index 2c0e4e3..9e81c168 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -228,6 +228,10 @@ test_prerender->contents()->set_skip_final_checks(true); } + content::RenderFrameHost* RenderFrameHost() const { + return browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame(); + } + base::test::ScopedFeatureList scoped_feature_list_; base::HistogramTester histogram_tester_; std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_; @@ -2689,3 +2693,74 @@ waiter->Wait(); } + +IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PageLCPStopsUponInput) { + embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data"); + content::SetupCrossSiteRedirector(embedded_test_server()); + ASSERT_TRUE(embedded_test_server()->Start()); + + // Waiter to ensure main content is loaded. + auto waiter = CreatePageLoadMetricsTestWaiter(); + waiter->AddPageExpectation(TimingField::kLoadEvent); + waiter->AddPageExpectation(TimingField::kFirstContentfulPaint); + waiter->AddPageExpectation(TimingField::kLargestContentfulPaint); + + // Waiter to ensure that iframe content is loaded. + auto waiter2 = CreatePageLoadMetricsTestWaiter(); + waiter2->AddPageExpectation(TimingField::kLoadEvent); + waiter2->AddSubFrameExpectation(TimingField::kLoadEvent); + waiter2->AddPageExpectation(TimingField::kFirstContentfulPaint); + waiter2->AddSubFrameExpectation(TimingField::kFirstContentfulPaint); + waiter2->AddPageExpectation(TimingField::kLargestContentfulPaint); + waiter2->AddSubFrameExpectation(TimingField::kLargestContentfulPaint); + waiter2->AddPageExpectation(TimingField::kFirstInputOrScroll); + + ui_test_utils::NavigateToURL( + browser(), embedded_test_server()->GetURL( + "/page_load_metrics/click_to_create_iframe.html")); + waiter->Wait(); + + // Tap in the middle of the button. + ASSERT_TRUE(content::ExecuteScriptWithoutUserGesture( + RenderFrameHost(), + "var submitRect = document.getElementById('button')" + ".getBoundingClientRect();")); + double y; + ASSERT_TRUE(content::ExecuteScriptWithoutUserGestureAndExtractDouble( + RenderFrameHost(), + "window.domAutomationController.send((submitRect.top +" + "submitRect.bottom) / 2);", + &y)); + double x; + EXPECT_TRUE(content::ExecuteScriptWithoutUserGestureAndExtractDouble( + RenderFrameHost(), + "window.domAutomationController.send((submitRect.left + submitRect.right)" + "/ 2);", + &x)); + content::SimulateMouseClickAt( + browser()->tab_strip_model()->GetActiveWebContents(), 0, + blink::WebMouseEvent::Button::kLeft, + gfx::Point(static_cast<int>(x), static_cast<int>(y))); + waiter2->Wait(); + + // LCP is collected only at the end of the page lifecycle. Navigate to flush. + NavigateToUntrackedUrl(); + + histogram_tester_.ExpectTotalCount(internal::kHistogramLargestContentfulPaint, + 1); + auto all_frames_value = + histogram_tester_ + .GetAllSamples(internal::kHistogramLargestContentfulPaint)[0] + .min; + + histogram_tester_.ExpectTotalCount( + internal::kHistogramLargestContentfulPaintMainFrame, 1); + auto main_frame_value = + histogram_tester_ + .GetAllSamples(internal::kHistogramLargestContentfulPaintMainFrame)[0] + .min; + // Even though the content on the iframe is larger, the all_frames LCP value + // should match the main frame value because the iframe content was created + // after input in the main frame. + ASSERT_EQ(all_frames_value, main_frame_value); +}
diff --git a/chrome/browser/password_manager/android_test_helpers/BUILD.gn b/chrome/browser/password_manager/android_test_helpers/BUILD.gn new file mode 100644 index 0000000..66106e9 --- /dev/null +++ b/chrome/browser/password_manager/android_test_helpers/BUILD.gn
@@ -0,0 +1,32 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/android/rules.gni") + +static_library("android_wrappers") { + testonly = true + sources = [ "chrome_password_manager_client_android_wrapper.cc" ] + deps = [ + "//base", + "//chrome/browser:browser", + "//chrome/browser/password_manager/android_test_helpers:jni_headers", + "//content/public/browser", + ] +} + +generate_jni("jni_headers") { + testonly = true + sources = [ "javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerClientBridgeForTesting.java" ] +} + +android_library("test_support_java") { + testonly = true + sources = [ "javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerClientBridgeForTesting.java" ] + deps = [ + "//base:base_jni_headers", + "//base:jni_java", + "//content/public/android:content_java", + ] + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] +}
diff --git a/chrome/browser/password_manager/android_test_helpers/chrome_password_manager_client_android_wrapper.cc b/chrome/browser/password_manager/android_test_helpers/chrome_password_manager_client_android_wrapper.cc new file mode 100644 index 0000000..6ecc9aa --- /dev/null +++ b/chrome/browser/password_manager/android_test_helpers/chrome_password_manager_client_android_wrapper.cc
@@ -0,0 +1,27 @@ +// Copyright 2020 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 <jni.h> + +#include "base/android/scoped_java_ref.h" +#include "build/build_config.h" +#include "chrome/browser/password_manager/android_test_helpers/jni_headers/PasswordManagerClientBridgeForTesting_jni.h" +#include "chrome/browser/password_manager/chrome_password_manager_client.h" +#include "content/public/browser/web_contents.h" + +namespace password_manager { + +// static +void JNI_PasswordManagerClientBridgeForTesting_SetLeakDialogWasShownForTesting( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& j_web_contents, + jboolean j_value) { + content::WebContents* web_contents = + content::WebContents::FromJavaWebContents(j_web_contents); + + return ChromePasswordManagerClient::FromWebContents(web_contents) + ->SetCredentialLeakDialogWasShownForTesting(j_value); +} + +} // namespace password_manager
diff --git a/chrome/browser/password_manager/android_test_helpers/javatests/DEPS b/chrome/browser/password_manager/android_test_helpers/javatests/DEPS new file mode 100644 index 0000000..4b8ab3b --- /dev/null +++ b/chrome/browser/password_manager/android_test_helpers/javatests/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "-content/public/android", + "+content/public/android/java/src/org/chromium/content_public/browser", +]
diff --git a/chrome/browser/password_manager/android_test_helpers/javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerClientBridgeForTesting.java b/chrome/browser/password_manager/android_test_helpers/javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerClientBridgeForTesting.java new file mode 100644 index 0000000..ea0b1736 --- /dev/null +++ b/chrome/browser/password_manager/android_test_helpers/javatests/src/org/chromium/chrome/browser/password_manager/PasswordManagerClientBridgeForTesting.java
@@ -0,0 +1,28 @@ +// Copyright 2020 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.chrome.browser.password_manager; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; +import org.chromium.content_public.browser.WebContents; + +/** + * Android bridge to |ChromePasswordManagerClient| for Java tests. + */ +@JNINamespace("password_manager") +public class PasswordManagerClientBridgeForTesting { + @VisibleForTesting + public static void setLeakDialogWasShownForTesting(WebContents webContents, boolean value) { + PasswordManagerClientBridgeForTestingJni.get().setLeakDialogWasShownForTesting( + webContents, value); + } + + @NativeMethods + interface Natives { + void setLeakDialogWasShownForTesting(WebContents webContents, boolean value); + } +}
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h index 91bcf7d..85cf7e8 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.h +++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -254,8 +254,8 @@ } bool WasCredentialLeakDialogShown() const override; - void SetCredentialLeakDialogWasShownForTesting() { - was_leak_dialog_shown_ = true; + void SetCredentialLeakDialogWasShownForTesting(bool value) { + was_leak_dialog_shown_ = value; } #endif
diff --git a/chrome/browser/password_manager/password_manager_test_base.cc b/chrome/browser/password_manager/password_manager_test_base.cc index 0956148..3ec825f5 100644 --- a/chrome/browser/password_manager/password_manager_test_base.cc +++ b/chrome/browser/password_manager/password_manager_test_base.cc
@@ -426,7 +426,6 @@ auto cert = https_test_server().GetCertificate(); net::CertVerifyResult verify_result; verify_result.cert_status = 0; - verify_result.is_issued_by_known_root = true; verify_result.verified_cert = cert; mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK);
diff --git a/chrome/browser/payments/has_enrolled_instrument_browsertest.cc b/chrome/browser/payments/has_enrolled_instrument_browsertest.cc index 1d60f91..395d12d 100644 --- a/chrome/browser/payments/has_enrolled_instrument_browsertest.cc +++ b/chrome/browser/payments/has_enrolled_instrument_browsertest.cc
@@ -16,16 +16,6 @@ namespace payments { namespace { -// TODO(https://crbug.com/994799): Unify error messages between desktop and -// Android. -const char kNotSupportedMessage[] = -#if defined(OS_ANDROID) - "NotSupportedError: Payment method not supported. " -#else - "NotSupportedError: The payment method \"basic-card\" is not supported. " -#endif // OS_ANDROID - "User does not have valid information on file."; - enum HasEnrolledInstrumentMode { STRICT_HAS_ENROLLED_INSTRUMENT, LEGACY_HAS_ENROLLED_INSTRUMENT, @@ -52,8 +42,9 @@ NavigateTo("/has_enrolled_instrument.html"); } - const std::string& not_supported_message() const { - return not_supported_message_; + std::string not_supported_message() const { + return "NotSupportedError: The payment method \"basic-card\" is not " + "supported. User does not have valid information on file."; } // Helper function to test that all variations of hasEnrolledInstrument() @@ -111,7 +102,6 @@ } private: - std::string not_supported_message_ = kNotSupportedMessage; base::test::ScopedFeatureList feature_list_; DISALLOW_COPY_AND_ASSIGN(HasEnrolledInstrumentTest); @@ -276,10 +266,9 @@ // Run all tests with both values for // features::kStrictHasEnrolledAutofillInstrument. -INSTANTIATE_TEST_SUITE_P( - All, - HasEnrolledInstrumentTest, - ::testing::Values(STRICT_HAS_ENROLLED_INSTRUMENT, - LEGACY_HAS_ENROLLED_INSTRUMENT)); +INSTANTIATE_TEST_SUITE_P(All, + HasEnrolledInstrumentTest, + ::testing::Values(STRICT_HAS_ENROLLED_INSTRUMENT, + LEGACY_HAS_ENROLLED_INSTRUMENT)); } // namespace } // namespace payments
diff --git a/chrome/browser/permissions/chrome_permissions_client.cc b/chrome/browser/permissions/chrome_permissions_client.cc index 20a8561..3e7df14 100644 --- a/chrome/browser/permissions/chrome_permissions_client.cc +++ b/chrome/browser/permissions/chrome_permissions_client.cc
@@ -29,6 +29,7 @@ #if defined(OS_ANDROID) #include "chrome/android/chrome_jni_headers/ChromePermissionsClient_jni.h" #include "chrome/browser/android/resource_mapper.h" +#include "chrome/browser/android/search_permissions/search_permissions_service.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/permissions/grouped_permission_infobar_delegate_android.h" #else @@ -222,6 +223,30 @@ } #if defined(OS_ANDROID) +bool ChromePermissionsClient::IsPermissionControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) { + SearchPermissionsService* search_helper = + SearchPermissionsService::Factory::GetForBrowserContext(browser_context); + return search_helper && + search_helper->IsPermissionControlledByDSE(type, origin); +} + +bool ChromePermissionsClient::ResetPermissionIfControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) { + SearchPermissionsService* search_helper = + SearchPermissionsService::Factory::GetForBrowserContext(browser_context); + if (search_helper && + search_helper->IsPermissionControlledByDSE(type, origin)) { + search_helper->ResetDSEPermission(type); + return true; + } + return false; +} + infobars::InfoBarManager* ChromePermissionsClient::GetInfoBarManager( content::WebContents* web_contents) { return InfoBarService::FromWebContents(web_contents);
diff --git a/chrome/browser/permissions/chrome_permissions_client.h b/chrome/browser/permissions/chrome_permissions_client.h index 3def92f..08fff06 100644 --- a/chrome/browser/permissions/chrome_permissions_client.h +++ b/chrome/browser/permissions/chrome_permissions_client.h
@@ -47,6 +47,13 @@ const GURL& requesting_origin, const GURL& embedding_origin) override; #if defined(OS_ANDROID) + bool IsPermissionControlledByDse(content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) override; + bool ResetPermissionIfControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) override; infobars::InfoBarManager* GetInfoBarManager( content::WebContents* web_contents) override; infobars::InfoBar* MaybeCreateInfoBar(
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller.cc b/chrome/browser/policy/chrome_browser_cloud_management_controller.cc index 8bebe43..b5e25fd 100644 --- a/chrome/browser/policy/chrome_browser_cloud_management_controller.cc +++ b/chrome/browser/policy/chrome_browser_cloud_management_controller.cc
@@ -18,6 +18,8 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/device_identity/device_oauth2_token_service.h" +#include "chrome/browser/device_identity/device_oauth2_token_service_factory.h" #include "chrome/browser/enterprise_reporting/report_generator.h" #include "chrome/browser/enterprise_reporting/report_scheduler.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -342,6 +344,12 @@ UnenrollBrowser(); } +void ChromeBrowserCloudManagementController::OnServiceAccountChanged( + CloudPolicyClient* client) { + DeviceOAuth2TokenServiceFactory::Get()->SetServiceAccountEmail( + client->service_account_email()); +} + void ChromeBrowserCloudManagementController::ShutDown() { if (report_scheduler_) report_scheduler_.reset();
diff --git a/chrome/browser/policy/chrome_browser_cloud_management_controller.h b/chrome/browser/policy/chrome_browser_cloud_management_controller.h index eb73a9b..556264c 100644 --- a/chrome/browser/policy/chrome_browser_cloud_management_controller.h +++ b/chrome/browser/policy/chrome_browser_cloud_management_controller.h
@@ -102,6 +102,7 @@ void OnPolicyFetched(CloudPolicyClient* client) override; void OnRegistrationStateChanged(CloudPolicyClient* client) override; void OnClientError(CloudPolicyClient* client) override; + void OnServiceAccountChanged(CloudPolicyClient* client) override; // Early cleanup during browser shutdown process void ShutDown();
diff --git a/chrome/browser/policy/policy_network_browsertest.cc b/chrome/browser/policy/policy_network_browsertest.cc index 3d53c59..f2dc0eed 100644 --- a/chrome/browser/policy/policy_network_browsertest.cc +++ b/chrome/browser/policy/policy_network_browsertest.cc
@@ -106,7 +106,6 @@ net::ImportCertFromFile(net::GetTestCertsDirectory(), "quic-chain.pem"); net::CertVerifyResult verify_result; verify_result.verified_cert = test_cert; - verify_result.is_issued_by_known_root = true; mock_cert_verifier_.mock_cert_verifier()->AddResultForCert( test_cert, verify_result, net::OK); mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 1d661bc..39e4dbc 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -315,7 +315,7 @@ #include "chrome/browser/chromeos/settings/device_settings_cache.h" #include "chrome/browser/chromeos/system/automatic_reboot_manager.h" #include "chrome/browser/chromeos/system/input_device_settings.h" -#include "chrome/browser/device_identity/device_oauth2_token_service.h" +#include "chrome/browser/device_identity/chromeos/device_oauth2_token_store_chromeos.h" #include "chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api.h" #include "chrome/browser/extensions/extension_assets_manager_chromeos.h" #include "chrome/browser/media/protected_media_identifier_permission_context.h" @@ -377,8 +377,10 @@ #endif #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) +#include "chrome/browser/device_identity//device_oauth2_token_store_desktop.h" #include "chrome/browser/downgrade/downgrade_prefs.h" #include "chrome/browser/ui/startup/default_browser_prompt.h" + #endif #if defined(TOOLKIT_VIEWS) @@ -719,7 +721,7 @@ chromeos::DemoModeResourcesRemover::RegisterLocalStatePrefs(registry); chromeos::DemoSession::RegisterLocalStatePrefs(registry); chromeos::DemoSetupController::RegisterLocalStatePrefs(registry); - chromeos::DeviceOAuth2TokenService::RegisterPrefs(registry); + chromeos::DeviceOAuth2TokenStoreChromeOS::RegisterPrefs(registry); chromeos::device_settings_cache::RegisterPrefs(registry); chromeos::EasyUnlockService::RegisterPrefs(registry); chromeos::echo_offer::RegisterPrefs(registry); @@ -806,6 +808,7 @@ #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) RegisterDefaultBrowserPromptPrefs(registry); downgrade::RegisterPrefs(registry); + DeviceOAuth2TokenStoreDesktop::RegisterPrefs(registry); #endif // Obsolete. See MigrateObsoleteBrowserPrefs().
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc index 22aa4826..74631aad 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper_unittest.cc
@@ -209,7 +209,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( *cc.get(), url.scheme(), options, base::BindOnce(
diff --git a/chrome/browser/profiles/android/BUILD.gn b/chrome/browser/profiles/android/BUILD.gn index 166d4154..a8308d0 100644 --- a/chrome/browser/profiles/android/BUILD.gn +++ b/chrome/browser/profiles/android/BUILD.gn
@@ -18,6 +18,7 @@ sources = [ "java/src/org/chromium/chrome/browser/cookies/CanonicalCookie.java", "java/src/org/chromium/chrome/browser/cookies/CookiesFetcher.java", + "java/src/org/chromium/chrome/browser/profiles/OriginalProfileSupplier.java", "java/src/org/chromium/chrome/browser/profiles/Profile.java", "java/src/org/chromium/chrome/browser/profiles/ProfileKey.java", "java/src/org/chromium/chrome/browser/profiles/ProfileManager.java",
diff --git a/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/OriginalProfileSupplier.java b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/OriginalProfileSupplier.java new file mode 100644 index 0000000..e5f701b9 --- /dev/null +++ b/chrome/browser/profiles/android/java/src/org/chromium/chrome/browser/profiles/OriginalProfileSupplier.java
@@ -0,0 +1,35 @@ +// Copyright 2020 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.chrome.browser.profiles; + +import org.chromium.base.supplier.ObservableSupplierImpl; + +/** + * {@link org.chromium.base.supplier.ObservableSupplier} for {@link Profile} that notifies observers + * when the original {@link Profile} object is first created. Creation happens once per process on + * Android; all other profiles are incognito derivatives of the original profile. + * + * <p> + * If you call addObserver after the original profile has been created, a task + * will be immediately posted to notify your observer, and the profile will be synchronously + * returned. Like {@link org.chromium.base.supplier.ObservableSupplier}, this class must only be + * accessed from a single thread. + */ +public class OriginalProfileSupplier + extends ObservableSupplierImpl<Profile> implements ProfileManager.Observer { + public OriginalProfileSupplier() { + ProfileManager.addObserver(this); + } + + @Override + public void onProfileAdded(Profile profile) { + if (profile.isOffTheRecord()) return; + set(profile); + ProfileManager.removeObserver(this); + } + + @Override + public void onProfileDestroyed(Profile profile) {} +}
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index 7db1e7a..f4ad27f 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -273,22 +273,25 @@ if (is_chromeos) { grit("os_settings_resources") { - deps = [ "//chrome/browser/ui/webui/app_management:mojo_bindings_js" ] + deps = [ + "//chrome/browser/ui/webui/app_management:mojo_bindings_js", + "//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings_js", + ] if (optimize_webui) { # Required due to flattenhtml="true" on a generated file. enable_input_discovery_for_gn_analyze = false source = "settings/os_settings_resources_vulcanized.grd" deps += [ "//chrome/browser/resources/settings/chromeos:build" ] - - grit_flags = [ - "-E", - "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), - ] } else { source = "settings/os_settings_resources.grd" } + grit_flags = [ + "-E", + "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), + ] + defines = chrome_grit_defines outputs = [ "grit/os_settings_resources.h",
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing_test.js index ee42628..089ee94 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing_test.js
@@ -1306,9 +1306,8 @@ }); }); -// TODO(https://crbug.com/1033649) flaky on linux-chromeos-rel/dbg. TEST_F( - 'ChromeVoxEditingTest', 'DISABLED_CharacterTypedAfterNewLine', function() { + 'ChromeVoxEditingTest', 'CharacterTypedAfterNewLine', function() { const mockFeedback = this.createMockFeedback(); this.runWithLoadedTree( `
diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/paragraph_utils.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/paragraph_utils.js index b07fe21..d85a748 100644 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/paragraph_utils.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/paragraph_utils.js
@@ -93,11 +93,16 @@ } else if ( node.role === RoleType.CHECK_BOX || node.role === RoleType.MENU_ITEM_CHECK_BOX) { - const stateString = chrome.i18n.getMessage( - 'select_to_speak_checkbox_' + - (node.checked === 'true' ? - 'checked' : - (node.checked === 'mixed' ? 'mixed' : 'unchecked'))); + let stateString; + if (node.checked === 'true') { + stateString = + chrome.i18n.getMessage('select_to_speak_checkbox_checked'); + } else if (node.checked === 'mixed') { + stateString = chrome.i18n.getMessage('select_to_speak_checkbox_mixed'); + } else { + stateString = + chrome.i18n.getMessage('select_to_speak_checkbox_unchecked'); + } return !ParagraphUtils.isWhitespace(node.name) ? node.name + ' ' + stateString : stateString;
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb index 5767dbf8..84f18ef 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_af.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Beheer die toestel met net 1 of 2 skakelaars.</translation> <translation id="5336381510091010269">outo-inlyn+lys</translation> <translation id="5349770431644471053">Terugskakel</translation> <translation id="5355014376930441909">Geen volgende afdeling nie</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb index 9ee53c7..64eb24e6 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">መሣሪያውን በ1 ወይም 2 መቆጣጠሪያዎች ብቻ ይቆጣጠሩ።</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">የጀርባ አገናኝ</translation> <translation id="5355014376930441909">ምንም ቀጣይ ክፍል የለም</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb index 2bab943..c31aeef2 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">تسمح بالتحكُّم في الجهاز باستخدام مفتاح تبديل واحد أو مفتاحي تبديل.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">رابط رجوع</translation> <translation id="5355014376930441909">ليس هناك قسم تالٍ.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb index a78ba039..3ea80a2 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_as.xtb
@@ -537,7 +537,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ডিভাইচটো মাত্ৰ ১টা বা ২টা বুটামেৰে নিয়ন্ত্ৰণ কৰক।</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">পূর্বৰ পৃষ্ঠালৈ যোৱা লিংক</translation> <translation id="5355014376930441909">কোনো পৰৱৰ্তী শাখা নাই</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb index cdef837..851dec4 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Yalnız 1, yaxud 2 düymə ilə cihazı idarə edin.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Əks link</translation> <translation id="5355014376930441909">Sonrakı bölmə yoxdur</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb index d19448a..f7b1cc6 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_be.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Кіраванне прыладай з дапамогай аднаго-двух пераключальнікаў</translation> <translation id="5336381510091010269">убуд.аўтазап.+спіс</translation> <translation id="5349770431644471053">Спасылка вяртання</translation> <translation id="5355014376930441909">Няма наступнага раздзела</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb index cf12b931..f27d38e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bg.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Управлявайте устройството само с 1 или 2 превключвателя.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Препратка</translation> <translation id="5355014376930441909">Няма следваща секция</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb index 7b0dce188..4233711 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bn.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">১টি বা ২টি সুইচের মাধ্যমে ডিভাইস নিয়ন্ত্রণ করুন।</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ফিরে যাওয়ার লিঙ্ক</translation> <translation id="5355014376930441909">কোনও পরবর্তী বিভাগ নেই</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">কলাম</translation> <translation id="6387719785439924554">একপাশে</translation> <translation id="6393014464788431702">সমস্ত ইভেন্ট ফিল্টার বন্ধ করুন</translation> -<translation id="6417265370957905582">Google অ্যাসিস্ট্যান্ট</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{কোলন}one{#টি কোলন}other{#টি কোলন}}</translation> <translation id="6444046323172968959">সতর্কতা ডায়ালগ</translation> <translation id="6452403590345320472">সূচিপত্র</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb index b497e1c8..f8ce7542 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_bs.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kontrolirajte uređaj sa samo 1 ili 2 prekidača.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Povratni link</translation> <translation id="5355014376930441909">Nema sljedećeg odjeljka</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb index 62a153ef..31b7287 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ca.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controla el dispositiu amb només 1 o 2 botons d'activació.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Enllaç d'entrada</translation> <translation id="5355014376930441909">No hi ha cap secció més</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb index 642410f2..0efda81 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_cs.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Ovládejte zařízení jen jedním nebo dvěma přepínači.</translation> <translation id="5336381510091010269">auto přímo+sezn</translation> <translation id="5349770431644471053">Zpětný odkaz</translation> <translation id="5355014376930441909">Žádná další sekce není</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb index 09762d3b..44bd67c1 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Styr enheden med blot én eller to kontakter.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Backlink</translation> <translation id="5355014376930441909">Der er ikke flere afsnit</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb index c103389..69a84b4 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_de.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Das Gerät lässt sich über einen oder zwei Schalter steuern.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Rückverweis</translation> <translation id="5355014376930441909">Kein weiterer Abschnitt</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb index 9028f9b..b6ddf52 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_el.xtb
@@ -539,7 +539,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Ελέγξτε τη συσκευή με μόνο 1 ή 2 διακόπτες.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Σύνδεσμος επιστροφής</translation> <translation id="5355014376930441909">Δεν υπάρχει επόμενη ενότητα.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb index b0dfe04d..ceb8e9e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_en-GB.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Control the device with just 1 or 2 switches.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Back link</translation> <translation id="5355014376930441909">No next section</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb index 1fc31e6..f930960 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es-419.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controla el dispositivo con solo 1 o 2 interruptores.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Retrovínculo</translation> <translation id="5355014376930441909">No hay secciones siguientes</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb index a73dfbb..5676eb10 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controla el dispositivo con solo 1 o 2 interruptores.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Enlace de retroceso</translation> <translation id="5355014376930441909">No hay ninguna sección posterior</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb index 17f79c8b..de610e30 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_et.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Võimaldab juhtida seadet vaid 1 või 2 lülitiga.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Tagasilink</translation> <translation id="5355014376930441909">Järgmist jaotist ei ole</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb index 63d7d2cbe..983a117 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Etengailu bat edo bi erabilita kontrolatu ahal izango duzu gailua.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Webgunerako esteka</translation> <translation id="5355014376930441909">Ez dago beste atalik honen ondoren</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb index 37f6a4b..5c7a0b08c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fa.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">کنترل دستگاه تنها با ۱ یا ۲ سوئیچ.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">پیوند برگشت</translation> <translation id="5355014376930441909">بخش بعدی وجود ندارد</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb index b398638..83dbec0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fi.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Ohjaa laitetta vain 1–2 kytkimellä.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Viittaajan linkki</translation> <translation id="5355014376930441909">Ei seuraavia osioita</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb index a082994e..5ae737c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fil.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kontrolin ang device sa pamamagitan lang ng 1 o 2 switch.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Back link</translation> <translation id="5355014376930441909">Walang susunod na seksyon</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb index 28b34e94..169a743f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr-CA.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Pour commander l'appareil avec juste un ou deux commutateurs.</translation> <translation id="5336381510091010269">saisie semi-automatique alignement + liste</translation> <translation id="5349770431644471053">Lien retour</translation> <translation id="5355014376930441909">Aucune section suivante</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb index 1a83b4a..35175363 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Contrôlez l'appareil avec seulement 1 ou 2 commutateurs.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Lien entrant</translation> <translation id="5355014376930441909">Aucune section suivante</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb index 324ece0b..09f26b96 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controla o dispositivo con só 1 ou 2 interruptores.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Ligazón de retroceso</translation> <translation id="5355014376930441909">Non hai ningunha sección posterior</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb index 1867f467..a6c076f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ડિવાઇસને માત્ર 1 કે 2 સ્વિચ વડે નિયંત્રિત કરો.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">બૅક લિંક</translation> <translation id="5355014376930441909">કોઈ આગલો વિભાગ નથી</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb index 23be4d45..b2dbfe0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hi.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">एक या दो स्विच से डिवाइस नियंत्रित करें.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">बैक लिंक</translation> <translation id="5355014376930441909">आगे कोई सेक्शन नहीं है</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb index da34d65..4cb201f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hr.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kontrolirajte uređaj samo jednim ili dvama prekidačima.</translation> <translation id="5336381510091010269">autougr+pop</translation> <translation id="5349770431644471053">Povratna veza</translation> <translation id="5355014376930441909">Nema sljedećeg odjeljka</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb index 917ee60..dd32c40f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Mindössze egy vagy kettő kapcsolóval vezérelheti az eszközt.</translation> <translation id="5336381510091010269">automatikus kiegészítés (szövegközi és lista)</translation> <translation id="5349770431644471053">Visszamutató link</translation> <translation id="5355014376930441909">Nincs következő szakasz</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb index da717af..75c9baf 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Կառավարեք սարքն ընդամենը 1 կամ 2 փոխանջատիչի օգնությամբ</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Հետադարձ հղում</translation> <translation id="5355014376930441909">Հաջորդ բաժին չկա</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb index 2e9a527..fb8ba69 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kontrol perangkat hanya dengan satu atau dua tombol.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Back link</translation> <translation id="5355014376930441909">Tidak ada bagian berikutnya</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb index 879ab0e..4b9ac0f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Stjórnaðu tækinu með aðeins einum eða tveimur rofum.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Baktengill</translation> <translation id="5355014376930441909">Enginn næsti hluti</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb index 3ff2489..80b157c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_it.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controlla il dispositivo con solo 1 o 2 sensori.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Backlink</translation> <translation id="5355014376930441909">Nessuna sezione successiva</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb index 32ad416..dfad1bb 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">אפשר לשלוט במכשיר בעזרת מתג אחד או שניים בלבד.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">קישור לאחור</translation> <translation id="5355014376930441909">אין עוד קטעים</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb index e34c976..70cf36cb 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">1~2 個のスイッチだけでデバイスを制御します。</translation> <translation id="5336381510091010269">リストのインライン オートコンプリート</translation> <translation id="5349770431644471053">言及リンク</translation> <translation id="5355014376930441909">次のセクションはありません</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb index a703a013..fffa1d0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ka.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">მართეთ მოწყობილობა 1 ან 2 გადამრთველით.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">უკუბმული</translation> <translation id="5355014376930441909">შემდეგი სექცია არ არის</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb index 6d67d257..78423a9 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Құрылғыны 1 не 2 ауыстырғышпен басқарыңыз.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Кері сілтеме</translation> <translation id="5355014376930441909">Келесі бөлім жоқ.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb index a875900..72d8d4e48 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">គ្រប់គ្រងឧបករណ៍ដោយប្រើប៊ូតុងបិទបើក 1 ឬ 2 ប៉ុណ្ណោះ។</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">តំណថយក្រោយ</translation> <translation id="5355014376930441909">គ្មានផ្នែកបន្ទាប់ទេ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb index 242fcbe..a5b781b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ಕೇವಲ 1 ಅಥವಾ 2 ಬದಲಾವಣೆಗಳೊಂದಿಗೆ ಸಾಧನವನ್ನು ನಿಯಂತ್ರಿಸಿ.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ಬ್ಯಾಕ್ಲಿಂಕ್</translation> <translation id="5355014376930441909">ಯಾವುದೇ ಮುಂದಿನ ವಿಭಾಗವಿಲ್ಲ</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">ಕಾಲಮ್</translation> <translation id="6387719785439924554">ಪಕ್ಕದಲ್ಲಿ</translation> <translation id="6393014464788431702">ಎಲ್ಲಾ ಈವೆಂಟ್ ಫಿಲ್ಟರ್ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> -<translation id="6417265370957905582">Google ಸಹಾಯಕ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{ವಿವರಣೆ ಚಿಹ್ನೆ}one{# ವಿವರಣೆ ಚಿಹ್ನೆಗಳು}other{# ವಿವರಣೆ ಚಿಹ್ನೆಗಳು}}</translation> <translation id="6444046323172968959">ಎಚ್ಚರಿಕೆ ಸಂವಾದ</translation> <translation id="6452403590345320472">ಪರಿವಿಡಿ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb index 4bdc472..68a92de2 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">간단히 스위치 한두 개로 기기를 제어하세요.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">뒤로 링크</translation> <translation id="5355014376930441909">다음 섹션이 없습니다</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb index c3eaee78..2dbce95 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ky.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Түзмөктү 1 же 2 которуштургуч аркылуу башкарасыз.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">кайтарма шилтеме</translation> <translation id="5355014376930441909">Кийинки бөлүм жок</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb index e9b92c5..6371a4f 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ຄວບຄຸມອຸປະກອນດ້ວຍ 1 ຫຼື 2 ປຸ່ມເທົ່ານັ້ນ.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ລິ້ງກັບຄືນ</translation> <translation id="5355014376930441909">ບໍ່ມີພາກສ່ວນຖັດໄປ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb index 1f1f7e73..72491723 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Valdykite įrenginį tik 1 ar 2 jungikliais.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Atgalinė nuoroda</translation> <translation id="5355014376930441909">Nėra kitos skilties</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb index 1e8d1c71..509aeaf0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kontrolējiet ierīci, izmantojot tikai 1–2 slēdžus.</translation> <translation id="5336381510091010269">iekļautā automātiskā pabeigšana un saraksts</translation> <translation id="5349770431644471053">Atpakaļsaite</translation> <translation id="5355014376930441909">Nav nākamās sadaļas.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb index 1951fe4..9f0c9bfc 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mk.xtb
@@ -539,7 +539,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Контролирајте го уредот само со еден или два прекинувачи.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Повратен линк</translation> <translation id="5355014376930441909">Нема следна секција</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb index 7ab30449..9597e46 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ml.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ഒന്നോ രണ്ടോ തവണ ആക്സസ് മാറ്റി ഉപകരണം നിയന്ത്രിക്കൂ.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ബാക്ക് ലിങ്ക്</translation> <translation id="5355014376930441909">അടുത്ത വിഭാഗങ്ങളൊന്നുമില്ല</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">കോളം</translation> <translation id="6387719785439924554">അരികിൽ</translation> <translation id="6393014464788431702">എല്ലാ ഇവന്റ് ഫിൽട്ടറുകളും പ്രവർത്തനരഹിതമാക്കുക</translation> -<translation id="6417265370957905582">Google അസിസ്റ്റന്റ്</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{കോളൻ}other{# കോളനുകൾ}}</translation> <translation id="6444046323172968959">മുന്നറിയിപ്പ് ഡയലോഗ്</translation> <translation id="6452403590345320472">ഉള്ളടക്ക പട്ടിക</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb index c9e38e53..0195e77 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Төхөөрөмжийг зөвхөн 1 эсвэл 2 сэлгэлтээр хянана уу.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Арын холбоос</translation> <translation id="5355014376930441909">Дараагийн хэсэг алга байна</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb index 8d9ee3c0..934cf177 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">फक्त एक किंवा दोन स्विचसह डिव्हाइस नियंत्रित करा.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">मागील लिंक</translation> <translation id="5355014376930441909">पुढील विभाग नाही</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">स्तंभ</translation> <translation id="6387719785439924554">बाजूस</translation> <translation id="6393014464788431702">सर्व इव्हेंट फिल्टर बंद करा</translation> -<translation id="6417265370957905582">Google साहाय्यक</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{अपूर्ण विराम}other{# अपूर्ण विराम}}</translation> <translation id="6444046323172968959">सूचना डायलॉग</translation> <translation id="6452403590345320472">अनुक्रमणिका</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ms.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ms.xtb index afe0452..33feb8bd 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ms.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ms.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Kawal peranti dengan hanya 1 atau 2 suis.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Pautan balik</translation> <translation id="5355014376930441909">Tiada bahagian seterusnya</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb index d24363cb..93f7e932 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">စက်ပစ္စည်းကို ၁ ချက်၊ ၂ ချက် နှိပ်ရုံဖြင့် ထိန်းချုပ်သည်။</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ပင်ရင်းလင့်ခ်</translation> <translation id="5355014376930441909">နောက်ထပ် အပိုင်း မရှိပါ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb index 8b443e95..fe9d2476 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">केवल १ वा २ वटा स्विचहरू प्रयोग गरी यन्त्र नियन्त्रण गर्नुहोस्।</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ब्याक लिंक</translation> <translation id="5355014376930441909">अर्को कुनै पनि खण्ड छैन</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb index b6140a6c..2af3978 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_nl.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Beheer het apparaat met slechts één of twee schakelaars.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Back link</translation> <translation id="5355014376930441909">Geen volgend gedeelte</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb index 160d9b7f..9188196 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Styr enheten med kun én eller to brytere.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Tilbakelink</translation> <translation id="5355014376930441909">Det finnes ingen flere deler</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb index f912627..ee43641 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_or.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">କେବଳ 1 ବା 2 ସ୍ୱିଚ୍ରେ ଡିଭାଇସ୍କୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ।</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ବ୍ୟାକ୍ ଲିଙ୍କ୍</translation> <translation id="5355014376930441909">କୌଣସି ପରବର୍ତ୍ତୀ ବିଭାଗ ନାହିଁ</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">ସ୍ତମ୍ଭ</translation> <translation id="6387719785439924554">ଅଲଗା</translation> <translation id="6393014464788431702">ସମସ୍ତ ଇଭେଣ୍ଟ ଫିଲ୍ଟର୍ ଅକ୍ଷମ କରନ୍ତୁ</translation> -<translation id="6417265370957905582">Google ଆସିଷ୍ଟାଣ୍ଟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{କୋଲନ୍}other{#ଟି କୋଲନ୍}}</translation> <translation id="6444046323172968959">ଆଲର୍ଟ ଡାୟଲଗ୍</translation> <translation id="6452403590345320472">ବିଷୟବସ୍ତୁର ଟେବଲ୍</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb index 100adc4..247d45a 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pa.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ਬੱਸ 1 ਜਾਂ 2 ਸਵਿੱਚਾਂ ਨਾਲ ਡੀਵਾਈਸ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ।</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ਬੈਕ ਲਿੰਕ</translation> <translation id="5355014376930441909">ਕੋਈ ਅਗਲਾ ਸੈਕਸ਼ਨ ਨਹੀਂ</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">ਕਾਲਮ</translation> <translation id="6387719785439924554">ਵੱਖ</translation> <translation id="6393014464788431702">ਸਾਰੇ ਇਵੈਂਟ ਫਿਲਟਰ ਬੰਦ ਕਰੋ</translation> -<translation id="6417265370957905582">Google ਅਸਿਸਟੈਂਟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{ਕੋਲਨ}one{# ਕੋਲਨ}other{# ਕੋਲਨ}}</translation> <translation id="6444046323172968959">ਚਿਤਾਵਨੀ ਡਾਇਲੌਗ</translation> <translation id="6452403590345320472">ਵਿਸ਼ਾ ਸੂਚੀ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb index ab8813d..5cf5a67 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pl.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Steruj urządzeniem za pomocą 1 lub 2 przełączników.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Link zwrotny</translation> <translation id="5355014376930441909">Nie ma następnej sekcji</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb index 9d0d5d29..d59a34e5 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controle o dispositivo com apenas um ou dois interruptores.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Backlink</translation> <translation id="5355014376930441909">Nenhuma seção a seguir</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb index 8036bba6..9edef64 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-PT.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controle o dispositivo com apenas 1 ou 2 interruptores.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Backlink</translation> <translation id="5355014376930441909">Não existe nenhuma secção seguinte.</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb index ab9429f..b8a5bca 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ro.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Controlează dispozitivul doar cu unul sau două comutatoare.</translation> <translation id="5336381510091010269">completare automată inline+listă</translation> <translation id="5349770431644471053">Backlink</translation> <translation id="5355014376930441909">Nu există o secțiune următoare</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb index f207cee..8953b5c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Возможность управлять устройством с помощью 1 или 2 переключателей.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Обратная ссылка</translation> <translation id="5355014376930441909">Следующего раздела нет</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb index d3473c9..19e6b280 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">1 ස්විචයක් හෝ ස්විච 2 ක් සමඟ උපාංගය පාලන කරන්න.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">පසු සබැඳිය</translation> <translation id="5355014376930441909">මීළඟ කොටසක් නැත</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb index 4a17524..dd15c69 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sk.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Ovládajte zariadenie iba jedným alebo dvoma prepínačmi.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Spätný odkaz</translation> <translation id="5355014376930441909">Žiadna ďalšia sekcia</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb index b265fcb7..1d7c19e0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Nadziranje naprave s samo enim ali dvema stikaloma.</translation> <translation id="5336381510091010269">samovvr+szn</translation> <translation id="5349770431644471053">Povratna povezava</translation> <translation id="5355014376930441909">Ni naslednjega razdelka</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb index 5481c40..8dc5afb 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sq.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Komandoje pajisjen me thjesht 1 ose 2 çelësa.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Lidhje referencë</translation> <translation id="5355014376930441909">Nuk ka seksion tjetër</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb index 525d5610..ce9d0a5 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Контролишите уређај помоћу само 1 или 2 прекидача.</translation> <translation id="5336381510091010269">аутоматско довршавање уметнутог текста+листе</translation> <translation id="5349770431644471053">Повратна веза</translation> <translation id="5355014376930441909">Нема следећег одељка</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb index 2ba1595..6782260 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sv.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Styr enheten med bara en eller två brytare.</translation> <translation id="5336381510091010269">autoslutför på raden och i lista</translation> <translation id="5349770431644471053">Bakåtlänk</translation> <translation id="5355014376930441909">Det finns inga fler avsnitt</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb index d730414e..b842958c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sw.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Dhibiti kifaa kwa kutumia swichi 1 au 2 tu.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Kiungo rejeshi</translation> <translation id="5355014376930441909">Hakuna sehemu inayofuata</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb index 84c80b73..a3d18ce 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ta.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ஒன்றிரண்டு சுவிட்சுகளைக் கொண்டு சாதனத்தை நிர்வகிக்கும்.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">பின்னிணைப்பு</translation> <translation id="5355014376930441909">அடுத்த பிரிவு எதுவும் இல்லை</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">நெடுவரிசை</translation> <translation id="6387719785439924554">aside</translation> <translation id="6393014464788431702">நிகழ்வு வடிப்பான்கள் அனைத்தையும் முடக்கு</translation> -<translation id="6417265370957905582">Google அசிஸ்டண்ட்</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{முக்காற்புள்ளி}other{# முக்காற்புள்ளிகள்}}</translation> <translation id="6444046323172968959">விழிப்பூட்டல் செய்தி</translation> <translation id="6452403590345320472">உள்ளடக்க அட்டவணை</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb index be4e1df..3766ac76 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">కేవలం 1 లేదా 2 మార్పులతో పరికరాన్ని నియంత్రించండి.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">వెనుకకు తీసుకువెళ్లే లింక్</translation> <translation id="5355014376930441909">తర్వాత విభాగం లేదు</translation> @@ -668,7 +667,7 @@ <translation id="6385591741672306837">నిలువు</translation> <translation id="6387719785439924554">ప్రక్కన</translation> <translation id="6393014464788431702">అన్ని ఈవెంట్ ఫిల్టర్లను డిజేబుల్ చేయండి</translation> -<translation id="6417265370957905582">Google అసిస్టెంట్</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="641759969622533235">{COUNT,plural, =1{కోలన్ గుర్తు}other{# కోలన్ గుర్తులు}}</translation> <translation id="6444046323172968959">హెచ్చరిక డైలాగ్</translation> <translation id="6452403590345320472">విషయ పట్టిక</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb index 9f3b982..5e8f543 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_th.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">ควบคุมอุปกรณ์ด้วยสวิตช์เพียง 1 หรือ 2 ปุ่ม</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">ลิงก์กลับมาที่หน้า</translation> <translation id="5355014376930441909">ไม่มีส่วนถัดไป</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb index c0e07be7..ef3de909 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Cihazı yalnızca 1 veya 2 anahtarla kontrol edin.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Geri bağlantı</translation> <translation id="5355014376930441909">Sonraki bölüm yok</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb index 3e137ab..fbc61f8 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uk.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Керувати пристроєм за допомогою 1 чи 2 перемикачів.</translation> <translation id="5336381510091010269">вбудоване автозавершення та список</translation> <translation id="5349770431644471053">Зворотне посилання</translation> <translation id="5355014376930441909">Немає наступного розділу</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb index 7e408644..6ec8206 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">صرف 1 یا 2 سوئچز کی مدد سے آلے کو کنٹرول کریں۔</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">بیک لنک</translation> <translation id="5355014376930441909">کوئی اگلا سیکشن نہیں ہے</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb index f98a46f..e95b120bf 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb
@@ -537,7 +537,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">1 yoki 2 almashtirish bilan qurilmani boshqarish imkoniyati.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Qayta havola</translation> <translation id="5355014376930441909">Keyingi qism mavjud emas</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb index 7163e68..62454cb 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Điều khiển thiết bị chỉ bằng 1 hoặc 2 công tắc.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Liên kết ngược</translation> <translation id="5355014376930441909">Không có phần nào tiếp theo</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb index 64c7c34..e3bce3d 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-CN.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">只需 1 个或 2 个开关即可控制此设备。</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">返回链接</translation> <translation id="5355014376930441909">没有下一个章节</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb index 5f966459..78b93a8b 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">使用 1 或 2 種開關設定就能控制裝置。</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">反向連結</translation> <translation id="5355014376930441909">冇下一個區段</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb index 0b320dc..5c1b9fa0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-TW.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">使用 1 或 2 種切換設定就能操控裝置。</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">反向連結</translation> <translation id="5355014376930441909">沒有下一個區段</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb index 724855b30..db84b06 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb
@@ -538,7 +538,6 @@ <ph name="UNDERLINE_STRING" /> <ph name="LINE_THROUGH_STRING" /> <ph name="FONT_FAMILY_STRING" /></translation> -<translation id="5331522683003474486">Lawula idivayisi ngokushintsha okungu-1 noma okungu-2 nje.</translation> <translation id="5336381510091010269">autoinl+lst</translation> <translation id="5349770431644471053">Isixhumanisi esingemuva</translation> <translation id="5355014376930441909">Asikho isigaba esilandelayo</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/switch_access_strings.grdp b/chrome/browser/resources/chromeos/accessibility/strings/switch_access_strings.grdp index 210adec..f53d2e1 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/switch_access_strings.grdp +++ b/chrome/browser/resources/chromeos/accessibility/strings/switch_access_strings.grdp
@@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version='1.0' encoding='UTF-8'?> <grit-part> <message desc="The product name for Switch Access." name="IDS_SWITCH_ACCESS_NAME"> Switch Access </message> <message desc="The description for Switch Access." name="IDS_SWITCH_ACCESS_DESCRIPTION"> - Control the device with just 1 or 2 switches. + Control the device with just 1 or 2 switches </message> <message desc="The title of the Switch Access menu to select which action to perform on an element." name="IDS_SWITCH_ACCESS_MENU_TITLE"> Switch Access Menu
diff --git a/chrome/browser/resources/chromeos/accessibility/tools/fix_grd.py b/chrome/browser/resources/chromeos/accessibility/tools/fix_grd.py index 60ee98a..331f06a2 100755 --- a/chrome/browser/resources/chromeos/accessibility/tools/fix_grd.py +++ b/chrome/browser/resources/chromeos/accessibility/tools/fix_grd.py
@@ -17,6 +17,7 @@ import path_helpers import optparse import os +import re import sys import xml.etree.ElementTree as ET @@ -51,7 +52,18 @@ def MaybeRemoveUnusedMessage(root, message, removed_so_far): found = False - message_id = message.get('name').lower().replace('ids_chromevox_','') + + # Always strip IDS_ and lowercase the message id. + base_message_id = re.sub('^ids_', '', message.get('name').lower()) + + # Get the unprefixed message id. This is used by various extensions like + # ChromeVox and STS. + message_id = re.sub('^(chromevox_|select_to_speak_|switch_access_)', + '', base_message_id) + + # This message is needed by the extension system. + if message_id == 'locale': + return False # Explicitly skip these messages in ChromeVox since they get programmatically # constructed. If the non _brl counterpart was removed though, also remove it. @@ -79,7 +91,9 @@ continue with open(os.path.join(dir_name, fname), 'r') as f: for line in f: - index = line.find(message_id) + index = line.find(base_message_id) + if index == -1: + index = line.find(message_id) # Eliminate partial matches (e.g. for bar, foo_bar). if index > 0 and line[index - 1] == '_':
diff --git a/chrome/browser/resources/chromeos/internet_config_dialog/OWNERS b/chrome/browser/resources/chromeos/internet_config_dialog/OWNERS index f0e0e725..dce9805 100644 --- a/chrome/browser/resources/chromeos/internet_config_dialog/OWNERS +++ b/chrome/browser/resources/chromeos/internet_config_dialog/OWNERS
@@ -1,6 +1,3 @@ -azeemarshad@chromium.org -jonmann@chromium.org -khorimoto@chromium.org -stevenjb@chromium.org +file://chrome/browser/resources/settings/chromeos/internet_page/OWNERS -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog/OWNERS b/chrome/browser/resources/chromeos/internet_detail_dialog/OWNERS index f0e0e725..dce9805 100644 --- a/chrome/browser/resources/chromeos/internet_detail_dialog/OWNERS +++ b/chrome/browser/resources/chromeos/internet_detail_dialog/OWNERS
@@ -1,6 +1,3 @@ -azeemarshad@chromium.org -jonmann@chromium.org -khorimoto@chromium.org -stevenjb@chromium.org +file://chrome/browser/resources/settings/chromeos/internet_page/OWNERS -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/chrome/browser/resources/chromeos/login/cr_ui.js b/chrome/browser/resources/chromeos/login/cr_ui.js index 0d8de64..8613ee4 100644 --- a/chrome/browser/resources/chromeos/login/cr_ui.js +++ b/chrome/browser/resources/chromeos/login/cr_ui.js
@@ -267,7 +267,7 @@ } Oobe.disableSigninUI(); - chrome.send('skipToLoginForTesting', [username]); + chrome.send('skipToLoginForTesting'); if (!enterpriseEnroll) { chrome.send('completeLogin', [gaia_id, username, password, false]);
diff --git a/chrome/browser/resources/extensions/detail_view.html b/chrome/browser/resources/extensions/detail_view.html index f822536b3..de97fd2 100644 --- a/chrome/browser/resources/extensions/detail_view.html +++ b/chrome/browser/resources/extensions/detail_view.html
@@ -40,26 +40,22 @@ flex-grow: 1; } - .section { - @apply --cr-section; - } - - .section.block { + .cr-section.block { box-sizing: border-box; display: block; padding-bottom: var(--cr-section-vertical-padding); padding-top: var(--cr-section-vertical-padding); } - .section.continuation { + .cr-section.continuation { border-top: none; } - .section.control-line { + .cr-section.control-line { justify-content: space-between; } - .section:first-child { + .cr-section:first-child { border: none; } @@ -110,7 +106,6 @@ } extensions-toggle-row { - @apply --cr-section; box-sizing: border-box; padding-inline-end: 0; padding-inline-start: 0; @@ -151,7 +146,7 @@ [[data.name]] </span> </div> - <div class="section continuation control-line" id="enable-section"> + <div class="cr-section continuation control-line" id="enable-section"> <span class$="[[computeEnabledStyle_(data.state)]]"> [[computeEnabledText_(data.state, '$i18nPolymer{itemOn}', '$i18nPolymer{itemOff}')]] @@ -183,7 +178,7 @@ </div> <div id="warnings" hidden$="[[!hasWarnings_(data.*)]]"> <div id="runtime-warnings" hidden$="[[!data.runtimeWarnings.length]]" - class="section continuation warning control-line"> + class="cr-section continuation warning control-line"> <iron-icon class="warning-icon" icon="cr:error"></iron-icon> <span> <template is="dom-repeat" items="[[data.runtimeWarnings]]"> @@ -197,7 +192,7 @@ </cr-button> </template> </div> - <div class="section continuation warning" id="suspicious-warning" + <div class="cr-section continuation warning" id="suspicious-warning" hidden$="[[!data.disableReasons.suspiciousInstall]]"> <iron-icon class="warning-icon" icon="cr:warning"></iron-icon> <span> @@ -207,7 +202,7 @@ </a> </span> </div> - <div class="section continuation warning control-line" + <div class="cr-section continuation warning control-line" id="corrupted-warning" hidden$="[[!showRepairButton_(data.disableReasons.corruptInstall)]]"> <iron-icon class="warning-icon" icon="cr:warning"></iron-icon> @@ -217,18 +212,18 @@ $i18n{itemRepair} </cr-button> </div> - <div class="section continuation warning" id="blacklisted-warning" + <div class="cr-section continuation warning" id="blacklisted-warning" hidden$="[[!data.blacklistText]]"> <iron-icon class="warning-icon" icon="cr:warning"></iron-icon> <span>[[data.blacklistText]]</span> </div> - <div class="section continuation warning" id="update-required-warning" + <div class="cr-section continuation warning" id="update-required-warning" hidden$="[[!data.disableReasons.updateRequired]]"> <iron-icon class="warning-icon" icon="cr:warning"></iron-icon> <span>$i18n{updateRequiredByPolicy}</span> </div> </div> - <div class="section continuation block"> + <div class="cr-section continuation block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemDescriptionLabel} </div> @@ -236,13 +231,13 @@ [[getDescription_(data.description, '$i18nPolymer{noDescription}')]] </div> </div> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemVersion} </div> <div class="section-content">[[data.version]]</div> </div> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemSize} </div> @@ -252,14 +247,14 @@ </paper-spinner-lite> </div> </div> - <div class="section block" id="id-section" hidden$="[[!inDevMode]]"> + <div class="cr-section block" id="id-section" hidden$="[[!inDevMode]]"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemIdHeading} </div> <div class="section-content">[[data.id]]</div> </div> <template is="dom-if" if="[[inDevMode]]"> - <div class="section block" id="inspectable-views"> + <div class="cr-section block" id="inspectable-views"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemInspectViews} </div> @@ -280,7 +275,7 @@ </div> </div> </template> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemPermissions} </div> @@ -304,7 +299,7 @@ </ul> </div> </div> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemSiteAccess} </div> @@ -333,7 +328,7 @@ </div> <template is="dom-if" if="[[hasDependentExtensions_(data.dependentExtensions.splices)]]"> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemDependencies} </div> @@ -353,6 +348,7 @@ data.incognitoAccess.isEnabled, incognitoAvailable)]]"> <extensions-toggle-row id="allow-incognito" checked="[[data.incognitoAccess.isActive]]" + class="hr" on-change="onAllowIncognitoChange_"> <div> <div>$i18n{itemAllowIncognito}</div> @@ -363,6 +359,7 @@ <template is="dom-if" if="[[data.fileAccess.isEnabled]]"> <extensions-toggle-row id="allow-on-file-urls" checked="[[data.fileAccess.isActive]]" + class="hr" on-change="onAllowOnFileUrlsChange_"> <span>$i18n{itemAllowOnFileUrls}</span> </extensions-toggle-row> @@ -370,6 +367,7 @@ <template is="dom-if" if="[[data.errorCollection.isEnabled]]"> <extensions-toggle-row id="collect-errors" checked="[[data.errorCollection.isActive]]" + class="hr" on-change="onCollectErrorsChange_"> <span>$i18n{itemCollectErrors}</span> </extensions-toggle-row> @@ -391,7 +389,7 @@ <cr-link-row class="hr" hidden="[[!data.webStoreUrl.length]]" id="viewInStore" label="$i18n{viewInStore}" on-click="onViewInStoreTap_" external></cr-link-row> - <div class="section block"> + <div class="cr-section block"> <div class="section-title" role="heading" aria-level="2"> $i18n{itemSource} </div>
diff --git a/chrome/browser/resources/extensions/toggle_row.html b/chrome/browser/resources/extensions/toggle_row.html index 68c0a299..9752fed0 100644 --- a/chrome/browser/resources/extensions/toggle_row.html +++ b/chrome/browser/resources/extensions/toggle_row.html
@@ -1,6 +1,6 @@ <style> :host { - flex-direction: column; + display: block; touch-action: none; }
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js index 51b85d3..62e31b4 100644 --- a/chrome/browser/resources/local_ntp/externs.js +++ b/chrome/browser/resources/local_ntp/externs.js
@@ -439,11 +439,12 @@ * description: string, * descriptionClass: !Array<!ACMatchClassification>, * destinationUrl: string, - * inlineAutocompletion: string, - * isSearchType: boolean, * fillIntoEdit: string, + * iconUrl: string, * imageDominantColor: string, * imageUrl: string, + * inlineAutocompletion: string, + * isSearchType: boolean, * supportsDeletion: boolean, * swapContentsAndDescription: boolean, * type: string,
diff --git a/chrome/browser/resources/local_ntp/icons.grdp b/chrome/browser/resources/local_ntp/icons.grdp new file mode 100644 index 0000000..d0028fb --- /dev/null +++ b/chrome/browser/resources/local_ntp/icons.grdp
@@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <include name="IDR_LOCAL_NTP_ICONS_CLOCK" + file="resources/local_ntp/icons/clock.svg" type="BINDATA" compress="gzip" /> + <include name="IDR_LOCAL_NTP_ICONS_PAGE" + file="resources/local_ntp/icons/page.svg" type="BINDATA" compress="gzip" /> +</grit-part>
diff --git a/chrome/browser/resources/local_ntp/icons/page.svg b/chrome/browser/resources/local_ntp/icons/page.svg new file mode 100644 index 0000000..90b2f95 --- /dev/null +++ b/chrome/browser/resources/local_ntp/icons/page.svg
@@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path fill="gray" d="M12 2c5.52 0 10 4.48 10 10s-4.48 10-10 10S2 17.52 2 12 6.48 2 12 2zM4 12h4.4c3.41.02 4.92 1.73 4.54 5.13H9.49v2.47a8 8 0 0 0 10.5-8.08C19.33 12.5 18.33 13 17 13c-2.14 0-3.21-.92-3.21-2.75h-3.75c-.27-2.73.68-4.09 2.87-4.09 0-.97.33-1.6.81-1.97A8 8 0 0 0 4 12z"/></svg> \ No newline at end of file
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css index 22e06db..e563fe18 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.css +++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -153,24 +153,6 @@ max-width: 584px; } -.google-g-icon { - background-image: - url(../../../../ui/webui/resources/images/200-logo_googleg.png); - background-position: center; - background-repeat: no-repeat; - background-size: 14px; - bottom: 0; - left: 16px; - position: absolute; - top: 0; - width: 24px; -} - -[dir=rtl] .google-g-icon { - left: auto; - right: 16px; -} - #fakebox { background: white; cursor: text; @@ -219,14 +201,22 @@ display: none; } -/* The realbox is a "loupe" (.search-icon) by default, but when the selection - * ends up on match with a different icon, the realbox also gets that icon. - * Example: typing the start of a URL with a favicon or the user pressing - * up/down to select matches sets a background-image here and disables the - * -webkit-mask applied by .search-icon. */ -#realbox-icon { +/* The realbox has a "loupe" or "search" icon by default. When a match with a + * different icon ("clock" for historical searches or "page" for URLs) or a + * favicon is selected, the realbox also gets that icon/favicon. For both the + * realbox as well as the dropdown, icons are rendered via webkit-mask-image and + * background-color and favicons are rendered via background- + image set on the + * element's style property in JS. */ +#realbox-icon, +.match-icon { + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 16px; + background-color: var(--search-box-icon, rgb(117, 117, 117)); background-position: center center; background-repeat: no-repeat; + background-size: 16px; bottom: 0; left: 16px; margin: auto; @@ -235,13 +225,17 @@ width: 24px; } -[dir=rtl] #realbox-icon { +[dir=rtl] :-webkit-any(#realbox-icon, .match-icon) { left: auto; right: 16px; } -#realbox-icon.load-favicon { - background-size: 24px; +#realbox-icon[data-icon='google_g'] { + background-size: 12px; +} + +#realbox-icon[data-icon='search'] { + -webkit-mask-size: 20px; /* Loupe in realbox is bigger than in matches. */ } #realbox-matches { @@ -269,9 +263,6 @@ } #realbox-matches a { - background-position: 16px center; - background-repeat: no-repeat; - background-size: 24px; font-size: 16px; line-height: 1; outline: none; @@ -316,55 +307,21 @@ margin-bottom: 8px; /* Last result is tight with border-radius. */ } -.clock-icon, -.search-icon, -.image-container { - bottom: 0; - margin: auto; - position: absolute; - top: 0; -} - -.clock-icon, -.search-icon { - -webkit-mask-position: center; - -webkit-mask-repeat: no-repeat; - -webkit-mask-size: 16px; - background-color: var(--search-box-icon, rgb(117, 117, 117)); - left: 16px; - width: 24px; -} - -#realbox-matches a:-webkit-any(:focus-within, .selected) - :-webkit-any(.clock-icon, .search-icon) { +#realbox-matches a:-webkit-any(:focus-within, .selected) .match-icon { background-color: var(--search-box-icon-selected, rgb(117, 117, 117)); } -.clock-icon { - -webkit-mask-image: url(icons/clock.svg); -} - -.search-icon { - -webkit-mask-image: - url(../../../../ui/webui/resources/images/icon_search.svg); -} - -#realbox-input-wrapper > .search-icon { - -webkit-mask-size: 20px; /* Loupe in realbox is bigger than in matches. */ -} - -html[dir=rtl] :-webkit-any(.clock-icon, .search-icon) { - left: auto; - right: 16px; -} - .image-container { align-items: center; border-radius: 8px; + bottom: 0; display: flex; height: 32px; justify-content: center; left: 12px; + margin: auto; + position: absolute; + top: 0; width: 32px; } @@ -473,7 +430,22 @@ } #fakebox .search-icon { + -webkit-mask-image: url(../../../../ui/webui/resources/images/icon_search.svg); + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; -webkit-mask-size: 20px; + background-color: rgb(117, 117, 117); + bottom: 0; + left: 16px; + margin: auto; + position: absolute; + top: 0; + width: 24px; +} + +html[dir=rtl] #fakebox .search-icon { + left: auto; + right: 16px; } #fakebox-text {
diff --git a/chrome/browser/resources/local_ntp/local_ntp.html b/chrome/browser/resources/local_ntp/local_ntp.html index e09bb54f..ccefbd5 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.html +++ b/chrome/browser/resources/local_ntp/local_ntp.html
@@ -78,8 +78,8 @@ <div id="realbox-container" $i18n{hiddenIfRealboxDisabled}> <div id="realbox-input-wrapper"> - <div id="realbox-icon" class="$i18n{realboxIconClass}" - data-realbox-icon-class="$i18n{realboxIconClass}"></div> + <div id="realbox-icon" data-default-icon="$i18n{realboxDefaultIcon}"> + </div> <input id="realbox" type="search" autocomplete="off" spellcheck="false" aria-live="polite" autofocus> <button id="realbox-microphone" class="microphone-icon" hidden></button>
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js index 573f406..fefc4c73 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.js +++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -63,8 +63,6 @@ */ const CLASSES = { ALTERNATE_LOGO: 'alternate-logo', // Shows white logo if required by theme - // Shows a clock next to historical realbox results. - CLOCK_ICON: 'clock-icon', // Applies styles to dialogs used in customization. CUSTOMIZE_DIALOG: 'customize-dialog', DELAYED_HIDE_NOTIFICATION: 'mv-notice-delayed-hide', @@ -91,7 +89,8 @@ IMAGE_CONTAINER: 'image-container', INITED: 'inited', // Reveals the <body> once init() is done. LEFT_ALIGN_ATTRIBUTION: 'left-align-attribution', - LOAD_FAVICON: 'load-favicon', + // The icon next to a realbox match. + MATCH_ICON: 'match-icon', // The image next to a realbox match. MATCH_IMAGE: 'match-image', // Vertically centers the most visited section for a non-Google provided page. @@ -99,7 +98,6 @@ REMOVABLE: 'removable', REMOVE_ICON: 'remove-icon', REMOVE_MATCH: 'remove-match', - SEARCH_ICON: 'search-icon', // Magnifying glass/search icon. SELECTED: 'selected', // A selected (via up/down arrow key) realbox match. SHOW_ELEMENT: 'show-element', // When the realbox has matches to show. @@ -108,11 +106,6 @@ USE_NOTIFIER: 'use-notifier', }; -const SEARCH_HISTORY_MATCH_TYPES = [ - 'search-history', - 'search-suggest-personalized', -]; - /** * The period of time (ms) before transitions can be applied to a toast * notification after modifying the "display" property. @@ -276,7 +269,7 @@ * reuse match image data that have been loaded before and to avoid flickering. * @type {!Object<string>} */ -const imageUrlToDataUrlCache = {}; +const faviconOrImageUrlToDataUrlCache = {}; /** * The time of the first character insert operation that has not yet been @@ -381,32 +374,50 @@ /** * @param {number} matchIndex - * @param {string} imageUrl + * @param {string} url AutocompleteMatch's imageUrl or destinationUrl. * @param {string} dataUrl */ -function autocompleteMatchImageAvailable(matchIndex, imageUrl, dataUrl) { - if (!autocompleteResult || !autocompleteResult.matches[matchIndex] || - autocompleteResult.matches[matchIndex].imageUrl !== imageUrl) { +function autocompleteMatchImageAvailable(matchIndex, url, dataUrl) { + if (!autocompleteResult || !autocompleteResult.matches[matchIndex]) { return; } - // Ignore images that have previously been loaded. Those are rendered already. - if (imageUrlToDataUrlCache[imageUrl]) { + const match = autocompleteResult.matches[matchIndex]; + if (match.imageUrl !== url && match.destinationUrl !== url) { return; } - imageUrlToDataUrlCache[imageUrl] = dataUrl; - const realboxMatchesEl = $(IDS.REALBOX_MATCHES); - const matchEls = Array.from(realboxMatchesEl.children); + // Return if the image has been rendered. Re-rendering it will cause flicker. + if (faviconOrImageUrlToDataUrlCache[url]) { + return; + } + faviconOrImageUrlToDataUrlCache[url] = dataUrl; + + const matchEls = Array.from($(IDS.REALBOX_MATCHES).children); assert(autocompleteResult.matches.length === matchEls.length); - const imageContainerEl = assert( - matchEls[matchIndex].getElementsByClassName(CLASSES.IMAGE_CONTAINER)[0]); - const imageEl = document.createElement('img'); - imageEl.classList.add(CLASSES.MATCH_IMAGE); - imageEl.src = dataUrl; - imageContainerEl.appendChild(imageEl); - imageContainerEl.style.backgroundColor = 'transparent'; + // Update the match image/favicon. + if (match.imageUrl === url) { + const imageContainerEl = assert(matchEls[matchIndex].getElementsByClassName( + CLASSES.IMAGE_CONTAINER)[0]); + const imageEl = document.createElement('img'); + imageEl.classList.add(CLASSES.MATCH_IMAGE); + imageEl.src = dataUrl; + imageContainerEl.appendChild(imageEl); + imageContainerEl.style.backgroundColor = 'transparent'; + } else { + const iconEl = assert( + matchEls[matchIndex].getElementsByClassName(CLASSES.MATCH_ICON)[0]); + setBackgroundImageByUrl(iconEl, dataUrl); + } + + // If the match is selected, also update the realbox favicon. + const selectedMatchIndex = matchEls.findIndex(matchEl => { + return matchEl.classList.contains(CLASSES.SELECTED); + }); + if (selectedMatchIndex === matchIndex) { + setRealboxIcon(match); + } } /** @@ -718,25 +729,6 @@ } /** - * @param {string} url - * @return {string} The chrome-search://ntpicon/ corresponding to |url|. - */ -function getIconUrl(url) { - // TODO(crbug.com/997229): use chrome://favicon/<url> when perms allow. - const iconUrl = new URL('chrome-search://ntpicon/'); - iconUrl.searchParams.set('show_fallback_monogram', 'false'); - iconUrl.searchParams.set('size', '32@' + window.devicePixelRatio + 'x'); - // The fallback color must match that of .clock-icon and .search-icon - iconUrl.searchParams.set( - 'color', - convertToHexColor( - configData.realboxMatchOmniboxTheme ? getNtpTheme().searchBox.icon : - [117, 117, 117, 255])); - iconUrl.searchParams.set('url', url); - return iconUrl.toString(); -} - -/** * Returns theme background info, first checking for history.state.notheme. If * the page has notheme set, returns a fallback light-colored theme (or dark- * colored theme if dark mode is enabled). This is used when the doodle is @@ -918,6 +910,8 @@ customize.init(showErrorNotification, hideNotification); if (configData.realboxEnabled) { + setRealboxIcon(undefined); + const realboxEl = $(IDS.REALBOX); realboxEl.placeholder = configData.translatedStrings.searchboxPlaceholder; // Using .onmousedown instead of addEventListener('mousedown') to support @@ -1406,6 +1400,7 @@ // Clear the input if it was empty when displaying the matches. if (lastQueriedInput === '') { updateRealboxOutput({inline: '', text: ''}); + setRealboxIcon(undefined); } setRealboxMatchesVisible(false); @@ -1706,29 +1701,30 @@ matchEl.classList.add(CLASSES.HAS_IMAGE); } - if (match.isSearchType) { - const icon = document.createElement('div'); - if (hasImage) { - icon.classList.add(CLASSES.IMAGE_CONTAINER); + if (hasImage) { + const imageContainer = document.createElement('div'); + imageContainer.classList.add(CLASSES.IMAGE_CONTAINER); - if (imageUrlToDataUrlCache[match.imageUrl]) { - const imageEl = document.createElement('img'); - imageEl.classList.add(CLASSES.MATCH_IMAGE); - imageEl.src = imageUrlToDataUrlCache[match.imageUrl]; - icon.appendChild(imageEl); - } else if (match.imageDominantColor) { - // .25 Opacity matching c/b/u/views/omnibox/omnibox_match_cell_view.cc - icon.style.backgroundColor = match.imageDominantColor + '40'; - } - } else { - const isSearchHistory = SEARCH_HISTORY_MATCH_TYPES.includes(match.type); - icon.classList.add( - isSearchHistory ? CLASSES.CLOCK_ICON : CLASSES.SEARCH_ICON); + if (faviconOrImageUrlToDataUrlCache[match.imageUrl]) { + const imageEl = document.createElement('img'); + imageEl.classList.add(CLASSES.MATCH_IMAGE); + imageEl.src = faviconOrImageUrlToDataUrlCache[match.imageUrl]; + imageContainer.appendChild(imageEl); + } else if (match.imageDominantColor) { + // .25 Opacity matching c/b/u/views/omnibox/omnibox_match_cell_view.cc + imageContainer.style.backgroundColor = match.imageDominantColor + '40'; } - matchEl.appendChild(icon); + matchEl.appendChild(imageContainer); } else { - const iconUrl = getIconUrl(match.destinationUrl); - matchEl.style.backgroundImage = `url(${iconUrl})`; + const iconEl = document.createElement('div'); + iconEl.classList.add(CLASSES.MATCH_ICON); + if (faviconOrImageUrlToDataUrlCache[match.destinationUrl]) { + setBackgroundImageByUrl( + iconEl, faviconOrImageUrlToDataUrlCache[match.destinationUrl]); + } else { + setWebkitMaskImageByUrl(iconEl, match.iconUrl); + } + matchEl.appendChild(iconEl); } const contentsEl = @@ -2131,21 +2127,54 @@ document.body.classList.toggle(CLASSES.HIDE_FAKEBOX, !show); } +/** + * @param {!Element} element + * @param {string} url + */ +function setBackgroundImageByUrl(element, url) { + element.style.webkitMaskImage = ''; + element.style.backgroundImage = `url(${url})`; + element.style.backgroundColor = 'transparent'; +} + +/** + * @param {!Element} element + * @param {string} url + */ +function setWebkitMaskImageByUrl(element, url) { + element.style.webkitMaskImage = `url(${url})`; + element.style.backgroundImage = ''; + element.style.backgroundColor = ''; +} + /** @param {!AutocompleteMatch|undefined} match */ function setRealboxIcon(match) { - const loadFavicon = match && !match.isSearchType; - const realboxIcon = $(IDS.REALBOX_ICON); - realboxIcon.style.webkitMask = loadFavicon ? 'none' : ''; - realboxIcon.style.backgroundColor = loadFavicon ? 'transparent' : ''; - realboxIcon.style.backgroundImage = - loadFavicon ? `url(${getIconUrl(match.destinationUrl)})` : ''; - - const historical = match && SEARCH_HISTORY_MATCH_TYPES.includes(match.type); - realboxIcon.className = loadFavicon ? - CLASSES.LOAD_FAVICON : - (historical ? CLASSES.CLOCK_ICON : - realboxIcon.dataset['realboxIconClass']); + if (match && !match.isSearchType) { + // if the selected match is a navigation match and has a favicon loaded, + // display the favicon. Otherwise display the match icon. + if (faviconOrImageUrlToDataUrlCache[match.destinationUrl]) { + realboxIcon.dataset.icon = ''; + setBackgroundImageByUrl( + realboxIcon, faviconOrImageUrlToDataUrlCache[match.destinationUrl]); + } else { + realboxIcon.dataset.icon = match.iconUrl; + setWebkitMaskImageByUrl(realboxIcon, realboxIcon.dataset.icon); + } + } else if (configData.useGoogleGIcon) { + // if google_g icon should be used (as the default icon and search matches), + // display the default icon which is set to the google_g icon. + /** @suppress {missingProperties} */ + realboxIcon.dataset.icon = realboxIcon.dataset.defaultIcon; + setBackgroundImageByUrl(realboxIcon, realboxIcon.dataset.icon); + } else { + // if no match is selected, display the default icon. Otherwise display the + // match icon. + /** @suppress {missingProperties} */ + realboxIcon.dataset.icon = + match ? match.iconUrl : realboxIcon.dataset.defaultIcon; + setWebkitMaskImageByUrl(realboxIcon, realboxIcon.dataset.icon); + } } /** @param {boolean} visible */
diff --git a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js index 0c28d2f6..3725f44 100644 --- a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js +++ b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js
@@ -25,7 +25,6 @@ * @typedef {{ * currentChannel: BrowserChannel, * targetChannel: BrowserChannel, - * canChangeChannel: boolean, * }} */ let ChannelInfo; @@ -214,9 +213,16 @@ */ setChannel(channel, isPowerwashAllowed) {} - /** @return {!Promise<!ChannelInfo>} */ + /** + * Requests channel info from the version updater. This may have latency if + * the version updater is busy, for example with downloading updates. + * @return {!Promise<!ChannelInfo>} + */ getChannelInfo() {} + /** @return {!Promise<!boolean>} */ + canChangeChannel() {} + /** @return {!Promise<!VersionInfo>} */ getVersionInfo() {} @@ -326,6 +332,11 @@ } /** @override */ + canChangeChannel() { + return cr.sendWithPromise('canChangeChannel'); + } + + /** @override */ getVersionInfo() { return cr.sendWithPromise('getVersionInfo'); }
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.html b/chrome/browser/resources/settings/autofill_page/password_check.html index 13d6291..d78a1a39 100644 --- a/chrome/browser/resources/settings/autofill_page/password_check.html +++ b/chrome/browser/resources/settings/autofill_page/password_check.html
@@ -105,7 +105,7 @@ <cr-button id="controlPasswordCheckButton" on-click="onPasswordCheckButtonClick_" class$="[[getButtonTypeClass_(status_)]]" - hidden$="[[isButtonHidden_(status_, suppressCheckupLink_)]]"> + hidden$="[[isButtonHidden_]]"> [[getButtonText_(status_)]] </cr-button> </div>
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.js b/chrome/browser/resources/settings/autofill_page/password_check.js index 8b76ddd2..87ba2ee5 100644 --- a/chrome/browser/resources/settings/autofill_page/password_check.js +++ b/chrome/browser/resources/settings/autofill_page/password_check.js
@@ -33,6 +33,11 @@ */ compromisedPasswordsCount_: String, + // <if expr="not chromeos"> + /** @private */ + storedAccounts_: Array, + // </if> + /** * An array of leaked passwords to display. * @type {!Array<!PasswordManagerProxy.CompromisedCredential>} @@ -63,6 +68,18 @@ computed: 'suppressesCheckupLink_(status_, syncPrefs_, syncStatus_)', }, + /** @private */ + isSignedOut_: { + type: Boolean, + computed: 'computeIsSignedOut_(syncStatus_, storedAccounts_)', + }, + + /** @private */ + isButtonHidden_: { + type: Boolean, + computed: 'computeIsButtonHidden_(status_, isSignedOut_)', + }, + /** @private {settings.SyncPrefs} */ syncPrefs_: Object, @@ -151,6 +168,13 @@ this.addWebUIListener('sync-status-changed', syncStatusChanged); this.addWebUIListener('sync-prefs-changed', syncPrefsChanged); + // For non-ChromeOS, also check whether accounts are available. + // <if expr="not chromeos"> + const storedAccountsChanged = accounts => this.storedAccounts_ = accounts; + syncBrowserProxy.getStoredAccounts().then(storedAccountsChanged); + this.addWebUIListener('stored-accounts-updated', storedAccountsChanged); + // </if> + // Start the check if instructed to do so. const router = settings.Router.getInstance(); if (router.getQueryParameters().get('start') == 'true') { @@ -380,25 +404,25 @@ /** * Returns true iff the check/stop button should be visible for a given state. - * @param {!PasswordManagerProxy.PasswordCheckStatus} status * @return {!boolean} * @private */ - isButtonHidden_(status) { - switch (status.state) { + computeIsButtonHidden_() { + switch (this.status_.state) { case CheckState.IDLE: case CheckState.CANCELED: case CheckState.RUNNING: case CheckState.OFFLINE: - case CheckState.SIGNED_OUT: case CheckState.OTHER_ERROR: return false; + case CheckState.SIGNED_OUT: + return this.isSignedOut_; case CheckState.NO_PASSWORDS: case CheckState.QUOTA_LIMIT: return true; } assertNotReached( - 'Can\'t determine button visibility for state: ' + status.state); + 'Can\'t determine button visibility for state: ' + this.status_.state); }, /** @@ -494,6 +518,18 @@ }, /** + * Returns true iff the user is signed in. + * @return {boolean} + * @private + */ + computeIsSignedOut_() { + if (!this.syncStatus_ || !this.syncStatus_.signedIn) { + return !this.storedAccounts_ || this.storedAccounts_.length == 0; + } + return !!this.syncStatus_.hasError; + }, + + /** * Returns true iff the user cannot retry the password check in their account. * Either because they are syncing or because they use a custom passphrase. * @return {boolean}
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn index 95016fb4..ec97c11 100644 --- a/chrome/browser/resources/settings/chromeos/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -58,6 +58,16 @@ grit("flattened_resources") { source = "../os_settings_resources.grd" + deps = [ + "//chrome/browser/ui/webui/app_management:mojo_bindings_js", + "//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings_js", + ] + + grit_flags = [ + "-E", + "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir), + ] + defines = chrome_grit_defines outputs = [ "grit/os_settings_resources.h",
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html index 7c0b662..6028df08 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_disk_resize_dialog.html
@@ -8,23 +8,20 @@ <link rel="import" href="crostini_browser_proxy.html"> <link rel="import" href="../../i18n_setup.html"> <link rel="import" href="../../settings_shared_css.html"> - -<style> - #labels { - display: flex; - flex-direction: row; - justify-content: space-between; - } - - #resize-block { - align-items: stretch; - display: flex; - flex-direction: column; - } -</style> <dom-module id="settings-crostini-disk-resize-dialog"> <template> - <style include="settings-shared"></style> + <style include="settings-shared"> + #disk-labels { + display: flex; + justify-content: space-between; + } + + #resize-block { + align-items: stretch; + margin-inline-end: 10px; + margin-inline-start: 10px; + } + </style> <cr-dialog id="diskResizeDialog" close-text="$i18n{close}"> <div slot="title">$i18n{crostiniDiskResizeTitle}</div> <div slot="body"> @@ -34,7 +31,7 @@ value="[[defaultDiskSizeTick_]]" ticks="[[diskSizeTicks_]]" disabled="[[resizing_]]"> </cr-slider> - <div id="labels"> + <div id="disk-labels"> <div id="label-begin">[[minDiskSize_]]</div> <div id="label-end">[[maxDiskSize_]]</div> </div>
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/OWNERS b/chrome/browser/resources/settings/chromeos/internet_page/OWNERS index 77228ad..1e04bd44 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/OWNERS +++ b/chrome/browser/resources/settings/chromeos/internet_page/OWNERS
@@ -4,4 +4,4 @@ stevenjb@chromium.org tbarzic@chromium.org -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js index 0b96879b7..439123c 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js +++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.js
@@ -49,13 +49,21 @@ /** @private */ updateChannelInfo_() { const browserProxy = settings.AboutPageBrowserProxyImpl.getInstance(); + + // canChangeChannel() call is expected to be low-latency, so fetch this + // value by itself to ensure UI consistency (see https://crbug.com/848750). + browserProxy.canChangeChannel().then(canChangeChannel => { + this.canChangeChannel_ = canChangeChannel; + }); + + // getChannelInfo() may have considerable latency due to updates. Fetch this + // metadata as part of a separate request. browserProxy.getChannelInfo().then(info => { this.channelInfo_ = info; // Display the target channel for the 'Currently on' message. this.currentlyOnChannelText_ = this.i18n( 'aboutCurrentlyOnChannel', this.i18n(settings.browserChannelToI18nId(info.targetChannel))); - this.canChangeChannel_ = info.canChangeChannel; }); },
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js index 8a7dcd49..b26bbb15 100644 --- a/chrome/browser/resources/settings/lazy_load.js +++ b/chrome/browser/resources/settings/lazy_load.js
@@ -29,11 +29,13 @@ // import './site_settings/zoom_levels.m.js'; // <if expr="not chromeos"> -import './people_page/manage_profile.m.js'; import './people_page/import_data_dialog.m.js'; +import './people_page/manage_profile.m.js'; // </if> import './people_page/signout_dialog.m.js'; import './people_page/sync_account_control.m.js'; +import './people_page/sync_controls.m.js'; +import './people_page/sync_page.m.js'; // <if expr="use_nss_certs"> import 'chrome://resources/cr_components/certificate_manager/certificate_manager.m.js'; @@ -85,7 +87,6 @@ export {PaymentsManagerImpl} from './autofill_page/payments_section.m.js'; export {ClearBrowsingDataBrowserProxyImpl} from './clear_browsing_data_dialog/clear_browsing_data_browser_proxy.m.js'; export {DownloadsBrowserProxyImpl} from './downloads_page/downloads_browser_proxy.m.js'; -export {SyncBrowserProxyImpl, PageStatus} from './people_page/sync_browser_proxy.m.js'; export {kMenuCloseDelay} from './languages_page/languages_page.m.js'; export {LanguagesBrowserProxyImpl} from './languages_page/languages_browser_proxy.m.js'; export {ChooserType,ContentSetting,ContentSettingsTypes,SiteSettingSource,SITE_EXCEPTION_WILDCARD,SortMethod} from './site_settings/constants.m.js';
diff --git a/chrome/browser/resources/settings/os_settings_resources.grd b/chrome/browser/resources/settings/os_settings_resources.grd index a4b102b..c6786ba 100644 --- a/chrome/browser/resources/settings/os_settings_resources.grd +++ b/chrome/browser/resources/settings/os_settings_resources.grd
@@ -11,6 +11,43 @@ <output filename="os_settings_resources.pak" type="data_package" /> </outputs> <release seq="1"> + <includes> + <!-- App Management --> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS" + file="${root_gen_dir}\skia\public\mojom\bitmap.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS" + file="${root_gen_dir}\skia\public\mojom\image_info.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS" + file="${root_gen_dir}\ui\gfx\image\mojom\image.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_MOJO_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\app_management\app_management.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_TYPES_MOJO_LITE_JS" + file="${root_gen_dir}\chrome\services\app_service\public\mojom\types.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + + <!-- Search --> + <include name="IDR_OS_SETTINGS_SEARCH_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_SEARCH_RESULT_ICON_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search_result_icon.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_USER_ACTION_RECORDER_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\user_action_recorder.mojom-lite.js" + use_base_dir="false" + type="BINDATA" /> + </includes> <structures> <structure name="IDR_OS_SETTINGS_LOCALIZED_LINK_JS" file="chromeos/localized_link/localized_link.js" @@ -884,16 +921,16 @@ <structure name="IDR_OS_SETTINGS_CROSTINI_EXPORT_IMPORT_JS" file="chromeos/crostini_page/crostini_export_import.js" type="chrome_html" /> - <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_HTML" + <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_HTML" file="chromeos/crostini_page/crostini_port_forwarding.html" type="chrome_html" /> - <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_HTML" + <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_HTML" file="chromeos/crostini_page/crostini_port_forwarding_add_port_dialog.html" type="chrome_html" /> - <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_JS" + <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_ADD_PORT_DIALOG_JS" file="chromeos/crostini_page/crostini_port_forwarding_add_port_dialog.js" type="chrome_html" /> - <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_JS" + <structure name="IDR_OS_SETTINGS_CROSTINI_PORT_FORWARDING_JS" file="chromeos/crostini_page/crostini_port_forwarding.js" type="chrome_html" /> <structure name="IDR_OS_SETTINGS_CROSTINI_MIC_SHARING_DIALOG_HTML"
diff --git a/chrome/browser/resources/settings/os_settings_resources_vulcanized.grd b/chrome/browser/resources/settings/os_settings_resources_vulcanized.grd index 24bcdcc..07e1ce06 100644 --- a/chrome/browser/resources/settings/os_settings_resources_vulcanized.grd +++ b/chrome/browser/resources/settings/os_settings_resources_vulcanized.grd
@@ -42,6 +42,50 @@ file="os_settings_manifest.json" type="BINDATA" compress="gzip" /> + + <!-- App Management --> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS" + file="${root_gen_dir}\skia\public\mojom\bitmap.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS" + file="${root_gen_dir}\skia\public\mojom\image_info.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS" + file="${root_gen_dir}\ui\gfx\image\mojom\image.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_MOJO_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\app_management\app_management.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_APP_MANAGEMENT_TYPES_MOJO_LITE_JS" + file="${root_gen_dir}\chrome\services\app_service\public\mojom\types.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + + <!-- Search --> + <include name="IDR_OS_SETTINGS_SEARCH_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_SEARCH_RESULT_ICON_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\search_result_icon.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> + <include name="IDR_OS_SETTINGS_USER_ACTION_RECORDER_MOJOM_LITE_JS" + file="${root_gen_dir}\chrome\browser\ui\webui\settings\chromeos\search\user_action_recorder.mojom-lite.js" + compress="gzip" + use_base_dir="false" + type="BINDATA" /> </includes> </release> </grit>
diff --git a/chrome/browser/resources/settings/people_page/BUILD.gn b/chrome/browser/resources/settings/people_page/BUILD.gn index 07598fc..3e785a12 100644 --- a/chrome/browser/resources/settings/people_page/BUILD.gn +++ b/chrome/browser/resources/settings/people_page/BUILD.gn
@@ -171,6 +171,7 @@ ":sync_account_control.m", ":sync_browser_proxy.m", ":sync_controls.m", + ":sync_encryption_options.m", ":sync_page.m", ] @@ -308,6 +309,16 @@ extra_deps = [ ":sync_controls_module" ] } +js_library("sync_encryption_options.m") { + sources = [ "$root_gen_dir/chrome/browser/resources/settings/people_page/sync_encryption_options.m.js" ] + deps = [ + ":sync_browser_proxy.m", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/js:assert.m", + ] + extra_deps = [ ":sync_encryption_options_module" ] +} + js_library("sync_page.m") { sources = [ "$root_gen_dir/chrome/browser/resources/settings/people_page/sync_page.m.js" ] deps = [ @@ -329,6 +340,7 @@ ":signout_dialog_module", ":sync_account_control_module", ":sync_controls_module", + ":sync_encryption_options_module", ":sync_page_module", ] @@ -417,14 +429,22 @@ ] } +polymer_modulizer("sync_encryption_options") { + js_file = "sync_encryption_options.js" + html_file = "sync_encryption_options.html" + html_type = "dom-module" + namespace_rewrites = settings_namespace_rewrites + auto_imports = settings_auto_imports + [ + "chrome/browser/resources/settings/people_page/sync_browser_proxy.html|SyncBrowserProxyImpl,SyncPrefs,SyncStatus", + "ui/webui/resources/html/assert.html|assert,assertNotReached", + ] +} + polymer_modulizer("sync_page") { js_file = "sync_page.js" html_file = "sync_page.html" html_type = "dom-module" - ignore_imports = [ - "chrome/browser/resources/settings/people_page/sync_encryption_options.html", - "chrome/browser/resources/settings/privacy_page/personalization_options.html", - ] + ignore_imports = [ "chrome/browser/resources/settings/privacy_page/personalization_options.html" ] namespace_rewrites = settings_namespace_rewrites auto_imports = settings_auto_imports + [ "ui/webui/resources/html/polymer.html|Polymer,html,flush",
diff --git a/chrome/browser/resources/settings/people_page/sync_controls.js b/chrome/browser/resources/settings/people_page/sync_controls.js index 563dfea..795d5b4 100644 --- a/chrome/browser/resources/settings/people_page/sync_controls.js +++ b/chrome/browser/resources/settings/people_page/sync_controls.js
@@ -39,7 +39,7 @@ Polymer({ is: 'settings-sync-controls', - behaviors: [WebUIListenerBehavior, settings.RouteObserverBehavior], + behaviors: [WebUIListenerBehavior], properties: { hidden: { @@ -103,14 +103,6 @@ } }, - /** @protected */ - currentRouteChanged() { - const router = settings.Router.getInstance(); - if (router.getCurrentRoute() === router.getRoutes().SYNC_ADVANCED) { - chrome.metricsPrivate.recordUserAction('Sync_NavigateToSyncAdvancedPage'); - } - }, - /** * Handler for when the sync preferences are updated. * @private
diff --git a/chrome/browser/resources/settings/settings.js b/chrome/browser/resources/settings/settings.js index cc31044..1b26df6 100644 --- a/chrome/browser/resources/settings/settings.js +++ b/chrome/browser/resources/settings/settings.js
@@ -32,6 +32,10 @@ export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.m.js'; // </if> +// <if expr="chromeos"> +export {AccountManagerBrowserProxyImpl} from './people_page/account_manager_browser_proxy.m.js'; +// </if> + export {AboutPageBrowserProxy, AboutPageBrowserProxyImpl, UpdateStatus} from './about_page/about_page_browser_proxy.m.js'; export {AppearanceBrowserProxy, AppearanceBrowserProxyImpl} from './appearance_page/appearance_browser_proxy.m.js'; export {CrSettingsPrefs} from './prefs/prefs_types.m.js'; @@ -44,6 +48,7 @@ export {StartupUrlsPageBrowserProxy, StartupUrlsPageBrowserProxyImpl} from './on_startup_page/startup_urls_page_browser_proxy.m.js'; export {OpenWindowProxyImpl} from './open_window_proxy.m.js'; export {PageStatus, StatusAction, SyncBrowserProxyImpl} from './people_page/sync_browser_proxy.m.js'; +export {ProfileInfoBrowserProxyImpl} from './people_page/profile_info_browser_proxy.m.js'; export {pageVisibility} from './page_visibility.m.js'; export {PasswordManagerImpl} from './autofill_page/password_manager_proxy.m.js'; export {prefToString, stringToPrefValue} from './prefs/pref_util.m.js';
diff --git a/chrome/browser/resources/settings/settings_resources_v3.grdp b/chrome/browser/resources/settings/settings_resources_v3.grdp index 7e0ea28..f72286d 100644 --- a/chrome/browser/resources/settings/settings_resources_v3.grdp +++ b/chrome/browser/resources/settings/settings_resources_v3.grdp
@@ -386,6 +386,15 @@ use_base_dir="false" preprocess="true" type="BINDATA" /> + <include name="IDR_SETTINGS_PEOPLE_PAGE_SYNC_BROWSER_PROXY_M_JS" + file="${root_gen_dir}/chrome/browser/resources/settings/people_page/sync_browser_proxy.m.js" + use_base_dir="false" + type="BINDATA" + preprocess="true" /> + <include name="IDR_SETTINGS_PEOPLE_PAGE_SYNC_ENCRYPTION_OPTIONS_M_JS" + file="${root_gen_dir}/chrome/browser/resources/settings/people_page/sync_encryption_options.m.js" + use_base_dir="false" + type="BINDATA" /> <include name="IDR_SETTINGS_PEOPLE_PAGE_PEOPLE_PAGE_M_JS" file="${root_gen_dir}/chrome/browser/resources/settings/people_page/people_page.m.js" use_base_dir="false" @@ -630,11 +639,6 @@ use_base_dir="false" type="BINDATA" preprocess="true" /> - <include name="IDR_SETTINGS_PEOPLE_PAGE_SYNC_BROWSER_PROXY_M_JS" - file="${root_gen_dir}/chrome/browser/resources/settings/people_page/sync_browser_proxy.m.js" - use_base_dir="false" - type="BINDATA" - preprocess="true" /> <if expr="not chromeos"> <include name="IDR_SETTINGS_PRINTING_PAGE_PRINTING_BROWSER_PROXY_M_JS" file="${root_gen_dir}/chrome/browser/resources/settings/printing_page/printing_browser_proxy.m.js"
diff --git a/chrome/browser/resources/tab_strip/tab_list.html b/chrome/browser/resources/tab_strip/tab_list.html index 9b12552..12be60a 100644 --- a/chrome/browser/resources/tab_strip/tab_list.html +++ b/chrome/browser/resources/tab_strip/tab_list.html
@@ -33,6 +33,7 @@ padding-inline-end: calc( var(--tabstrip-new-tab-button-width) + var(--tabstrip-new-tab-button-margin)); + width: 100%; } #pinnedTabs {
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc index 23160b4..415a708 100644 --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -454,7 +454,6 @@ EXPECT_TRUE(https_server_.Start()); scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate()); net::CertVerifyResult verify_result; - verify_result.is_issued_by_known_root = true; verify_result.verified_cert = cert; verify_result.cert_status = 0; mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK); @@ -832,7 +831,6 @@ ASSERT_TRUE(https_server_.Start()); scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate()); net::CertVerifyResult verify_result; - verify_result.is_issued_by_known_root = true; verify_result.verified_cert = cert; verify_result.cert_status = 0; mock_cert_verifier()->AddResultForCert(cert.get(), verify_result, net::OK);
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc index 853a08b..d239bb47 100644 --- a/chrome/browser/search/local_ntp_source.cc +++ b/chrome/browser/search/local_ntp_source.cc
@@ -84,6 +84,11 @@ using search_provider_logos::LogoMetadata; using search_provider_logos::LogoService; +const char kClockIconResourceName[] = "clock"; +const char kGoogleGIconResourceName[] = "google_g"; +const char kSearchIconResourceName[] = "search"; +const char kPageIconResourceName[] = "page"; + namespace { // Language code used to check features run in English in the US. @@ -138,6 +143,10 @@ // added complexity. {chrome::kChromeSearchLocalNtpBackgroundFilename, kLocalResource, "image/jpg"}, + {kClockIconResourceName, IDR_LOCAL_NTP_ICONS_CLOCK, "image/svg+xml"}, + {kGoogleGIconResourceName, IDR_WEBUI_IMAGES_200_LOGO_GOOGLE_G, "image/png"}, + {kPageIconResourceName, IDR_LOCAL_NTP_ICONS_PAGE, "image/svg+xml"}, + {kSearchIconResourceName, IDR_WEBUI_IMAGES_ICON_SEARCH, "image/svg+xml"}, }; // This enum must match the numbering for NTPSearchSuggestionsRequestStatusi in @@ -621,6 +630,9 @@ "suggestionTransparencyEnabled", base::FeatureList::IsEnabled( omnibox::kOmniboxSuggestionTransparencyOptions)); + config_data.SetBoolean( + "useGoogleGIcon", + base::FeatureList::IsEnabled(ntp_features::kRealboxUseGoogleGIcon)); } config_data.SetBoolean( @@ -1040,8 +1052,8 @@ bool use_google_g_icon = base::FeatureList::IsEnabled(ntp_features::kRealboxUseGoogleGIcon); - replacements["realboxIconClass"] = - use_google_g_icon ? "google-g-icon" : "search-icon"; + replacements["realboxDefaultIcon"] = + use_google_g_icon ? kGoogleGIconResourceName : kSearchIconResourceName; ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); base::StringPiece html = bundle.GetRawDataResource(IDR_LOCAL_NTP_HTML);
diff --git a/chrome/browser/search/local_ntp_source.h b/chrome/browser/search/local_ntp_source.h index 0d299a5..0cf8ea0 100644 --- a/chrome/browser/search/local_ntp_source.h +++ b/chrome/browser/search/local_ntp_source.h
@@ -38,6 +38,11 @@ class LogoService; } // namespace search_provider_logos +extern const char kClockIconResourceName[]; +extern const char kGoogleGIconResourceName[]; +extern const char kSearchIconResourceName[]; +extern const char kPageIconResourceName[]; + // Serves HTML and resources for the local New Tab page, i.e. // chrome-search://local-ntp/local-ntp.html. // WARNING: Due to the threading model of URLDataSource, some methods of this
diff --git a/chrome/browser/sessions/chrome_tab_restore_service_client.cc b/chrome/browser/sessions/chrome_tab_restore_service_client.cc index bb80744..b8928a8 100644 --- a/chrome/browser/sessions/chrome_tab_restore_service_client.cc +++ b/chrome/browser/sessions/chrome_tab_restore_service_client.cc
@@ -17,7 +17,7 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/apps/platform_apps/platform_app_launch.h" #endif
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index 6ced6ed0d..09732a9 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc
@@ -19,7 +19,7 @@ #include "base/stl_util.h" #include "base/threading/thread.h" #include "build/build_config.h" -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/background/background_mode_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/defaults.h"
diff --git a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc index 298293b..61c0a6f 100644 --- a/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc +++ b/chrome/browser/site_isolation/chrome_site_per_process_browsertest.cc
@@ -1543,3 +1543,21 @@ // Verify that no processes were be unnecessarily terminated. EXPECT_EQ(0u, process_termination_tracker.size()); } + +IN_PROC_BROWSER_TEST_F(ChromeSitePerProcessTest, JSPrintDuringSwap) { + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::RenderProcessHostWatcher watcher( + contents->GetMainFrame()->GetProcess(), + content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); + + // This file will attempt a cross-process navigation. + GURL main_url(embedded_test_server()->GetURL( + "a.com", "/print_during_load_with_broken_pdf_then_navigate.html")); + ui_test_utils::NavigateToURL(browser(), main_url); + + // Ensure the first process did not crash when the queued print() fires during frame detach. + EXPECT_TRUE(WaitForLoadStop(contents)); + watcher.Wait(); + EXPECT_TRUE(watcher.did_exit_normally()); +}
diff --git a/chrome/browser/site_isolation/site_isolation_policy_unittest.cc b/chrome/browser/site_isolation/site_isolation_policy_unittest.cc index 7ecac8e..8ee3c20 100644 --- a/chrome/browser/site_isolation/site_isolation_policy_unittest.cc +++ b/chrome/browser/site_isolation/site_isolation_policy_unittest.cc
@@ -4,19 +4,52 @@ #include "chrome/browser/site_isolation/site_isolation_policy.h" +#include "base/base_switches.h" +#include "base/system/sys_info.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/mock_entropy_provider.h" #include "base/test/scoped_feature_list.h" +#include "base/test/scoped_field_trial_list_resetter.h" +#include "build/build_config.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" #include "components/prefs/scoped_user_pref_update.h" +#include "components/variations/variations_switches.h" +#include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/site_instance.h" +#include "content/public/browser/site_isolation_policy.h" +#include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_task_environment.h" +#include "google_apis/gaia/gaia_urls.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#if BUILDFLAG(ENABLE_EXTENSIONS) +#include "extensions/common/extension_urls.h" +#endif + +namespace { + +// Some command-line switches override field trials - the tests need to be +// skipped in this case. +bool ShouldSkipBecauseOfConflictingCommandLineSwitches() { + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kSitePerProcess)) + return true; + + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableSiteIsolation)) + return true; + + return false; +} + +} // namespace + class SiteIsolationPolicyTest : public testing::Test { public: SiteIsolationPolicyTest() : manager_(TestingBrowserProcess::GetGlobal()) {} @@ -151,3 +184,589 @@ content::SiteInstance::CreateForURL(profile, GURL("http://foo.com/")); EXPECT_FALSE(foo_instance->RequiresDedicatedProcess()); } + +enum class SitePerProcessMemoryThreshold { + kNone, + k128MB, + k768MB, +}; + +enum class SitePerProcessMode { + kDisabled, + kEnabled, + kIsolatedOrigin, +}; + +struct SitePerProcessMemoryThresholdBrowserTestParams { + SitePerProcessMemoryThreshold threshold; + SitePerProcessMode mode; +}; + +const url::Origin& GetTrialOrigin() { + static base::NoDestructor<url::Origin> origin{ + url::Origin::Create(GURL("http://foo.com/"))}; + return *origin; +} + +// Helper class to run tests on a simulated 512MB low-end device. +class SitePerProcessMemoryThresholdBrowserTest + : public testing::Test, + public ::testing::WithParamInterface< + SitePerProcessMemoryThresholdBrowserTestParams> { + public: + SitePerProcessMemoryThresholdBrowserTest() { + switch (GetParam().threshold) { + case SitePerProcessMemoryThreshold::kNone: + break; + case SitePerProcessMemoryThreshold::k128MB: + threshold_feature_.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, + "128"}}); + break; + case SitePerProcessMemoryThreshold::k768MB: + threshold_feature_.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, + "768"}}); + break; + } + + switch (GetParam().mode) { + case SitePerProcessMode::kDisabled: + mode_feature_.InitAndDisableFeature(features::kSitePerProcess); + break; + case SitePerProcessMode::kEnabled: + mode_feature_.InitAndEnableFeature(features::kSitePerProcess); + break; + case SitePerProcessMode::kIsolatedOrigin: + mode_feature_.InitAndEnableFeatureWithParameters( + features::kIsolateOrigins, + {{features::kIsolateOriginsFieldTrialParamName, + GetTrialOrigin().Serialize()}}); + break; + } + } + + void SetUp() override { + // This way the test always sees the same amount of physical memory + // (kLowMemoryDeviceThresholdMB = 512MB), regardless of how much memory is + // available in the testing environment. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableLowEndDeviceMode); + EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB()); + + // Initializing the expected embedder origins at runtime is required for + // GetWebstoreLaunchURL(), which needs to have a proper ExtensionsClient + // initialized. +#if !defined(OS_ANDROID) + expected_embedder_origins_.push_back( + url::Origin::Create(GaiaUrls::GetInstance()->gaia_url())); +#endif +#if BUILDFLAG(ENABLE_EXTENSIONS) + expected_embedder_origins_.push_back( + url::Origin::Create(extension_urls::GetWebstoreLaunchURL())); +#endif + } + + protected: + content::BrowserTaskEnvironment task_environment_; + + // These are the origins we expect to be returned by + // content::ChildProcessSecurityPolicy::GetIsolatedOrigins() even if + // ContentBrowserClient::ShouldDisableSiteIsolation() returns true. + std::vector<url::Origin> expected_embedder_origins_; + +#if defined(OS_ANDROID) + // On Android we don't expect any trial origins because the 512MB + // physical memory used for testing is below the Android specific + // hardcoded 1024MB memory limit that disables site isolation. + const std::size_t kExpectedTrialOrigins = 0; +#else + // All other platforms expect the single trial origin to be returned because + // they don't have the memory limit that disables site isolation. + const std::size_t kExpectedTrialOrigins = 1; +#endif + + private: + base::test::ScopedFeatureList threshold_feature_; + base::test::ScopedFeatureList mode_feature_; + + DISALLOW_COPY_AND_ASSIGN(SitePerProcessMemoryThresholdBrowserTest); +}; + +using SitePerProcessMemoryThresholdBrowserTestNoIsolation = + SitePerProcessMemoryThresholdBrowserTest; +TEST_P(SitePerProcessMemoryThresholdBrowserTestNoIsolation, NoIsolation) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // Isolation should be disabled given the set of parameters used to + // instantiate these tests. + EXPECT_FALSE( + content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites()); +} + +using SitePerProcessMemoryThresholdBrowserTestIsolation = + SitePerProcessMemoryThresholdBrowserTest; +TEST_P(SitePerProcessMemoryThresholdBrowserTestIsolation, Isolation) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // Isolation should be enabled given the set of parameters used to + // instantiate these tests. + EXPECT_TRUE(content::SiteIsolationPolicy::UseDedicatedProcessesForAllSites()); +} + +INSTANTIATE_TEST_SUITE_P( + NoIsolation, + SitePerProcessMemoryThresholdBrowserTestNoIsolation, + testing::Values( +#if defined(OS_ANDROID) + // Expect no isolation on Android because 512MB physical memory + // triggered by kEnableLowEndDeviceMode in SetUp() is below the 1024MB + // Android specific memory limit which disables site isolation for all + // sites. + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::kNone, SitePerProcessMode::kEnabled}, +#endif + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k768MB, + SitePerProcessMode::kEnabled}, + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::kNone, + SitePerProcessMode::kDisabled}, + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k128MB, + SitePerProcessMode::kDisabled}, + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k768MB, + SitePerProcessMode::kDisabled})); + +INSTANTIATE_TEST_SUITE_P(Isolation, + SitePerProcessMemoryThresholdBrowserTestIsolation, + testing::Values( +#if !defined(OS_ANDROID) + // See the note above regarding why this + // expectation is different on Android. + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::kNone, + SitePerProcessMode::kEnabled}, +#endif + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k128MB, + SitePerProcessMode::kEnabled})); + +using SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin = + SitePerProcessMemoryThresholdBrowserTest; +TEST_P(SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin, + TrialNoIsolatedOrigin) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + content::SiteIsolationPolicy::ApplyGlobalIsolatedOrigins(); + + auto* cpsp = content::ChildProcessSecurityPolicy::GetInstance(); + std::vector<url::Origin> isolated_origins = cpsp->GetIsolatedOrigins(); + EXPECT_EQ(expected_embedder_origins_.size(), isolated_origins.size()); + + // Verify that the expected embedder origins are present even though site + // isolation has been disabled and the trial origins should not be present. + EXPECT_THAT(expected_embedder_origins_, + ::testing::IsSubsetOf(isolated_origins)); + + // Verify that the trial origin is not present. + EXPECT_THAT(isolated_origins, + ::testing::Not(::testing::Contains(GetTrialOrigin()))); +} + +using SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin = + SitePerProcessMemoryThresholdBrowserTest; +TEST_P(SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin, + TrialIsolatedOrigin) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + content::SiteIsolationPolicy::ApplyGlobalIsolatedOrigins(); + + auto* cpsp = content::ChildProcessSecurityPolicy::GetInstance(); + std::vector<url::Origin> isolated_origins = cpsp->GetIsolatedOrigins(); + EXPECT_EQ(1u + expected_embedder_origins_.size(), isolated_origins.size()); + EXPECT_THAT(expected_embedder_origins_, + ::testing::IsSubsetOf(isolated_origins)); + + // Verify that the trial origin is present. + EXPECT_THAT(isolated_origins, ::testing::Contains(GetTrialOrigin())); +} + +INSTANTIATE_TEST_SUITE_P( + TrialNoIsolatedOrigin, + SitePerProcessMemoryThresholdBrowserTestNoIsolatedOrigin, + testing::Values( +#if defined(OS_ANDROID) + // When the memory threshold is not explicitly specified, Android uses + // a 1900MB global memory threshold. The 512MB simulated device memory + // is below 1900MB, so the test origin should not be isolated. + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::kNone, + SitePerProcessMode::kIsolatedOrigin}, +#endif + // The 512MB simulated device memory is under the explicit 768MB memory + // threshold below, so the test origin should not be isolated. + SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k768MB, + SitePerProcessMode::kIsolatedOrigin})); + +INSTANTIATE_TEST_SUITE_P( + TrialIsolatedOrigin, + SitePerProcessMemoryThresholdBrowserTestIsolatedOrigin, + // The 512MB simulated device memory is above the explicit 128MB memory + // threshold below, so the test origin should be isolated both on desktop + // and Android. + testing::Values(SitePerProcessMemoryThresholdBrowserTestParams{ + SitePerProcessMemoryThreshold::k128MB, + SitePerProcessMode::kIsolatedOrigin})); + +// Helper class to run tests with password-triggered site isolation initialized +// via a regular field trial and *not* via a command-line override. It +// creates a new field trial (with 100% probability of being in the group), and +// initializes the test class's ScopedFeatureList using it. Two derived +// classes below control are used to initialize the feature to either enabled +// or disabled state. +class PasswordSiteIsolationFieldTrialTest : public testing::Test { + public: + explicit PasswordSiteIsolationFieldTrialTest(bool should_enable) + : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) { + const std::string kTrialName = "PasswordSiteIsolation"; + const std::string kGroupName = "FooGroup"; // unused + scoped_refptr<base::FieldTrial> trial = + base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); + + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); + feature_list->RegisterFieldTrialOverride( + features::kSiteIsolationForPasswordSites.name, + should_enable + ? base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE + : base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE, + trial.get()); + + feature_list_.InitWithFeatureList(std::move(feature_list)); + } + + void SetUp() override { + // This test creates and tests its own field trial group, so it needs to + // disable the field trial testing config, which might define an + // incompatible trial name/group. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + variations::switches::kDisableFieldTrialTestingConfig); + + // This way the test always sees the same amount of physical memory + // (kLowMemoryDeviceThresholdMB = 512MB), regardless of how much memory is + // available in the testing environment. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableLowEndDeviceMode); + EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB()); + } + + protected: + base::test::ScopedFieldTrialListResetter trial_list_resetter_; + base::test::ScopedFeatureList feature_list_; + base::FieldTrialList field_trial_list_; + + private: + DISALLOW_COPY_AND_ASSIGN(PasswordSiteIsolationFieldTrialTest); +}; + +class EnabledPasswordSiteIsolationFieldTrialTest + : public PasswordSiteIsolationFieldTrialTest { + public: + EnabledPasswordSiteIsolationFieldTrialTest() + : PasswordSiteIsolationFieldTrialTest(true /* should_enable */) {} + + private: + DISALLOW_COPY_AND_ASSIGN(EnabledPasswordSiteIsolationFieldTrialTest); +}; + +class DisabledPasswordSiteIsolationFieldTrialTest + : public PasswordSiteIsolationFieldTrialTest { + public: + DisabledPasswordSiteIsolationFieldTrialTest() + : PasswordSiteIsolationFieldTrialTest(false /* should_enable */) {} + + private: + DISALLOW_COPY_AND_ASSIGN(DisabledPasswordSiteIsolationFieldTrialTest); +}; + +TEST_F(EnabledPasswordSiteIsolationFieldTrialTest, BelowThreshold) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // If no memory threshold is defined, password site isolation should be + // enabled on desktop. It should be disabled on Android, because Android + // defaults to a 1900MB memory threshold, which is above the 512MB physical + // memory that this test simulates. +#if defined(OS_ANDROID) + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +#else + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +#endif + + // Define a memory threshold at 768MB. Since this is above the 512MB of + // physical memory that this test simulates, password site isolation should + // now be disabled. + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); + + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + // Simulate enabling password site isolation from command line. (Note that + // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine + // internally, and that triggering the feature via chrome://flags follows the + // same override path as well.) + base::test::ScopedFeatureList password_site_isolation_feature; + password_site_isolation_feature.InitAndEnableFeature( + features::kSiteIsolationForPasswordSites); + + // This should override the memory threshold and enable password site + // isolation. + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +} + +TEST_F(EnabledPasswordSiteIsolationFieldTrialTest, AboveThreshold) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // If no memory threshold is defined, password site isolation should be + // enabled on desktop. It should be disabled on Android, because Android + // defaults to a 1900MB memory threshold, which is above the 512MB physical + // memory that this test simulates. +#if defined(OS_ANDROID) + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +#else + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +#endif + + // Define a memory threshold at 128MB. Since this is below the 512MB of + // physical memory that this test simulates, password site isolation should + // still be enabled. + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); + + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + // Simulate disabling password site isolation from command line. (Note that + // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine + // internally, and that triggering the feature via chrome://flags follows the + // same override path as well.) This should take precedence over the regular + // field trial behavior. + base::test::ScopedFeatureList password_site_isolation_feature; + password_site_isolation_feature.InitAndDisableFeature( + features::kSiteIsolationForPasswordSites); + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +} + +// This test verifies that when password-triggered site isolation is disabled +// via field trials but force-enabled via command line, it takes effect even +// when below the memory threshold. See https://crbug.com/1009828. +TEST_F(DisabledPasswordSiteIsolationFieldTrialTest, + CommandLineOverride_BelowThreshold) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // Password site isolation should be disabled at this point. + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + // Simulate enabling password site isolation from command line. (Note that + // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine + // internally, and that triggering the feature via chrome://flags follows the + // same override path as well.) + base::test::ScopedFeatureList password_site_isolation_feature; + password_site_isolation_feature.InitAndEnableFeature( + features::kSiteIsolationForPasswordSites); + + // If no memory threshold is defined, password site isolation should be + // enabled. + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + // Define a memory threshold at 768MB. This is above the 512MB of physical + // memory that this test simulates, but password site isolation should still + // be enabled, because the test has simulated the user manually overriding + // this feature via command line. + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); + + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +} + +// Similar to the test above, but with device memory being above memory +// threshold. +TEST_F(DisabledPasswordSiteIsolationFieldTrialTest, + CommandLineOverride_AboveThreshold) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + EXPECT_FALSE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + base::test::ScopedFeatureList password_site_isolation_feature; + password_site_isolation_feature.InitAndEnableFeature( + features::kSiteIsolationForPasswordSites); + + // If no memory threshold is defined, password site isolation should be + // enabled. + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); + + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); + + EXPECT_TRUE(::SiteIsolationPolicy::IsIsolationForPasswordSitesEnabled()); +} + +// Helper class to run tests with strict origin isolation initialized via +// a regular field trial and *not* via a command-line override. It creates a +// new field trial (with 100% probability of being in the group), and +// initializes the test class's ScopedFeatureList using it. Two derived +// classes below control are used to initialize the feature to either enabled +// or disabled state. +class StrictOriginIsolationFieldTrialTest : public testing::Test { + public: + explicit StrictOriginIsolationFieldTrialTest(bool should_enable) + : field_trial_list_(std::make_unique<base::MockEntropyProvider>()) { + const std::string kTrialName = "StrictOriginIsolation"; + const std::string kGroupName = "FooGroup"; // unused + scoped_refptr<base::FieldTrial> trial = + base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); + + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); + feature_list->RegisterFieldTrialOverride( + features::kStrictOriginIsolation.name, + should_enable + ? base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE + : base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE, + trial.get()); + + feature_list_.InitWithFeatureList(std::move(feature_list)); + } + + void SetUp() override { + // This test creates and tests its own field trial group, so it needs to + // disable the field trial testing config, which might define an + // incompatible trial name/group. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + variations::switches::kDisableFieldTrialTestingConfig); + + // This way the test always sees the same amount of physical memory + // (kLowMemoryDeviceThresholdMB = 512MB), regardless of how much memory is + // available in the testing environment. + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableLowEndDeviceMode); + EXPECT_EQ(512, base::SysInfo::AmountOfPhysicalMemoryMB()); + } + + protected: + base::test::ScopedFieldTrialListResetter trial_list_resetter_; + base::test::ScopedFeatureList feature_list_; + base::FieldTrialList field_trial_list_; + + private: + DISALLOW_COPY_AND_ASSIGN(StrictOriginIsolationFieldTrialTest); +}; + +class EnabledStrictOriginIsolationFieldTrialTest + : public StrictOriginIsolationFieldTrialTest { + public: + EnabledStrictOriginIsolationFieldTrialTest() + : StrictOriginIsolationFieldTrialTest(true /* should_enable */) {} + + private: + DISALLOW_COPY_AND_ASSIGN(EnabledStrictOriginIsolationFieldTrialTest); +}; + +class DisabledStrictOriginIsolationFieldTrialTest + : public StrictOriginIsolationFieldTrialTest { + public: + DisabledStrictOriginIsolationFieldTrialTest() + : StrictOriginIsolationFieldTrialTest(false /* should_enable */) {} + + private: + DISALLOW_COPY_AND_ASSIGN(DisabledStrictOriginIsolationFieldTrialTest); +}; + +// Check that when strict origin isolation is enabled via a field trial, and +// the device is above the memory threshold, disabling it via the command line +// takes precedence. +TEST_F(EnabledStrictOriginIsolationFieldTrialTest, + DisabledViaCommandLineOverride) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // If no memory threshold is defined, strict origin isolation should be + // enabled on desktop. It should be disabled on Android, because Android + // defaults to a 1900MB memory threshold, which is above the 512MB physical + // memory that this test simulates. +#if defined(OS_ANDROID) + EXPECT_FALSE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); +#else + EXPECT_TRUE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); +#endif + + // Define a memory threshold at 128MB. Since this is below the 512MB of + // physical memory that this test simulates, strict origin isolation should + // still be enabled. + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "128"}}); + EXPECT_TRUE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); + + // Simulate disabling strict origin isolation from command line. (Note that + // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine + // internally, and that disabling the feature via chrome://flags follows the + // same override path as well.) + base::test::ScopedFeatureList strict_origin_isolation_feature; + strict_origin_isolation_feature.InitAndDisableFeature( + features::kStrictOriginIsolation); + EXPECT_FALSE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); +} + +// This test verifies that when strict origin isolation is disabled +// via field trials but force-enabled via command line, it takes effect even +// when below the memory threshold. See https://crbug.com/1009828. +TEST_F(DisabledStrictOriginIsolationFieldTrialTest, + EnabledViaCommandLineOverride_BelowThreshold) { + if (ShouldSkipBecauseOfConflictingCommandLineSwitches()) + return; + + // Strict origin isolation should be disabled at this point. + EXPECT_FALSE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); + + // Simulate enabling strict origin isolation from command line. (Note that + // InitAndEnableFeature uses ScopedFeatureList::InitFromCommandLine + // internally, and that triggering the feature via chrome://flags follows the + // same override path as well.) + base::test::ScopedFeatureList strict_origin_isolation_feature; + strict_origin_isolation_feature.InitAndEnableFeature( + features::kStrictOriginIsolation); + + // If no memory threshold is defined, strict origin isolation should be + // enabled. + EXPECT_TRUE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); + + // Define a memory threshold at 768MB. This is above the 512MB of physical + // memory that this test simulates, but strict origin isolation should still + // be enabled, because the test has simulated the user manually overriding + // this feature via command line. + base::test::ScopedFeatureList memory_feature; + memory_feature.InitAndEnableFeatureWithParameters( + features::kSitePerProcessOnlyForHighMemoryClients, + {{features::kSitePerProcessOnlyForHighMemoryClientsParamName, "768"}}); + + EXPECT_TRUE(content::SiteIsolationPolicy::IsStrictOriginIsolationEnabled()); +}
diff --git a/chrome/browser/ssl/chrome_expect_ct_reporter_browsertest.cc b/chrome/browser/ssl/chrome_expect_ct_reporter_browsertest.cc index b69a13d..17255003 100644 --- a/chrome/browser/ssl/chrome_expect_ct_reporter_browsertest.cc +++ b/chrome/browser/ssl/chrome_expect_ct_reporter_browsertest.cc
@@ -17,9 +17,11 @@ #include "content/public/browser/browser_thread.h" #include "net/cert/mock_cert_verifier.h" #include "net/http/transport_security_state.h" +#include "net/test/cert_test_util.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" +#include "net/test/test_data_directory.h" #include "services/network/public/cpp/features.h" namespace { @@ -143,7 +145,12 @@ scoped_refptr<net::X509Certificate> cert(test_server.GetCertificate()); net::CertVerifyResult verify_result; verify_result.is_issued_by_known_root = true; - verify_result.verified_cert = cert; + // TODO(https://crbug.com/848277): Until CT is unified with cert + // verification, the CertVerifier needs to simulate a publicly trusted + // certificate that was issued prior to CT being required, so that the + // connection is successfully made, but an Expect-CT report is triggered. + verify_result.verified_cert = + net::ImportCertFromFile(net::GetTestCertsDirectory(), "expired_cert.pem"); verify_result.cert_status = 0; mock_cert_verifier()->AddResultForCert(cert, verify_result, net::OK); @@ -183,7 +190,12 @@ scoped_refptr<net::X509Certificate> cert(test_server.GetCertificate()); net::CertVerifyResult verify_result; verify_result.is_issued_by_known_root = true; - verify_result.verified_cert = cert; + // TODO(https://crbug.com/848277): Until CT is unified with cert + // verification, the CertVerifier needs to simulate a publicly trusted + // certificate that was issued prior to CT being required, so that the + // connection is successfully made, but an Expect-CT report is triggered. + verify_result.verified_cert = + net::ImportCertFromFile(net::GetTestCertsDirectory(), "expired_cert.pem"); verify_result.cert_status = 0; mock_cert_verifier()->AddResultForCert(cert, verify_result, net::OK);
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc index 8349d81..a9dd4f65 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -501,7 +501,7 @@ int net_result) { scoped_refptr<net::X509Certificate> cert(https_server_.GetCertificate()); net::CertVerifyResult verify_result; - verify_result.is_issued_by_known_root = true; + verify_result.is_issued_by_known_root = false; verify_result.verified_cert = cert; verify_result.cert_status = cert_status;
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index d0bef007..bca8ba56 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -7024,17 +7024,6 @@ TestNoMITMSoftwareInterstitial(); } -void SetShouldNotRequireCTForTesting() { - mojo::Remote<network::mojom::NetworkServiceTest> network_service_test; - content::GetNetworkService()->BindTestInterface( - network_service_test.BindNewPipeAndPassReceiver()); - network::mojom::NetworkServiceTest::ShouldRequireCT required_ct = - network::mojom::NetworkServiceTest::ShouldRequireCT::DONT_REQUIRE; - - mojo::ScopedAllowSyncCallForTesting allow_sync_call; - network_service_test->SetShouldRequireCT(required_ct); -} - class TLSLegacyVersionSSLUITest : public SSLUITest { public: TLSLegacyVersionSSLUITest() = default; @@ -7043,7 +7032,6 @@ void SetUpOnMainThread() override { SSLUITest::SetUpOnMainThread(); mock_cert_verifier()->set_default_result(net::OK); - SetShouldNotRequireCTForTesting(); } void SetUpCommandLine(base::CommandLine* command_line) override {
diff --git a/chrome/browser/supervised_user/supervised_user_features.h b/chrome/browser/supervised_user/supervised_user_features.h index 74d90f7..dd5a205 100644 --- a/chrome/browser/supervised_user/supervised_user_features.h +++ b/chrome/browser/supervised_user/supervised_user_features.h
@@ -16,7 +16,7 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) // For the COVID-19 crisis. Temporarily enable supervised users to install from -// an allowlist of extensions without parental approval. +// a policy allowlist of extensions without parental approval. // TODO(crbug/1063104): Remove after the parent permission dialog launches. extern const base::Feature kSupervisedUserAllowlistExtensionInstall; #endif // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/supervised_user/supervised_user_pref_store.cc b/chrome/browser/supervised_user/supervised_user_pref_store.cc index ae026fd..35edaa9 100644 --- a/chrome/browser/supervised_user/supervised_user_pref_store.cc +++ b/chrome/browser/supervised_user/supervised_user_pref_store.cc
@@ -9,13 +9,11 @@ #include "base/bind.h" #include "base/command_line.h" -#include "base/feature_list.h" #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/browser/supervised_user/supervised_user_constants.h" -#include "chrome/browser/supervised_user/supervised_user_features.h" #include "chrome/browser/supervised_user/supervised_user_settings_service.h" #include "chrome/browser/supervised_user/supervised_user_url_filter.h" #include "chrome/common/chrome_switches.h" @@ -170,18 +168,6 @@ // "Permissions for sites, apps and extensions" setting, like geolocation // being disallowed. bool permissions_disallowed = true; - if (base::FeatureList::IsEnabled( - supervised_users::kSupervisedUserAllowlistExtensionInstall)) { - // We want the default setting of the - // kSupervisedUserExtensionsMayRequestPermissions pref to match the - // server default for the "Permissions for sites, apps and extensions" - // toggle. - // We need to do this matching because the toggle value is never sent - // to our client side until the user touches the toggle. - // The default is currently true, so allowlist extension installs will - // automatically work. - permissions_disallowed = false; - } settings->GetBoolean(supervised_users::kGeolocationDisabled, &permissions_disallowed); prefs_->SetBoolean(prefs::kSupervisedUserExtensionsMayRequestPermissions,
diff --git a/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc b/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc index 5221c74..1319655 100644 --- a/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc +++ b/chrome/browser/supervised_user/supervised_user_pref_store_unittest.cc
@@ -128,12 +128,12 @@ safe_search_util::YOUTUBE_RESTRICT_MODERATE); #if BUILDFLAG(ENABLE_EXTENSIONS) - // Permissions requests default to allowed. + // Permissions requests default to disallowed. bool extensions_may_request_permissions = false; EXPECT_TRUE(fixture.changed_prefs()->GetBoolean( prefs::kSupervisedUserExtensionsMayRequestPermissions, &extensions_may_request_permissions)); - EXPECT_TRUE(extensions_may_request_permissions); + EXPECT_FALSE(extensions_may_request_permissions); #endif // Activating the service again should not change anything. @@ -172,12 +172,12 @@ // extension permissions and update this test. fixture.changed_prefs()->Clear(); service_.SetLocalSetting(supervised_users::kGeolocationDisabled, - std::make_unique<base::Value>(true)); + std::make_unique<base::Value>(false)); EXPECT_EQ(1u, fixture.changed_prefs()->size()); EXPECT_TRUE(fixture.changed_prefs()->GetBoolean( prefs::kSupervisedUserExtensionsMayRequestPermissions, &extensions_may_request_permissions)); - EXPECT_FALSE(extensions_may_request_permissions); + EXPECT_TRUE(extensions_may_request_permissions); #endif }
diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc index a2ba43e..5dca45b 100644 --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc
@@ -64,7 +64,7 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "base/metrics/histogram_functions.h" +#include "chrome/browser/extensions/extension_management.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_util.h" #include "extensions/browser/extension_prefs.h" @@ -88,43 +88,6 @@ // The filename under which we'll store the blacklist (in the user data dir). const char kBlacklistFilename[] = "su-blacklist.bin"; -#if BUILDFLAG(ENABLE_EXTENSIONS) -// Temporary allowlist to enable supervised users to install Google-approved -// extensions during the COVID-19 crisis. -// TODO(crbug/1063104): Remove this allowlist after the crisis stabilizes or -// we launch the parent permissions dialog, whichever comes sooner. -constexpr char const* kAllowlistExtensionIds[] = { - "hmbjbjdpkobdjplfobhljndfdfdipjhg", // Zoom. - "kbfnbcaeplbcioakkpcpgfkobkghlhen", // Gammarly. - "inoeonmfapjbbkmdafoankkfajkcphgd", // Read&Write. - "pflionopdgpjckjkafnlamfmonjhccdh", // WeDo 2.0 LEGO. - "beocnjecphbmhnpbfafnfikebnpmjdmp", // Time4Learning. - "jgfbgkjjlonelmpenhpfeeljjlcgnkpe", // Classlink Oneclick. - "nopfnnpnopgmcnkjchnlpomggcdjfepo", // Clever. - "mgijmajocgfcbeboacabfgobmjgjcoja", // Google dictionary. - "imilikhegdfjlcbgakjieeecgdnomiel", // Wikipedia. - "iabeihobmhlgpkcgjiloemdbofjbdcic", // Bitly. - "jfiakckbklmccchjegnnojbalafebakb", // Memorize. - "cdnapgfjopgaggbmfgbiinmmbdcglnam", // OpenDyslexic Font. - "pjnefijmagpdjfhhkpljicbbpicelgko", // Voice in Voice Typing. - "klejemegaoblahjdpcajmpcnjjmkmkkf", // Noisli. - "dnkdpcbijfnmekbkchfjapfneigjomhh", // Auto Highlight. - "lpcaoilgpobajbkiamaojipjddpkkida", // Alphatext. - "lhpbckonakppajdgicbjdfokagjofnob", // Visor. - "lijhjhlnfifgoabbihoobnfapogkcjgk", // Scribble Toolbar. - "apboafhkiegglekeafbckfjldecefkhn", // Lucidchart Diagrams. - // For testing ExtensionWebstorePrivateApiTestChild.InstallAllowlisted. - "iladmdjkfniedhfhcfoefgojhgaiaccc", "enfkhcelefdadlmkffamgdlgplcionje", - - // We can add more here. You can find the extension id in the URL of the - // extension's detail page in Chrome Web Store. -}; - -constexpr char kAllowlistHistogramName[] = - "SupervisedUsers.ExtensionsAllowlist"; - -#endif // BUILDFLAG(ENABLE_EXTENSIONS) - const char* const kCustodianInfoPrefs[] = { prefs::kSupervisedUserCustodianName, prefs::kSupervisedUserCustodianEmail, @@ -806,20 +769,13 @@ if (base::FeatureList::IsEnabled( supervised_users::kSupervisedUserAllowlistExtensionInstall)) { - if (base::Contains(kAllowlistExtensionIds, extension.id())) { - base::UmaHistogramEnumeration(kAllowlistHistogramName, - UmaExtensionStateAllowlist::kAllowlistHit); - // Provides parents a way to block extensions, even if they are - // allowlisted. - if (ShouldBlockExtension(extension.id())) { - return ExtensionState::BLOCKED; - } + extensions::ExtensionManagement* management = + extensions::ExtensionManagementFactory::GetForBrowserContext(profile_); + if (management && management->BlacklistedByDefault()) { + // We want to make sure that the ExtensionInstallBlacklist user policy is + // active before allowing all extensions here. return ExtensionState::ALLOWED; } - LOG(WARNING) << "Allowlist miss: extension_id=" << extension.id() - << " extension_name='" << extension.name() << "'"; - base::UmaHistogramEnumeration(kAllowlistHistogramName, - UmaExtensionStateAllowlist::kAllowlistMiss); } // Feature flag for gating new behavior.
diff --git a/chrome/browser/supervised_user/supervised_user_service.h b/chrome/browser/supervised_user/supervised_user_service.h index ce2c652..4df2171c 100644 --- a/chrome/browser/supervised_user/supervised_user_service.h +++ b/chrome/browser/supervised_user/supervised_user_service.h
@@ -86,26 +86,6 @@ virtual bool SetActive(bool active) = 0; }; -#if BUILDFLAG(ENABLE_EXTENSIONS) - // These enum values represent a child user trying to install an extension - // during the COVID-19 crisis. - // These values are logged to UMA. Entries should not be renumbered and - // numeric values should never be reused. Please keep in sync with - // "SupervisedUserExtensionAllowlist" in - // src/tools/metrics/histograms/enums.xml. - enum class UmaExtensionStateAllowlist { - // Recorded when the extension id is not found in the allowlist. - kAllowlistMiss = 0, - // Recorded when the extension id is found in the allowlist. - kAllowlistHit = 1, - // Add future entries above this comment, in sync with - // "SupervisedUserExtensionAllowlist" in - // src/tools/metrics/histograms/enums.xml. - // Update kMaxValue to the last value. - kMaxValue = kAllowlistHit - }; -#endif // BUILDFLAG(ENABLE_EXTENSIONS) - ~SupervisedUserService() override; static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc index 13ac02e..335edb6 100644 --- a/chrome/browser/themes/browser_theme_pack.cc +++ b/chrome/browser/themes/browser_theme_pack.cc
@@ -54,8 +54,34 @@ using extensions::Extension; using TP = ThemeProperties; +// Persistent constants for the main images that we need. These have the same +// names as their IDR_* counterparts but these values will always stay the +// same. +enum BrowserThemePack::PersistentID : int { + kInvalid = -1, + kFrame = 1, + kFrameInactive = 2, + kFrameIncognito = 3, + kFrameIncognitoInactive = 4, + kToolbar = 5, + kTabBackground = 6, + kTabBackgroundIncognito = 7, + kTabBackgroundV = 8, + kNtpBackground = 9, + kFrameOverlay = 10, + kFrameOverlayInactive = 11, + kButtonBackground = 12, + kNtpAttribution = 13, + kWindowControlBackground = 14, + kTabBackgroundInactive = 15, + kTabBackgroundIncognitoInactive = 16, + kMaxValue = kTabBackgroundIncognitoInactive, +}; + namespace { +using PRS = BrowserThemePack::PersistentID; + // The tallest tab height in any mode. constexpr int kTallestTabHeight = 41; @@ -82,30 +108,10 @@ const int kSourceImagesID = kMaxID - 5; const int kScaleFactorsID = kMaxID - 6; -// Persistent constants for the main images that we need. These have the same -// names as their IDR_* counterparts but these values will always stay the -// same. -const int PRS_THEME_FRAME = 1; -const int PRS_THEME_FRAME_INACTIVE = 2; -const int PRS_THEME_FRAME_INCOGNITO = 3; -const int PRS_THEME_FRAME_INCOGNITO_INACTIVE = 4; -const int PRS_THEME_TOOLBAR = 5; -const int PRS_THEME_TAB_BACKGROUND = 6; -const int PRS_THEME_TAB_BACKGROUND_INCOGNITO = 7; -const int PRS_THEME_TAB_BACKGROUND_V = 8; -const int PRS_THEME_NTP_BACKGROUND = 9; -const int PRS_THEME_FRAME_OVERLAY = 10; -const int PRS_THEME_FRAME_OVERLAY_INACTIVE = 11; -const int PRS_THEME_BUTTON_BACKGROUND = 12; -const int PRS_THEME_NTP_ATTRIBUTION = 13; -const int PRS_THEME_WINDOW_CONTROL_BACKGROUND = 14; -const int PRS_THEME_TAB_BACKGROUND_INACTIVE = 15; -const int PRS_THEME_TAB_BACKGROUND_INCOGNITO_INACTIVE = 16; - struct PersistingImagesTable { // A non-changing integer ID meant to be saved in theme packs. This ID must // not change between versions of chrome. - int persistent_id; + BrowserThemePack::PersistentID persistent_id; // The IDR that depends on the whims of GRIT and therefore changes whenever // someone adds a new resource. @@ -118,62 +124,48 @@ // IDR_* resource names change whenever new resources are added; use persistent // IDs when storing to a cached pack. constexpr PersistingImagesTable kPersistingImages[] = { - {PRS_THEME_FRAME, IDR_THEME_FRAME, "theme_frame"}, - {PRS_THEME_FRAME_INACTIVE, IDR_THEME_FRAME_INACTIVE, - "theme_frame_inactive"}, - {PRS_THEME_FRAME_INCOGNITO, IDR_THEME_FRAME_INCOGNITO, - "theme_frame_incognito"}, - {PRS_THEME_FRAME_INCOGNITO_INACTIVE, IDR_THEME_FRAME_INCOGNITO_INACTIVE, + {PRS::kFrame, IDR_THEME_FRAME, "theme_frame"}, + {PRS::kFrameInactive, IDR_THEME_FRAME_INACTIVE, "theme_frame_inactive"}, + {PRS::kFrameIncognito, IDR_THEME_FRAME_INCOGNITO, "theme_frame_incognito"}, + {PRS::kFrameIncognitoInactive, IDR_THEME_FRAME_INCOGNITO_INACTIVE, "theme_frame_incognito_inactive"}, - {PRS_THEME_TOOLBAR, IDR_THEME_TOOLBAR, "theme_toolbar"}, - {PRS_THEME_TAB_BACKGROUND, IDR_THEME_TAB_BACKGROUND, - "theme_tab_background"}, - {PRS_THEME_TAB_BACKGROUND_INACTIVE, IDR_THEME_TAB_BACKGROUND_INACTIVE, + {PRS::kToolbar, IDR_THEME_TOOLBAR, "theme_toolbar"}, + {PRS::kTabBackground, IDR_THEME_TAB_BACKGROUND, "theme_tab_background"}, + {PRS::kTabBackgroundInactive, IDR_THEME_TAB_BACKGROUND_INACTIVE, "theme_tab_background_inactive"}, - {PRS_THEME_TAB_BACKGROUND_INCOGNITO, IDR_THEME_TAB_BACKGROUND_INCOGNITO, + {PRS::kTabBackgroundIncognito, IDR_THEME_TAB_BACKGROUND_INCOGNITO, "theme_tab_background_incognito"}, - {PRS_THEME_TAB_BACKGROUND_INCOGNITO_INACTIVE, + {PRS::kTabBackgroundIncognitoInactive, IDR_THEME_TAB_BACKGROUND_INCOGNITO_INACTIVE, "theme_tab_background_incognito_inactive"}, - {PRS_THEME_TAB_BACKGROUND_V, IDR_THEME_TAB_BACKGROUND_V, + {PRS::kTabBackgroundV, IDR_THEME_TAB_BACKGROUND_V, "theme_tab_background_v"}, - {PRS_THEME_NTP_BACKGROUND, IDR_THEME_NTP_BACKGROUND, - "theme_ntp_background"}, - {PRS_THEME_FRAME_OVERLAY, IDR_THEME_FRAME_OVERLAY, "theme_frame_overlay"}, - {PRS_THEME_FRAME_OVERLAY_INACTIVE, IDR_THEME_FRAME_OVERLAY_INACTIVE, + {PRS::kNtpBackground, IDR_THEME_NTP_BACKGROUND, "theme_ntp_background"}, + {PRS::kFrameOverlay, IDR_THEME_FRAME_OVERLAY, "theme_frame_overlay"}, + {PRS::kFrameOverlayInactive, IDR_THEME_FRAME_OVERLAY_INACTIVE, "theme_frame_overlay_inactive"}, - {PRS_THEME_BUTTON_BACKGROUND, IDR_THEME_BUTTON_BACKGROUND, + {PRS::kButtonBackground, IDR_THEME_BUTTON_BACKGROUND, "theme_button_background"}, - {PRS_THEME_NTP_ATTRIBUTION, IDR_THEME_NTP_ATTRIBUTION, - "theme_ntp_attribution"}, - {PRS_THEME_WINDOW_CONTROL_BACKGROUND, IDR_THEME_WINDOW_CONTROL_BACKGROUND, + {PRS::kNtpAttribution, IDR_THEME_NTP_ATTRIBUTION, "theme_ntp_attribution"}, + {PRS::kWindowControlBackground, IDR_THEME_WINDOW_CONTROL_BACKGROUND, "theme_window_control_background"}, }; -int GetPersistentIDByName(const std::string& key) { +BrowserThemePack::PersistentID GetPersistentIDByName(const std::string& key) { auto* it = std::find_if(std::begin(kPersistingImages), std::end(kPersistingImages), [&](const auto& image) { return base::LowerCaseEqualsASCII(key, image.key); }); - return it == std::end(kPersistingImages) ? -1 : it->persistent_id; + return it == std::end(kPersistingImages) ? PRS::kInvalid : it->persistent_id; } -int GetPersistentIDByIDR(int idr) { +BrowserThemePack::PersistentID GetPersistentIDByIDR(int idr) { auto* it = std::find_if(std::begin(kPersistingImages), std::end(kPersistingImages), [&](const auto& image) { return image.idr_id == idr; }); - return it == std::end(kPersistingImages) ? -1 : it->persistent_id; + return it == std::end(kPersistingImages) ? PRS::kInvalid : it->persistent_id; } -// Returns the maximum persistent id. -constexpr int GetMaxPersistentId() { - int max_prs_id = -1; - for (const auto& image : kPersistingImages) - max_prs_id = std::max(max_prs_id, image.persistent_id); - return max_prs_id; -} -constexpr int kMaxPersistentId = GetMaxPersistentId(); - // Returns true if the scales in |input| match those in |expected|. // The order must match as the index is used in determining the raw id. bool InputScalesValid(const base::StringPiece& input, @@ -296,7 +288,7 @@ } struct CropEntry { - int prs_id; + BrowserThemePack::PersistentID prs_id; // The maximum useful height of the image at |prs_id|. int max_height; @@ -308,24 +300,24 @@ // |kThemePackVersion| must be incremented if any of the maximum heights below // are modified. const struct CropEntry kImagesToCrop[] = { - {PRS_THEME_FRAME, kTallestFrameHeight}, - {PRS_THEME_FRAME_INACTIVE, kTallestFrameHeight}, - {PRS_THEME_FRAME_INCOGNITO, kTallestFrameHeight}, - {PRS_THEME_FRAME_INCOGNITO_INACTIVE, kTallestFrameHeight}, - {PRS_THEME_FRAME_OVERLAY, kTallestFrameHeight}, - {PRS_THEME_FRAME_OVERLAY_INACTIVE, kTallestFrameHeight}, - {PRS_THEME_TOOLBAR, 200}, - {PRS_THEME_BUTTON_BACKGROUND, 60}, - {PRS_THEME_WINDOW_CONTROL_BACKGROUND, 50}, + {PRS::kFrame, kTallestFrameHeight}, + {PRS::kFrameInactive, kTallestFrameHeight}, + {PRS::kFrameIncognito, kTallestFrameHeight}, + {PRS::kFrameIncognitoInactive, kTallestFrameHeight}, + {PRS::kFrameOverlay, kTallestFrameHeight}, + {PRS::kFrameOverlayInactive, kTallestFrameHeight}, + {PRS::kToolbar, 200}, + {PRS::kButtonBackground, 60}, + {PRS::kWindowControlBackground, 50}, }; // A list of images that don't need tinting or any other modification and can // be byte-copied directly into the finished DataPack. This should contain the // persistent IDs for all themeable image IDs that aren't in kFrameValues, // kTabBackgroundMap or kImagesToCrop. -const int kPreloadIDs[] = { - PRS_THEME_NTP_BACKGROUND, - PRS_THEME_NTP_ATTRIBUTION, +const BrowserThemePack::PersistentID kPreloadIDs[] = { + PRS::kNtpBackground, + PRS::kNtpAttribution, }; // Returns a piece of memory with the contents of the file |path|. @@ -783,7 +775,7 @@ // static bool BrowserThemePack::IsPersistentImageID(int id) { - return GetPersistentIDByIDR(id) != -1; + return GetPersistentIDByIDR(id) != PersistentID::kInvalid; } // static @@ -947,8 +939,8 @@ } gfx::Image BrowserThemePack::GetImageNamed(int idr_id) const { - int prs_id = GetPersistentIDByIDR(idr_id); - if (prs_id == -1) + PersistentID prs_id = GetPersistentIDByIDR(idr_id); + if (prs_id == PersistentID::kInvalid) return gfx::Image(); // Check if the image is cached. @@ -978,7 +970,7 @@ int idr_id, ui::ScaleFactor scale_factor) const { base::RefCountedMemory* memory = nullptr; - int prs_id = GetPersistentIDByIDR(idr_id); + PersistentID prs_id = GetPersistentIDByIDR(idr_id); int raw_id = GetRawIDByPersistentID(prs_id, scale_factor); if (raw_id != -1) { @@ -996,8 +988,8 @@ } bool BrowserThemePack::HasCustomImage(int idr_id) const { - int prs_id = GetPersistentIDByIDR(idr_id); - if (prs_id == -1) + PersistentID prs_id = GetPersistentIDByIDR(idr_id); + if (prs_id == PersistentID::kInvalid) return false; int* img = source_images_; @@ -1358,20 +1350,16 @@ ui::ScaleFactor scale_factor, const base::FilePath& image_path, FilePathMap* file_paths) const { - int id = GetPersistentIDByName(image_name); - if (id != -1) + PersistentID id = GetPersistentIDByName(image_name); + if (id != PersistentID::kInvalid) (*file_paths)[id][scale_factor] = image_path; } void BrowserThemePack::BuildSourceImagesArray(const FilePathMap& file_paths) { - std::vector<int> ids; - for (auto it = file_paths.begin(); it != file_paths.end(); ++it) { - ids.push_back(it->first); - } - - source_images_ = new int[ids.size() + 1]; - std::copy(ids.begin(), ids.end(), source_images_); - source_images_[ids.size()] = -1; + source_images_ = new int[file_paths.size() + 1]; + std::transform(file_paths.begin(), file_paths.end(), source_images_, + [](const auto& entry) { return entry.first; }); + source_images_[file_paths.size()] = -1; } bool BrowserThemePack::LoadRawBitmapsTo( @@ -1381,17 +1369,11 @@ // http://crbug.com/61838 base::ThreadRestrictions::ScopedAllowIO allow_io; - for (auto it = file_paths.begin(); it != file_paths.end(); ++it) { - int prs_id = it->first; + for (const auto& entry : file_paths) { + PersistentID prs_id = entry.first; // Some images need to go directly into |image_memory_|. No modification is // necessary or desirable. - bool is_copyable = false; - for (size_t i = 0; i < base::size(kPreloadIDs); ++i) { - if (kPreloadIDs[i] == prs_id) { - is_copyable = true; - break; - } - } + const bool is_copyable = base::Contains(kPreloadIDs, prs_id); gfx::ImageSkia image_skia; for (int pass = 0; pass < 2; ++pass) { // Two passes: In the first pass, we process only scale factor @@ -1399,19 +1381,19 @@ // process scale factor 100% first because the first image added // in image_skia.AddRepresentation() determines the DIP size for // all representations. - for (auto s2f = it->second.begin(); s2f != it->second.end(); ++s2f) { - ui::ScaleFactor scale_factor = s2f->first; + for (const auto& s2f : entry.second) { + ui::ScaleFactor scale_factor = s2f.first; if ((pass == 0 && scale_factor != ui::SCALE_FACTOR_100P) || (pass == 1 && scale_factor == ui::SCALE_FACTOR_100P)) { continue; } scoped_refptr<base::RefCountedMemory> raw_data( - ReadFileData(s2f->second)); + ReadFileData(s2f.second)); if (!raw_data.get() || !raw_data->size()) { LOG(ERROR) << "Could not load theme image" << " prs_id=" << prs_id << " scale_factor_enum=" << scale_factor - << " file=" << s2f->second.value() + << " file=" << s2f.second.value() << (raw_data.get() ? " (zero size)" : " (read error)"); return false; } @@ -1427,7 +1409,7 @@ ui::GetScaleForScaleFactor(scale_factor))); } else { NOTREACHED() << "Unable to decode theme image resource " - << it->first; + << entry.first; } } } @@ -1440,16 +1422,16 @@ } void BrowserThemePack::CropImages(ImageCache* images) const { - for (size_t i = 0; i < base::size(kImagesToCrop); ++i) { - int prs_id = kImagesToCrop[i].prs_id; - auto it = images->find(prs_id); + for (const auto& image_to_crop : kImagesToCrop) { + auto it = images->find(image_to_crop.prs_id); if (it == images->end()) continue; - int crop_height = kImagesToCrop[i].max_height; gfx::ImageSkia image_skia = it->second.AsImageSkia(); - (*images)[prs_id] = gfx::Image(gfx::ImageSkiaOperations::ExtractSubset( - image_skia, gfx::Rect(0, 0, image_skia.width(), crop_height))); + (*images)[image_to_crop.prs_id] = + gfx::Image(gfx::ImageSkiaOperations::ExtractSubset( + image_skia, + gfx::Rect(0, 0, image_skia.width(), image_to_crop.max_height))); } } @@ -1482,7 +1464,7 @@ void BrowserThemePack::CreateToolbarImageAndColors(ImageCache* images) { ImageCache temp_output; - constexpr int kSrcImageId = PRS_THEME_TOOLBAR; + constexpr PersistentID kSrcImageId = PRS::kToolbar; const auto image_it = images->find(kSrcImageId); if (image_it == images->end()) @@ -1515,19 +1497,17 @@ void BrowserThemePack::CreateFrameImagesAndColors(ImageCache* images) { static constexpr struct FrameValues { - int prs_id; + PersistentID prs_id; int tint_id; base::Optional<int> color_id; } kFrameValues[] = { - {PRS_THEME_FRAME, TP::TINT_FRAME, TP::COLOR_FRAME_ACTIVE}, - {PRS_THEME_FRAME_INACTIVE, TP::TINT_FRAME_INACTIVE, - TP::COLOR_FRAME_INACTIVE}, - {PRS_THEME_FRAME_OVERLAY, TP::TINT_FRAME, base::nullopt}, - {PRS_THEME_FRAME_OVERLAY_INACTIVE, TP::TINT_FRAME_INACTIVE, - base::nullopt}, - {PRS_THEME_FRAME_INCOGNITO, TP::TINT_FRAME_INCOGNITO, + {PRS::kFrame, TP::TINT_FRAME, TP::COLOR_FRAME_ACTIVE}, + {PRS::kFrameInactive, TP::TINT_FRAME_INACTIVE, TP::COLOR_FRAME_INACTIVE}, + {PRS::kFrameOverlay, TP::TINT_FRAME, base::nullopt}, + {PRS::kFrameOverlayInactive, TP::TINT_FRAME_INACTIVE, base::nullopt}, + {PRS::kFrameIncognito, TP::TINT_FRAME_INCOGNITO, TP::COLOR_FRAME_ACTIVE_INCOGNITO}, - {PRS_THEME_FRAME_INCOGNITO_INACTIVE, TP::TINT_FRAME_INCOGNITO_INACTIVE, + {PRS::kFrameIncognitoInactive, TP::TINT_FRAME_INCOGNITO_INACTIVE, TP::COLOR_FRAME_INACTIVE_INCOGNITO}, }; @@ -1536,22 +1516,22 @@ ImageCache temp_output; for (const auto& frame_values : kFrameValues) { - int src_id = frame_values.prs_id; + PersistentID src_id = frame_values.prs_id; // If the theme doesn't provide an image, attempt to fall back to one it // does. if (!images->count(src_id)) { // Fall back from inactive overlay to active overlay. - if (src_id == PRS_THEME_FRAME_OVERLAY_INACTIVE) - src_id = PRS_THEME_FRAME_OVERLAY; + if (src_id == PRS::kFrameOverlayInactive) + src_id = PRS::kFrameOverlay; // Fall back from inactive incognito to active incognito. - if (src_id == PRS_THEME_FRAME_INCOGNITO_INACTIVE) - src_id = PRS_THEME_FRAME_INCOGNITO; + if (src_id == PRS::kFrameIncognitoInactive) + src_id = PRS::kFrameIncognito; // For all non-overlay images, fall back to PRS_THEME_FRAME as a last // resort. - if (!images->count(src_id) && src_id != PRS_THEME_FRAME_OVERLAY) - src_id = PRS_THEME_FRAME; + if (!images->count(src_id) && src_id != PRS::kFrameOverlay) + src_id = PRS::kFrame; } // Note that if the original ID and all the fallbacks are absent, the caller @@ -1618,7 +1598,7 @@ // since they are shared by all variants. gfx::ImageSkia bg_image; ImageCache::const_iterator bg_img_it = - images->find(PRS_THEME_WINDOW_CONTROL_BACKGROUND); + images->find(PRS::kWindowControlBackground); if (bg_img_it != images->end()) bg_image = bg_img_it->second.AsImageSkia(); @@ -1673,15 +1653,15 @@ void BrowserThemePack::CreateTabBackgroundImagesAndColors(ImageCache* images) { static constexpr struct TabValues { // The background image to create/update. - int tab_id; + PersistentID tab_id; // For inactive images, the corresponding active image. If the active // images are customized and the inactive ones are not, the inactive ones // will be based on the active ones. - base::Optional<int> fallback_tab_id; + base::Optional<PersistentID> fallback_tab_id; // The frame image to use as the base of this tab background image. - int frame_id; + PersistentID frame_id; // The frame color to use as the base of this tab background image. int frame_color_id; @@ -1689,40 +1669,37 @@ // The color to compute and store for this image, if not present. int color_id; } kTabBackgroundMap[] = { - {PRS_THEME_TAB_BACKGROUND, base::nullopt, PRS_THEME_FRAME, - TP::COLOR_FRAME_ACTIVE, TP::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_ACTIVE}, - {PRS_THEME_TAB_BACKGROUND_INACTIVE, PRS_THEME_TAB_BACKGROUND, - PRS_THEME_FRAME_INACTIVE, TP::COLOR_FRAME_INACTIVE, + {PRS::kTabBackground, base::nullopt, PRS::kFrame, TP::COLOR_FRAME_ACTIVE, + TP::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_ACTIVE}, + {PRS::kTabBackgroundInactive, PRS::kTabBackground, PRS::kFrameInactive, + TP::COLOR_FRAME_INACTIVE, TP::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE}, - {PRS_THEME_TAB_BACKGROUND_INCOGNITO, base::nullopt, - PRS_THEME_FRAME_INCOGNITO, TP::COLOR_FRAME_ACTIVE_INCOGNITO, + {PRS::kTabBackgroundIncognito, base::nullopt, PRS::kFrameIncognito, + TP::COLOR_FRAME_ACTIVE_INCOGNITO, TP::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_ACTIVE_INCOGNITO}, - {PRS_THEME_TAB_BACKGROUND_INCOGNITO_INACTIVE, - PRS_THEME_TAB_BACKGROUND_INCOGNITO, PRS_THEME_FRAME_INCOGNITO_INACTIVE, - TP::COLOR_FRAME_INACTIVE_INCOGNITO, + {PRS::kTabBackgroundIncognitoInactive, PRS::kTabBackgroundIncognito, + PRS::kFrameIncognitoInactive, TP::COLOR_FRAME_INACTIVE_INCOGNITO, TP::COLOR_TAB_BACKGROUND_INACTIVE_FRAME_INACTIVE_INCOGNITO}, }; ImageCache temp_output; - for (size_t i = 0; i < base::size(kTabBackgroundMap); ++i) { - const int tab_id = kTabBackgroundMap[i].tab_id; - ImageCache::const_iterator tab_it = images->find(tab_id); + for (const auto& entry : kTabBackgroundMap) { + ImageCache::const_iterator tab_it = images->find(entry.tab_id); // Inactive images should be based on the active ones if the active ones // were customized. - if (tab_it == images->end() && kTabBackgroundMap[i].fallback_tab_id) - tab_it = images->find(*kTabBackgroundMap[i].fallback_tab_id); + if (tab_it == images->end() && entry.fallback_tab_id) + tab_it = images->find(*entry.fallback_tab_id); // Generate background tab images when provided with custom frame or // background tab images; in the former case the theme author may want the // background tabs to appear to tint the frame, and in the latter case the // provided background tab image may have transparent regions, which must be // made opaque by overlaying atop the original frame. - const ImageCache::const_iterator frame_it = - images->find(kTabBackgroundMap[i].frame_id); + const ImageCache::const_iterator frame_it = images->find(entry.frame_id); if (frame_it != images->end() || tab_it != images->end()) { SkColor frame_color; - GetColor(kTabBackgroundMap[i].frame_color_id, &frame_color); + GetColor(entry.frame_color_id, &frame_color); gfx::ImageSkia image_to_tint; if (frame_it != images->end()) @@ -1739,9 +1716,9 @@ dest_size.SetToMax(overlay.size()); dest_size.set_height(kTallestTabHeight); const gfx::Image dest_image(gfx::ImageSkia(std::move(source), dest_size)); - temp_output[tab_id] = dest_image; + temp_output[entry.tab_id] = dest_image; - SetColorIfUnspecified(kTabBackgroundMap[i].color_id, + SetColorIfUnspecified(entry.color_id, ComputeImageColor(dest_image, kTallestTabHeight)); } } @@ -1801,25 +1778,20 @@ void BrowserThemePack::RepackImages(const ImageCache& images, RawImages* reencoded_images) const { - for (auto it = images.begin(); it != images.end(); ++it) { - gfx::ImageSkia image_skia = *it->second.ToImageSkia(); + for (const auto& image : images) { + gfx::ImageSkia image_skia = *image.second.ToImageSkia(); - typedef std::vector<gfx::ImageSkiaRep> ImageSkiaReps; - ImageSkiaReps image_reps = image_skia.image_reps(); - if (image_reps.empty()) { - NOTREACHED() << "No image reps for resource " << it->first << "."; - } - for (auto rep_it = image_reps.begin(); rep_it != image_reps.end(); - ++rep_it) { + std::vector<gfx::ImageSkiaRep> image_reps = image_skia.image_reps(); + DCHECK(!image_reps.empty()) + << "No image reps for resource " << image.first << "."; + for (const auto& rep : image_reps) { std::vector<unsigned char> bitmap_data; - if (!gfx::PNGCodec::EncodeBGRASkBitmap(rep_it->GetBitmap(), false, - &bitmap_data)) { - NOTREACHED() << "Image file for resource " << it->first - << " could not be encoded."; - } + const bool encoded = gfx::PNGCodec::EncodeBGRASkBitmap( + rep.GetBitmap(), false, &bitmap_data); + DCHECK(encoded) << "Image file for resource " << image.first + << " could not be encoded."; int raw_id = GetRawIDByPersistentID( - it->first, - ui::GetSupportedScaleFactor(rep_it->scale())); + image.first, ui::GetSupportedScaleFactor(rep.scale())); (*reencoded_images)[raw_id] = base::RefCountedBytes::TakeVector(&bitmap_data); } @@ -1856,14 +1828,14 @@ } int BrowserThemePack::GetRawIDByPersistentID( - int prs_id, + PersistentID prs_id, ui::ScaleFactor scale_factor) const { - if (prs_id < 0) + if (prs_id == PersistentID::kInvalid) return -1; for (size_t i = 0; i < scale_factors_.size(); ++i) { if (scale_factors_[i] == scale_factor) - return ((kMaxPersistentId + 1) * i) + prs_id; + return ((PersistentID::kMaxValue + 1) * i) + prs_id; } return -1; } @@ -1885,7 +1857,8 @@ return false; } -void BrowserThemePack::GenerateRawImageForAllSupportedScales(int prs_id) { +void BrowserThemePack::GenerateRawImageForAllSupportedScales( + PersistentID prs_id) { // Compute (by scaling) bitmaps for |prs_id| for any scale factors // for which the theme author did not provide a bitmap. We compute // the bitmaps using the highest scale factor that theme author @@ -1930,8 +1903,8 @@ if (!gfx::PNGCodec::Decode(it->second->front(), it->second->size(), &available_bitmap)) { - NOTREACHED() << "Unable to decode theme image for prs_id=" - << prs_id << " for scale_factor=" << available_scale_factor; + NOTREACHED() << "Unable to decode theme image for prs_id=" << prs_id + << " for scale_factor=" << available_scale_factor; return; } @@ -1948,8 +1921,8 @@ if (!gfx::PNGCodec::EncodeBGRASkBitmap(scaled_bitmap, false, &bitmap_data)) { - NOTREACHED() << "Unable to encode theme image for prs_id=" - << prs_id << " for scale_factor=" << scale_factors_[i]; + NOTREACHED() << "Unable to encode theme image for prs_id=" << prs_id + << " for scale_factor=" << scale_factors_[i]; break; } image_memory_[scaled_raw_id] =
diff --git a/chrome/browser/themes/browser_theme_pack.h b/chrome/browser/themes/browser_theme_pack.h index 39d3009..79622c2e 100644 --- a/chrome/browser/themes/browser_theme_pack.h +++ b/chrome/browser/themes/browser_theme_pack.h
@@ -12,6 +12,7 @@ #include <string> #include <vector> +#include "base/containers/flat_map.h" #include "base/macros.h" #include "base/sequenced_task_runner_helpers.h" #include "chrome/browser/themes/custom_theme_supplier.h" @@ -56,6 +57,10 @@ // See CustomThemeSupplier constructor more more details. class BrowserThemePack : public CustomThemeSupplier { public: + // Public because these IDs are used both in private members of this class and + // free functions in browser_theme_pack.cc. + enum PersistentID : int; + // Builds the theme from |extension| into |pack|. This may be done on a // separate thread as it takes so long. This can fail in the case where the // theme has invalid data, in which case |pack->is_valid()| will be false. @@ -108,7 +113,7 @@ friend class BrowserThemePackTest; // Cached images. - typedef std::map<int, gfx::Image> ImageCache; + typedef base::flat_map<PersistentID, gfx::Image> ImageCache; // The raw PNG memory associated with a certain id. typedef std::map<int, scoped_refptr<base::RefCountedMemory> > RawImages; @@ -117,10 +122,10 @@ typedef std::map<uint16_t, base::StringPiece> RawDataForWriting; // Maps scale factors (enum values) to file paths. - typedef std::map<ui::ScaleFactor, base::FilePath> ScaleFactorToFileMap; + typedef base::flat_map<ui::ScaleFactor, base::FilePath> ScaleFactorToFileMap; // Maps image ids to maps of scale factors to file paths. - typedef std::map<int, ScaleFactorToFileMap> FilePathMap; + typedef base::flat_map<PersistentID, ScaleFactorToFileMap> FilePathMap; ~BrowserThemePack() override; @@ -263,7 +268,8 @@ // Returns a unique id to use to store the raw bitmap for |prs_id| at // |scale_factor| in memory. - int GetRawIDByPersistentID(int prs_id, ui::ScaleFactor scale_factor) const; + int GetRawIDByPersistentID(PersistentID prs_id, + ui::ScaleFactor scale_factor) const; // Returns true if the |key| specifies a valid scale (e.g. "100") and // the corresponding scale factor is currently in use. If true, returns @@ -272,7 +278,7 @@ ui::ScaleFactor* scale_factor) const; // Generates raw images for any missing scale from an available scale. - void GenerateRawImageForAllSupportedScales(int prs_id); + void GenerateRawImageForAllSupportedScales(PersistentID prs_id); // Data pack, if we have one. // TODO(crbug.com/1057889): Destroy this on in the thread pool, make the rest
diff --git a/chrome/browser/themes/browser_theme_pack_unittest.cc b/chrome/browser/themes/browser_theme_pack_unittest.cc index e5c8b6b..9567372c 100644 --- a/chrome/browser/themes/browser_theme_pack_unittest.cc +++ b/chrome/browser/themes/browser_theme_pack_unittest.cc
@@ -6,6 +6,7 @@ #include <stddef.h> +#include "base/containers/flat_map.h" #include "base/files/scoped_temp_dir.h" #include "base/json/json_file_value_serializer.h" #include "base/json/json_reader.h" @@ -33,11 +34,13 @@ // Maps scale factors (enum values) to file path. // A similar typedef in BrowserThemePack is private. -using TestScaleFactorToFileMap = std::map<ui::ScaleFactor, base::FilePath>; +using TestScaleFactorToFileMap = + base::flat_map<ui::ScaleFactor, base::FilePath>; // Maps image ids to maps of scale factors to file paths. // A similar typedef in BrowserThemePack is private. -using TestFilePathMap = std::map<int, TestScaleFactorToFileMap>; +using TestFilePathMap = + base::flat_map<BrowserThemePack::PersistentID, TestScaleFactorToFileMap>; // BrowserThemePackTest -------------------------------------------------------- @@ -648,9 +651,11 @@ // implementation details that shouldn't be exported. // By default the scale factor is for 100%. EXPECT_TRUE(base::FilePath(FILE_PATH_LITERAL("one")) == - out_file_paths[12][ui::SCALE_FACTOR_100P]); + out_file_paths[static_cast<BrowserThemePack::PersistentID>(12)] + [ui::SCALE_FACTOR_100P]); EXPECT_TRUE(base::FilePath(FILE_PATH_LITERAL("two")) == - out_file_paths[5][ui::SCALE_FACTOR_100P]); + out_file_paths[static_cast<BrowserThemePack::PersistentID>(5)] + [ui::SCALE_FACTOR_100P]); } TEST_F(BrowserThemePackTest, InvalidPathNames) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 4018c35..765812d 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -628,6 +628,7 @@ deps += [ "//chrome/browser/ui/webui/explore_sites_internals:mojo_bindings", "//chrome/browser/ui/webui/snippets_internals:mojo_bindings", + "//components/browser_ui/util/android", ] if (enable_feed_in_chrome) { deps += [ "//chrome/browser/ui/webui/feed_internals:mojo_bindings" ]
diff --git a/chrome/browser/ui/DEPS b/chrome/browser/ui/DEPS index df77b6b..7d9f5da 100644 --- a/chrome/browser/ui/DEPS +++ b/chrome/browser/ui/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+chrome/browser/image_decoder", "-chrome/browser/ui/views", + "+components/browser_ui/util/android/url_constants.h", "+components/country_codes", "+components/page_load_metrics/browser", "+mash/public/mojom",
diff --git a/chrome/browser/ui/android/page_info/connection_info_popup_android.cc b/chrome/browser/ui/android/page_info/connection_info_popup_android.cc index 805c94b..bad3143 100644 --- a/chrome/browser/ui/android/page_info/connection_info_popup_android.cc +++ b/chrome/browser/ui/android/page_info/connection_info_popup_android.cc
@@ -9,9 +9,7 @@ #include "base/android/jni_string.h" #include "chrome/android/chrome_jni_headers/ConnectionInfoPopup_jni.h" #include "chrome/browser/android/resource_mapper.h" -#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/infobars/infobar_service.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/security_state_tab_helper.h" #include "chrome/browser/ui/page_info/chrome_page_info_delegate.h" #include "chrome/browser/ui/page_info/page_info.h" @@ -61,13 +59,8 @@ SecurityStateTabHelper::FromWebContents(web_contents); DCHECK(helper); - // When |web_contents| is not from a Tab, |web_contents| does not have a - // |TabSpecificContentSettings| and need to create one; otherwise, noop. - TabSpecificContentSettings::CreateForWebContents(web_contents); presenter_ = std::make_unique<PageInfo>( - Profile::FromBrowserContext(web_contents->GetBrowserContext()), - std::make_unique<ChromePageInfoDelegate>(web_contents), - TabSpecificContentSettings::FromWebContents(web_contents), web_contents, + std::make_unique<ChromePageInfoDelegate>(web_contents), web_contents, nav_entry->GetURL(), helper->GetSecurityLevel(), *helper->GetVisibleSecurityState()); presenter_->InitializeUiState(this);
diff --git a/chrome/browser/ui/android/page_info/page_info_controller_android.cc b/chrome/browser/ui/android/page_info/page_info_controller_android.cc index 472415b4..3db7efd 100644 --- a/chrome/browser/ui/android/page_info/page_info_controller_android.cc +++ b/chrome/browser/ui/android/page_info/page_info_controller_android.cc
@@ -10,14 +10,13 @@ #include "base/command_line.h" #include "base/stl_util.h" #include "chrome/android/chrome_jni_headers/PageInfoController_jni.h" -#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/infobars/infobar_service.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/security_state_tab_helper.h" #include "chrome/browser/ui/page_info/chrome_page_info_delegate.h" #include "chrome/browser/ui/page_info/page_info.h" #include "chrome/browser/ui/page_info/page_info_ui.h" #include "chrome/common/chrome_features.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/security_state/core/security_state.h" @@ -64,13 +63,8 @@ SecurityStateTabHelper::FromWebContents(web_contents); DCHECK(helper); - // When |web_contents| is not from a Tab, |web_contents| does not have a - // |TabSpecificContentSettings| and need to create one; otherwise, noop. - TabSpecificContentSettings::CreateForWebContents(web_contents); presenter_ = std::make_unique<PageInfo>( - Profile::FromBrowserContext(web_contents->GetBrowserContext()), - std::make_unique<ChromePageInfoDelegate>(web_contents), - TabSpecificContentSettings::FromWebContents(web_contents), web_contents, + std::make_unique<ChromePageInfoDelegate>(web_contents), web_contents, nav_entry->GetURL(), helper->GetSecurityLevel(), *helper->GetVisibleSecurityState()); presenter_->InitializeUiState(this);
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index 71033c8..2157eb3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -204,7 +204,7 @@ <translation id="2450083983707403292"><ph name="FILE_NAME" />ஐ மீண்டும் பதிவிறக்கவா?</translation> <translation id="2450907520913474542">பக்கத்தை விட்டு வெளியேறாமலேயே இணையதளங்களில் தலைப்புகளைப் பற்றித் தெரிந்துகொள்ளலாம். 'தேடுவதற்குத் தொடு' அம்சமானது சொல்லையும் அதன் சூழலையும் Google தேடலுக்கு அனுப்பி விளக்கங்கள், படங்கள், தேடல் முடிவுகள் மற்றும் பிற விவரங்களை வழங்குகிறது. -தேடுவதற்கு ஏதேனும் ஒரு சொல்லைத் தொட்டுப் பிடிக்கவும். உங்கள் தேடுதலை துல்லியமாக்க அதிகமான அல்லது குறைவான வார்த்தைகளைத் தேர்ந்தேடுக்கவும். உங்கள் தேடலைத் திருத்த, பேனலைத் திறந்து, புதிய தாவலைத் திறக்கும் ஐகானைத் தட்டி தேடல் பெட்டியில் உங்கள் மாற்றங்களைச் செய்யவும்.</translation> +தேடுவதற்கு ஏதேனும் ஒரு சொல்லைத் தொட்டுப் பிடிக்கவும். உங்கள் தேடுதலை துல்லியமாக்க அதிகமான அல்லது குறைவான வார்த்தைகளைத் தேர்ந்தெடுக்கவும். உங்கள் தேடலைத் திருத்த, பேனலைத் திறந்து, புதிய தாவலைத் திறக்கும் ஐகானைத் தட்டி தேடல் பெட்டியில் உங்கள் மாற்றங்களைச் செய்யவும்.</translation> <translation id="246532703174860178">பகிர்</translation> <translation id="2482878487686419369">அறிவிப்புகள்</translation> <translation id="2490684707762498678"><ph name="APP_NAME" /> நிர்வகிக்கிறது</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index 114edec..67c0fdffd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -805,7 +805,7 @@ <translation id="6846298663435243399">లోడ్ అవుతోంది...</translation> <translation id="6850409657436465440">మీ డౌన్లోడ్ ఇప్పటికీ జరుగుతోంది</translation> <translation id="6850830437481525139"><ph name="TAB_COUNT" /> ట్యాబ్లు మూసివేయబడ్డాయి</translation> -<translation id="6864395892908308021">ఈ పరికరం NFCను రీడ్ చేయదు</translation> +<translation id="6864395892908308021">ఈ పరికరం NFCని రీడ్ చేయదు</translation> <translation id="6864459304226931083">చిత్రాన్ని డౌన్లోడ్ చేయి</translation> <translation id="6865313869410766144">స్వీయపూర్తి ఫారమ్ డేటా</translation> <translation id="6884306546558072722">ఆఫ్లైన్లో అన్వేషణను కొనసాగించండి</translation>
diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.cc b/chrome/browser/ui/app_list/search/omnibox_provider.cc index 5d1b287..33025e8 100644 --- a/chrome/browser/ui/app_list/search/omnibox_provider.cc +++ b/chrome/browser/ui/app_list/search/omnibox_provider.cc
@@ -28,11 +28,12 @@ list_controller_(list_controller), controller_(std::make_unique<AutocompleteController>( std::make_unique<ChromeAutocompleteProviderClient>(profile), - this, is_zero_state_enabled_ ? AutocompleteClassifier::DefaultOmniboxProviders() : AutocompleteClassifier::DefaultOmniboxProviders() & - ~AutocompleteProvider::TYPE_ZERO_SUGGEST)) {} + ~AutocompleteProvider::TYPE_ZERO_SUGGEST)) { + controller_->AddObserver(this); +} OmniboxProvider::~OmniboxProvider() {}
diff --git a/chrome/browser/ui/app_list/search/search_controller.cc b/chrome/browser/ui/app_list/search/search_controller.cc index 83d6c5da..73fc826 100644 --- a/chrome/browser/ui/app_list/search/search_controller.cc +++ b/chrome/browser/ui/app_list/search/search_controller.cc
@@ -20,7 +20,6 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" -#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" #include "chrome/browser/ui/app_list/app_list_model_updater.h" @@ -79,9 +78,7 @@ void SearchController::InitializeRankers() { std::unique_ptr<SearchResultRanker> ranker = - std::make_unique<SearchResultRanker>( - profile_, HistoryServiceFactory::GetForProfile( - profile_, ServiceAccessType::EXPLICIT_ACCESS)); + std::make_unique<SearchResultRanker>(profile_); ranker->InitializeRankers(this); mixer_->SetNonAppSearchResultRanker(std::move(ranker));
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc index f959e74..3f9a2b0e 100644 --- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc +++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
@@ -25,7 +25,6 @@ #include "chrome/browser/chromeos/file_manager/file_tasks_notifier.h" #include "chrome/browser/chromeos/file_manager/file_tasks_notifier_factory.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" -#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/app_list/search/chrome_search_result.h" @@ -121,25 +120,6 @@ } } -// Performs any per-type normalization required on a search result ID. This is -// meant to simplify the space of IDs in cases where they are too sparse. -std::string NormalizeId(const std::string& id, RankingItemType type) { - // Put any further normalizations here. - switch (type) { - case RankingItemType::kOmniboxGeneric: - // Heuristically check if the URL points to a Drive file. If so, strip - // some extra information from it. - if (GURL(id).host() == "docs.google.com") - return SimplifyGoogleDocsUrlId(id); - else - return SimplifyUrlId(id); - case RankingItemType::kApp: - return NormalizeAppId(id); - default: - return id; - } -} - // Linearly maps |score| to the range [min, max]. // |score| is assumed to be within [0.0, 1.0]; if it's greater than 1.0 // then max is returned; if it's less than 0.0, then min is returned. @@ -154,12 +134,9 @@ } // namespace -SearchResultRanker::SearchResultRanker(Profile* profile, - history::HistoryService* history_service) - : history_service_observer_(this), profile_(profile), weak_factory_(this) { +SearchResultRanker::SearchResultRanker(Profile* profile) + : profile_(profile), weak_factory_(this) { DCHECK(profile); - DCHECK(history_service); - history_service_observer_.Add(history_service); if (auto* notifier = file_manager::file_tasks::FileTasksNotifier::GetForProfile( profile_)) { @@ -177,62 +154,6 @@ void SearchResultRanker::InitializeRankers( SearchController* search_controller) { - if (app_list_features::IsQueryBasedMixedTypesRankerEnabled()) { - results_list_boost_coefficient_ = base::GetFieldTrialParamByFeatureAsDouble( - app_list_features::kEnableQueryBasedMixedTypesRanker, - "boost_coefficient", 0.1); - - RecurrenceRankerConfigProto config; - config.set_min_seconds_between_saves(240u); - config.set_condition_limit(0u); - config.set_condition_decay(0.5f); - config.set_target_limit(base::GetFieldTrialParamByFeatureAsInt( - app_list_features::kEnableQueryBasedMixedTypesRanker, "target_limit", - 200)); - config.set_target_decay(base::GetFieldTrialParamByFeatureAsDouble( - app_list_features::kEnableQueryBasedMixedTypesRanker, "target_decay", - 0.8f)); - config.mutable_predictor()->mutable_default_predictor(); - - if (GetFieldTrialParamByFeatureAsBool( - app_list_features::kEnableQueryBasedMixedTypesRanker, - "use_category_model", false)) { - // Group ranker model. - results_list_group_ranker_ = std::make_unique<RecurrenceRanker>( - "QueryBasedMixedTypesGroup", - profile_->GetPath().AppendASCII("results_list_group_ranker.pb"), - config, chromeos::ProfileHelper::IsEphemeralUserProfile(profile_)); - } else if (GetFieldTrialParamByFeatureAsBool( - app_list_features::kEnableQueryBasedMixedTypesRanker, - "use_aggregated_model", false) || - app_list_features::IsAggregatedMlSearchRankingEnabled()) { - use_aggregated_search_ranking_inference_ = true; - } else { - // Item ranker model. - const std::string config_json = GetFieldTrialParamValueByFeature( - app_list_features::kEnableQueryBasedMixedTypesRanker, "config"); - query_mixed_config_converter_ = JsonConfigConverter::Convert( - config_json, "QueryBasedMixedTypes", - base::BindOnce( - [](SearchResultRanker* ranker, - const RecurrenceRankerConfigProto& default_config, - base::Optional<RecurrenceRankerConfigProto> parsed_config) { - ranker->query_mixed_config_converter_.reset(); - if (ranker->json_config_parsed_for_testing_) - std::move(ranker->json_config_parsed_for_testing_).Run(); - ranker->query_based_mixed_types_ranker_ = - std::make_unique<RecurrenceRanker>( - "QueryBasedMixedTypes", - ranker->profile_->GetPath().AppendASCII( - "query_based_mixed_types_ranker.pb"), - parsed_config ? parsed_config.value() : default_config, - chromeos::ProfileHelper::IsEphemeralUserProfile( - ranker->profile_)); - }, - base::Unretained(this), config)); - } - } - if (app_list_features::IsZeroStateMixedTypesRankerEnabled()) { zero_state_item_coeff_ = base::GetFieldTrialParamByFeatureAsDouble( app_list_features::kEnableZeroStateMixedTypesRanker, "item_coeff", @@ -336,10 +257,6 @@ if (results_list_group_ranker_) { group_ranks_.clear(); group_ranks_ = results_list_group_ranker_->Rank(); - } else if (query_based_mixed_types_ranker_) { - query_mixed_ranks_.clear(); - query_mixed_ranks_ = - query_based_mixed_types_ranker_->Rank(base::UTF16ToUTF8(query)); } if (app_ranker_) { @@ -407,14 +324,6 @@ result.score + rank_it->second * results_list_boost_coefficient_, 3.0); } - } else if (query_based_mixed_types_ranker_) { - const auto& rank_it = - query_mixed_ranks_.find(NormalizeId(result.result->id(), type)); - if (rank_it != query_mixed_ranks_.end()) { - result.score = std::min( - result.score + rank_it->second * results_list_boost_coefficient_, - 3.0); - } } else if (!last_query_.empty() && use_aggregated_search_ranking_inference_) { result.score = search_ranker_score_map[result.result->id()]; @@ -505,10 +414,6 @@ } else if (results_list_group_ranker_) { results_list_group_ranker_->Record(base::NumberToString( static_cast<int>(app_launch_data.ranking_item_type))); - } else if (query_based_mixed_types_ranker_) { - query_based_mixed_types_ranker_->Record( - NormalizeId(app_launch_data.id, app_launch_data.ranking_item_type), - app_launch_data.query); } } else if (model == Model::APPS && app_ranker_) { app_ranker_->Record(NormalizeAppId(app_launch_data.id)); @@ -611,46 +516,6 @@ } } -void SearchResultRanker::OnURLsDeleted( - history::HistoryService* history_service, - const history::DeletionInfo& deletion_info) { - if (!query_based_mixed_types_ranker_) - return; - - if (deletion_info.IsAllHistory()) { - // TODO(931149): We clear the whole model because we expect most targets to - // be URLs. In future, consider parsing the targets and only deleting URLs. - query_based_mixed_types_ranker_->GetTargetData()->clear(); - } else { - for (const auto& row : deletion_info.deleted_rows()) { - // In order to perform URL normalization, NormalizeId requires any omnibox - // item type as argument. Pass kOmniboxGeneric here as we don't know the - // specific type. - query_based_mixed_types_ranker_->RemoveTarget( - NormalizeId(row.url().spec(), RankingItemType::kOmniboxGeneric)); - } - } - - // Force a save to disk. It is possible to get many calls to OnURLsDeleted in - // quick succession, eg. when all history is cleared from a different device. - // So delay the save slightly and only perform one save for all updates during - // that delay. - if (!query_mixed_ranker_save_queued_) { - query_mixed_ranker_save_queued_ = true; - DCHECK(base::SequencedTaskRunnerHandle::IsSet()); - base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&SearchResultRanker::SaveQueryMixedRankerAfterDelete, - weak_factory_.GetWeakPtr()), - TimeDelta::FromSeconds(3)); - } -} - -void SearchResultRanker::SaveQueryMixedRankerAfterDelete() { - query_based_mixed_types_ranker_->SaveToDisk(); - query_mixed_ranker_save_queued_ = false; -} - void SearchResultRanker::LogZeroStateResultScore(RankingItemType type, float score) { const auto& now = Time::Now();
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h index 585b3ad..08b4272 100644 --- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h +++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
@@ -39,11 +39,9 @@ // FetchRankings queries each model for ranking results. Rank modifies the // scores of provided search results, which are intended to be the output of a // search provider. -class SearchResultRanker : file_manager::file_tasks::FileTasksObserver, - history::HistoryServiceObserver { +class SearchResultRanker : file_manager::file_tasks::FileTasksObserver { public: - SearchResultRanker(Profile* profile, - history::HistoryService* history_service); + explicit SearchResultRanker(Profile* profile); ~SearchResultRanker() override; // Performs all setup of rankers. This is separated from the constructor for @@ -70,10 +68,6 @@ // file_manager::file_tasks::FileTaskObserver: void OnFilesOpened(const std::vector<FileOpenEvent>& file_opens) override; - // history::HistoryServiceObserver: - void OnURLsDeleted(history::HistoryService* history_service, - const history::DeletionInfo& deletion_info) override; - // Sets a testing-only closure to inform tests when a JSON config has been // parsed. void set_json_config_parsed_for_testing(base::OnceClosure closure) { @@ -97,16 +91,8 @@ private: FRIEND_TEST_ALL_PREFIXES(SearchResultRankerTest, - QueryMixedModelConfigDeployment); - FRIEND_TEST_ALL_PREFIXES(SearchResultRankerTest, - QueryMixedModelDeletesURLCorrectly); - FRIEND_TEST_ALL_PREFIXES(SearchResultRankerTest, ZeroStateGroupRankerUsesFinchConfig); - // Saves |query_based_mixed_types_ranker_| to disk. Called after a delay when - // URLs get deleted. - void SaveQueryMixedRankerAfterDelete(); - // Calculates the final score for the given zero state |result|, sets // |result.score|, and increments the related entry in the |type_counts| map. void ScoreZeroStateItem( @@ -129,25 +115,12 @@ // final scores. Controlled by Finch. float results_list_boost_coefficient_ = 0.0f; - // The |results_list_group_ranker_| and |query_based_mixed_types_ranker_| are - // models for two different experiments. Only one will be constructed. Each - // has an associated map used for caching its results. - // A model that ranks groups (eg. 'file' and 'omnibox'), which is used to // tweak the results shown in the search results list only. This does not // affect apps. std::unique_ptr<RecurrenceRanker> results_list_group_ranker_; std::map<std::string, float> group_ranks_; - // Ranks items shown in the results list after a search query. Currently - // these are local files and omnibox results. - std::unique_ptr<RecurrenceRanker> query_based_mixed_types_ranker_; - std::map<std::string, float> query_mixed_ranks_; - std::unique_ptr<JsonConfigConverter> query_mixed_config_converter_; - // Flag set when a delayed task to save the model is created. This is used to - // prevent several delayed tasks from being created. - bool query_mixed_ranker_save_queued_ = false; - // Ranks the kinds of results possible in the zero state results list. std::unique_ptr<RecurrenceRanker> zero_state_group_ranker_; std::map<std::string, float> zero_state_group_ranks_; @@ -188,9 +161,6 @@ base::Time time_of_last_local_file_log_; base::Time time_of_last_drive_log_; - ScopedObserver<history::HistoryService, history::HistoryServiceObserver> - history_service_observer_; - Profile* profile_; base::WeakPtrFactory<SearchResultRanker> weak_factory_;
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc index 6203e08..bec738e4 100644 --- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc +++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
@@ -147,10 +147,6 @@ base::BindRepeating(&BuildHistoryService)); profile_ = profile_builder.Build(); - - history_service_ = std::make_unique<history::HistoryService>(); - history_service_->Init( - history::TestHistoryDatabaseParamsForPath(temp_dir_.GetPath())); Wait(); } @@ -170,8 +166,7 @@ } std::unique_ptr<SearchResultRanker> MakeRanker() { - return std::make_unique<SearchResultRanker>(profile_.get(), - history_service_.get()); + return std::make_unique<SearchResultRanker>(profile_.get()); } Mixer::SortedResults MakeSearchResults(const std::vector<std::string>& ids, @@ -189,8 +184,6 @@ return new SearchControllerFake(profile_.get()); } - history::HistoryService* history_service() { return history_service_.get(); } - void Wait() { task_environment_.RunUntilIdle(); } // This is used only to make the ownership clear for the TestSearchResult @@ -204,7 +197,6 @@ ScopedFeatureList scoped_feature_list_; - std::unique_ptr<history::HistoryService> history_service_; std::unique_ptr<Profile> profile_; const base::HistogramTester histogram_tester_; @@ -214,7 +206,6 @@ // should add their flag here. std::vector<base::Feature> all_feature_flags_ = { app_list_features::kEnableAppRanker, - app_list_features::kEnableQueryBasedMixedTypesRanker, app_list_features::kEnableZeroStateMixedTypesRanker}; DISALLOW_COPY_AND_ASSIGN(SearchResultRankerTest); @@ -247,34 +238,6 @@ HasId("C"), HasId("D")))); } -TEST_F(SearchResultRankerTest, CategoryModelImprovesScores) { - EnableOneFeature( - app_list_features::kEnableQueryBasedMixedTypesRanker, - {{"use_category_model", "true"}, {"boost_coefficient", "1.0"}}); - auto ranker = MakeRanker(); - ranker->InitializeRankers(MakeSearchController()); - Wait(); - - AppLaunchData app_launch_data; - app_launch_data.id = "unused"; - app_launch_data.ranking_item_type = RankingItemType::kFile; - app_launch_data.query = "query"; - - for (int i = 0; i < 20; ++i) - ranker->Train(app_launch_data); - ranker->FetchRankings(base::string16()); - - auto results = - MakeSearchResults({"A", "B", "C", "D"}, - {ResultType::kOmnibox, ResultType::kOmnibox, - ResultType::kLauncher, ResultType::kLauncher}, - {0.5f, 0.6f, 0.45f, 0.46f}); - - ranker->Rank(&results); - EXPECT_THAT(results, WhenSorted(ElementsAre(HasId("D"), HasId("C"), - HasId("B"), HasId("A")))); -} - TEST_F(SearchResultRankerTest, AppModelImprovesScores) { const std::string json = R"({ "min_seconds_between_saves": 250, @@ -322,245 +285,6 @@ HasId("D"), HasId("C")))); } -TEST_F(SearchResultRankerTest, DefaultQueryMixedModelImprovesScores) { - // Without the |use_category_model| parameter, the ranker defaults to the item - // model. With the |config| parameter, the ranker uses the default predictor - // for the RecurrenceRanker. - EnableOneFeature(app_list_features::kEnableQueryBasedMixedTypesRanker, - {{"boost_coefficient", "1.0"}}); - - base::RunLoop run_loop; - auto ranker = MakeRanker(); - ranker->set_json_config_parsed_for_testing(run_loop.QuitClosure()); - ranker->InitializeRankers(MakeSearchController()); - run_loop.Run(); - Wait(); - - AppLaunchData app_launch_data_c; - app_launch_data_c.id = "C"; - app_launch_data_c.ranking_item_type = RankingItemType::kFile; - app_launch_data_c.query = "query"; - - AppLaunchData app_launch_data_d; - app_launch_data_d.id = "D"; - app_launch_data_d.ranking_item_type = RankingItemType::kFile; - app_launch_data_d.query = "query"; - - for (int i = 0; i < 10; ++i) { - ranker->Train(app_launch_data_c); - ranker->Train(app_launch_data_d); - } - ranker->FetchRankings(base::UTF8ToUTF16("query")); - - // The types associated with these results don't match what was trained on, - // to check that the type is irrelevant to the item model. - auto results = MakeSearchResults({"A", "B", "C", "D"}, - {ResultType::kOmnibox, ResultType::kOmnibox, - ResultType::kOmnibox, ResultType::kOmnibox}, - {0.3f, 0.2f, 0.1f, 0.1f}); - - ranker->Rank(&results); - EXPECT_THAT(results, WhenSorted(ElementsAre(HasId("D"), HasId("C"), - HasId("A"), HasId("B")))); -} - -// URL IDs should ignore the query and fragment, and URLs for google docs should -// ignore a trailing /view or /edit. -TEST_F(SearchResultRankerTest, QueryMixedModelNormalizesUrlIds) { - EnableOneFeature(app_list_features::kEnableQueryBasedMixedTypesRanker, - {{"boost_coefficient", "1.0"}}); - - // We want |url_1| and |_3| to be equivalent to |url_2| and |_4|. So, train on - // 1 and 3 but rank 2 and 4. Even with zero relevance, they should be at the - // top of the rankings. - const std::string& url_1 = "http://docs.google.com/mydoc/edit?query"; - const std::string& url_2 = "http://docs.google.com/mydoc/view#fragment"; - const std::string& url_3 = "some.domain.com?query#edit"; - const std::string& url_4 = "some.domain.com"; - - base::RunLoop run_loop; - auto ranker = MakeRanker(); - ranker->set_json_config_parsed_for_testing(run_loop.QuitClosure()); - ranker->InitializeRankers(MakeSearchController()); - run_loop.Run(); - Wait(); - - AppLaunchData app_launch_data_1; - app_launch_data_1.id = url_1; - app_launch_data_1.ranking_item_type = RankingItemType::kOmniboxGeneric; - app_launch_data_1.query = "query"; - AppLaunchData app_launch_data_3; - app_launch_data_3.id = url_3; - app_launch_data_3.ranking_item_type = RankingItemType::kOmniboxGeneric; - app_launch_data_3.query = "query"; - - for (int i = 0; i < 5; ++i) { - ranker->Train(app_launch_data_1); - ranker->Train(app_launch_data_3); - } - ranker->FetchRankings(base::UTF8ToUTF16("query")); - - auto results = MakeSearchResults( - {url_2, url_4, "untrained id"}, - {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox}, - {0.0f, 0.0f, 0.1f}); - - ranker->Rank(&results); - EXPECT_THAT(results, WhenSorted(ElementsAre(HasId(url_4), HasId(url_2), - HasId("untrained id")))); -} - -// Ensure that a JSON config deployed via Finch results in the correct model -// being constructed. -TEST_F(SearchResultRankerTest, QueryMixedModelConfigDeployment) { - const std::string json = R"({ - "min_seconds_between_saves": 250, - "target_limit": 100, - "target_decay": 0.5, - "condition_limit": 50, - "condition_decay": 0.7, - "predictor": { - "predictor_type": "exponential weights ensemble", - "learning_rate": 1.6, - "predictors": [ - {"predictor_type": "default"}, - {"predictor_type": "markov"}, - {"predictor_type": "frecency", "decay_coeff": 0.8} - ] - } - })"; - - EnableOneFeature(app_list_features::kEnableQueryBasedMixedTypesRanker, - {{"boost_coefficient", "1.0"}, {"config", json}}); - - base::RunLoop run_loop; - auto ranker = MakeRanker(); - ranker->set_json_config_parsed_for_testing(run_loop.QuitClosure()); - ranker->InitializeRankers(MakeSearchController()); - run_loop.Run(); - Wait(); - - EXPECT_EQ(std::string(ranker->query_based_mixed_types_ranker_ - ->GetPredictorNameForTesting()), - "ExponentialWeightsEnsemble"); -} - -// Tests that, when a URL is deleted from the history service, the query-based -// mixed-types model deletes it in memory and from disk. -TEST_F(SearchResultRankerTest, QueryMixedModelDeletesURLCorrectly) { - // Create ranker. - const std::string json = R"({ - "min_seconds_between_saves": 1000, - "target_limit": 100, - "target_decay": 0.5, - "condition_limit": 10, - "condition_decay": 0.5, - "predictor": { - "predictor_type": "fake" - } - })"; - - EnableOneFeature(app_list_features::kEnableQueryBasedMixedTypesRanker, - {{"boost_coefficient", "1.0"}, {"config", json}}); - - base::RunLoop run_loop; - auto ranker = MakeRanker(); - ranker->set_json_config_parsed_for_testing(run_loop.QuitClosure()); - ranker->InitializeRankers(MakeSearchController()); - run_loop.Run(); - Wait(); - - const base::FilePath model_path = - profile_->GetPath().AppendASCII("query_based_mixed_types_ranker.pb"); - - // Train the model on two URLs. - const std::string url_1 = "http://www.google.com/testing"; - AppLaunchData url_1_data; - url_1_data.id = url_1; - url_1_data.ranking_item_type = RankingItemType::kOmniboxGeneric; - url_1_data.query = "query"; - ranker->Train(url_1_data); - ranker->Train(url_1_data); - - const std::string url_2 = "http://www.other.com"; - AppLaunchData url_2_data; - url_2_data.id = url_2; - url_2_data.ranking_item_type = RankingItemType::kOmniboxGeneric; - url_2_data.query = "query"; - ranker->Train(url_2_data); - - // Expect the scores of the urls to reflect their training. - { - ranker->FetchRankings(base::UTF8ToUTF16("query")); - auto results = MakeSearchResults( - {url_1, url_2, "untrained"}, - {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox}, - {0.0f, 0.0f, 0.5f}); - ranker->Rank(&results); - EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 2.0f), - HasIdScore(url_2, 1.0f), - HasIdScore("untrained", 0.5f))); - } - - // Delete the model file from disk and make sure it's gone. - base::DeleteFile(model_path, false); - EXPECT_FALSE(base::PathExists(model_path)); - - // Advance mock time by more than |min_seconds_between_saves| to make sure the - // file will be written again upon modification. - task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(2 * 1000)); - - // Modify the history. - history_service()->AddPage(GURL(url_1), base::Time::Now(), - history::VisitSource::SOURCE_BROWSED); - history_service()->DeleteURLs({GURL(url_1)}); - - // Wait for history transactions to be complete. - history::BlockUntilHistoryProcessesPendingRequests(history_service()); - Wait(); - - // Verify that the modifications triggered a write of the model. - EXPECT_TRUE(base::PathExists(model_path)); - - // Force cache expiry. - ranker->time_of_last_fetch_ = base::Time(); - - // Expect the score of |url_1| to be 0.0, it should have been deleted from - // the model. - { - ranker->FetchRankings(base::UTF8ToUTF16("query")); - auto results = MakeSearchResults( - {url_1, url_2, "untrained"}, - {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox}, - {0.0f, 0.0f, 0.5f}); - ranker->Rank(&results); - EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 0.0f), - HasIdScore(url_2, 1.0f), - HasIdScore("untrained", 0.5f))); - } - - // Load a new ranker from disk and ensure |url_1| hasn't been retained. - base::RunLoop new_run_loop; - auto new_ranker = - std::make_unique<SearchResultRanker>(profile_.get(), history_service()); - new_ranker->set_json_config_parsed_for_testing(new_run_loop.QuitClosure()); - new_ranker->InitializeRankers(MakeSearchController()); - new_run_loop.Run(); - Wait(); - - { - new_ranker->FetchRankings(base::UTF8ToUTF16("query")); - auto results = MakeSearchResults( - {url_1, url_2, "untrained"}, - {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox}, - {0.0f, 0.0f, 0.5f}); - new_ranker->Rank(&results); - EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 0.0f), - HasIdScore(url_2, 1.0f), - HasIdScore("untrained", 0.5f))); - } -} - TEST_F(SearchResultRankerTest, ZeroStateGroupModelDisabledWithFlag) { DisableAllFeatures(); auto ranker = MakeRanker();
diff --git a/chrome/browser/ui/ash/assistant/assistant_browsertest.cc b/chrome/browser/ui/ash/assistant/assistant_browsertest.cc index 6c7804a..3226c808 100644 --- a/chrome/browser/ui/ash/assistant/assistant_browsertest.cc +++ b/chrome/browser/ui/ash/assistant/assistant_browsertest.cc
@@ -8,12 +8,24 @@ #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power_manager/backlight.pb.h" +#include "chromeos/services/assistant/public/features.h" namespace chromeos { namespace assistant { namespace { + constexpr int kStartBrightnessPercent = 50; + +// Ensures that |value_| is within the range {min_, max_}. If it isn't, this +// will print a nice error message. +#define EXPECT_WITHIN_RANGE(min_, value_, max_) \ + ({ \ + EXPECT_TRUE(min_ <= value_ && value_ <= max_) \ + << "Expected " << value_ << " to be within the range " \ + << "{" << min_ << ", " << max_ << "}."; \ + }) + } // namespace class AssistantBrowserTest : public MixinBasedInProcessBrowserTest { @@ -195,5 +207,124 @@ ExpectBrightnessDown(); } +// TODO(b:152077326): See if we can get TaskEnvironment to work in +// AssistantBrowserTests so that we can use it instead of TestClock. +class TestClock { + public: + TestClock() { + DCHECK_EQ(nullptr, instance_); + instance_ = this; + } + + TestClock(const TestClock&) = delete; + TestClock& operator=(const TestClock&) = delete; + + ~TestClock() { + DCHECK_EQ(this, instance_); + instance_ = nullptr; + } + + void Advance(base::TimeDelta delta) { + DCHECK_GE(delta, base::TimeDelta()); + base::AutoLock lock(offset_lock_); + offset_ += delta; + } + + private: + static base::Time TimeNow() { + return base::subtle::TimeNowIgnoringOverride() + + TestClock::instance_->GetOffset(); + } + + static base::TimeTicks TimeTicksNow() { + return base::subtle::TimeTicksNowIgnoringOverride() + + TestClock::instance_->GetOffset(); + } + + static base::ThreadTicks ThreadTicksNow() { + return base::subtle::ThreadTicksNowIgnoringOverride() + + TestClock::instance_->GetOffset(); + } + + base::TimeDelta GetOffset() { + base::AutoLock lock(offset_lock_); + return offset_; + } + + static TestClock* instance_; + + base::subtle::ScopedTimeClockOverrides time_overrides_{ + &TestClock::TimeNow, &TestClock::TimeTicksNow, + &TestClock::ThreadTicksNow}; + + base::Lock offset_lock_; + base::TimeDelta offset_ GUARDED_BY(offset_lock_); +}; + +// static +TestClock* TestClock::instance_ = nullptr; + +class AssistantTimersV2BrowserTest : public AssistantBrowserTest { + public: + AssistantTimersV2BrowserTest() { + feature_list_.InitAndEnableFeature(features::kAssistantTimersV2); + } + + AssistantTimersV2BrowserTest(const AssistantTimersV2BrowserTest&) = delete; + AssistantTimersV2BrowserTest& operator=(const AssistantTimersV2BrowserTest&) = + delete; + ~AssistantTimersV2BrowserTest() override = default; + + TestClock& clock() { return clock_; } + + private: + TestClock clock_; + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(AssistantTimersV2BrowserTest, + ShouldDisplayTimersResponse) { + tester()->StartAssistantAndWaitForReady(); + + ShowAssistantUi(); + EXPECT_TRUE(tester()->IsVisible()); + + tester()->SendTextQuery("Set a timer for 5 minutes"); + tester()->ExpectAnyOfTheseTextResponses({ + "Alright, 5 min. Starting… now.", + "OK, 5 min. And we're starting… now.", + }); + + tester()->SendTextQuery("Set a timer for 10 minutes"); + tester()->ExpectAnyOfTheseTextResponses({ + "2nd timer, for 10 min. And that's starting… now.", + "2nd timer, for 10 min. Starting… now.", + }); + + tester()->SendTextQuery("Show my timers"); + std::vector<base::TimeDelta> timers = + tester()->ExpectAndReturnTimersResponse(); + EXPECT_EQ(2u, timers.size()); + + // Five minute timer should be somewhere in the range of {0, 5} min. + base::TimeDelta& five_min_timer = timers.at(0); + EXPECT_WITHIN_RANGE(0, five_min_timer.InMinutes(), 5); + + // Ten minute timer should be somewhere in the range of {5, 10} min. + base::TimeDelta& ten_min_timer = timers.at(1); + EXPECT_WITHIN_RANGE(5, ten_min_timer.InMinutes(), 10); + + // Artificially advance the clock. + clock().Advance(five_min_timer); + base::RunLoop().RunUntilIdle(); + + // Update our expectation for where our timers should be. + ten_min_timer -= five_min_timer; + five_min_timer = base::TimeDelta(); + + // Assert that the UI has been updated to meet our expectations. + tester()->ExpectTimersResponse(timers); +} + } // namespace assistant } // namespace chromeos
diff --git a/chrome/browser/ui/ash/assistant/assistant_test_mixin.cc b/chrome/browser/ui/ash/assistant/assistant_test_mixin.cc index b1352d6..ca35fbf 100644 --- a/chrome/browser/ui/ash/assistant/assistant_test_mixin.cc +++ b/chrome/browser/ui/ash/assistant/assistant_test_mixin.cc
@@ -88,25 +88,26 @@ }; // Base class that observes all new responses being displayed under the -// |parent_view|, and searches for any of the given |expected_responses|, or -// until a timeout is hit. On timeout this will abort the test with a useful -// error message. -// The derived classes must implement the logic to extract the response from a -// given view. +// |parent_view|, waiting for HasResponse() to return |true| or until a timeout +// is hit. On timeout this will abort the test with a useful error message. By +// default, HasResponse() checks for any non-empty response, but this behavior +// can be overridden by derived classes wishing to assert more specific +// expectations. The derived classes must implement the logic to extract the +// response from a given view. class ResponseWaiter : private views::ViewObserver { public: - ResponseWaiter(views::View* parent_view, - const std::vector<std::string>& expected_responses) - : parent_view_(parent_view), expected_responses_(expected_responses) { + explicit ResponseWaiter(views::View* parent_view) + : parent_view_(parent_view) { parent_view_->AddObserver(this); } + ~ResponseWaiter() override { if (parent_view_) parent_view_->RemoveObserver(this); } void RunUntilResponseReceived() { - if (HasExpectedResponse()) + if (HasResponse()) return; // Wait until we're ready or we hit the timeout. @@ -115,8 +116,11 @@ run_loop.QuitClosure()); EXPECT_NO_FATAL_FAILURE(run_loop.Run()) << "Failed waiting for Assistant response.\n" - << "Expected any of " << FormatExpectedResponses() << ".\n" - << "Got \"" << GetResponseText() << "\""; + << GetFailureMessage(); + } + + std::string GetResponseText() const { + return GetResponseTextRecursive(parent_view_); } private: @@ -124,7 +128,7 @@ void OnViewHierarchyChanged( views::View* observed_view, const views::ViewHierarchyChangedDetails& details) override { - if (quit_loop_ && HasExpectedResponse()) + if (quit_loop_ && HasResponse()) std::move(quit_loop_).Run(); } @@ -132,28 +136,19 @@ DCHECK(observed_view == parent_view_); if (quit_loop_) { - FAIL() << parent_view_->GetClassName() << " is deleted " - << "before receiving the Assistant response.\n" - << "Expected any of " << FormatExpectedResponses() << ".\n" - << "Got \"" << GetResponseText() << "\""; + ADD_FAILURE() << parent_view_->GetClassName() << " is deleted " + << "before receiving the Assistant response.\n" + << GetFailureMessage(); std::move(quit_loop_).Run(); } parent_view_ = nullptr; } - bool HasExpectedResponse() const { - std::string response = GetResponseText(); + virtual bool HasResponse() const { return !GetResponseText().empty(); } - for (const std::string& expected : expected_responses_) { - if (response.find(expected) != std::string::npos) - return true; - } - return false; - } - - std::string GetResponseText() const { - return GetResponseTextRecursive(parent_view_); + virtual std::string GetFailureMessage() const { + return "Expected to receive any non-empty response."; } std::string GetResponseTextRecursive(views::View* view) const { @@ -161,59 +156,109 @@ if (response_maybe) { return response_maybe.value() + "\n"; } else { - std::string result; + std::stringstream result; for (views::View* child : view->children()) - result += GetResponseTextRecursive(child); - return result; + result << GetResponseTextRecursive(child); + return result.str(); } } virtual base::Optional<std::string> GetResponseTextOfView( views::View* view) const = 0; - std::string FormatExpectedResponses() const { - std::string result = "{\n"; - for (const std::string& expected : expected_responses_) - result += " \"" + expected + "\",\n"; - result += "}"; - return result; - } - views::View* parent_view_; - std::vector<std::string> expected_responses_; - base::OnceClosure quit_loop_; }; -class TextResponseWaiter : public ResponseWaiter { +// A ResponseWaiter which waits until one of |expected_responses| is received. +// The derived classes must implement the logic to extract the response from a +// given view. +class ExpectedResponseWaiter : public ResponseWaiter { public: - using ResponseWaiter::ResponseWaiter; + ExpectedResponseWaiter(views::View* parent_view, + const std::vector<std::string>& expected_responses) + : ResponseWaiter(parent_view), expected_responses_(expected_responses) {} private: - base::Optional<std::string> GetResponseTextOfView( - views::View* view) const override { - if (Equals(view->GetClassName(), "AssistantTextElementView")) { - auto* text_view = static_cast<ash::AssistantUiElementView*>(view); - return text_view->ToStringForTesting(); + // ResponseWaiter overrides: + bool HasResponse() const override { + std::string response = GetResponseText(); + for (const std::string& expected : expected_responses_) { + if (response.find(expected) != std::string::npos) + return true; } - - return base::nullopt; + return false; } + + std::string GetFailureMessage() const override { + std::stringstream message; + message << "Expected any of " << FormatExpectedResponses() << ".\n"; + message << "Got \"" << GetResponseText() << "\""; + return message.str(); + } + + std::string FormatExpectedResponses() const { + std::stringstream result; + result << "{\n"; + for (const std::string& expected : expected_responses_) + result << " \"" << expected << "\",\n"; + result << "}"; + return result.str(); + } + + std::vector<std::string> expected_responses_; }; -class CardResponseWaiter : public ResponseWaiter { +// A ResponseWaiter which waits until any non-empty response is received for a +// response of the type indicated by the specified |class_name|. +// NOTE: |class_name| must name a class inheriting from AssistantUiElementView. +class TypedResponseWaiter : public ResponseWaiter { public: - using ResponseWaiter::ResponseWaiter; + TypedResponseWaiter(const std::string& class_name, views::View* parent_view) + : ResponseWaiter(parent_view), class_name_(class_name) {} + ~TypedResponseWaiter() override = default; + + private: + // ResponseWaiter overrides: base::Optional<std::string> GetResponseTextOfView( views::View* view) const override { - if (Equals(view->GetClassName(), "AssistantCardElementView")) { - auto* card_view = static_cast<ash::AssistantUiElementView*>(view); - return card_view->ToStringForTesting(); + if (Equals(view->GetClassName(), class_name_.c_str())) { + return static_cast<ash::AssistantUiElementView*>(view) + ->ToStringForTesting(); } - return base::nullopt; } + + const std::string class_name_; +}; + +// An ExpectedResponseWaiter which waits until one of |expected_responses| is +// received for a response of the type indicated by the specified |class_name|. +// NOTE: |class_name| must name a class inheriting from AssistantUiElementView. +class TypedExpectedResponseWaiter : public ExpectedResponseWaiter { + public: + TypedExpectedResponseWaiter( + const std::string& class_name, + views::View* parent_view, + const std::vector<std::string>& expected_responses) + : ExpectedResponseWaiter(parent_view, expected_responses), + class_name_(class_name) {} + + ~TypedExpectedResponseWaiter() override = default; + + private: + // ExpectedResponseWaiter overrides: + base::Optional<std::string> GetResponseTextOfView( + views::View* view) const override { + if (Equals(view->GetClassName(), class_name_.c_str())) { + return static_cast<ash::AssistantUiElementView*>(view) + ->ToStringForTesting(); + } + return base::nullopt; + } + + const std::string class_name_; }; template <typename T> @@ -422,8 +467,9 @@ const std::string& expected_response, base::TimeDelta wait_timeout) { const base::test::ScopedRunLoopTimeout run_timeout(FROM_HERE, wait_timeout); - CardResponseWaiter waiter(test_api_->ui_element_container(), - {expected_response}); + TypedExpectedResponseWaiter waiter("AssistantCardElementView", + test_api_->ui_element_container(), + {expected_response}); waiter.RunUntilResponseReceived(); } @@ -437,11 +483,56 @@ const std::vector<std::string>& expected_responses, base::TimeDelta wait_timeout) { const base::test::ScopedRunLoopTimeout run_timeout(FROM_HERE, wait_timeout); - TextResponseWaiter waiter(test_api_->ui_element_container(), - expected_responses); + TypedExpectedResponseWaiter waiter("AssistantTextElementView", + test_api_->ui_element_container(), + expected_responses); waiter.RunUntilResponseReceived(); } +void AssistantTestMixin::ExpectTimersResponse( + const std::vector<base::TimeDelta>& timers, + base::TimeDelta wait_timeout) { + // We expect the textual representation of a timers response to be of the form + // "<timer1 remaining time in seconds>\n<timer2 remaining time in seconds>..." + std::stringstream expected_response; + for (const auto& timer : timers) + expected_response << timer.InSeconds() << "\n"; + + const base::test::ScopedRunLoopTimeout run_timeout(FROM_HERE, wait_timeout); + TypedExpectedResponseWaiter waiter("AssistantTimersElementView", + test_api_->ui_element_container(), + {expected_response.str()}); + waiter.RunUntilResponseReceived(); +} + +std::vector<base::TimeDelta> AssistantTestMixin::ExpectAndReturnTimersResponse( + base::TimeDelta wait_timeout) { + const base::test::ScopedRunLoopTimeout run_timeout(FROM_HERE, wait_timeout); + TypedResponseWaiter waiter("AssistantTimersElementView", + test_api_->ui_element_container()); + waiter.RunUntilResponseReceived(); + + // We expect the textual representation of a timers response to be of the form + // "<timer1 remaining time in seconds>\n<timer2 remaining time in seconds>..." + std::vector<std::string> timers_as_strings = + base::SplitString(base::TrimString(waiter.GetResponseText(), "\n", + base::TrimPositions::TRIM_TRAILING), + "\n", base::WhitespaceHandling::KEEP_WHITESPACE, + base::SplitResult::SPLIT_WANT_ALL); + + // Transform the textual representation of our timers into TimeDelta objects. + std::vector<base::TimeDelta> timers; + std::transform(timers_as_strings.begin(), timers_as_strings.end(), + std::back_inserter(timers), + [](const std::string& timer_as_string) { + int seconds_remaining = 0; + base::StringToInt(timer_as_string, &seconds_remaining); + return base::TimeDelta::FromSeconds(seconds_remaining); + }); + + return timers; +} + void AssistantTestMixin::PressAssistantKey() { SendKeyPress(ui::VKEY_ASSISTANT); }
diff --git a/chrome/browser/ui/ash/assistant/assistant_test_mixin.h b/chrome/browser/ui/ash/assistant/assistant_test_mixin.h index a9a4b23..7d2bbbe 100644 --- a/chrome/browser/ui/ash/assistant/assistant_test_mixin.h +++ b/chrome/browser/ui/ash/assistant/assistant_test_mixin.h
@@ -106,6 +106,18 @@ const std::vector<std::string>& expected_responses, base::TimeDelta wait_timeout = kDefaultWaitTimeout); + // Waits until a timers response is rendered that contains the given timers. + // If the expected response is not received in |wait_timeout|, this will fail + // the test. + void ExpectTimersResponse(const std::vector<base::TimeDelta>& timers, + base::TimeDelta wait_timeout = kDefaultWaitTimeout); + + // Waits until a timers response is rendered and returns the time remaining of + // the rendered timers. If a timers response is not received in |wait_timeout| + // this will fail the test. + std::vector<base::TimeDelta> ExpectAndReturnTimersResponse( + base::TimeDelta wait_timeout = kDefaultWaitTimeout); + // Presses the Assistant key, which will toggle the Assistant UI. void PressAssistantKey();
diff --git a/chrome/browser/ui/ash/homescreen_interactive_uitest.cc b/chrome/browser/ui/ash/homescreen_interactive_uitest.cc index dab02f9..09dd6cc3 100644 --- a/chrome/browser/ui/ash/homescreen_interactive_uitest.cc +++ b/chrome/browser/ui/ash/homescreen_interactive_uitest.cc
@@ -52,8 +52,7 @@ } }; -// Disabled: crbug.com/1060648 -IN_PROC_BROWSER_TEST_F(HomescreenTest, DISABLED_ShowHideLauncher) { +IN_PROC_BROWSER_TEST_F(HomescreenTest, ShowHideLauncher) { BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); aura::Window* browser_window = browser_view->GetWidget()->GetNativeWindow(); @@ -74,75 +73,13 @@ std::move(waiter).Run(); // Hide the launcher by activating the browser window. + waiter = ash::ShellTestApi().CreateWaiterForFinishingWindowAnimation( + browser_window); ui_controls::SendKeyPress(browser_window, ui::VKEY_1, /*control=*/false, /*shift=*/false, /*alt=*/true, /*command=*/false); base::RunLoop().RunUntilIdle(); - ash::ShellTestApi().WaitForWindowFinishAnimating(browser_window); -} - -class HomescreenDragTest : public HomescreenTest { - public: - HomescreenDragTest() { - // Gesture tested by this test is only enabled if - // kDragFromShelfToHomeOrOverview is disabled. - scoped_features_.InitWithFeatures( - {}, {ash::features::kDragFromShelfToHomeOrOverview, - chromeos::features::kShelfHotseat}); - } - ~HomescreenDragTest() override = default; - - HomescreenDragTest(const HomescreenDragTest& other) = delete; - HomescreenDragTest& operator=(const HomescreenDragTest& rhs) = delete; - - std::vector<std::string> GetUMAHistogramNames() const override { - return { - "Ash.Homescreen.AnimationSmoothness", - "Apps.StateTransition.Drag.PresentationTime.TabletMode", - "Apps.StateTransition.Drag.PresentationTime.MaxLatency.TabletMode", - }; - } - - private: - base::test::ScopedFeatureList scoped_features_; -}; - -// TODO(http://crbug.com/1057864): Disabled due to flakiness. -IN_PROC_BROWSER_TEST_F(HomescreenDragTest, DISABLED_DraggingPerformance) { - // First show the launcher so we can do drags. - BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - aura::Window* browser_window = browser_view->GetWidget()->GetNativeWindow(); - ui_controls::SendKeyPress(browser_window, ui::VKEY_BROWSER_SEARCH, - /*control=*/false, - /*shift=*/false, - /*alt=*/false, - /*command=*/false); - base::RunLoop().RunUntilIdle(); - ash::ShellTestApi().WaitForWindowFinishAnimating(browser_window); - - // Drag down to somewhere above halfway, so the launcher remains shown on drag - // release. - gfx::Rect display_bounds = - display::Screen::GetScreen() - ->GetDisplayNearestWindow(browser()->window()->GetNativeWindow()) - .bounds(); - const gfx::Point start_point(display_bounds.CenterPoint().x(), 1); - gfx::Point end_point(display_bounds.CenterPoint().x(), - display_bounds.CenterPoint().y() - 50); - auto generator = ui_test_utils::DragEventGenerator::CreateForTouch( - std::make_unique<ui_test_utils::InterpolatedProducer>( - start_point, end_point, base::TimeDelta::FromMilliseconds(1000))); - generator->Wait(); - ash::ShellTestApi().WaitForWindowFinishAnimating(browser_window); - - // Drag down to somewhere below halfway, so the launcher is hidden on drag - // release. - end_point.set_y(display_bounds.CenterPoint().y() + 50); - generator = ui_test_utils::DragEventGenerator::CreateForTouch( - std::make_unique<ui_test_utils::InterpolatedProducer>( - start_point, end_point, base::TimeDelta::FromMilliseconds(1000))); - generator->Wait(); - ash::ShellTestApi().WaitForWindowFinishAnimating(browser_window); + std::move(waiter).Run(); }
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_instance_registry_helper.cc b/chrome/browser/ui/ash/launcher/app_service/app_service_instance_registry_helper.cc index f2968e36..278bcda7 100644 --- a/chrome/browser/ui/ash/launcher/app_service/app_service_instance_registry_helper.cc +++ b/chrome/browser/ui/ash/launcher/app_service/app_service_instance_registry_helper.cc
@@ -273,7 +273,15 @@ apps::InstanceState state = static_cast<apps::InstanceState>( apps::InstanceState::kStarted | apps::InstanceState::kRunning | apps::InstanceState::kActive | apps::InstanceState::kVisible); - OnInstances(GetAppId(contents), GetWindow(contents), std::string(), state); + auto* contents_window = GetWindow(contents); + + // Get the app_id from the existed instance first. The app_id for PWAs could + // be changed based on the URL, e.g. google photos, which might cause + // instance app_id inconsistent DCHECK error. + std::string app_id = + proxy_->InstanceRegistry().GetShelfId(contents_window).app_id; + OnInstances(app_id.empty() ? GetAppId(contents) : app_id, contents_window, + std::string(), state); return; }
diff --git a/chrome/browser/ui/ash/launcher/shelf_context_menu_unittest.cc b/chrome/browser/ui/ash/launcher/shelf_context_menu_unittest.cc index 7d48ddc5..b696967 100644 --- a/chrome/browser/ui/ash/launcher/shelf_context_menu_unittest.cc +++ b/chrome/browser/ui/ash/launcher/shelf_context_menu_unittest.cc
@@ -318,7 +318,7 @@ EXPECT_FALSE(IsItemPresentInMenu(menu.get(), ash::MENU_OPEN_NEW)); EXPECT_FALSE(IsItemPresentInMenu(menu.get(), ash::MENU_PIN)); EXPECT_TRUE(IsItemEnabledInMenu(menu.get(), ash::MENU_CLOSE)); - EXPECT_TRUE(IsItemEnabledInMenu(menu.get(), ash::SHOW_APP_INFO)); + EXPECT_FALSE(IsItemEnabledInMenu(menu.get(), ash::SHOW_APP_INFO)); EXPECT_TRUE(IsItemEnabledInMenu(menu.get(), ash::UNINSTALL)); // Shelf group context menu.
diff --git a/chrome/browser/ui/ash/network/OWNERS b/chrome/browser/ui/ash/network/OWNERS index a83b4d9..ebbc11e 100644 --- a/chrome/browser/ui/ash/network/OWNERS +++ b/chrome/browser/ui/ash/network/OWNERS
@@ -1,5 +1,6 @@ azeemarshad@chromium.org jonmann@chromium.org khorimoto@chromium.org +stevenjb@chromium.org -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/chrome/browser/ui/browser_live_tab_context.cc b/chrome/browser/ui/browser_live_tab_context.cc index 26b7b43..1a157cb 100644 --- a/chrome/browser/ui/browser_live_tab_context.cc +++ b/chrome/browser/ui/browser_live_tab_context.cc
@@ -9,7 +9,7 @@ #include "base/feature_list.h" #include "base/token.h" -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h"
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index 0829ab0..e886606 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc
@@ -66,7 +66,7 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension.h"
diff --git a/chrome/browser/ui/browser_tabrestore.cc b/chrome/browser/ui/browser_tabrestore.cc index 217c4b1..603009bb 100644 --- a/chrome/browser/ui/browser_tabrestore.cc +++ b/chrome/browser/ui/browser_tabrestore.cc
@@ -8,7 +8,7 @@ #include <utility> #include "build/build_config.h" -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_restore.h" #include "chrome/browser/sessions/session_service.h"
diff --git a/chrome/browser/ui/gtk/native_theme_gtk.cc b/chrome/browser/ui/gtk/native_theme_gtk.cc index 4edbb80..139a8f92 100644 --- a/chrome/browser/ui/gtk/native_theme_gtk.cc +++ b/chrome/browser/ui/gtk/native_theme_gtk.cc
@@ -278,6 +278,7 @@ case ui::NativeTheme::kColorId_TextfieldDefaultBackground: return GetBgColor(GtkCheckVersion(3, 20) ? "GtkTextView#textview.view" : "GtkTextView.view"); + case ui::NativeTheme::kColorId_TextfieldPlaceholderColor: case ui::NativeTheme::kColorId_TextfieldReadOnlyColor: return GetFgColor(GtkCheckVersion(3, 20) ? "GtkTextView#textview.view:disabled #text"
diff --git a/chrome/browser/ui/input_method/input_method_engine_base.cc b/chrome/browser/ui/input_method/input_method_engine_base.cc index 920a0cf..55c85e1d 100644 --- a/chrome/browser/ui/input_method/input_method_engine_base.cc +++ b/chrome/browser/ui/input_method/input_method_engine_base.cc
@@ -258,7 +258,7 @@ } } -void InputMethodEngineBase::SetSurroundingText(const std::string& text, +void InputMethodEngineBase::SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) {
diff --git a/chrome/browser/ui/input_method/input_method_engine_base.h b/chrome/browser/ui/input_method/input_method_engine_base.h index e252b979..63e58cff 100644 --- a/chrome/browser/ui/input_method/input_method_engine_base.h +++ b/chrome/browser/ui/input_method/input_method_engine_base.h
@@ -100,7 +100,7 @@ // Called when a surrounding text is changed. virtual void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset_pos) = 0; @@ -143,7 +143,7 @@ void Reset() override; void ProcessKeyEvent(const ui::KeyEvent& key_event, KeyEventDoneCallback callback) override; - void SetSurroundingText(const std::string& text, + void SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) override;
diff --git a/chrome/browser/ui/input_method/input_method_engine_unittest.cc b/chrome/browser/ui/input_method/input_method_engine_unittest.cc index 4f65d6c..7abfd84 100644 --- a/chrome/browser/ui/input_method/input_method_engine_unittest.cc +++ b/chrome/browser/ui/input_method/input_method_engine_unittest.cc
@@ -109,13 +109,13 @@ composition_bounds_ = bounds; } void OnSurroundingTextChanged(const std::string& engine_id, - const std::string& text, + const base::string16& text, int cursor_pos, int anchor_pos, int offset) override { calls_bitmap_ |= ONSURROUNDINGTEXTCHANGED; engine_id_ = engine_id; - surrounding_info_.text = text; + surrounding_info_.text = base::UTF16ToUTF8(text); surrounding_info_.focus = cursor_pos; surrounding_info_.anchor = anchor_pos; surrounding_info_.offset = offset; @@ -278,7 +278,7 @@ EXPECT_EQ(ONACTIVATE | ONFOCUS, observer_->GetCallsBitmapAndReset()); EXPECT_EQ(kTestImeComponentId, observer_->GetEngineIdAndReset()); // Sets the surrounding text. - engine_->SetSurroundingText("text" /* Surrounding text*/, + engine_->SetSurroundingText(base::UTF8ToUTF16("text") /* Surrounding text*/, 0 /*focused position*/, 1 /*anchor position*/, 0 /*offset position*/); EXPECT_EQ(ONSURROUNDINGTEXTCHANGED, observer_->GetCallsBitmapAndReset());
diff --git a/chrome/browser/ui/page_info/chrome_page_info_delegate.cc b/chrome/browser/ui/page_info/chrome_page_info_delegate.cc index 98eba79..d4740fb 100644 --- a/chrome/browser/ui/page_info/chrome_page_info_delegate.cc +++ b/chrome/browser/ui/page_info/chrome_page_info_delegate.cc
@@ -7,16 +7,24 @@ #include "build/build_config.h" #include "chrome/browser/bluetooth/bluetooth_chooser_context.h" #include "chrome/browser/bluetooth/bluetooth_chooser_context_factory.h" +#include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/content_settings/tab_specific_content_settings.h" +#include "chrome/browser/infobars/infobar_service.h" +#include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h" #include "chrome/browser/permissions/permission_manager_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/chrome_password_protection_service.h" +#include "chrome/browser/ssl/stateful_ssl_host_state_delegate_factory.h" #include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context_factory.h" +#include "chrome/browser/vr/vr_tab_helper.h" +#include "chrome/common/url_constants.h" #include "components/permissions/chooser_context_base.h" #include "components/permissions/permission_manager.h" #include "components/permissions/permission_result.h" +#include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_features.h" #if BUILDFLAG(FULL_SAFE_BROWSING) #include "chrome/browser/safe_browsing/chrome_password_protection_service.h" @@ -25,6 +33,9 @@ #if !defined(OS_ANDROID) #include "chrome/browser/serial/serial_chooser_context.h" #include "chrome/browser/serial/serial_chooser_context_factory.h" +#include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/chrome_pages.h" +#include "chrome/browser/ui/page_info/page_info_infobar_delegate.h" #endif ChromePageInfoDelegate::ChromePageInfoDelegate( @@ -35,13 +46,25 @@ return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); } +TabSpecificContentSettings* +ChromePageInfoDelegate::GetTabSpecificContentSettings() const { + // When |web_contents| is not from a Tab, |web_contents| does not have a + // |TabSpecificContentSettings| and need to create one; otherwise, noop. + TabSpecificContentSettings::CreateForWebContents(web_contents_); + return TabSpecificContentSettings::FromWebContents(web_contents_); +} + permissions::ChooserContextBase* ChromePageInfoDelegate::GetChooserContext( ContentSettingsType type) { switch (type) { case ContentSettingsType::USB_CHOOSER_DATA: return UsbChooserContextFactory::GetForProfile(GetProfile()); case ContentSettingsType::BLUETOOTH_CHOOSER_DATA: - return BluetoothChooserContextFactory::GetForProfile(GetProfile()); + if (base::FeatureList::IsEnabled( + features::kWebBluetoothNewPermissionsBackend)) { + return BluetoothChooserContextFactory::GetForProfile(GetProfile()); + } + return nullptr; case ContentSettingsType::SERIAL_CHOOSER_DATA: #if !defined(OS_ANDROID) return SerialChooserContextFactory::GetForProfile(GetProfile()); @@ -57,18 +80,23 @@ bool ChromePageInfoDelegate::HasContentSettingChangedViaPageInfo( ContentSettingsType type) { - return tab_specific_content_settings()->HasContentSettingChangedViaPageInfo( + return GetTabSpecificContentSettings()->HasContentSettingChangedViaPageInfo( type); } +void ChromePageInfoDelegate::ContentSettingChangedViaPageInfo( + ContentSettingsType type) { + GetTabSpecificContentSettings()->ContentSettingChangedViaPageInfo(type); +} + const LocalSharedObjectsContainer& ChromePageInfoDelegate::GetAllowedObjects( const GURL& site_url) { - return tab_specific_content_settings()->allowed_local_shared_objects(); + return GetTabSpecificContentSettings()->allowed_local_shared_objects(); } const LocalSharedObjectsContainer& ChromePageInfoDelegate::GetBlockedObjects( const GURL& site_url) { - return tab_specific_content_settings()->blocked_local_shared_objects(); + return GetTabSpecificContentSettings()->blocked_local_shared_objects(); } int ChromePageInfoDelegate::GetFirstPartyAllowedCookiesCount( @@ -145,3 +173,37 @@ return PermissionManagerFactory::GetForProfile(GetProfile()) ->GetPermissionStatus(type, site_url, site_url); } +#if !defined(OS_ANDROID) +bool ChromePageInfoDelegate::CreateInfoBarDelegate() { + InfoBarService* infobar_service = + InfoBarService::FromWebContents(web_contents_); + if (infobar_service) { + PageInfoInfoBarDelegate::Create(infobar_service); + return true; + } + return false; +} + +void ChromePageInfoDelegate::ShowSiteSettings(const GURL& site_url) { + chrome::ShowSiteSettings(chrome::FindBrowserWithWebContents(web_contents_), + site_url); +} +#endif + +permissions::PermissionDecisionAutoBlocker* +ChromePageInfoDelegate::GetPermissionDecisionAutoblocker() { + return PermissionDecisionAutoBlockerFactory::GetForProfile(GetProfile()); +} + +StatefulSSLHostStateDelegate* +ChromePageInfoDelegate::GetStatefulSSLHostStateDelegate() { + return StatefulSSLHostStateDelegateFactory::GetForProfile(GetProfile()); +} + +HostContentSettingsMap* ChromePageInfoDelegate::GetContentSettings() { + return HostContentSettingsMapFactory::GetForProfile(GetProfile()); +} + +bool ChromePageInfoDelegate::IsContentDisplayedInVrHeadset() { + return vr::VrTabHelper::IsContentDisplayedInHeadset(web_contents_); +}
diff --git a/chrome/browser/ui/page_info/chrome_page_info_delegate.h b/chrome/browser/ui/page_info/chrome_page_info_delegate.h index c7b41b9..dad2560 100644 --- a/chrome/browser/ui/page_info/chrome_page_info_delegate.h +++ b/chrome/browser/ui/page_info/chrome_page_info_delegate.h
@@ -7,7 +7,6 @@ #include "build/build_config.h" #include "chrome/browser/content_settings/local_shared_objects_container.h" -#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "chrome/browser/ui/page_info/page_info_delegate.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_user_data.h" @@ -24,6 +23,13 @@ class Profile; +namespace permissions { +class PermissionDecisionAutoBlocker; +} // namespace permissions + +class StatefulSSLHostStateDelegate; +class TabSpecificContentSettings; + class ChromePageInfoDelegate : public PageInfoDelegate { public: explicit ChromePageInfoDelegate(content::WebContents* web_contents); @@ -33,6 +39,7 @@ permissions::ChooserContextBase* GetChooserContext( ContentSettingsType type) override; bool HasContentSettingChangedViaPageInfo(ContentSettingsType type) override; + void ContentSettingChangedViaPageInfo(ContentSettingsType type) override; int GetFirstPartyAllowedCookiesCount(const GURL& site_url) override; int GetFirstPartyBlockedCookiesCount(const GURL& site_url) override; int GetThirdPartyAllowedCookiesCount(const GURL& site_url) override; @@ -48,12 +55,19 @@ ContentSettingsType type, const GURL& site_url) override; - private: - TabSpecificContentSettings* tab_specific_content_settings() const { - TabSpecificContentSettings::CreateForWebContents(web_contents_); - return TabSpecificContentSettings::FromWebContents(web_contents_); - } +#if !defined(OS_ANDROID) + bool CreateInfoBarDelegate() override; + void ShowSiteSettings(const GURL& site_url) override; +#endif + permissions::PermissionDecisionAutoBlocker* GetPermissionDecisionAutoblocker() + override; + StatefulSSLHostStateDelegate* GetStatefulSSLHostStateDelegate() override; + HostContentSettingsMap* GetContentSettings() override; + bool IsContentDisplayedInVrHeadset() override; + + private: + TabSpecificContentSettings* GetTabSpecificContentSettings() const; const LocalSharedObjectsContainer& GetAllowedObjects(const GURL& site_url); const LocalSharedObjectsContainer& GetBlockedObjects(const GURL& site_url); Profile* GetProfile() const;
diff --git a/chrome/browser/ui/page_info/page_info.cc b/chrome/browser/ui/page_info/page_info.cc index 18a5305..8965158c 100644 --- a/chrome/browser/ui/page_info/page_info.cc +++ b/chrome/browser/ui/page_info/page_info.cc
@@ -23,25 +23,10 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "build/build_config.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" -#include "chrome/browser/browsing_data/browsing_data_database_helper.h" -#include "chrome/browser/browsing_data/browsing_data_file_system_helper.h" -#include "chrome/browser/browsing_data/browsing_data_indexed_db_helper.h" -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/infobars/infobar_service.h" -#include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/safe_browsing/safe_browsing_service.h" -#include "chrome/browser/ssl/stateful_ssl_host_state_delegate_factory.h" #include "chrome/browser/ui/page_info/page_info_delegate.h" #include "chrome/browser/ui/page_info/page_info_ui.h" -#include "chrome/browser/vr/vr_tab_helper.h" -#include "chrome/common/chrome_features.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/url_constants.h" #include "chrome/grit/theme_resources.h" +#include "components/browser_ui/util/android/url_constants.h" #include "components/browsing_data/content/local_storage_helper.h" #include "components/content_settings/core/browser/content_settings_registry.h" #include "components/content_settings/core/browser/content_settings_utils.h" @@ -58,6 +43,7 @@ #include "components/permissions/permission_util.h" #include "components/safe_browsing/buildflags.h" #include "components/safe_browsing/content/password_protection/metrics_util.h" +#include "components/safe_browsing/content/password_protection/password_protection_service.h" #include "components/safe_browsing/core/proto/csd.pb.h" #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h" #include "components/security_state/core/features.h" @@ -68,7 +54,9 @@ #include "components/subresource_filter/core/browser/subresource_filter_features.h" #include "components/ukm/content/source_url_recorder.h" #include "components/url_formatter/elide_url.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/web_contents.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/common/url_constants.h" @@ -88,10 +76,7 @@ #endif #if !defined(OS_ANDROID) -#include "chrome/browser/ui/browser_finder.h" -#include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" -#include "chrome/browser/ui/page_info/page_info_infobar_delegate.h" #endif using base::ASCIIToUTF16; @@ -324,9 +309,7 @@ } // namespace PageInfo::PageInfo( - Profile* profile, std::unique_ptr<PageInfoDelegate> delegate, - TabSpecificContentSettings* tab_specific_content_settings, content::WebContents* web_contents, const GURL& url, security_state::SecurityLevel security_level, @@ -340,12 +323,7 @@ safety_tip_info_({security_state::SafetyTipStatus::kUnknown, GURL()}), site_connection_status_(SITE_CONNECTION_STATUS_UNKNOWN), show_ssl_decision_revoke_button_(false), - content_settings_(HostContentSettingsMapFactory::GetForProfile(profile)), - stateful_ssl_host_state_delegate_( - StatefulSSLHostStateDelegateFactory::GetForProfile(profile)), - tab_specific_content_settings_(tab_specific_content_settings), did_revoke_user_ssl_decisions_(false), - profile_(profile), security_level_(security_level), visible_security_state_for_metrics_(visible_security_state), show_change_password_buttons_(false), @@ -507,7 +485,7 @@ void PageInfo::OnSitePermissionChanged(ContentSettingsType type, ContentSetting setting) { - tab_specific_content_settings_->ContentSettingChangedViaPageInfo(type); + delegate_->ContentSettingChangedViaPageInfo(type); // Count how often a permission for a specific content type is changed using // the Page Info UI. @@ -530,10 +508,10 @@ // total count of permission changes in another histogram makes it easier to // compare it against other kinds of actions in Page Info. RecordPageInfoAction(PAGE_INFO_CHANGED_PERMISSION); + HostContentSettingsMap* content_settings = GetContentSettings(); if (type == ContentSettingsType::SOUND) { - ContentSetting default_setting = - content_settings_->GetDefaultContentSetting(ContentSettingsType::SOUND, - nullptr); + ContentSetting default_setting = content_settings->GetDefaultContentSetting( + ContentSettingsType::SOUND, nullptr); bool mute = (setting == CONTENT_SETTING_BLOCK) || (setting == CONTENT_SETTING_DEFAULT && default_setting == CONTENT_SETTING_BLOCK); @@ -547,17 +525,18 @@ } permissions::PermissionUmaUtil::ScopedRevocationReporter - scoped_revocation_reporter(profile_, site_url_, site_url_, type, + scoped_revocation_reporter(web_contents()->GetBrowserContext(), site_url_, + site_url_, type, permissions::PermissionSourceUI::OIB); // The permission may have been blocked due to being under embargo, so if it // was changed away from BLOCK, clear embargo status if it exists. if (setting != CONTENT_SETTING_BLOCK) { - PermissionDecisionAutoBlockerFactory::GetForProfile(profile_) - ->RemoveEmbargoByUrl(site_url_, type); + delegate_->GetPermissionDecisionAutoblocker()->RemoveEmbargoByUrl(site_url_, + type); } - content_settings_->SetNarrowestContentSetting(site_url_, site_url_, type, - setting); + content_settings->SetNarrowestContentSetting(site_url_, site_url_, type, + setting); // When the sound setting is changed, no reload is necessary. if (type != ContentSettingsType::SOUND) @@ -587,20 +566,17 @@ NOTREACHED(); #else if (show_info_bar_ && web_contents() && !web_contents()->IsBeingDestroyed()) { - InfoBarService* infobar_service = - InfoBarService::FromWebContents(web_contents()); - if (infobar_service) { - PageInfoInfoBarDelegate::Create(infobar_service); - if (reload_prompt) - *reload_prompt = true; - } + if (delegate_->CreateInfoBarDelegate() && reload_prompt) + *reload_prompt = true; } #endif } void PageInfo::OnRevokeSSLErrorBypassButtonPressed() { - DCHECK(stateful_ssl_host_state_delegate_); - stateful_ssl_host_state_delegate_->RevokeUserAllowExceptionsHard( + auto* stateful_ssl_host_state_delegate = + delegate_->GetStatefulSSLHostStateDelegate(); + DCHECK(stateful_ssl_host_state_delegate); + stateful_ssl_host_state_delegate->RevokeUserAllowExceptionsHard( site_url().host()); did_revoke_user_ssl_decisions_ = true; } @@ -609,8 +585,7 @@ #if defined(OS_ANDROID) NOTREACHED(); #else - chrome::ShowSiteSettings(chrome::FindBrowserWithWebContents(web_contents()), - site_url()); + delegate_->ShowSiteSettings(site_url()); RecordPageInfoAction(PAGE_INFO_SITE_SETTINGS_OPENED); #endif } @@ -665,7 +640,7 @@ bool is_chrome_ui_native_scheme = false; #if defined(OS_ANDROID) - is_chrome_ui_native_scheme = url.SchemeIs(chrome::kChromeUINativeScheme); + is_chrome_ui_native_scheme = url.SchemeIs(browser_ui::kChromeUINativeScheme); #endif security_level_ = security_level; @@ -910,7 +885,7 @@ // Check if a user decision has been made to allow or deny certificates with // errors on this site. StatefulSSLHostStateDelegate* delegate = - StatefulSSLHostStateDelegateFactory::GetForProfile(profile_); + delegate_->GetStatefulSSLHostStateDelegate(); DCHECK(delegate); // Only show an SSL decision revoke button if the user has chosen to bypass // SSL host errors for this host in the past, and we're not presently on a @@ -927,6 +902,7 @@ ChosenObjectInfoList chosen_object_info_list; PageInfoUI::PermissionInfo permission_info; + HostContentSettingsMap* content_settings = GetContentSettings(); for (size_t i = 0; i < base::size(kPermissionType); ++i) { permission_info.type = kPermissionType[i]; @@ -934,7 +910,7 @@ // TODO(crbug.com/1030245) Investigate why the value is queried from the low // level routine GetWebsiteSettings. - std::unique_ptr<base::Value> value = content_settings_->GetWebsiteSetting( + std::unique_ptr<base::Value> value = content_settings->GetWebsiteSetting( site_url_, site_url_, permission_info.type, std::string(), &info); DCHECK(value.get()); if (value->type() == base::Value::Type::INTEGER) { @@ -945,7 +921,8 @@ } permission_info.source = info.source; - permission_info.is_incognito = profile_->IsOffTheRecord(); + permission_info.is_incognito = + web_contents()->GetBrowserContext()->IsOffTheRecord(); if (info.primary_pattern == ContentSettingsPattern::Wildcard() && info.secondary_pattern == ContentSettingsPattern::Wildcard()) { @@ -953,8 +930,8 @@ permission_info.setting = CONTENT_SETTING_DEFAULT; } else { permission_info.default_setting = - content_settings_->GetDefaultContentSetting(permission_info.type, - NULL); + content_settings->GetDefaultContentSetting(permission_info.type, + NULL); } // For permissions that are still prompting the user and haven't been @@ -978,7 +955,7 @@ // TODO(crbug.com/1058597): Remove the call to |delegate_| once // TabSpecificContentSettings has been componentized. - if (ShouldShowPermission(permission_info, site_url_, content_settings_, + if (ShouldShowPermission(permission_info, site_url_, content_settings, web_contents(), delegate_->HasContentSettingChangedViaPageInfo( permission_info.type))) { @@ -1055,7 +1032,7 @@ void PageInfo::PresentPageFeatureInfo() { PageInfoUI::PageFeatureInfo info; info.is_vr_presentation_in_headset = - vr::VrTabHelper::IsContentDisplayedInHeadset(web_contents()); + delegate_->IsContentDisplayedInVrHeadset(); ui_->SetPageFeatureInfo(info); } @@ -1074,6 +1051,10 @@ } #endif +HostContentSettingsMap* PageInfo::GetContentSettings() const { + return delegate_->GetContentSettings(); +} + std::vector<ContentSettingsType> PageInfo::GetAllPermissionsForTesting() { std::vector<ContentSettingsType> permission_list; for (size_t i = 0; i < base::size(kPermissionType); ++i)
diff --git a/chrome/browser/ui/page_info/page_info.h b/chrome/browser/ui/page_info/page_info.h index 01e1571..1e2309d 100644 --- a/chrome/browser/ui/page_info/page_info.h +++ b/chrome/browser/ui/page_info/page_info.h
@@ -10,7 +10,6 @@ #include "base/macros.h" #include "base/strings/string16.h" #include "build/build_config.h" -#include "chrome/browser/content_settings/tab_specific_content_settings.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" @@ -32,9 +31,7 @@ class ChooserContextBase; } -class StatefulSSLHostStateDelegate; class HostContentSettingsMap; -class Profile; class PageInfoDelegate; class PageInfoUI; class PageInfoBubbleViewBrowserTest; @@ -144,9 +141,7 @@ // Creates a PageInfo for the passed |url| using the given |ssl| status // object to determine the status of the site's connection. - PageInfo(Profile* profile, - std::unique_ptr<PageInfoDelegate> delegate, - TabSpecificContentSettings* tab_specific_content_settings, + PageInfo(std::unique_ptr<PageInfoDelegate> delegate, content::WebContents* web_contents, const GURL& url, security_state::SecurityLevel security_level, @@ -195,12 +190,9 @@ void OnWhitelistPasswordReuseButtonPressed( content::WebContents* web_contents); - // Return the object name of the ChooserContextBase corresponding to the - // content settings type, |type|. Returns an empty string for content settings + // Return a pointer to the ChooserContextBase corresponding to the + // content settings type, |type|. Returns nullptr for content settings // for which there's no ChooserContextBase. - base::string16 GetChooserContextObjectName(ContentSettingsType type, - const base::Value& object); - permissions::ChooserContextBase* GetChooserContextFromUIInfo( const ChooserUIInfo& ui_info) const; @@ -250,6 +242,10 @@ void RecordPasswordReuseEvent(); #endif + // Helper function to get the |HostContentSettingsMap| associated with + // |PageInfo|. + HostContentSettingsMap* GetContentSettings() const; + // Helper function to get the Safe Browsing status and details by malicious // content status. // TODO(jdeblasio): Eliminate this and just use MaliciousContentStatus? @@ -325,24 +321,8 @@ // the UI. base::string16 organization_name_; - // The |HostContentSettingsMap| is the service that provides and manages - // content settings (aka. site permissions). - HostContentSettingsMap* content_settings_; - - // Service for managing SSL error page bypasses. Used to revoke bypass - // decisions by users. - StatefulSSLHostStateDelegate* stateful_ssl_host_state_delegate_; - - // The TabSpecificContentSettings for this site, used to propagate changes - // from the UI back to the model. This is held as a raw pointer because the - // lifetime of TabSpecificContentSettings is tightly bound to that of the - // observed WebContents. - TabSpecificContentSettings* tab_specific_content_settings_; - bool did_revoke_user_ssl_decisions_; - Profile* profile_; - security_state::SecurityLevel security_level_; security_state::VisibleSecurityState visible_security_state_for_metrics_;
diff --git a/chrome/browser/ui/page_info/page_info_delegate.h b/chrome/browser/ui/page_info/page_info_delegate.h index cddd337..e9d7394 100644 --- a/chrome/browser/ui/page_info/page_info_delegate.h +++ b/chrome/browser/ui/page_info/page_info_delegate.h
@@ -6,10 +6,10 @@ #define CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_DELEGATE_H_ #include "base/strings/string16.h" -#include "base/strings/utf_string_conversions.h" -#include "base/values.h" +#include "build/build_config.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/permissions/permission_result.h" +#include "components/permissions/permission_uma_util.h" #include "components/safe_browsing/buildflags.h" #include "components/safe_browsing/content/password_protection/metrics_util.h" @@ -17,11 +17,18 @@ class PasswordProtectionService; } // namespace safe_browsing -// PageInfoDelegate allows an embedder to customize PageInfo logic. +namespace permissions { +class PermissionDecisionAutoBlocker; +} // namespace permissions + namespace permissions { class ChooserContextBase; } +class HostContentSettingsMap; +class StatefulSSLHostStateDelegate; + +// PageInfoDelegate allows an embedder to customize PageInfo logic. class PageInfoDelegate { public: virtual ~PageInfoDelegate() = default; @@ -36,6 +43,10 @@ virtual bool HasContentSettingChangedViaPageInfo( ContentSettingsType type) = 0; + // Notifies the delegate that the content setting of type |type| has changed + // via Page Info UI. + virtual void ContentSettingChangedViaPageInfo(ContentSettingsType type) = 0; + // Get counts of allowed and blocked cookies. virtual int GetFirstPartyAllowedCookiesCount(const GURL& site_url) = 0; virtual int GetFirstPartyBlockedCookiesCount(const GURL& site_url) = 0; @@ -56,6 +67,25 @@ virtual permissions::PermissionResult GetPermissionStatus( ContentSettingsType type, const GURL& site_url) = 0; +#if !defined(OS_ANDROID) + // Creates an InfoBarService and an InfoBarDelegate using it, if possible. + // Returns true if an InfoBarDelegate was created, false otherwise. + virtual bool CreateInfoBarDelegate() = 0; + + virtual void ShowSiteSettings(const GURL& site_url) = 0; +#endif + virtual permissions::PermissionDecisionAutoBlocker* + GetPermissionDecisionAutoblocker() = 0; + + // Service for managing SSL error page bypasses. Used to revoke bypass + // decisions by users. + virtual StatefulSSLHostStateDelegate* GetStatefulSSLHostStateDelegate() = 0; + + // The |HostContentSettingsMap| is the service that provides and manages + // content settings (aka. site permissions). + virtual HostContentSettingsMap* GetContentSettings() = 0; + + virtual bool IsContentDisplayedInVrHeadset() = 0; }; #endif // CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_DELEGATE_H_
diff --git a/chrome/browser/ui/page_info/page_info_ui.cc b/chrome/browser/ui/page_info/page_info_ui.cc index 696c193..e2cec53 100644 --- a/chrome/browser/ui/page_info/page_info_ui.cc +++ b/chrome/browser/ui/page_info/page_info_ui.cc
@@ -12,7 +12,6 @@ #include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" -#include "chrome/browser/ui/page_info/page_info_delegate.h" #include "chrome/browser/ui/page_info/page_info_ui_delegate.h" #include "chrome/grit/generated_resources.h" #include "components/permissions/permission_manager.h"
diff --git a/chrome/browser/ui/page_info/page_info_unittest.cc b/chrome/browser/ui/page_info/page_info_unittest.cc index 28f2c32..bce9a87 100644 --- a/chrome/browser/ui/page_info/page_info_unittest.cc +++ b/chrome/browser/ui/page_info/page_info_unittest.cc
@@ -146,7 +146,6 @@ net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); ASSERT_TRUE(cert_); - TabSpecificContentSettings::CreateForWebContents(web_contents()); MockInfoBarService::CreateForWebContents(web_contents()); // Setup mock ui. @@ -211,9 +210,6 @@ const PermissionInfoList& last_permission_info_list() { return last_permission_info_list_; } - TabSpecificContentSettings* tab_specific_content_settings() { - return TabSpecificContentSettings::FromWebContents(web_contents()); - } InfoBarService* infobar_service() { return InfoBarService::FromWebContents(web_contents()); } @@ -221,9 +217,8 @@ PageInfo* page_info() { if (!page_info_.get()) { page_info_ = std::make_unique<PageInfo>( - profile(), std::make_unique<ChromePageInfoDelegate>(web_contents()), - tab_specific_content_settings(), web_contents(), url(), - security_level(), visible_security_state()); + std::make_unique<ChromePageInfoDelegate>(web_contents()), + web_contents(), url(), security_level(), visible_security_state()); page_info_->InitializeUiState(mock_ui()); } return page_info_.get(); @@ -309,7 +304,7 @@ last_permission_info_list().size()); // Change the default setting for Javascript away from the factory default. - page_info()->content_settings_->SetDefaultContentSetting( + page_info()->GetContentSettings()->SetDefaultContentSetting( ContentSettingsType::JAVASCRIPT, CONTENT_SETTING_BLOCK); page_info()->PresentSitePermissions(); EXPECT_EQ(expected_visible_permissions.size(),
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc index 17784e55..34db820 100644 --- a/chrome/browser/ui/search/search_tab_helper.cc +++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -20,6 +20,8 @@ #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/extensions/extension_checkup.h" +#include "chrome/browser/favicon/favicon_service_factory.h" +#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/predictors/autocomplete_action_predictor.h" #include "chrome/browser/predictors/autocomplete_action_predictor_factory.h" #include "chrome/browser/profiles/profile.h" @@ -27,6 +29,7 @@ #include "chrome/browser/search/chrome_colors/chrome_colors_factory.h" #include "chrome/browser/search/instant_service.h" #include "chrome/browser/search/instant_service_factory.h" +#include "chrome/browser/search/local_ntp_source.h" #include "chrome/browser/search/ntp_features.h" #include "chrome/browser/search/promos/promo_service.h" #include "chrome/browser/search/promos/promo_service_factory.h" @@ -53,18 +56,21 @@ #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "components/favicon/core/favicon_service.h" #include "components/google/core/common/google_util.h" #include "components/navigation_metrics/navigation_metrics.h" #include "components/omnibox/browser/autocomplete_classifier.h" #include "components/omnibox/browser/autocomplete_controller.h" #include "components/omnibox/browser/autocomplete_match_type.h" #include "components/omnibox/browser/autocomplete_provider.h" +#include "components/omnibox/browser/omnibox_controller_emitter.h" #include "components/omnibox/browser/omnibox_edit_model.h" #include "components/omnibox/browser/omnibox_event_global_tracker.h" #include "components/omnibox/browser/omnibox_log.h" #include "components/omnibox/browser/omnibox_popup_model.h" #include "components/omnibox/browser/omnibox_view.h" #include "components/omnibox/browser/suggestion_answer.h" +#include "components/omnibox/browser/vector_icons.h" #include "components/omnibox/common/omnibox_features.h" #include "components/search/search.h" #include "components/search_engines/template_url_service.h" @@ -74,6 +80,7 @@ #include "components/sync/base/user_selectable_type.h" #include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_user_settings.h" +#include "components/vector_icons/vector_icons.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_handle.h" @@ -85,10 +92,26 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "third_party/metrics_proto/omnibox_event.pb.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/vector_icon_types.h" #include "url/gurl.h" namespace { +// TODO(mahmadi): Make sure all the vector icons returned by +// AutocompleteMatch::GetVectorIcon have an equivalent SVG resource. +std::string AutocompleteMatchVectorIconToResourceName( + const gfx::VectorIcon& icon) { + if (icon.name == omnibox::kClockIcon.name) { + return kClockIconResourceName; + } else if (icon.name == omnibox::kPageIcon.name) { + return kPageIconResourceName; + } else if (icon.name == vector_icons::kSearchIcon.name) { + return kSearchIconResourceName; + } else { + return ""; + } +} + std::vector<chrome::mojom::AutocompleteMatchPtr> CreateAutocompleteMatches( const AutocompleteResult& result) { std::vector<chrome::mojom::AutocompleteMatchPtr> matches; @@ -110,6 +133,8 @@ description_class.style)); } mojom_match->destination_url = match.destination_url.spec(); + mojom_match->icon_url = + AutocompleteMatchVectorIconToResourceName(match.GetVectorIcon(false)); mojom_match->image_dominant_color = match.image_dominant_color; mojom_match->image_url = match.image_url.spec(); mojom_match->fill_into_edit = match.fill_into_edit; @@ -124,6 +149,13 @@ return matches; } +// Converts an in-memory bitmap data to a base64 data url. +std::string GetBitmapDataUrl(const char* data, size_t size) { + std::string base_64; + base::Base64Encode(base::StringPiece(data, size), &base_64); + return "data:image/png;base64," + base_64; +} + bool IsCacheableNTP(content::WebContents* contents) { content::NavigationEntry* entry = contents->GetController().GetLastCommittedEntry(); @@ -176,7 +208,13 @@ ipc_router_(web_contents, this, std::make_unique<SearchIPCRouterPolicyImpl>(web_contents)), - instant_service_(nullptr) { + instant_service_(nullptr), + favicon_cache_(FaviconServiceFactory::GetForProfile( + profile(), + ServiceAccessType::EXPLICIT_ACCESS), + HistoryServiceFactory::GetForProfile( + profile(), + ServiceAccessType::EXPLICIT_ACCESS)) { DCHECK(search::IsInstantExtendedAPIEnabled()); instant_service_ = InstantServiceFactory::GetForProfile(profile()); @@ -466,20 +504,33 @@ autocomplete_controller_->input().text(), CreateAutocompleteMatches(autocomplete_controller_->result()))); - // Create new bitmap requests. BitmapFetcherService* bitmap_fetcher_service = BitmapFetcherServiceFactory::GetForBrowserContext(profile()); int match_index = -1; for (const auto& match : autocomplete_controller_->result()) { match_index++; - if (match.ImageUrl().is_empty()) { - continue; + + // Create new bitmap requests. + if (!match.image_url.is_empty()) { + bitmap_fetcher_service->RequestImage( + match.image_url, base::BindOnce(&SearchTabHelper::OnBitmapFetched, + weak_factory_.GetWeakPtr(), + match_index, match.image_url.spec())); } - bitmap_fetcher_service->RequestImage( - match.ImageUrl(), base::BindOnce(&SearchTabHelper::OnBitmapFetched, - weak_factory_.GetWeakPtr(), - match_index, match.ImageUrl().spec())); + + // Request favicons for navigational matches. + if (!AutocompleteMatch::IsSearchType(match.type) && + match.type != AutocompleteMatchType::DOCUMENT_SUGGESTION) { + gfx::Image favicon = favicon_cache_.GetLargestFaviconForPageUrl( + match.destination_url, + base::BindOnce(&SearchTabHelper::OnFaviconFetched, + weak_factory_.GetWeakPtr(), match_index, + match.destination_url.spec())); + if (!favicon.IsEmpty()) { + OnFaviconFetched(match_index, match.destination_url.spec(), favicon); + } + } } } @@ -502,15 +553,21 @@ const std::string& image_url, const SkBitmap& bitmap) { auto data = gfx::Image::CreateFrom1xBitmap(bitmap).As1xPNGBytes(); - std::string base_64; - base::Base64Encode(base::StringPiece(data->front_as<char>(), data->size()), - &base_64); - const char kDataUrlPrefix[] = "data:image/png;base64,"; - std::string data_url = GURL(kDataUrlPrefix + base_64).spec(); + std::string data_url = GetBitmapDataUrl(data->front_as<char>(), data->size()); ipc_router_.AutocompleteMatchImageAvailable(match_index, image_url, data_url); } +void SearchTabHelper::OnFaviconFetched(int match_index, + const std::string& page_url, + const gfx::Image& favicon) { + DCHECK(!favicon.IsEmpty()); + auto data = favicon.As1xPNGBytes(); + std::string data_url = GetBitmapDataUrl(data->front_as<char>(), data->size()); + + ipc_router_.AutocompleteMatchImageAvailable(match_index, page_url, data_url); +} + void SearchTabHelper::OnSelectLocalBackgroundImage() { if (select_file_dialog_) return; @@ -591,8 +648,14 @@ if (!autocomplete_controller_) { autocomplete_controller_ = std::make_unique<AutocompleteController>( - std::make_unique<ChromeAutocompleteProviderClient>(profile()), this, + std::make_unique<ChromeAutocompleteProviderClient>(profile()), AutocompleteClassifier::DefaultOmniboxProviders()); + autocomplete_controller_->AddObserver(this); + + OmniboxControllerEmitter* emitter = + OmniboxControllerEmitter::GetForBrowserContext(profile()); + if (emitter) + autocomplete_controller_->AddObserver(emitter); } if (time_of_first_autocomplete_query_.is_null() && !input.empty())
diff --git a/chrome/browser/ui/search/search_tab_helper.h b/chrome/browser/ui/search/search_tab_helper.h index 518e7f10..6b74b2c 100644 --- a/chrome/browser/ui/search/search_tab_helper.h +++ b/chrome/browser/ui/search/search_tab_helper.h
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/strings/string16.h" +#include "base/task/cancelable_task_tracker.h" #include "base/time/time.h" #include "build/build_config.h" #include "chrome/browser/search/chrome_colors/chrome_colors_service.h" @@ -24,6 +25,7 @@ #include "chrome/common/search/ntp_logging_events.h" #include "components/ntp_tiles/ntp_tile_impression.h" #include "components/omnibox/browser/autocomplete_controller.h" +#include "components/omnibox/browser/favicon_cache.h" #include "components/omnibox/common/omnibox_focus_state.h" #include "content/public/browser/reload_type.h" #include "content/public/browser/web_contents_observer.h" @@ -39,6 +41,10 @@ struct LoadCommittedDetails; } +namespace gfx { +class Image; +} + class AutocompleteController; class GURL; class InstantService; @@ -177,6 +183,10 @@ const std::string& image_url, const SkBitmap& bitmap); + void OnFaviconFetched(int match_index, + const std::string& page_url, + const gfx::Image& favicon); + Profile* profile() const; // Returns whether input is in progress, i.e. if the omnibox has focus and the @@ -207,6 +217,10 @@ std::unique_ptr<AutocompleteController> autocomplete_controller_; base::TimeTicks time_of_first_autocomplete_query_; + base::CancelableTaskTracker cancelable_task_tracker_; + + FaviconCache favicon_cache_; + WEB_CONTENTS_USER_DATA_KEY_DECL(); base::WeakPtrFactory<SearchTabHelper> weak_factory_{this};
diff --git a/chrome/browser/ui/sync/tab_contents_synced_tab_delegate.cc b/chrome/browser/ui/sync/tab_contents_synced_tab_delegate.cc index 2bf675e..0835d39 100644 --- a/chrome/browser/ui/sync/tab_contents_synced_tab_delegate.cc +++ b/chrome/browser/ui/sync/tab_contents_synced_tab_delegate.cc
@@ -20,7 +20,7 @@ #include "extensions/buildflags/buildflags.h" #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/apps/launch_service/app_utils.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #endif #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
diff --git a/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc b/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc index 79a423c3..651cf590 100644 --- a/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc +++ b/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc
@@ -33,6 +33,8 @@ ChromeWebContentsViewDelegateHandleOnPerformDrop() { EXPECT_TRUE(profile_manager_.SetUp()); profile_ = profile_manager_.CreateTestingProfile("test-user"); + scoped_feature_list_.InitAndEnableFeature( + safe_browsing::kContentComplianceEnabled); } void RunUntilDone() { run_loop_->Run(); } @@ -45,18 +47,9 @@ return web_contents_.get(); } - void EnableFeature(const base::Feature& feature) { - scoped_feature_list_.Reset(); - scoped_feature_list_.InitAndEnableFeature(feature); - } - void EnableDeepScanning(bool enable, bool scan_succeeds) { SetScanPolicies(enable ? safe_browsing::CHECK_UPLOADS : safe_browsing::CHECK_NONE); - if (!enable) - return; - - EnableFeature(safe_browsing::kContentComplianceEnabled); run_loop_.reset(new base::RunLoop());
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc index bd063d9..07bbfef 100644 --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc
@@ -57,7 +57,7 @@ // We need the UI thread in order to construct UI elements in the view. content::BrowserTaskEnvironment task_environment_; - ChromeTestViewsDelegate views_delegate_; + ChromeTestViewsDelegate<> views_delegate_; TestingProfile profile_; // Needs BrowserThread::UI. };
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc index 130dc01..fc67040 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc
@@ -144,7 +144,7 @@ model_->AddURL(of1, 0, ASCIIToUTF16("of1a"), GURL(test_base + "of1a")); } - ChromeTestViewsDelegate views_delegate_; + ChromeTestViewsDelegate<> views_delegate_; std::unique_ptr<BookmarkEditorView> editor_; };
diff --git a/chrome/browser/ui/views/chrome_typography.h b/chrome/browser/ui/views/chrome_typography.h index 7fc0af0..872ffab0 100644 --- a/chrome/browser/ui/views/chrome_typography.h +++ b/chrome/browser/ui/views/chrome_typography.h
@@ -67,9 +67,6 @@ // Similar to views::style::STYLE_SECONDARY but with a monospaced typeface. STYLE_SECONDARY_MONOSPACED, - // "Hint" text, usually a line that gives context to something more important. - STYLE_HINT, - // A solid shade of red. STYLE_RED,
diff --git a/chrome/browser/ui/views/chrome_typography_provider.cc b/chrome/browser/ui/views/chrome_typography_provider.cc index 6c822d48..4f2a491 100644 --- a/chrome/browser/ui/views/chrome_typography_provider.cc +++ b/chrome/browser/ui/views/chrome_typography_provider.cc
@@ -113,9 +113,6 @@ ui::NativeTheme::ColorId color_id; switch (style) { - case STYLE_HINT: - color_id = ui::NativeTheme::kColorId_LabelSecondaryColor; - break; case STYLE_RED: color_id = ui::NativeTheme::kColorId_AlertSeverityHigh; break;
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc index 9fc6d364..31c7ce39 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.cc +++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -15,7 +15,6 @@ #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/version_info/version_info.h" -#include "content/public/browser/context_factory.h" #include "ui/display/display.h" #include "ui/display/screen.h" #include "ui/gfx/geometry/rect.h" @@ -193,10 +192,6 @@ params->native_widget = CreateNativeWidget(params, delegate); } -ui::ContextFactory* ChromeViewsDelegate::GetContextFactory() { - return content::GetContextFactory(); -} - std::string ChromeViewsDelegate::GetApplicationName() { return version_info::GetProductName(); }
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h index ba66a3e6..e34b538 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.h +++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -55,7 +55,9 @@ void OnBeforeWidgetInit( views::Widget::InitParams* params, views::internal::NativeWidgetDelegate* delegate) override; +#if defined(OS_MACOSX) ui::ContextFactory* GetContextFactory() override; +#endif std::string GetApplicationName() override; private:
diff --git a/chrome/browser/ui/views/chrome_views_delegate_mac.cc b/chrome/browser/ui/views/chrome_views_delegate_mac.cc index 1321275e..6ba579b3a 100644 --- a/chrome/browser/ui/views/chrome_views_delegate_mac.cc +++ b/chrome/browser/ui/views/chrome_views_delegate_mac.cc
@@ -6,6 +6,11 @@ #include "base/feature_list.h" #include "chrome/common/chrome_features.h" +#include "content/public/browser/context_factory.h" + +ui::ContextFactory* ChromeViewsDelegate::GetContextFactory() { + return content::GetContextFactory(); +} views::NativeWidget* ChromeViewsDelegate::CreateNativeWidget( views::Widget::InitParams* params,
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_unittest.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_unittest.cc index 5a58fb0..0142a6af 100644 --- a/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_unittest.cc +++ b/chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_unittest.cc
@@ -15,11 +15,11 @@ #include "build/build_config.h" #include "chrome/browser/media/webrtc/desktop_media_picker_manager.h" #include "chrome/browser/media/webrtc/fake_desktop_media_list.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/desktop_capture/desktop_media_list_controller.h" #include "chrome/browser/ui/views/desktop_capture/desktop_media_list_view.h" #include "chrome/browser/ui/views/desktop_capture/desktop_media_picker_views_test_api.h" #include "chrome/browser/ui/views/desktop_capture/desktop_media_source_view.h" +#include "chrome/test/views/chrome_test_views_delegate.h" #include "components/web_modal/test_web_contents_modal_dialog_host.h" #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" @@ -57,9 +57,6 @@ ~DesktopMediaPickerViewsTest() override = default; void SetUp() override { - test_helper_.test_views_delegate()->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); - #if defined(OS_MACOSX) // These tests create actual child Widgets, which normally have a closure // animation on Mac; inhibit it here to avoid the tests flakily hanging. @@ -108,7 +105,8 @@ protected: content::BrowserTaskEnvironment task_environment_; - views::ScopedViewsTestHelper test_helper_; + views::ScopedViewsTestHelper test_helper_{ + std::make_unique<ChromeTestViewsDelegate<>>()}; std::map<DesktopMediaID::Type, FakeDesktopMediaList*> media_lists_; std::unique_ptr<DesktopMediaPickerViews> picker_views_; DesktopMediaPickerViewsTestApi test_api_;
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_view.cc index 9013434..df56581e 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_view.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
@@ -95,6 +95,9 @@ EnableUpDownKeyboardAccelerators(); + // Let anchor view's MenuButtonController handle the highlight. + set_highlight_button_when_shown(false); + SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical)); Populate(); @@ -472,13 +475,17 @@ } // static -void ExtensionsMenuView::ShowBubble(views::View* anchor_view, - Browser* browser, - ExtensionsContainer* extensions_container) { +views::Widget* ExtensionsMenuView::ShowBubble( + views::View* anchor_view, + Browser* browser, + ExtensionsContainer* extensions_container) { DCHECK(!g_extensions_dialog); g_extensions_dialog = new ExtensionsMenuView(anchor_view, browser, extensions_container); - views::BubbleDialogDelegateView::CreateBubble(g_extensions_dialog)->Show(); + views::Widget* widget = + views::BubbleDialogDelegateView::CreateBubble(g_extensions_dialog); + widget->Show(); + return widget; } // static
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.h b/chrome/browser/ui/views/extensions/extensions_menu_view.h index b69487a..8b5cf176 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_view.h +++ b/chrome/browser/ui/views/extensions/extensions_menu_view.h
@@ -41,9 +41,9 @@ // Displays the ExtensionsMenu under |anchor_view|, attached to |browser|, and // with the associated |extensions_container|. // Only one menu is allowed to be shown at a time (outside of tests). - static void ShowBubble(views::View* anchor_view, - Browser* browser, - ExtensionsContainer* extensions_container); + static views::Widget* ShowBubble(views::View* anchor_view, + Browser* browser, + ExtensionsContainer* extensions_container); // Returns true if there is currently an ExtensionsMenuView showing (across // all browsers and profiles).
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view_browsertest.cc b/chrome/browser/ui/views/extensions/extensions_menu_view_browsertest.cc index 4253c85..0713cd3 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_view_browsertest.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_view_browsertest.cc
@@ -31,6 +31,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" #include "extensions/test/test_extension_dir.h" +#include "ui/views/animation/ink_drop.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/layout/animating_layout_manager.h" #include "ui/views/layout/animating_layout_manager_test_util.h" @@ -366,6 +367,18 @@ ShowAndVerifyUi(); } +IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, + ExtensionsMenuButtonHighlight) { + LoadTestExtension("extensions/uitest/window_open"); + ClickExtensionsMenuButton(); + EXPECT_EQ(BrowserView::GetBrowserViewForBrowser(browser()) + ->toolbar() + ->GetExtensionsButton() + ->GetInkDrop() + ->GetTargetInkDropState(), + views::InkDropState::ACTIVATED); +} + IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, TriggerPopup) { LoadTestExtension("extensions/simple_with_popup"); ShowUi("");
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc b/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc index 50ad644..dc2ef2f 100644 --- a/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc +++ b/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc
@@ -37,6 +37,8 @@ GetViewAccessibility().OverrideHasPopup(ax::mojom::HasPopup::kMenu); } +ExtensionsToolbarButton::~ExtensionsToolbarButton() = default; + void ExtensionsToolbarButton::UpdateIcon() { SetImage(views::Button::STATE_NORMAL, gfx::CreateVectorIcon(vector_icons::kExtensionIcon, GetIconSize(), @@ -89,7 +91,14 @@ ExtensionsMenuView::Hide(); return; } - ExtensionsMenuView::ShowBubble(this, browser_, extensions_container_); + pressed_lock_ = menu_button_controller_->TakeLock(); + ExtensionsMenuView::ShowBubble(this, browser_, extensions_container_) + ->AddObserver(this); +} + +void ExtensionsToolbarButton::OnWidgetDestroying(views::Widget* widget) { + widget->RemoveObserver(this); + pressed_lock_.reset(); } int ExtensionsToolbarButton::GetIconSize() const {
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_button.h b/chrome/browser/ui/views/extensions/extensions_toolbar_button.h index 73263d55..50ead72 100644 --- a/chrome/browser/ui/views/extensions/extensions_toolbar_button.h +++ b/chrome/browser/ui/views/extensions/extensions_toolbar_button.h
@@ -6,21 +6,21 @@ #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_TOOLBAR_BUTTON_H_ #include "chrome/browser/ui/views/toolbar/toolbar_button.h" +#include "ui/views/controls/button/menu_button_controller.h" class Browser; class ExtensionsToolbarContainer; -namespace views { -class MenuButtonController; -} // namespace views // Button in the toolbar that provides access to the corresponding extensions // menu. class ExtensionsToolbarButton : public ToolbarButton, - public views::ButtonListener { + public views::ButtonListener, + public views::WidgetObserver { public: ExtensionsToolbarButton(Browser* browser, ExtensionsToolbarContainer* extensions_container); + ~ExtensionsToolbarButton() override; void UpdateIcon(); @@ -34,8 +34,14 @@ // views::ButtonListener: void ButtonPressed(views::Button* sender, const ui::Event& event) override; + // views::WidgetObserver: + void OnWidgetDestroying(views::Widget* widget) override; + int GetIconSize() const; + // A lock to keep the button pressed when a popup is visible. + std::unique_ptr<views::MenuButtonController::PressedLock> pressed_lock_; + Browser* const browser_; views::MenuButtonController* menu_button_controller_; ExtensionsToolbarContainer* const extensions_container_;
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc index 060600d5..9a79bd7a 100644 --- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc +++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc
@@ -61,7 +61,7 @@ private: // TODO(gbillock): Get rid of this mock; make something specialized. NiceMock<MediaGalleriesDialogControllerMock> controller_; - ChromeTestViewsDelegate test_views_delegate_; + ChromeTestViewsDelegate<> test_views_delegate_; DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest); };
diff --git a/chrome/browser/ui/views/frame/test_with_browser_view.cc b/chrome/browser/ui/views/frame/test_with_browser_view.cc index acbcbe0..a50d0d5 100644 --- a/chrome/browser/ui/views/frame/test_with_browser_view.cc +++ b/chrome/browser/ui/views/frame/test_with_browser_view.cc
@@ -58,7 +58,7 @@ Profile* profile = static_cast<Profile*>(context); return std::make_unique<AutocompleteClassifier>( std::make_unique<AutocompleteController>( - std::make_unique<ChromeAutocompleteProviderClient>(profile), nullptr, + std::make_unique<ChromeAutocompleteProviderClient>(profile), AutocompleteClassifier::DefaultOmniboxProviders()), std::make_unique<TestSchemeClassifier>()); }
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc index 595d721..362ef0e 100644 --- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc +++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -564,7 +564,7 @@ tab_groups::TabGroupId group) { ConvertPointToScreen(this, &point); rect.set_origin(point); - TabGroupEditorBubbleView::ShowWithRect(browser_, group, rect); + TabGroupEditorBubbleView::Show(browser_, group, nullptr, rect, this); } TabStripUILayout WebUITabStripContainerView::GetLayout() {
diff --git a/chrome/browser/ui/views/hung_plugin_tab_helper_unittest.cc b/chrome/browser/ui/views/hung_plugin_tab_helper_unittest.cc index 8c08faa..76910780 100644 --- a/chrome/browser/ui/views/hung_plugin_tab_helper_unittest.cc +++ b/chrome/browser/ui/views/hung_plugin_tab_helper_unittest.cc
@@ -96,7 +96,7 @@ void SetUp() override; private: - ChromeTestViewsDelegate views_delegate_; + ChromeTestViewsDelegate<> views_delegate_; }; void HungPluginTabHelperTest::SetUp() {
diff --git a/chrome/browser/ui/views/location_bar/star_view_interactive_uitest.cc b/chrome/browser/ui/views/location_bar/star_view_interactive_uitest.cc index 337e2d2..d34f2296 100644 --- a/chrome/browser/ui/views/location_bar/star_view_interactive_uitest.cc +++ b/chrome/browser/ui/views/location_bar/star_view_interactive_uitest.cc
@@ -20,7 +20,9 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_utils.h" +#include "components/bookmarks/test/bookmark_test_helpers.h" #include "components/prefs/pref_service.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_utils.h" @@ -30,11 +32,6 @@ #include "ui/events/event_utils.h" #include "ui/views/animation/test/ink_drop_host_view_test_api.h" -#if defined(OS_WIN) -#include "ui/aura/window.h" -#include "ui/aura/window_tree_host.h" -#endif - namespace { class StarViewTest : public extensions::ExtensionBrowserTest { @@ -59,6 +56,34 @@ DISALLOW_COPY_AND_ASSIGN(StarViewTest); }; +// Verifies clicking the star bookmarks the page. +IN_PROC_BROWSER_TEST_F(StarViewTest, BookmarksUrlOnPress) { + bookmarks::BookmarkModel* bookmark_model = + BookmarkModelFactory::GetForBrowserContext(browser()->profile()); + bookmarks::test::WaitForBookmarkModelToLoad(bookmark_model); + + PageActionIconView* star_icon = GetStarIcon(); + const GURL current_url = + browser()->tab_strip_model()->GetActiveWebContents()->GetVisibleURL(); + + // The page should not initiall be bookmarked. + EXPECT_FALSE(bookmark_model->IsBookmarked(current_url)); + EXPECT_FALSE(star_icon->active()); + + ui::MouseEvent pressed_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), + ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, + ui::EF_LEFT_MOUSE_BUTTON); + ui::MouseEvent released_event( + ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), + ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); + + static_cast<views::View*>(star_icon)->OnMousePressed(pressed_event); + static_cast<views::View*>(star_icon)->OnMouseReleased(released_event); + + EXPECT_TRUE(bookmark_model->IsBookmarked(current_url)); + EXPECT_TRUE(star_icon->active()); +} + // Verify that clicking the bookmark star a second time hides the bookmark // bubble. IN_PROC_BROWSER_TEST_F(StarViewTest, HideOnSecondClick) {
diff --git a/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc b/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc index 86eaefc..43e60084 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc
@@ -181,6 +181,8 @@ const auto apply_vector_icon = [=](const gfx::VectorIcon& vector_icon) { const auto& icon = gfx::CreateVectorIcon(vector_icon, SK_ColorWHITE); + answer_image_view_->SetImageSize( + gfx::Size(kAnswerImageSize, kAnswerImageSize)); answer_image_view_->SetImage( gfx::CanvasImageSource::MakeImageSkia<EncircledImageSource>( kAnswerImageSize / 2, gfx::kGoogleBlue600, icon)); @@ -210,7 +212,9 @@ apply_vector_icon(omnibox::kAnswerTranslationIcon); break; case SuggestionAnswer::ANSWER_TYPE_WEATHER: - // Weather icons are downloaded. Do nothing. + // Weather icons are downloaded. We just need to set the correct size. + answer_image_view_->SetImageSize( + gfx::Size(kAnswerImageSize, kAnswerImageSize)); break; case SuggestionAnswer::ANSWER_TYPE_WHEN_IS: apply_vector_icon(omnibox::kAnswerWhenIsIcon); @@ -219,10 +223,6 @@ apply_vector_icon(omnibox::kAnswerDefaultIcon); break; } - // Always set the image size so that downloaded images get the correct - // size (such as Weather answers). - answer_image_view_->SetImageSize( - gfx::Size(kAnswerImageSize, kAnswerImageSize)); } else { SkColor color = result_view->GetColor(OmniboxPart::RESULTS_BACKGROUND); extensions::image_util::ParseHexColorString(match.image_dominant_color,
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_view.h b/chrome/browser/ui/views/page_action/page_action_icon_view.h index aa033ae..1f5b726 100644 --- a/chrome/browser/ui/views/page_action/page_action_icon_view.h +++ b/chrome/browser/ui/views/page_action/page_action_icon_view.h
@@ -66,6 +66,7 @@ // Sets the active state of the icon. An active icon will be displayed in a // "call to action" color. void SetActive(bool active); + bool active() const { return active_; } // Hide the icon on user input in progress and invokes UpdateImpl(). void Update(); @@ -153,8 +154,6 @@ // Returns the associated web contents from the delegate. content::WebContents* GetWebContents() const; - bool active() const { return active_; } - // Delegate accessor for subclasses. Delegate* delegate() const { return delegate_; }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc index 64df498..bc78a51 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -519,9 +519,8 @@ // |TabSpecificContentSettings| and need to create one; otherwise, noop. TabSpecificContentSettings::CreateForWebContents(web_contents); presenter_ = std::make_unique<PageInfo>( - profile, std::make_unique<ChromePageInfoDelegate>(web_contents), - TabSpecificContentSettings::FromWebContents(web_contents), web_contents, - url, security_level, visible_security_state); + std::make_unique<ChromePageInfoDelegate>(web_contents), web_contents, url, + security_level, visible_security_state); presenter_->InitializeUiState(this); }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc index a286661..dc609fb 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -12,7 +12,6 @@ #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/ssl/security_state_tab_helper.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/hover_button.h" #include "chrome/browser/ui/views/page_info/chosen_object_view.h" #include "chrome/browser/ui/views/page_info/page_info_hover_button.h" @@ -20,6 +19,7 @@ #include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context_factory.h" #include "chrome/test/base/testing_profile.h" +#include "chrome/test/views/chrome_test_views_delegate.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/pref_names.h" #include "components/history/core/browser/history_service.h" @@ -195,15 +195,12 @@ // testing::Test: void SetUp() override { - views_helper_.test_views_delegate()->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); views::Widget::InitParams parent_params; parent_params.context = views_helper_.GetContext(); parent_window_ = new views::Widget(); parent_window_->Init(std::move(parent_params)); content::WebContents* web_contents = web_contents_helper_.web_contents(); - TabSpecificContentSettings::CreateForWebContents(web_contents); api_ = std::make_unique<test::PageInfoBubbleViewTestApi>( parent_window_->GetNativeView(), web_contents_helper_.profile(), web_contents); @@ -215,7 +212,8 @@ protected: ScopedWebContentsTestHelper web_contents_helper_; - views::ScopedViewsTestHelper views_helper_; + views::ScopedViewsTestHelper views_helper_{ + std::make_unique<ChromeTestViewsDelegate<>>()}; views::Widget* parent_window_ = nullptr; // Weak. Owned by the NativeWidget. std::unique_ptr<test::PageInfoBubbleViewTestApi> api_;
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_unittest.cc index 1c5800a..da0b236a 100644 --- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_unittest.cc +++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_unittest.cc
@@ -6,14 +6,13 @@ #include "base/bind_helpers.h" #include "chrome/browser/content_settings/tab_specific_content_settings.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/test/base/testing_profile.h" +#include "chrome/test/views/chrome_test_views_delegate.h" #include "components/security_state/core/security_state.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_web_contents_factory.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/views/test/scoped_views_test_helper.h" -#include "ui/views/test/test_views_delegate.h" namespace { @@ -44,8 +43,6 @@ // testing::Test: void SetUp() override { - views_helper_.test_views_delegate()->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); views::Widget::InitParams parent_params; parent_params.context = views_helper_.GetContext(); parent_window_ = new views::Widget(); @@ -65,7 +62,8 @@ protected: ScopedWebContentsTestHelper web_contents_helper_; - views::ScopedViewsTestHelper views_helper_; + views::ScopedViewsTestHelper views_helper_{ + std::make_unique<ChromeTestViewsDelegate<>>()}; PageInfoBubbleViewBase* bubble_ = nullptr; views::Widget* parent_window_ = nullptr; // Weak. Owned by the NativeWidget.
diff --git a/chrome/browser/ui/views/passwords/password_auto_sign_in_view.cc b/chrome/browser/ui/views/passwords/password_auto_sign_in_view.cc index 56b421be..d63c206 100644 --- a/chrome/browser/ui/views/passwords/password_auto_sign_in_view.cc +++ b/chrome/browser/ui/views/passwords/password_auto_sign_in_view.cc
@@ -49,7 +49,7 @@ controller_.GetProfile()) ->GetURLLoaderFactoryForBrowserProcess() .get(), - STYLE_HINT, views::style::STYLE_PRIMARY); + views::style::STYLE_HINT, views::style::STYLE_PRIMARY); credential->SetEnabled(false); AddChildView(credential);
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc index 459f812f..f161a6e26 100644 --- a/chrome/browser/ui/views/payments/payment_request_views_util.cc +++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -376,7 +376,7 @@ const base::string16& text, gfx::HorizontalAlignment alignment) { std::unique_ptr<views::Label> label = std::make_unique<views::Label>( - text, views::style::CONTEXT_LABEL, STYLE_HINT); + text, views::style::CONTEXT_LABEL, views::style::STYLE_HINT); label->SetHorizontalAlignment(alignment); return label; }
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc index 399c48b3..b5e163a 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -333,7 +333,7 @@ DCHECK(accessible_content_.empty()); std::unique_ptr<PreviewEliderLabel> content_view = std::make_unique<PreviewEliderLabel>(preview_text, format_string, n, - STYLE_HINT); + views::style::STYLE_HINT); content_view->SetHorizontalAlignment(gfx::ALIGN_LEFT); return CreateWithButton(std::move(content_view), button_string, button_enabled);
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc index 1ec634126..0b2dfcc 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -562,7 +562,7 @@ // Add heading. views::Label* label = profile_mgmt_heading_container_->AddChildView( std::make_unique<views::Label>(heading, views::style::CONTEXT_LABEL, - STYLE_HINT)); + views::style::STYLE_HINT)); label->SetHorizontalAlignment(gfx::ALIGN_LEFT); label->SetHandlesTooltips(false); }
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc index 0e5c3f4..96c4548e 100644 --- a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc +++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc
@@ -52,23 +52,15 @@ views::Widget* TabGroupEditorBubbleView::Show( const Browser* browser, const tab_groups::TabGroupId& group, - TabGroupHeader* anchor_view, + TabGroupHeader* header_view, + base::Optional<gfx::Rect> anchor_rect, + views::View* anchor_view, bool stop_context_menu_propagation) { - views::Widget* const widget = BubbleDialogDelegateView::CreateBubble( - new TabGroupEditorBubbleView(browser, group, anchor_view, base::nullopt, - stop_context_menu_propagation)); - widget->Show(); - return widget; -} - -// static -views::Widget* TabGroupEditorBubbleView::ShowWithRect( - const Browser* browser, - const tab_groups::TabGroupId& group, - gfx::Rect anchor_rect) { + // If |header_view| is not null, use |header_view| as the |anchor_view|. views::Widget* const widget = BubbleDialogDelegateView::CreateBubble(new TabGroupEditorBubbleView( - browser, group, nullptr, anchor_rect, false)); + browser, group, header_view ? header_view : anchor_view, anchor_rect, + header_view, stop_context_menu_propagation)); widget->Show(); return widget; } @@ -81,22 +73,34 @@ return title_field_; } +gfx::Rect TabGroupEditorBubbleView::GetAnchorRect() const { + // We want to avoid calling BubbleDialogDelegateView::GetAnchorRect() if + // |anchor_rect_| has been set. This is because the default behavior uses the + // anchor view's bounds and also updates |anchor_rect_| to the views bounds. + // It does this so that the bubble does not jump when the anchoring view is + // deleted. + if (use_set_anchor_rect_) + return anchor_rect().value(); + return BubbleDialogDelegateView::GetAnchorRect(); +} + TabGroupEditorBubbleView::TabGroupEditorBubbleView( const Browser* browser, const tab_groups::TabGroupId& group, - TabGroupHeader* anchor_view, + views::View* anchor_view, base::Optional<gfx::Rect> anchor_rect, + TabGroupHeader* header_view, bool stop_context_menu_propagation) : browser_(browser), group_(group), title_field_controller_(this), - button_listener_(browser, group, anchor_view) { - // Either |anchor_view| or |anchor_rect| should be defined. |anchor_rect| is - // only used in situations were the available Views are different, e.g. WebUI. - DCHECK(anchor_view || anchor_rect.has_value()); - if (anchor_view) - SetAnchorView(anchor_view); - else + button_listener_(browser, group, header_view), + use_set_anchor_rect_(anchor_rect) { + // |anchor_view| should always be defined as it will be used to source the + // |anchor_widget_|. + DCHECK(anchor_view); + SetAnchorView(anchor_view); + if (anchor_rect) SetAnchorRect(anchor_rect.value()); set_margins(gfx::Insets()); @@ -340,8 +344,8 @@ TabGroupEditorBubbleView::ButtonListener::ButtonListener( const Browser* browser, tab_groups::TabGroupId group, - TabGroupHeader* anchor_view) - : browser_(browser), group_(group), anchor_view_(anchor_view) {} + TabGroupHeader* header_view) + : browser_(browser), group_(group), header_view_(header_view) {} void TabGroupEditorBubbleView::ButtonListener::ButtonPressed( views::Button* sender, @@ -359,8 +363,8 @@ case TAB_GROUP_HEADER_CXMENU_UNGROUP: base::RecordAction( base::UserMetricsAction("TabGroups_TabGroupBubble_Ungroup")); - if (anchor_view_) - anchor_view_->RemoveObserverFromWidget(sender->GetWidget()); + if (header_view_) + header_view_->RemoveObserverFromWidget(sender->GetWidget()); model->RemoveFromGroup(tabs_in_group); break; case TAB_GROUP_HEADER_CXMENU_CLOSE_GROUP:
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h index aeed5a4..06597c6 100644 --- a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h +++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h
@@ -32,30 +32,28 @@ static constexpr int TAB_GROUP_HEADER_CXMENU_MOVE_GROUP_TO_NEW_WINDOW = 16; static constexpr int TAB_GROUP_HEADER_CXMENU_FEEDBACK = 17; - // Shows the editor for |group| using a TabGroupHeader anchor. Should be used - // in most cases to allow focus handling between the header and the bubble. - // Returns an *unowned* pointer to the bubble's widget. - static views::Widget* Show(const Browser* browser, - const tab_groups::TabGroupId& group, - TabGroupHeader* anchor_view, - bool stop_context_menu_propagation = false); - - // Shows the editor for |group| using a rect as an anchor. Should only be used - // if the TabGroupHeader is not available as an anchor, e.g. in WebUI. Returns - // an *unowned* pointer to the bubble's widget. - static views::Widget* ShowWithRect(const Browser* browser, - const tab_groups::TabGroupId& group, - gfx::Rect anchor_rect); + // Shows the editor for |group|. Returns a *non-owning* pointer to the + // bubble's widget. + static views::Widget* Show( + const Browser* browser, + const tab_groups::TabGroupId& group, + TabGroupHeader* header_view, + base::Optional<gfx::Rect> anchor_rect = base::nullopt, + // If not provided, will be set to |header_view|. + views::View* anchor_view = nullptr, + bool stop_context_menu_propagation = false); // views::BubbleDialogDelegateView: ui::ModalType GetModalType() const override; views::View* GetInitiallyFocusedView() override; + gfx::Rect GetAnchorRect() const override; private: TabGroupEditorBubbleView(const Browser* browser, const tab_groups::TabGroupId& group, - TabGroupHeader* anchor_view, + views::View* anchor_view, base::Optional<gfx::Rect> anchor_rect, + TabGroupHeader* header_view, bool stop_context_menu_propagation); ~TabGroupEditorBubbleView() override; @@ -110,7 +108,7 @@ public: explicit ButtonListener(const Browser* browser, tab_groups::TabGroupId group, - TabGroupHeader* anchor_view); + TabGroupHeader* header_view); // views::ButtonListener: void ButtonPressed(views::Button* sender, const ui::Event& event) override; @@ -118,7 +116,7 @@ private: const Browser* const browser_; const tab_groups::TabGroupId group_; - TabGroupHeader* anchor_view_; + TabGroupHeader* header_view_; }; ButtonListener button_listener_; @@ -127,6 +125,10 @@ std::vector<std::pair<SkColor, base::string16>> colors_; ColorPickerView* color_selector_; + // If true will use the |anchor_rect_| provided in the constructor, otherwise + // fall back to using the anchor view bounds. + const bool use_set_anchor_rect_; + // Creates the set of tab group colors to display and returns the color that // is initially selected. SkColor InitColorSet();
diff --git a/chrome/browser/ui/views/tabs/tab_group_header.cc b/chrome/browser/ui/views/tabs/tab_group_header.cc index b76dbf7..d8fdce31 100644 --- a/chrome/browser/ui/views/tabs/tab_group_header.cc +++ b/chrome/browser/ui/views/tabs/tab_group_header.cc
@@ -237,7 +237,8 @@ return; editor_bubble_tracker_.Opened(TabGroupEditorBubbleView::Show( - tab_strip_->controller()->GetBrowser(), group().value(), this, true)); + tab_strip_->controller()->GetBrowser(), group().value(), this, + base::nullopt, nullptr, true)); } int TabGroupHeader::CalculateWidth() const {
diff --git a/chrome/browser/ui/views/test/view_event_test_base.cc b/chrome/browser/ui/views/test/view_event_test_base.cc index 041de77..e4c7c18 100644 --- a/chrome/browser/ui/views/test/view_event_test_base.cc +++ b/chrome/browser/ui/views/test/view_event_test_base.cc
@@ -8,6 +8,7 @@ #include "base/location.h" #include "base/macros.h" #include "base/threading/thread_task_runner_handle.h" +#include "build/build_config.h" #include "chrome/browser/ui/views/test/view_event_test_platform_part.h" #include "chrome/test/base/chrome_unit_test_suite.h" #include "chrome/test/base/interactive_test_utils.h" @@ -75,7 +76,9 @@ context_factories_ = std::make_unique<ui::TestContextFactories>(enable_pixel_output); +#if defined(OS_MACOSX) views_delegate_.set_context_factory(context_factories_->GetContextFactory()); +#endif views_delegate_.set_use_desktop_native_widgets(true); platform_part_.reset(ViewEventTestPlatformPart::Create(
diff --git a/chrome/browser/ui/views/test/view_event_test_base.h b/chrome/browser/ui/views/test/view_event_test_base.h index 0a6319d..d9fab1b 100644 --- a/chrome/browser/ui/views/test/view_event_test_base.h +++ b/chrome/browser/ui/views/test/view_event_test_base.h
@@ -146,7 +146,7 @@ std::unique_ptr<ViewEventTestPlatformPart> platform_part_; - ChromeTestViewsDelegate views_delegate_; + ChromeTestViewsDelegate<> views_delegate_; base::RunLoop run_loop_;
diff --git a/chrome/browser/ui/views/toolbar/reload_button_unittest.cc b/chrome/browser/ui/views/toolbar/reload_button_unittest.cc index af9d1a42..f3cca24 100644 --- a/chrome/browser/ui/views/toolbar/reload_button_unittest.cc +++ b/chrome/browser/ui/views/toolbar/reload_button_unittest.cc
@@ -34,7 +34,7 @@ ReloadButton* reload() { return &reload_; } private: - ChromeTestViewsDelegate views_delegate_; + ChromeTestViewsDelegate<> views_delegate_; ReloadButton reload_; };
diff --git a/chrome/browser/ui/web_applications/web_app_launch_manager.cc b/chrome/browser/ui/web_applications/web_app_launch_manager.cc index 0d5810d..97a7c10 100644 --- a/chrome/browser/ui/web_applications/web_app_launch_manager.cc +++ b/chrome/browser/ui/web_applications/web_app_launch_manager.cc
@@ -7,6 +7,7 @@ #include "base/metrics/histogram_macros.h" #include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/apps/app_service/app_launch_params.h" +#include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/banners/app_banner_settings_helper.h" #include "chrome/browser/engagement/site_engagement_service.h" #include "chrome/browser/ui/browser.h" @@ -219,8 +220,7 @@ apps::mojom::AppLaunchSource::kSourceCommandLine); params.command_line = command_line; params.current_directory = current_directory; - params.launch_files = - apps::LaunchManager::GetLaunchFilesFromCommandLine(command_line); + params.launch_files = apps::GetLaunchFilesFromCommandLine(command_line); // Wait for the web applications database to load. // If the profile and WebAppLaunchManager are destroyed, @@ -248,7 +248,7 @@ DCHECK(browser); } else { // Open an empty browser window as the app_id is invalid. - browser = CreateNewTabBrowser(); + browser = apps::CreateBrowserWithNewTabPage(profile()); params.container = apps::mojom::LaunchContainer::kLaunchContainerNone; } std::move(callback).Run(browser, params.container);
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc index 51b6a44d..95159a19 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -202,8 +202,8 @@ &CoreOobeHandler::HandleEnableDockedMagnifier); AddCallback("setDeviceRequisition", &CoreOobeHandler::HandleSetDeviceRequisition); - AddRawCallback("skipToLoginForTesting", - &CoreOobeHandler::HandleSkipToLoginForTesting); + AddCallback("skipToLoginForTesting", + &CoreOobeHandler::HandleSkipToLoginForTesting); AddCallback("skipToUpdateForTesting", &CoreOobeHandler::HandleSkipToUpdateForTesting); AddCallback("launchHelpApp", &CoreOobeHandler::HandleLaunchHelpApp); @@ -408,18 +408,9 @@ } } -void CoreOobeHandler::HandleSkipToLoginForTesting(const base::ListValue* args) { - LoginScreenContext context; - - // Parse |args|. - if (args->GetSize() > 0) { - std::string email; - if (args->GetString(0, &email)) - context.set_email(email); - } - +void CoreOobeHandler::HandleSkipToLoginForTesting() { if (WizardController::default_controller()) - WizardController::default_controller()->SkipToLoginForTesting(context); + WizardController::default_controller()->SkipToLoginForTesting(); } void CoreOobeHandler::HandleSkipToUpdateForTesting() {
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h index 36ea30b..44940f9 100644 --- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
@@ -185,7 +185,7 @@ void HandleSkipUpdateEnrollAfterEula(); void HandleUpdateCurrentScreen(const std::string& screen); void HandleSetDeviceRequisition(const std::string& requisition); - void HandleSkipToLoginForTesting(const base::ListValue* args); + void HandleSkipToLoginForTesting(); void HandleSkipToUpdateForTesting(); void HandleLaunchHelpApp(double help_topic_id); void HandleToggleResetScreen();
diff --git a/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc b/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc index c63c7ce9..c6e3c553 100644 --- a/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc +++ b/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc
@@ -354,6 +354,9 @@ void OmniboxPageHandler::ResetController() { controller_ = std::make_unique<AutocompleteController>( - std::make_unique<ChromeAutocompleteProviderClient>(profile_), this, + std::make_unique<ChromeAutocompleteProviderClient>(profile_), AutocompleteClassifier::DefaultOmniboxProviders()); + // We will observe our internal AutocompleteController directly, so there's + // no reason to hook it up to the profile-keyed OmniboxControllerEmitter. + controller_->AddObserver(this); }
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index c0823ff..113d3420 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -490,8 +490,8 @@ const signin::ScopeSet scopes{cloud_devices::kCloudPrintAuthScope}; DCHECK(!device_request_callback_); - chromeos::DeviceOAuth2TokenService* token_service = - chromeos::DeviceOAuth2TokenServiceFactory::Get(); + DeviceOAuth2TokenService* token_service = + DeviceOAuth2TokenServiceFactory::Get(); device_request_ = token_service->StartAccessTokenRequest(scopes, this); device_request_callback_ = std::move(callback); }
diff --git a/chrome/browser/ui/webui/settings/about_handler.cc b/chrome/browser/ui/webui/settings/about_handler.cc index 5a1ac4e..bcc0134a 100644 --- a/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chrome/browser/ui/webui/settings/about_handler.cc
@@ -412,6 +412,10 @@ "getChannelInfo", base::BindRepeating(&AboutHandler::HandleGetChannelInfo, base::Unretained(this))); web_ui()->RegisterMessageCallback( + "canChangeChannel", + base::BindRepeating(&AboutHandler::HandleCanChangeChannel, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( "refreshTPMFirmwareUpdateStatus", base::BindRepeating(&AboutHandler::HandleRefreshTPMFirmwareUpdateStatus, base::Unretained(this))); @@ -636,6 +640,15 @@ callback_id)); } +void AboutHandler::HandleCanChangeChannel(const base::ListValue* args) { + CHECK_EQ(1U, args->GetSize()); + std::string callback_id; + CHECK(args->GetString(0, &callback_id)); + ResolveJavascriptCallback( + base::Value(callback_id), + base::Value(CanChangeChannel(Profile::FromWebUI(web_ui())))); +} + void AboutHandler::OnGetCurrentChannel(std::string callback_id, const std::string& current_channel) { version_updater_->GetChannel( @@ -651,8 +664,6 @@ new base::DictionaryValue); channel_info->SetString("currentChannel", current_channel); channel_info->SetString("targetChannel", target_channel); - channel_info->SetBoolean("canChangeChannel", - CanChangeChannel(Profile::FromWebUI(web_ui()))); ResolveJavascriptCallback(base::Value(callback_id), *channel_info); }
diff --git a/chrome/browser/ui/webui/settings/about_handler.h b/chrome/browser/ui/webui/settings/about_handler.h index d585960..e69de9f 100644 --- a/chrome/browser/ui/webui/settings/about_handler.h +++ b/chrome/browser/ui/webui/settings/about_handler.h
@@ -106,8 +106,12 @@ std::string callback_id, std::unique_ptr<base::DictionaryValue> version_info); - // Retrieves combined channel info. + // Retrieves channel info. void HandleGetChannelInfo(const base::ListValue* args); + + // Checks whether we can change the current channel. + void HandleCanChangeChannel(const base::ListValue* args); + // Callbacks for version_updater_->GetChannel calls. void OnGetCurrentChannel(std::string callback_id, const std::string& current_channel);
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc index 9c690fbc..ff99b4e 100644 --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -59,6 +59,7 @@ #include "net/base/ip_endpoint.h" #include "net/url_request/url_request_context_getter.h" #include "printing/backend/print_backend.h" +#include "printing/printer_status_chromeos.h" #include "url/gurl.h" namespace chromeos { @@ -114,8 +115,8 @@ // Behavior for querying a non-IPP uri is undefined and disallowed. if (!IsIppUri(printer_uri) || !optional.has_value()) { PRINTER_LOG(ERROR) << "Printer uri is invalid: " << printer_uri; - std::move(callback).Run(PrinterQueryResult::UNKNOWN_FAILURE, "", "", "", {}, - false); + std::move(callback).Run(PrinterQueryResult::UNKNOWN_FAILURE, + printing::PrinterStatus(), "", "", "", {}, false); return; } @@ -487,8 +488,8 @@ if (printer_address.empty()) { // Run the failure callback. - OnAutoconfQueried(callback_id, PrinterQueryResult::UNKNOWN_FAILURE, "", "", - "", {}, false); + OnAutoconfQueried(callback_id, PrinterQueryResult::UNKNOWN_FAILURE, + printing::PrinterStatus(), "", "", "", {}, false); return; } @@ -515,6 +516,7 @@ const std::string& callback_id, Printer printer, PrinterQueryResult result, + const printing::PrinterStatus& printer_status, const std::string& make, const std::string& model, const std::string& make_and_model, @@ -561,6 +563,7 @@ void CupsPrintersHandler::OnAutoconfQueried( const std::string& callback_id, PrinterQueryResult result, + const printing::PrinterStatus& printer_status, const std::string& make, const std::string& model, const std::string& make_and_model,
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h index 30748a5..dadec97 100644 --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h
@@ -30,6 +30,10 @@ class EndpointResolver; } // namespace local_discovery +namespace printing { +struct PrinterStatus; +} // namespace printing + class GURL; class Profile; @@ -77,14 +81,17 @@ void HandleGetPrinterInfo(const base::ListValue* args); // Handles the callback for HandleGetPrinterInfo. |callback_id| is the - // identifier to resolve the correct Promise. |success| indicates if the query - // was successful. |make| is the detected printer manufacturer. |model| is the + // identifier to resolve the correct Promise. |result| indicates if the query + // was successful. |printer_status| contains the current status of the + // printer. |make| is the detected printer manufacturer. |model| is the // detected model. |make_and_model| is the unparsed printer-make-and-model // string. |ipp_everywhere| indicates if configuration using the CUPS IPP - // Everywhere driver should be attempted. If |success| is false, the values of - // |make|, |model|, |make_and_model|, and |ipp_everywhere| are not specified. + // Everywhere driver should be attempted. If |result| is not SUCCESS, the + // values of |printer_status|, |make|, |model|, |make_and_model|, and + // |ipp_everywhere| are not specified. void OnAutoconfQueried(const std::string& callback_id, printing::PrinterQueryResult result, + const printing::PrinterStatus& printer_status, const std::string& make, const std::string& model, const std::string& make_and_model, @@ -96,6 +103,7 @@ const std::string& callback_id, Printer printer, printing::PrinterQueryResult result, + const printing::PrinterStatus& printer_status, const std::string& make, const std::string& model, const std::string& make_and_model,
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc index 61c8f873..be78887 100644 --- a/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc
@@ -230,15 +230,19 @@ #endif html_source->AddResourcePath("app-management/app_management.mojom-lite.js", - IDR_APP_MANAGEMENT_MOJO_LITE_JS); - html_source->AddResourcePath("app-management/types.mojom-lite.js", - IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS); - html_source->AddResourcePath("app-management/bitmap.mojom-lite.js", - IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS); - html_source->AddResourcePath("app-management/image.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS); - html_source->AddResourcePath("app-management/image_info.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS); + IDR_OS_SETTINGS_APP_MANAGEMENT_MOJO_LITE_JS); + html_source->AddResourcePath( + "app-management/types.mojom-lite.js", + IDR_OS_SETTINGS_APP_MANAGEMENT_TYPES_MOJO_LITE_JS); + html_source->AddResourcePath( + "app-management/bitmap.mojom-lite.js", + IDR_OS_SETTINGS_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS); + html_source->AddResourcePath( + "app-management/image.mojom-lite.js", + IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS); + html_source->AddResourcePath( + "app-management/image_info.mojom-lite.js", + IDR_OS_SETTINGS_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS); html_source->AddResourcePath( "search/user_action_recorder.mojom-lite.js",
diff --git a/chrome/browser/upboarding/query_tiles/BUILD.gn b/chrome/browser/upboarding/query_tiles/BUILD.gn index 7e04cc67..a9ded50 100644 --- a/chrome/browser/upboarding/query_tiles/BUILD.gn +++ b/chrome/browser/upboarding/query_tiles/BUILD.gn
@@ -24,13 +24,12 @@ source_set("public") { sources = [ - "image_loader.h", "query_tile_entry.cc", "query_tile_entry.h", "tile_service.h", ] - deps = [] + deps = [ "//ui/gfx" ] public_deps = [ "//base", @@ -48,7 +47,10 @@ } source_set("factory") { - sources = [] + sources = [ + "tile_service_factory_helper.cc", + "tile_service_factory_helper.h", + ] deps = [ ":public",
diff --git a/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/Tile.java b/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/Tile.java index dbdfa7c..a566630 100644 --- a/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/Tile.java +++ b/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/Tile.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser.query_tiles; -import androidx.annotation.VisibleForTesting; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -30,8 +28,7 @@ public final List<Tile> children; /** Constructor. */ - @VisibleForTesting - Tile(String id, String displayTitle, String accessibilityText, String queryText, + public Tile(String id, String displayTitle, String accessibilityText, String queryText, List<Tile> children) { this.id = id; this.displayTitle = displayTitle;
diff --git a/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/bridges/TileProviderBridge.java b/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/bridges/TileProviderBridge.java index 9fec4f1..2820e18 100644 --- a/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/bridges/TileProviderBridge.java +++ b/chrome/browser/upboarding/query_tiles/android/java/src/org/chromium/chrome/browser/query_tiles/bridges/TileProviderBridge.java
@@ -6,6 +6,8 @@ import android.graphics.Bitmap; +import androidx.annotation.Nullable; + import org.chromium.base.Callback; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; @@ -13,6 +15,7 @@ import org.chromium.chrome.browser.query_tiles.Tile; import org.chromium.chrome.browser.query_tiles.TileProvider; +import java.util.ArrayList; import java.util.List; /** @@ -48,6 +51,19 @@ TileProviderBridgeJni.get().getThumbnail(mNativeTileProviderBridge, this, id, callback); } + @CalledByNative + private static List<Tile> createList() { + return new ArrayList<>(); + } + + @CalledByNative + private static Tile createTileAndMaybeAddToList(@Nullable List<Tile> list, String tileId, + String displayTitle, String accessibilityText, String queryText, List<Tile> children) { + Tile tile = new Tile(tileId, displayTitle, accessibilityText, queryText, children); + if (list != null) list.add(tile); + return tile; + } + @NativeMethods interface Natives { void getQueryTiles(long nativeTileProviderBridge, TileProviderBridge caller, @@ -55,4 +71,4 @@ void getThumbnail(long nativeTileProviderBridge, TileProviderBridge caller, String id, Callback<Bitmap> callback); } -} +} \ No newline at end of file
diff --git a/chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.cc b/chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.cc index f83d4c6..1417ca7 100644 --- a/chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.cc +++ b/chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.cc
@@ -4,14 +4,64 @@ #include "chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.h" +#include "base/android/callback_android.h" +#include "base/android/jni_string.h" #include "chrome/browser/upboarding/query_tiles/jni_headers/TileProviderBridge_jni.h" +#include "ui/gfx/android/java_bitmap.h" +#include "ui/gfx/image/image.h" + +using base::android::AttachCurrentThread; +using base::android::ConvertJavaStringToUTF8; +using base::android::ConvertUTF8ToJavaString; namespace upboarding { namespace { const char kTileProviderBridgeKey[] = "tile_provider_bridge"; + +ScopedJavaLocalRef<jobject> createJavaTileAndMaybeAddToList( + JNIEnv* env, + ScopedJavaLocalRef<jobject> jlist, + QueryTileEntry* tile) { + ScopedJavaLocalRef<jobject> jchildren = + Java_TileProviderBridge_createList(env); + + for (QueryTileEntry* subtile : tile->subtiles) + createJavaTileAndMaybeAddToList(env, jchildren, subtile); + + return Java_TileProviderBridge_createTileAndMaybeAddToList( + env, jlist, ConvertUTF8ToJavaString(env, tile->id), + ConvertUTF8ToJavaString(env, tile->display_text), + ConvertUTF8ToJavaString(env, tile->accessibility_text), + ConvertUTF8ToJavaString(env, tile->query_text), jchildren); } +ScopedJavaLocalRef<jobject> createJavaTiles( + JNIEnv* env, + const std::vector<QueryTileEntry*>& tiles) { + ScopedJavaLocalRef<jobject> jlist = Java_TileProviderBridge_createList(env); + + for (QueryTileEntry* tile : tiles) + createJavaTileAndMaybeAddToList(env, jlist, tile); + + return jlist; +} + +void RunGetTilesCallback(const JavaRef<jobject>& j_callback, + const std::vector<QueryTileEntry*>& tiles) { + JNIEnv* env = AttachCurrentThread(); + RunObjectCallbackAndroid(j_callback, createJavaTiles(env, tiles)); +} + +void RunGeVisualsCallback(const JavaRef<jobject>& j_callback, + const gfx::Image& image) { + ScopedJavaLocalRef<jobject> j_bitmap = + gfx::ConvertToJavaBitmap(image.ToSkBitmap()); + RunObjectCallbackAndroid(j_callback, j_bitmap); +} + +} // namespace + // static ScopedJavaLocalRef<jobject> TileProviderBridge::GetBridgeForTileService( TileService* tile_service) { @@ -44,11 +94,18 @@ void TileProviderBridge::GetQueryTiles(JNIEnv* env, const JavaParamRef<jobject>& jcaller, const JavaParamRef<jobject>& jcallback) { + tile_service_->GetQueryTiles(base::BindOnce( + &RunGetTilesCallback, ScopedJavaGlobalRef<jobject>(jcallback))); } void TileProviderBridge::GetThumbnail(JNIEnv* env, const JavaParamRef<jobject>& jcaller, const JavaParamRef<jstring>& jid, - const JavaParamRef<jobject>& jcallback) {} + const JavaParamRef<jobject>& jcallback) { + std::string tile_id = ConvertJavaStringToUTF8(env, jid); + tile_service_->GetVisuals( + tile_id, base::BindOnce(&RunGeVisualsCallback, + ScopedJavaGlobalRef<jobject>(jcallback))); +} } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/BUILD.gn b/chrome/browser/upboarding/query_tiles/internal/BUILD.gn index f2fa9815..55d0412 100644 --- a/chrome/browser/upboarding/query_tiles/internal/BUILD.gn +++ b/chrome/browser/upboarding/query_tiles/internal/BUILD.gn
@@ -9,25 +9,36 @@ source_set("internal") { sources = [ + "cached_image_loader.cc", + "cached_image_loader.h", "image_data_store.cc", "image_data_store.h", "image_decoder.cc", "image_decoder.h", "image_info_store.cc", "image_info_store.h", + "image_loader.h", "proto_conversion.cc", "proto_conversion.h", "query_tile_store.cc", "query_tile_store.h", + "query_tile_types.h", "store.h", + "tile_info_fetcher.cc", + "tile_info_fetcher.h", + "tile_service_impl.cc", + "tile_service_impl.h", ] deps = [ "//base", "//chrome/browser/upboarding/query_tiles:public", "//chrome/browser/upboarding/query_tiles/proto", + "//components/image_fetcher/core", "//components/leveldb_proto", + "//net", "//services/data_decoder/public/cpp", + "//services/network/public/cpp", "//skia", "//url", ] @@ -38,9 +49,11 @@ visibility = [ "//chrome/browser/upboarding/query_tiles:unit_tests" ] sources = [ + "cached_image_loader_unittest.cc", "image_decoder_unittest.cc", "proto_conversion_unittest.cc", "query_tile_store_unittest.cc", + "tile_info_fetcher_unittest.cc", ] deps = [ @@ -50,6 +63,7 @@ "//chrome/browser/upboarding/query_tiles:public", "//chrome/browser/upboarding/query_tiles/internal", "//chrome/browser/upboarding/query_tiles/proto", + "//components/image_fetcher/core:test_support", "//components/leveldb_proto", "//components/leveldb_proto:test_support", "//services/data_decoder/public/cpp:test_support",
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader.cc b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc similarity index 94% rename from chrome/browser/upboarding/query_tiles/cached_image_loader.cc rename to chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc index a1a813168..616aca03 100644 --- a/chrome/browser/upboarding/query_tiles/cached_image_loader.cc +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc
@@ -2,13 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/upboarding/query_tiles/cached_image_loader.h" +#include "chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h" #include <utility> #include "base/bind.h" #include "base/callback.h" -#include "chrome/browser/upboarding/query_tiles/image_loader.h" #include "components/image_fetcher/core/image_fetcher.h" #include "components/image_fetcher/core/image_fetcher_service.h" #include "net/traffic_annotation/network_traffic_annotation.h"
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader.h b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h similarity index 74% rename from chrome/browser/upboarding/query_tiles/cached_image_loader.h rename to chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h index a93191d..60ab17e 100644 --- a/chrome/browser/upboarding/query_tiles/cached_image_loader.h +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_ -#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_ +#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_CACHED_IMAGE_LOADER_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_CACHED_IMAGE_LOADER_H_ #include <memory> -#include "chrome/browser/upboarding/query_tiles/image_loader.h" +#include "chrome/browser/upboarding/query_tiles/internal/image_loader.h" #include "components/image_fetcher/core/image_fetcher.h" namespace image_fetcher { @@ -34,4 +34,4 @@ } // namespace upboarding -#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_CACHED_IMAGE_LOADER_H_ +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_CACHED_IMAGE_LOADER_H_
diff --git a/chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc similarity index 96% rename from chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc rename to chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc index 65c50ec..a0d01ac 100644 --- a/chrome/browser/upboarding/query_tiles/cached_image_loader_unittest.cc +++ b/chrome/browser/upboarding/query_tiles/internal/cached_image_loader_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/upboarding/query_tiles/cached_image_loader.h" +#include "chrome/browser/upboarding/query_tiles/internal/cached_image_loader.h" #include <memory> #include <utility>
diff --git a/chrome/browser/upboarding/query_tiles/image_loader.h b/chrome/browser/upboarding/query_tiles/internal/image_loader.h similarity index 79% rename from chrome/browser/upboarding/query_tiles/image_loader.h rename to chrome/browser/upboarding/query_tiles/internal/image_loader.h index bec54bdb..4d01903 100644 --- a/chrome/browser/upboarding/query_tiles/image_loader.h +++ b/chrome/browser/upboarding/query_tiles/internal/image_loader.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_ -#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_ +#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_ #include <memory> #include <string> @@ -33,4 +33,4 @@ } // namespace upboarding -#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_IMAGE_LOADER_H_ +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_IMAGE_LOADER_H_
diff --git a/chrome/browser/upboarding/query_tiles/internal/query_tile_types.h b/chrome/browser/upboarding/query_tiles/internal/query_tile_types.h new file mode 100644 index 0000000..a3ca482 --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/query_tile_types.h
@@ -0,0 +1,19 @@ +// Copyright 2020 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_UPBOARDING_QUERY_TILES_INTERNAL_QUERY_TILE_TYPES_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_QUERY_TILE_TYPES_H_ + +enum class TileInfoRequestStatus { + // Initial status, request is not sent. + kInit = 0, + // Request completed successfully. + kSuccess = 1, + // Request failed. + kFailure = 2, + // Max value. + kMaxValue = kFailure, +}; + +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_QUERY_TILE_TYPES_H_
diff --git a/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.cc b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.cc new file mode 100644 index 0000000..7615b2a --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.cc
@@ -0,0 +1,117 @@ +// Copyright 2020 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/upboarding/query_tiles/internal/tile_info_fetcher.h" + +#include <utility> + +#include "net/base/url_util.h" +#include "net/http/http_request_headers.h" +#include "net/http/http_status_code.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/simple_url_loader.h" + +namespace upboarding { +namespace { + +class TileInfoFetcherImpl : public TileInfoFetcher { + public: + TileInfoFetcherImpl( + const GURL& url, + const std::string& locale, + const std::string& accept_languages, + const std::string& api_key, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + FinishedCallback callback) + : url_loader_factory_(url_loader_factory), + callback_(std::move(callback)) { + tile_info_request_status_ = TileInfoRequestStatus::kInit; + // Start fetching. + auto resource_request = + BuildGetRequest(url, locale, accept_languages, api_key); + url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request), + traffic_annotation); + + url_loader_->SetOnResponseStartedCallback( + base::BindRepeating(&TileInfoFetcherImpl::OnResponseStarted, + weak_ptr_factory_.GetWeakPtr())); + // TODO(hesen): Estimate max size of response then replace to + // DownloadToString method. + url_loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie( + url_loader_factory_.get(), + base::BindOnce(&TileInfoFetcherImpl::OnDownloadComplete, + weak_ptr_factory_.GetWeakPtr())); + } + + private: + // Build the request to get tile info. + std::unique_ptr<network::ResourceRequest> BuildGetRequest( + const GURL& url, + const std::string& locale, + const std::string& accept_languages, + const std::string& api_key) { + auto request = std::make_unique<network::ResourceRequest>(); + request->method = net::HttpRequestHeaders::kGetMethod; + request->headers.SetHeader("x-goog-api-key", api_key); + if (!accept_languages.empty()) + request->headers.SetHeader(net::HttpRequestHeaders::kAcceptLanguage, + accept_languages); + return request; + } + + // Called when start receiving HTTP response. + void OnResponseStarted(const GURL& final_url, + const network::mojom::URLResponseHead& response_head) { + int response_code = -1; + if (response_head.headers) + response_code = response_head.headers->response_code(); + + // TODO(hesen): Handle more possible status, and record status to UMA. + if (response_code == -1 || (response_code < 200 || response_code > 299)) + tile_info_request_status_ = TileInfoRequestStatus::kFailure; + } + + // Called after receiving HTTP response. Processes the response code. + void OnDownloadComplete(std::unique_ptr<std::string> response_body) { + std::move(callback_).Run(tile_info_request_status_, + std::move(response_body)); + } + + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; + + // Simple URL loader to fetch proto from network. + std::unique_ptr<network::SimpleURLLoader> url_loader_; + + // Callback to be executed after fetching is done. + FinishedCallback callback_; + + // Status of the tile info request. + TileInfoRequestStatus tile_info_request_status_; + + base::WeakPtrFactory<TileInfoFetcherImpl> weak_ptr_factory_{this}; +}; + +} // namespace + +// static +std::unique_ptr<TileInfoFetcher> TileInfoFetcher::CreateAndFetchForTileInfo( + const GURL& url, + const std::string& locale, + const std::string& accept_languages, + const std::string& api_key, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + FinishedCallback callback) { + return std::make_unique<TileInfoFetcherImpl>( + url, locale, accept_languages, api_key, traffic_annotation, + url_loader_factory, std::move(callback)); +} + +TileInfoFetcher::TileInfoFetcher() = default; +TileInfoFetcher::~TileInfoFetcher() = default; + +} // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.h b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.h new file mode 100644 index 0000000..628ce444 --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher.h
@@ -0,0 +1,57 @@ +// Copyright 2020 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_UPBOARDING_QUERY_TILES_INTERNAL_TILE_INFO_FETCHER_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_INFO_FETCHER_H_ + +#include <memory> +#include <string> + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/upboarding/query_tiles/internal/query_tile_types.h" +#include "net/base/backoff_entry.h" +#include "url/gurl.h" + +namespace network { +class SharedURLLoaderFactory; +} // namespace network + +namespace net { +struct NetworkTrafficAnnotationTag; +} // namespace net + +namespace upboarding { + +class TileInfoFetcher { + public: + // Called after the fetch task is done, |status| and serialized response + // |data| will be returned. Invoked with |nullptr| if status is not success. + using FinishedCallback = base::OnceCallback<void( + TileInfoRequestStatus status, + const std::unique_ptr<std::string> response_body)>; + + // Method to create a fetcher and start the fetch task immediately. + static std::unique_ptr<TileInfoFetcher> CreateAndFetchForTileInfo( + const GURL& url, + const std::string& locale, + const std::string& accept_languages, + const std::string& api_key, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + const scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + FinishedCallback callback); + + virtual ~TileInfoFetcher(); + + TileInfoFetcher(const TileInfoFetcher& other) = delete; + TileInfoFetcher& operator=(const TileInfoFetcher& other) = delete; + + protected: + TileInfoFetcher(); +}; + +} // namespace upboarding + +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_INFO_FETCHER_H_
diff --git a/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher_unittest.cc b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher_unittest.cc new file mode 100644 index 0000000..780a47af --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/tile_info_fetcher_unittest.cc
@@ -0,0 +1,19 @@ +// Copyright 2020 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/upboarding/query_tiles/internal/tile_info_fetcher.h" +#include "base/test/task_environment.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace upboarding { +class TileInfoFetcherTest : public testing::Test { + public: + TileInfoFetcherTest(); + ~TileInfoFetcherTest() override = default; + + TileInfoFetcherTest(const TileInfoFetcherTest& other) = delete; + TileInfoFetcherTest& operator=(const TileInfoFetcherTest& other) = delete; +}; + +} // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.cc b/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.cc new file mode 100644 index 0000000..60592cf --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.cc
@@ -0,0 +1,24 @@ +// Copyright 2020 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/upboarding/query_tiles/internal/tile_service_impl.h" + +#include "ui/gfx/image/image.h" + +namespace upboarding { + +TileServiceImpl::TileServiceImpl(image_fetcher::ImageFetcher* image_fetcher) {} + +TileServiceImpl::~TileServiceImpl() = default; + +void TileServiceImpl::GetQueryTiles(GetTilesCallback callback) { + NOTIMPLEMENTED(); +} + +void TileServiceImpl::GetVisuals(const std::string& tile_id, + VisualsCallback callback) { + NOTIMPLEMENTED(); +} + +} // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h b/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h new file mode 100644 index 0000000..c08d64f75 --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h
@@ -0,0 +1,34 @@ +// Copyright 2020 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_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_ + +#include "base/memory/weak_ptr.h" +#include "chrome/browser/upboarding/query_tiles/tile_service.h" +#include "components/image_fetcher/core/image_fetcher.h" + +namespace upboarding { + +class TileServiceImpl : public TileService { + public: + explicit TileServiceImpl(image_fetcher::ImageFetcher* image_fetcher); + ~TileServiceImpl() override; + + // Disallow copy/assign. + TileServiceImpl(const TileServiceImpl& other) = delete; + TileServiceImpl& operator=(const TileServiceImpl& other) = delete; + + private: + // TileService implementation. + void GetQueryTiles(GetTilesCallback callback) override; + void GetVisuals(const std::string& tile_id, + VisualsCallback callback) override; + + base::WeakPtrFactory<TileServiceImpl> weak_ptr_factory_{this}; +}; + +} // namespace upboarding + +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_
diff --git a/chrome/browser/upboarding/query_tiles/query_tile_entry.h b/chrome/browser/upboarding/query_tiles/query_tile_entry.h index 1d8fc23..cee8aaa 100644 --- a/chrome/browser/upboarding/query_tiles/query_tile_entry.h +++ b/chrome/browser/upboarding/query_tiles/query_tile_entry.h
@@ -53,6 +53,9 @@ // A set contains all ids of it's children tiles. std::set<std::string> children; + + // TODO(shaktisahu): Merge children into subtiles. + std::vector<QueryTileEntry*> subtiles; }; } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service.h b/chrome/browser/upboarding/query_tiles/tile_service.h index ae2161b..128b0492 100644 --- a/chrome/browser/upboarding/query_tiles/tile_service.h +++ b/chrome/browser/upboarding/query_tiles/tile_service.h
@@ -5,20 +5,40 @@ #ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_ #define CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_ -#include "base/macros.h" +#include <string> +#include <vector> + +#include "base/callback.h" #include "base/supports_user_data.h" +#include "chrome/browser/upboarding/query_tiles/query_tile_entry.h" #include "components/keyed_service/core/keyed_service.h" +namespace gfx { +class Image; +} // namespace gfx + namespace upboarding { +using GetTilesCallback = + base::OnceCallback<void(const std::vector<QueryTileEntry*>&)>; +using VisualsCallback = base::OnceCallback<void(const gfx::Image&)>; + // The central class on chrome client responsible for fetching, storing, // managing, and displaying query tiles in chrome. class TileService : public KeyedService, public base::SupportsUserData { public: - // TODO(shaktisahu): Add methods. + // Called to retrieve all the tiles. + virtual void GetQueryTiles(GetTilesCallback callback) = 0; - private: - DISALLOW_COPY_AND_ASSIGN(TileService); + // Called to retrieve thumbnail for the given tile id. + virtual void GetVisuals(const std::string& tile_id, + VisualsCallback callback) = 0; + + TileService() = default; + ~TileService() override = default; + + TileService(const TileService&) = delete; + TileService& operator=(const TileService&) = delete; }; } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc index d068075..57626bb 100644 --- a/chrome/browser/upboarding/query_tiles/tile_service_factory.cc +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory.cc
@@ -6,6 +6,8 @@ #include "base/memory/singleton.h" #include "chrome/browser/image_fetcher/image_fetcher_service_factory.h" +#include "chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h" +#include "components/image_fetcher/core/image_fetcher_service.h" #include "components/keyed_service/core/simple_dependency_manager.h" namespace upboarding { @@ -31,9 +33,11 @@ std::unique_ptr<KeyedService> TileServiceFactory::BuildServiceInstanceFor( SimpleFactoryKey* key) const { - // TODO(shaktisahu): Create TileService instance. - - return nullptr; + // TODO(xingliu): Use network only fetcher if needed. + auto* image_fetcher = + ImageFetcherServiceFactory::GetForKey(key)->GetImageFetcher( + image_fetcher::ImageFetcherConfig::kDiskCacheOnly); + return CreateTileService(image_fetcher); } } // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc new file mode 100644 index 0000000..28841576 --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.cc
@@ -0,0 +1,17 @@ +// Copyright 2020 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/upboarding/query_tiles/tile_service_factory_helper.h" + +#include "chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h" +#include "components/keyed_service/core/keyed_service.h" + +namespace upboarding { + +std::unique_ptr<TileService> CreateTileService( + image_fetcher::ImageFetcher* image_fetcher) { + return std::make_unique<TileServiceImpl>(image_fetcher); +} + +} // namespace upboarding
diff --git a/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h new file mode 100644 index 0000000..d0f3de8 --- /dev/null +++ b/chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h
@@ -0,0 +1,23 @@ +// Copyright 2020 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_UPBOARDING_QUERY_TILES_TILE_SERVICE_FACTORY_HELPER_H_ +#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_FACTORY_HELPER_H_ + +#include <memory> + +namespace image_fetcher { +class ImageFetcher; +} // namespace image_fetcher + +namespace upboarding { + +class TileService; + +std::unique_ptr<TileService> CreateTileService( + image_fetcher::ImageFetcher* image_fetcher); + +} // namespace upboarding + +#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_FACTORY_HELPER_H_
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc index abbac7ad..80f36dd8 100644 --- a/chrome/browser/web_applications/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -57,7 +57,7 @@ const char kFileHandlingOriginTrial[] = "FileHandling"; // Use #if defined to avoid compiler error on unused function. -#if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) +#if defined(OS_CHROMEOS) // A convenience method to create OriginTrialsMap. Note, we only support simple // cases for chrome:// and chrome-untrusted:// URLs. We don't support complex @@ -72,7 +72,7 @@ return origin; } -#endif // OS_CHROMEOS && !OFFICIAL_BUILD +#endif // OS_CHROMEOS base::flat_map<SystemAppType, SystemAppInfo> CreateSystemWebApps() { base::flat_map<SystemAppType, SystemAppInfo> infos; @@ -124,6 +124,8 @@ infos.at(SystemAppType::MEDIA).include_launch_directory = true; infos.at(SystemAppType::MEDIA).show_in_launcher = false; infos.at(SystemAppType::MEDIA).show_in_search = false; + infos.at(SystemAppType::MEDIA).enabled_origin_trials = + OriginTrialsMap({{GetOrigin("chrome://media-app"), {"FileHandling"}}}); } if (SystemWebAppManager::IsAppEnabled(SystemAppType::PRINT_MANAGEMENT)) {
diff --git a/chrome/common/channel_info.h b/chrome/common/channel_info.h index 9258b6e9e..221573d 100644 --- a/chrome/common/channel_info.h +++ b/chrome/common/channel_info.h
@@ -46,6 +46,12 @@ // Channel::STABLE, if channel is empty, else matches the name and returns // {STABLE,BETA,DEV,CANARY, UNKNOWN}. version_info::Channel GetChannelByName(const std::string& channel); + +// Returns whether this is a side-by-side capable copy of Chromium. For +// unbranded builds, this is always true. For branded builds, this may not be +// true for old copies of beta and dev channels that share the same user data +// dir as the stable channel. +bool IsSideBySideCapable(); #endif #if defined(OS_POSIX)
diff --git a/chrome/common/channel_info_mac.mm b/chrome/common/channel_info_mac.mm index 3c8e51c..2b56e182 100644 --- a/chrome/common/channel_info_mac.mm +++ b/chrome/common/channel_info_mac.mm
@@ -56,6 +56,33 @@ return version_info::Channel::UNKNOWN; } +bool IsSideBySideCapable() { +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + // Use the main Chrome application bundle and not the framework bundle. + // Keystone keys don't live in the framework. + NSBundle* bundle = base::mac::OuterBundle(); + if (![bundle objectForInfoDictionaryKey:@"KSProductID"]) { + // This build is not Keystone-enabled, and without a channel assume it is + // side-by-side capable. + return true; + } + + if (![bundle objectForInfoDictionaryKey:@"KSChannelID"]) { + // For the stable channel, KSChannelID is not set. Stable Chromes are what + // side-by-side capable Chromes are running side-by-side *to* and by + // definition are side-by-side capable. + return true; + } + + // If there is a CrProductDirName key, then the user data dir of this + // beta/dev/canary Chrome is separate, and it can run side-by-side to the + // stable Chrome. + return [bundle objectForInfoDictionaryKey:@"CrProductDirName"]; +#else + return true; +#endif +} + version_info::Channel GetChannel() { return GetChannelByName(GetChannelName()); }
diff --git a/chrome/common/extensions/docs/templates/articles/tut_debugging.html b/chrome/common/extensions/docs/templates/articles/tut_debugging.html index f7d0e8b2..e7766f44 100644 --- a/chrome/common/extensions/docs/templates/articles/tut_debugging.html +++ b/chrome/common/extensions/docs/templates/articles/tut_debugging.html
@@ -99,7 +99,7 @@ Now that the extension initializes correctly, other components can be tested. Refresh this page, - or open a new tab and naigate to any page on developer.chrome.com, + or open a new tab and navigate to any page on developer.chrome.com, open the popup and click the green square. And... nothing happens. </p>
diff --git a/chrome/common/net/x509_certificate_model_nss_unittest.cc b/chrome/common/net/x509_certificate_model_nss_unittest.cc index 3bc0cc8..7dbd885 100644 --- a/chrome/common/net/x509_certificate_model_nss_unittest.cc +++ b/chrome/common/net/x509_certificate_model_nss_unittest.cc
@@ -383,21 +383,21 @@ ASSERT_TRUE(cert.get()); EXPECT_EQ( - "5B 53 FF 6D D5 0A 43 A5 0F D4 7D C6 5D 88 E3 98\n" - "9D 67 EB 32 82 B3 0F F5 C1 78 F8 05 4A BF BC 21\n" - "05 EE 21 08 2C B2 15 A1 B8 B2 F6 A3 15 61 E4 C1\n" - "AD 84 A4 A7 40 0C 87 09 5F 2B 1B F9 4D 6C 92 7D\n" - "CB 7E 2B B0 01 0A ED 40 E5 4E AF 1A F1 0D EC 1D\n" - "9E 96 C7 D4 61 64 39 23 FA 5F 29 C4 2A 3A B8 ED\n" - "8A 72 50 6A AC 45 04 76 09 A8 3D 57 D7 F0 4B AE\n" - "46 B4 83 C1 14 50 2A 19 59 53 B2 4D AE FC 2F 40\n" - "49 C8 AD 4D 9D C8 22 8D 8C 01 DB 31 33 5A F4 BC\n" - "4C 9B ED D7 E3 43 D9 E8 1D 53 8B 30 D8 81 9E 72\n" - "AB 9E CE B8 F5 83 93 F2 72 DB DE CD B0 52 9A 45\n" - "4D CF E7 21 D8 CE 16 64 8F 42 AF C1 87 A8 F9 D5\n" - "E2 03 DD BA 6B 1B 7C 7D A0 38 33 61 39 B4 DD 5C\n" - "69 17 79 02 3A EC 1D 6F 5E BB 13 FB A6 82 5D 07\n" - "20 FC 86 FE 6E 8B AC E1 C2 18 A2 FE 3F 95 66 D3\n" - "69 8A 00 06 2C 56 37 34 B9 B6 31 DE 0F F6 44 39", + "B1 B1 83 61 AF DB ED 98 CF 3D 43 5F A7 42 B8 6D\n" + "94 36 57 BB AB 04 EE DD 3B B7 6D EC 78 7D 46 59\n" + "B1 E6 2A C3 AA A5 70 A7 E1 0C FA 65 37 C6 CB 7D\n" + "A1 37 35 A1 FF F0 DD CE B6 A4 2C 12 D4 46 A9 9C\n" + "A2 91 3A B0 95 55 97 55 E6 0A DA 63 60 24 19 AC\n" + "20 C9 B1 94 40 E9 99 B1 F5 C3 ED 61 5D DE 4C E4\n" + "EB D9 0E AC 3A 0A FC 44 7D 0F 77 A6 B6 DA 28 D4\n" + "ED EA 3A BC 57 23 9C 72 2B 2D B0 5D 11 02 4D C5\n" + "BC B0 D6 7E 00 8E F7 E7 F5 19 3A 23 DF 33 02 AA\n" + "4B BF 81 F4 5A 99 EE 74 20 F3 77 A1 F0 85 1E A8\n" + "D6 CC A4 CB 31 FA 73 24 A2 0E DD 9F 6F 82 38 5F\n" + "85 AC 8D 76 BD D8 F2 69 73 E3 46 44 42 E3 5E F3\n" + "AA 5E 44 13 51 EA 0B 78 91 77 96 EE 73 FE 2A B5\n" + "88 C1 38 8D 8D A8 19 76 94 05 02 CF D4 6F EB E6\n" + "07 F5 9D 52 24 B8 50 A3 0E C4 45 A6 09 B4 06 2D\n" + "3E 14 A5 3F 1C 1A BC DA B8 40 3E C1 1C F6 3C 05", x509_certificate_model::ProcessRawBitsSignatureWrap(cert.get())); }
diff --git a/chrome/common/search.mojom b/chrome/common/search.mojom index bfd4dea..1640c28 100644 --- a/chrome/common/search.mojom +++ b/chrome/common/search.mojom
@@ -44,10 +44,24 @@ array<ACMatchClassification> contents_class; mojo_base.mojom.String16 description; array<ACMatchClassification> description_class; + // if a favicon is available for |destination_url| it is fetched in C++ and + // the resulting data URL is sent to JS via AutocompleteMatchImageAvailable + // along with the |destination_url| and the match index which are used to + // identify the appropriate match. string destination_url; mojo_base.mojom.String16 inline_autocompletion; mojo_base.mojom.String16 fill_into_edit; + // The url for the suggestion icon. This is a relative url pointing to a + // bundled resource and is used directly in CSS to show the icon. + string icon_url; + // Used to paint a placeholder while fetching |image_url|. These two fields + // are valid for entity suggestions only. Entity suggestions have a |type| of + // 'search-suggest-entity'. string image_dominant_color; + // The image url for entity suggestions. |image_url| is an external url and + // therefore is fetched in C++ and the resulting data URL is sent to JS via + // AutocompleteMatchImageAvailable along with the |image_url| and the match + // index which are used to identify the appropriate match. string image_url; bool is_search_type; // Result of AutocompleteMatch::IsSearchType(). string type; // Result of AutocompleteMatchType::ToString(). @@ -231,9 +245,11 @@ // Updates the NTP realbox with the autocomplete results. AutocompleteResultChanged(AutocompleteResult result); - // Updates the NTP realbox with the given autocomplete match's image data. + // Updates the NTP realbox popup with the image or favicon data URL for the + // given |match_index| and |url| where |url| is an AutocompleteMatch image_url + // or destination_url for an entity or a navigation suggestion respectively. AutocompleteMatchImageAvailable(uint32 match_index, - string image_url, + string url, string data_url); // Update the page sequence number for the page.
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index 5e56be4e..1301c421 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -186,7 +186,6 @@ const char kChromeUINativeNewTabURL[] = "chrome-native://newtab/"; const char kChromeUINativePhysicalWebDiagnosticsURL[] = "chrome-native://physical-web-diagnostics/"; -const char kChromeUINativeScheme[] = "chrome-native"; const char kChromeUIOfflineInternalsHost[] = "offline-internals"; const char kChromeUIPhysicalWebDiagnosticsHost[] = "physical-web-diagnostics"; const char kChromeUISnippetsInternalsHost[] = "snippets-internals";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index 1ae2666..120747cb 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -187,7 +187,6 @@ extern const char kChromeUINativeHistoryURL[]; extern const char kChromeUINativeNewTabURL[]; extern const char kChromeUINativePhysicalWebDiagnosticsURL[]; -extern const char kChromeUINativeScheme[]; extern const char kChromeUIPhysicalWebDiagnosticsHost[]; extern const char kChromeUISnippetsInternalsHost[]; extern const char kChromeUIWebApksHost[];
diff --git a/chrome/installer/setup/uninstall.cc b/chrome/installer/setup/uninstall.cc index 20e37630..cff7b55 100644 --- a/chrome/installer/setup/uninstall.cc +++ b/chrome/installer/setup/uninstall.cc
@@ -21,6 +21,7 @@ #include "base/files/file_util.h" #include "base/path_service.h" #include "base/process/kill.h" +#include "base/process/process_iterator.h" #include "base/stl_util.h" #include "base/strings/string16.h" #include "base/strings/string_number_conversions.h" @@ -140,12 +141,46 @@ return success; } -// Kills all Chrome processes, immediately. -void CloseAllChromeProcesses() { +// Filter for processes whose base name matches and whose path starts with a +// specified prefix. +class ProcessPathPrefixFilter : public base::ProcessFilter { + public: + explicit ProcessPathPrefixFilter( + const base::FilePath::StringPieceType& process_path_prefix) + : process_path_prefix_(process_path_prefix) {} + + // base::ProcessFilter: + bool Includes(const base::ProcessEntry& entry) const override { + // Test if |entry|'s file path starts with the prefix we're looking for. + base::Process process(::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, + FALSE, entry.th32ProcessID)); + if (!process.IsValid()) + return false; + + DWORD path_len = MAX_PATH; + wchar_t path_string[MAX_PATH]; + if (::QueryFullProcessImageName(process.Handle(), 0, path_string, + &path_len)) { + base::FilePath file_path(path_string); + return base::StartsWith(file_path.value(), process_path_prefix_, + base::CompareCase::INSENSITIVE_ASCII); + } + PLOG(WARNING) << "QueryFullProcessImageName failed for PID " + << entry.th32ProcessID; + return false; + } + + private: + const base::FilePath::StringPieceType process_path_prefix_; +}; + +// Kills all Chrome processes in |target_path|, immediately. +void CloseAllChromeProcesses(const base::FilePath& target_path) { + ProcessPathPrefixFilter target_path_filter(target_path.value()); base::CleanupProcesses(installer::kChromeExe, base::TimeDelta(), - content::RESULT_CODE_HUNG, NULL); + content::RESULT_CODE_HUNG, &target_path_filter); base::CleanupProcesses(installer::kNaClExe, base::TimeDelta(), - content::RESULT_CODE_HUNG, NULL); + content::RESULT_CODE_HUNG, &target_path_filter); } // Updates shortcuts to |old_target_exe| that have non-empty args, making them @@ -371,7 +406,7 @@ if (!base::DeleteFileRecursively(to_delete)) { LOG(ERROR) << "Failed to delete path (1st try): " << to_delete.value(); // Try closing any running Chrome processes and deleting files once again. - CloseAllChromeProcesses(); + CloseAllChromeProcesses(target_path); if (!base::DeleteFileRecursively(to_delete)) { LOG(ERROR) << "Failed to delete path (2nd try): " << to_delete.value(); result = DELETE_FAILED; @@ -826,7 +861,7 @@ if (force_uninstall) { // Since --force-uninstall command line option is used, we are going to // do silent uninstall. Try to close all running Chrome instances. - CloseAllChromeProcesses(); + CloseAllChromeProcesses(installer_state.target_path()); } else { // no --force-uninstall so lets show some UI dialog boxes. status = IsChromeActiveOrUserCancelled(installer_state);
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc index a8ce2e02..438b083 100644 --- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -30,6 +30,7 @@ #include "components/autofill/core/common/form_field_data.h" #include "components/autofill/core/common/mojom/autofill_types.mojom.h" #include "components/autofill/core/common/password_form.h" +#include "components/autofill/core/common/password_form_fill_data.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/safe_browsing/buildflags.h" #include "content/public/renderer/render_frame.h" @@ -1978,6 +1979,36 @@ CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); } +// With butter, passwords fields should always trigger the popup so the user can +// unlock account-stored suggestions from there. +TEST_F(PasswordAutofillAgentTest, ShowPopupOnPasswordFieldWithoutSuggestions) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + password_manager::features::kEnablePasswordsAccountStorage); + ClearUsernameAndPasswordFields(); + UpdateRendererIDs(); + + SimulateElementClick(kPasswordName); + + EXPECT_CALL(fake_driver_, ShowPasswordSuggestions); + base::RunLoop().RunUntilIdle(); +} + +// Before butter, passwords fields should never trigger the popup on password +// passwords fields without suggestions since it would not be helpful. +TEST_F(PasswordAutofillAgentTest, NoPopupOnPasswordFieldWithoutSuggestions) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + password_manager::features::kEnablePasswordsAccountStorage); + ClearUsernameAndPasswordFields(); + UpdateRendererIDs(); + + SimulateElementClick(kPasswordName); + + EXPECT_CALL(fake_driver_, ShowPasswordSuggestions).Times(0); + base::RunLoop().RunUntilIdle(); +} + // Tests the autosuggestions that are given when the element is clicked. // Specifically, tests when the user clicks on the username element after page // load and the element is autofilled, when the user clicks on an element that
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc index 3bdc66a..025a1a8d 100644 --- a/chrome/renderer/chrome_render_frame_observer.cc +++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -8,9 +8,8 @@ #include <string.h> #include <limits> -#include <string> +#include <map> #include <utility> -#include <vector> #include "base/bind.h" #include "base/command_line.h" @@ -19,7 +18,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" -#include "build/build_config.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_isolated_world_ids.h" #include "chrome/common/chrome_switches.h" @@ -31,7 +29,6 @@ #include "chrome/renderer/web_apps.h" #include "components/crash/core/common/crash_key.h" #include "components/offline_pages/buildflags/buildflags.h" -#include "components/safe_browsing/buildflags.h" #include "components/translate/content/renderer/translate_agent.h" #include "components/web_cache/renderer/web_cache_impl.h" #include "content/public/common/bindings_policy.h" @@ -44,7 +41,6 @@ #include "services/service_manager/public/cpp/binder_registry.h" #include "skia/ext/image_operations.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/public/web/web_console_message.h" #include "third_party/blink/public/web/web_document.h" @@ -157,7 +153,6 @@ web_cache::WebCacheImpl* web_cache_impl) : content::RenderFrameObserver(render_frame), translate_agent_(nullptr), - phishing_classifier_(nullptr), web_cache_impl_(web_cache_impl) { render_frame->GetAssociatedInterfaceRegistry()->AddInterface( base::Bind(&ChromeRenderFrameObserver::OnRenderFrameObserverRequest,
diff --git a/chrome/renderer/chrome_render_frame_observer.h b/chrome/renderer/chrome_render_frame_observer.h index b163935..fc2ecc2 100644 --- a/chrome/renderer/chrome_render_frame_observer.h +++ b/chrome/renderer/chrome_render_frame_observer.h
@@ -5,11 +5,15 @@ #ifndef CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_ #define CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_ +#include <string> +#include <vector> + #include "base/macros.h" #include "base/timer/timer.h" #include "build/build_config.h" #include "chrome/common/chrome_render_frame.mojom.h" #include "chrome/common/prerender_types.h" +#include "components/safe_browsing/buildflags.h" #include "content/public/renderer/render_frame_observer.h" #include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" @@ -76,11 +80,6 @@ // IPC handlers void OnSetIsPrerendering(prerender::PrerenderMode mode, const std::string& histogram_prefix); - void OnRequestThumbnailForContextNode( - int thumbnail_min_area_pixels, - const gfx::Size& thumbnail_max_size_pixels, - int callback_id); - void OnSetClientSidePhishingDetection(bool enable_phishing_detection); // chrome::mojom::ChromeRenderFrame: void SetWindowFeatures( @@ -110,12 +109,11 @@ // TODO(dglazkov): This is incompatible with OOPIF and needs to be updated. void CapturePageText(TextCaptureType capture_type); - void CapturePageTextLater(TextCaptureType capture_type, - base::TimeDelta delay); - // Have the same lifetime as us. translate::TranslateAgent* translate_agent_; - safe_browsing::PhishingClassifierDelegate* phishing_classifier_; +#if BUILDFLAG(SAFE_BROWSING_CSD) + safe_browsing::PhishingClassifierDelegate* phishing_classifier_ = nullptr; +#endif // Owned by ChromeContentRendererClient and outlive us. web_cache::WebCacheImpl* web_cache_impl_;
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc index cc8cdbcd..9b9af48 100644 --- a/chrome/renderer/searchbox/searchbox_extension.cc +++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -455,6 +455,7 @@ dict.SetStringKey("inlineAutocompletion", match->inline_autocompletion); dict.SetBoolKey("isSearchType", match->is_search_type); dict.SetStringKey("fillIntoEdit", match->fill_into_edit); + dict.SetStringKey("iconUrl", match->icon_url); dict.SetStringKey("imageDominantColor", match->image_dominant_color); dict.SetStringKey("imageUrl", match->image_url); dict.SetBoolKey("swapContentsAndDescription",
diff --git a/chrome/services/app_service/public/cpp/preferred_apps_list.cc b/chrome/services/app_service/public/cpp/preferred_apps_list.cc index 1305578..e2efac81 100644 --- a/chrome/services/app_service/public/cpp/preferred_apps_list.cc +++ b/chrome/services/app_service/public/cpp/preferred_apps_list.cc
@@ -52,6 +52,38 @@ return replaced_app_preferences; } +// static +void PreferredAppsList::DeletePreferredApp( + const std::string& app_id, + const apps::mojom::IntentFilterPtr& intent_filter, + PreferredApps* preferred_apps) { + // Go through the list and see if there are overlapped intent filters with the + // same app id in the list. If there are, delete the entry. + auto iter = preferred_apps->begin(); + while (iter != preferred_apps->end()) { + if ((*iter)->app_id == app_id && + apps_util::FiltersHaveOverlap((*iter)->intent_filter, intent_filter)) { + iter = preferred_apps->erase(iter); + } else { + iter++; + } + } +} + +// static +void PreferredAppsList::DeleteAppId(const std::string& app_id, + PreferredApps* preferred_apps) { + auto iter = preferred_apps->begin(); + // Go through the list and delete the entry with requested app_id. + while (iter != preferred_apps->end()) { + if ((*iter)->app_id == app_id) { + iter = preferred_apps->erase(iter); + } else { + iter++; + } + } +} + base::Optional<std::string> PreferredAppsList::FindPreferredAppForIntent( const apps::mojom::IntentPtr& intent) { base::Optional<std::string> best_match_app_id = base::nullopt; @@ -82,4 +114,14 @@ return AddPreferredApp(app_id, intent_filter, &preferred_apps_); } +void PreferredAppsList::DeletePreferredApp( + const std::string& app_id, + const apps::mojom::IntentFilterPtr& intent_filter) { + DeletePreferredApp(app_id, intent_filter, &preferred_apps_); +} + +void PreferredAppsList::DeleteAppId(const std::string& app_id) { + DeleteAppId(app_id, &preferred_apps_); +} + } // namespace apps
diff --git a/chrome/services/app_service/public/cpp/preferred_apps_list.h b/chrome/services/app_service/public/cpp/preferred_apps_list.h index d5d304b..7e6bdd8d 100644 --- a/chrome/services/app_service/public/cpp/preferred_apps_list.h +++ b/chrome/services/app_service/public/cpp/preferred_apps_list.h
@@ -27,6 +27,7 @@ PreferredAppsList& operator=(const PreferredAppsList&) = delete; using PreferredApps = std::vector<apps::mojom::PreferredAppPtr>; + // Add a preferred app for an |intent_filter| for |preferred_apps|. // Returns the preferred app and their corresponding |intent_filters| that are // replaced by this action. @@ -35,6 +36,17 @@ const apps::mojom::IntentFilterPtr& intent_filter, PreferredApps* preferred_apps); + // Delete a preferred app for an |intent_filter| with the same |app_id| for + // |preferred_apps|. + static void DeletePreferredApp( + const std::string& app_id, + const apps::mojom::IntentFilterPtr& intent_filter, + PreferredApps* preferred_apps); + + // Delete all settings for an |app_id|. + static void DeleteAppId(const std::string& app_id, + PreferredApps* preferred_apps); + // Find preferred app id for an |intent|. base::Optional<std::string> FindPreferredAppForIntent( const apps::mojom::IntentPtr& intent); @@ -49,6 +61,13 @@ const std::string& app_id, const apps::mojom::IntentFilterPtr& intent_filter); + // Delete a preferred app for an |intent_filter| with the same |app_id|. + void DeletePreferredApp(const std::string& app_id, + const apps::mojom::IntentFilterPtr& intent_filter); + + // Delete all settings for an |app_id|. + void DeleteAppId(const std::string& app_id); + private: PreferredApps preferred_apps_; };
diff --git a/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc b/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc index d6f4e68..0f8a2d2 100644 --- a/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc +++ b/chrome/services/app_service/public/cpp/preferred_apps_list_unittest.cc
@@ -295,3 +295,291 @@ EXPECT_TRUE(entry != replaced_app_preferences->replaced_preference.end()); EXPECT_EQ(1u, entry->second.size()); } + +// Test that for a single preferred app with URL filter, we can delete +// the preferred app id. +TEST_F(PreferredAppListTest, DeletePreferredAppForURL) { + GURL filter_url = GURL("https://www.google.com/abc"); + auto intent_filter = apps_util::CreateIntentFilterForUrlScope(filter_url); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url)); + + // If try to delete with wrong ID, won't delete. + preferred_apps_.DeletePreferredApp(kAppId2, intent_filter); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url)); + + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(filter_url)); +} + +// Test for preferred app with filter that does not have all condition +// types. E.g. delete preferred app with intent filter that only have scheme. +TEST_F(PreferredAppListTest, DeleteForTopLayerFilters) { + auto intent_filter = apps_util::CreateSchemeOnlyFilter("tel"); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter); + + GURL url_in_scope = GURL("tel://1234556/"); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_in_scope)); + + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(url_in_scope)); +} + +// Test that we can properly delete for filters that has multiple +// condition values for a condition type. +TEST_F(PreferredAppListTest, DeleteMultipleConditionValues) { + auto intent_filter = + apps_util::CreateIntentFilterForUrlScope(GURL("https://www.google.com/")); + intent_filter->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue("http", + apps::mojom::PatternMatchType::kNone)); + + preferred_apps_.AddPreferredApp(kAppId1, intent_filter); + + GURL url_https = GURL("https://www.google.com/"); + GURL url_http = GURL("http://www.google.com/"); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_https)); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_http)); + + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_https)); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_http)); +} + +// Test for more than one pattern available, we can delete the filter. +TEST_F(PreferredAppListTest, DeleteDifferentPatterns) { + auto intent_filter_literal = + CreatePatternFilter("/bc", apps::mojom::PatternMatchType::kLiteral); + auto intent_filter_prefix = + CreatePatternFilter("/a", apps::mojom::PatternMatchType::kPrefix); + auto intent_filter_glob = + CreatePatternFilter("/c.*d", apps::mojom::PatternMatchType::kGlob); + + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_literal); + preferred_apps_.AddPreferredApp(kAppId2, intent_filter_prefix); + preferred_apps_.AddPreferredApp(kAppId3, intent_filter_glob); + + GURL url_1 = GURL("https://www.google.com/bc"); + GURL url_2 = GURL("https://www.google.com/abbb"); + GURL url_3 = GURL("https://www.google.com/ccccccd"); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_1)); + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(url_2)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(url_3)); + + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter_literal); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_1)); + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(url_2)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(url_3)); + preferred_apps_.DeletePreferredApp(kAppId2, intent_filter_prefix); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_2)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(url_3)); + preferred_apps_.DeletePreferredApp(kAppId3, intent_filter_glob); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_3)); +} + +// Test that can delete properly for super set filters. E.g. the filter +// to delete has more condition values compare with filter that was set. +TEST_F(PreferredAppListTest, DeleteForNotCompletedFilter) { + auto intent_filter_set = + apps_util::CreateIntentFilterForUrlScope(GURL("https://www.google.com/")); + + auto intent_filter_to_delete = + apps_util::CreateIntentFilterForUrlScope(GURL("http://www.google.com/")); + intent_filter_to_delete->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue("https", + apps::mojom::PatternMatchType::kNone)); + + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_set); + + GURL url = GURL("https://www.google.com/"); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url)); + + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter_to_delete); + + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url)); +} + +// Test that when there are more than one entry has overlap filter. +TEST_F(PreferredAppListTest, DeleteOverlapFilters) { + GURL filter_url_1 = GURL("https://www.google.com/abc"); + GURL filter_url_2 = GURL("http://www.google.com.au/abc"); + GURL filter_url_3 = GURL("https://www.abc.com/abc"); + GURL filter_url_4 = GURL("http://www.example.com/abc"); + + // Filter 1 handles url 1 and 2. + auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1); + intent_filter_1->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_2.scheme(), + apps::mojom::PatternMatchType::kNone)); + intent_filter_1->conditions[1]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_2.host(), + apps::mojom::PatternMatchType::kNone)); + + // Filter 2 handles url 2 and 3. + auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_3); + intent_filter_2->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_2.scheme(), + apps::mojom::PatternMatchType::kNone)); + intent_filter_2->conditions[1]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_2.host(), + apps::mojom::PatternMatchType::kNone)); + + // Filter 3 handles url 3 and 4. + auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3); + intent_filter_3->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_4.scheme(), + apps::mojom::PatternMatchType::kNone)); + intent_filter_3->conditions[1]->condition_values.push_back( + apps_util::MakeConditionValue(filter_url_4.host(), + apps::mojom::PatternMatchType::kNone)); + + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_3); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_4)); + + // Filter 2 has overlap with both filter 1 and 3, delete this should remove + // all entries. + preferred_apps_.DeletePreferredApp(kAppId1, intent_filter_2); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_4)); +} + +// Test that DeleteAppId() can delete the setting for one filter. +TEST_F(PreferredAppListTest, DeleteAppIdForOneFilter) { + GURL filter_url = GURL("https://www.google.com/abc"); + auto intent_filter = apps_util::CreateIntentFilterForUrlScope(filter_url); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url)); + + preferred_apps_.DeleteAppId(kAppId1); + + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(filter_url)); +} + +// Test that when multiple filters set to the same app id, DeleteAppId() can +// delete all of them. +TEST_F(PreferredAppListTest, DeleteAppIdForMultipleFilters) { + GURL filter_url_1 = GURL("https://www.google.com/abc"); + auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + + GURL filter_url_2 = GURL("https://www.abc.com/google"); + auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_2); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_2); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + + GURL filter_url_3 = GURL("tel://12345678/"); + auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_3); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + + preferred_apps_.DeleteAppId(kAppId1); + + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_3)); +} + +// Test that for filter with multiple condition values, DeleteAppId() can +// delete them all. +TEST_F(PreferredAppListTest, DeleteAppIdForMultipleConditionValues) { + auto intent_filter = + apps_util::CreateIntentFilterForUrlScope(GURL("https://www.google.com/")); + intent_filter->conditions[0]->condition_values.push_back( + apps_util::MakeConditionValue("http", + apps::mojom::PatternMatchType::kNone)); + + preferred_apps_.AddPreferredApp(kAppId1, intent_filter); + + GURL url_https = GURL("https://www.google.com/"); + GURL url_http = GURL("http://www.google.com/"); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_https)); + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(url_http)); + + preferred_apps_.DeleteAppId(kAppId1); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_https)); + EXPECT_EQ(base::nullopt, preferred_apps_.FindPreferredAppForUrl(url_http)); +} + +// Test that for multiple filters set to different app ids, DeleteAppId() only +// deletes the correct app id. +TEST_F(PreferredAppListTest, DeleteAppIdForMultipleAppIds) { + GURL filter_url_1 = GURL("https://www.google.com/abc"); + auto intent_filter_1 = apps_util::CreateIntentFilterForUrlScope(filter_url_1); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_1); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + + GURL filter_url_2 = GURL("https://www.abc.com/google"); + auto intent_filter_2 = apps_util::CreateIntentFilterForUrlScope(filter_url_2); + preferred_apps_.AddPreferredApp(kAppId1, intent_filter_2); + + EXPECT_EQ(kAppId1, preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + + GURL filter_url_3 = GURL("tel://12345678/"); + auto intent_filter_3 = apps_util::CreateIntentFilterForUrlScope(filter_url_3); + preferred_apps_.AddPreferredApp(kAppId2, intent_filter_3); + + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + + GURL filter_url_4 = GURL("https://www.google.com.au/"); + auto intent_filter_4 = apps_util::CreateIntentFilterForUrlScope(filter_url_4); + preferred_apps_.AddPreferredApp(kAppId2, intent_filter_4); + + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_4)); + + GURL filter_url_5 = GURL("https://www.example.com/google"); + auto intent_filter_5 = apps_util::CreateIntentFilterForUrlScope(filter_url_5); + preferred_apps_.AddPreferredApp(kAppId3, intent_filter_5); + + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5)); + + GURL filter_url_6 = GURL("tel://98765432/"); + auto intent_filter_6 = apps_util::CreateIntentFilterForUrlScope(filter_url_6); + preferred_apps_.AddPreferredApp(kAppId3, intent_filter_6); + + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6)); + + preferred_apps_.DeleteAppId(kAppId1); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_1)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_2)); + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + EXPECT_EQ(kAppId2, preferred_apps_.FindPreferredAppForUrl(filter_url_4)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6)); + preferred_apps_.DeleteAppId(kAppId2); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_3)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_4)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_5)); + EXPECT_EQ(kAppId3, preferred_apps_.FindPreferredAppForUrl(filter_url_6)); + preferred_apps_.DeleteAppId(kAppId3); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_5)); + EXPECT_EQ(base::nullopt, + preferred_apps_.FindPreferredAppForUrl(filter_url_6)); +}
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 95d19b4b..86789d5 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -344,7 +344,6 @@ "../browser/ui/views/web_apps/web_app_frame_toolbar_test.h", "views/accessibility_checker.cc", "views/accessibility_checker.h", - "views/chrome_test_views_delegate.cc", "views/chrome_test_views_delegate.h", "views/chrome_views_test_base.cc", "views/chrome_views_test_base.h", @@ -447,17 +446,10 @@ "//media/test/data/bear-1280x720.mp4", ] - # For pixel_test and maps_pixel_test. Because this links to a CIPD - # dependency, which is a symlink on Unix platforms, refer to the - # actual executable rather than the whole directory; copying the - # whole directory doesn't work, at least with "mb.py zip". - if (is_win) { - data += [ "//tools/skia_goldctl/win/goldctl.exe" ] - } else if (is_mac) { - data += [ "//tools/skia_goldctl/mac/goldctl" ] - } else { - data += [ "//tools/skia_goldctl/linux/goldctl" ] - } + data_deps = [ + # For anything using Skia Gold (pixel, maps). + "//ui/base:goldctl", + ] } if (is_win) { @@ -2052,18 +2044,6 @@ [ "//chrome/browser/internal/resources/signin/test_accounts.json" ] } - # For pixel tests. Because this links to a CIPD - # dependency, which is a symlink on Unix platforms, refer to the - # actual executable rather than the whole directory; copying the - # whole directory doesn't work, at least with "mb.py zip". - if (is_win) { - data += [ "//tools/skia_goldctl/win/goldctl.exe" ] - } else if (is_mac) { - data += [ "//tools/skia_goldctl/mac/goldctl" ] - } else { - data += [ "//tools/skia_goldctl/linux/goldctl" ] - } - if (is_chromeos) { sources += [ "../browser/apps/platform_apps/app_window_interactive_uitest_base.cc", @@ -3469,7 +3449,6 @@ "../browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc", "../browser/ui/webui/local_state/local_state_ui_unittest.cc", "../browser/ui/webui/log_web_ui_url_unittest.cc", - "../browser/upboarding/query_tiles/cached_image_loader_unittest.cc", "../browser/update_client/chrome_update_query_params_delegate_unittest.cc", "../browser/vr/metrics/session_tracker_unittest.cc", "../browser/vr/vr_tab_helper_unittest.cc", @@ -3562,6 +3541,7 @@ if (!is_android) { sources += [ + "../browser/device_identity/device_oauth2_token_service_unittest.cc", "../browser/profiles/profile_avatar_icon_util_unittest.cc", "../browser/sharing/webrtc/sharing_service_host_unittest.cc", "../browser/sharing/webrtc/sharing_webrtc_connection_host_unittest.cc", @@ -3589,7 +3569,7 @@ } if (is_chromeos) { sources += [ - "../browser/device_identity/device_oauth2_token_service_unittest.cc", + "../browser/device_identity/chromeos/device_oauth2_token_store_chromeos_unittest.cc", "../browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils_unittest.cc", "../browser/ui/webui/chromeos/edu_account_login_handler_unittest.cc", "../renderer/chromeos_delayed_callback_group_unittest.cc", @@ -5261,6 +5241,7 @@ } if (!is_android && !is_chromeos) { sources += [ + "../browser/device_identity/device_oauth2_token_store_desktop_unittest.cc", "../browser/media/webrtc/native_desktop_media_list_unittest.cc", "../browser/metrics/upgrade_metrics_provider_unittest.cc", "../browser/policy/chrome_browser_cloud_management_register_watcher_unittest.cc", @@ -6736,12 +6717,8 @@ deps = [ ":browser_tests_runner", ":test_support", + "//ui/base:pixel_diff_test_support", ] - if (is_win) { - data = [ "//tools/skia_goldctl/goldctl.exe" ] - } else { - data = [ "//tools/skia_goldctl/goldctl" ] - } if (!is_mac) { data_deps = [ "//chrome:packed_resources" ] }
diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc index 8b312be..de9b6c04 100644 --- a/chrome/test/base/browser_with_test_window_test.cc +++ b/chrome/test/base/browser_with_test_window_test.cc
@@ -25,19 +25,16 @@ #include "content/public/test/navigation_simulator.h" #include "content/public/test/test_renderer_host.h" #include "ui/base/page_transition_types.h" -#include "ui/views/test/test_views_delegate.h" #if defined(TOOLKIT_VIEWS) #include "chrome/browser/ui/views/chrome_constrained_window_views_client.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" +#include "chrome/test/views/chrome_test_views_delegate.h" #include "components/constrained_window/constrained_window_views.h" #if defined(OS_CHROMEOS) #include "ash/test/ash_test_views_delegate.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "content/public/browser/context_factory.h" -#else -#include "ui/views/test/test_views_delegate.h" #endif #endif @@ -51,9 +48,12 @@ void BrowserWithTestWindowTest::SetUp() { testing::Test::SetUp(); #if defined(OS_CHROMEOS) + test_views_delegate_ = + std::make_unique<ChromeTestViewsDelegate<ash::AshTestViewsDelegate>>(); ash_test_helper_.SetUp(); #elif defined(TOOLKIT_VIEWS) - views_test_helper_.reset(new views::ScopedViewsTestHelper()); + views_test_helper_.reset(new views::ScopedViewsTestHelper( + std::make_unique<ChromeTestViewsDelegate<>>())); #endif // This must be created after ash_test_helper_ is set up so that it doesn't @@ -62,9 +62,6 @@ #if defined(TOOLKIT_VIEWS) SetConstrainedWindowViewsClient(CreateChromeConstrainedWindowViewsClient()); - - test_views_delegate()->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); #endif profile_manager_ = std::make_unique<TestingProfileManager>( @@ -113,6 +110,7 @@ // as part of the teardown will avoid unexpected test failures. chromeos::KioskAppManager::Shutdown(); + test_views_delegate_.reset(); ash_test_helper_.TearDown(); #elif defined(TOOLKIT_VIEWS) views_test_helper_.reset();
diff --git a/chrome/test/base/browser_with_test_window_test.h b/chrome/test/base/browser_with_test_window_test.h index 4fed95c..b9f0f34 100644 --- a/chrome/test/base/browser_with_test_window_test.h +++ b/chrome/test/base/browser_with_test_window_test.h
@@ -186,7 +186,7 @@ #if defined(TOOLKIT_VIEWS) views::TestViewsDelegate* test_views_delegate() { #if defined(OS_CHROMEOS) - return ash_test_helper_.test_views_delegate(); + return test_views_delegate_.get(); #else return views_test_helper_->test_views_delegate(); #endif @@ -226,6 +226,7 @@ #if defined(OS_CHROMEOS) ash::AshTestHelper ash_test_helper_; + std::unique_ptr<views::TestViewsDelegate> test_views_delegate_; #elif defined(TOOLKIT_VIEWS) std::unique_ptr<views::ScopedViewsTestHelper> views_test_helper_; #endif
diff --git a/chrome/test/base/chrome_ash_test_base.cc b/chrome/test/base/chrome_ash_test_base.cc index d3b3dfd0..feb341e 100644 --- a/chrome/test/base/chrome_ash_test_base.cc +++ b/chrome/test/base/chrome_ash_test_base.cc
@@ -4,7 +4,12 @@ #include "chrome/test/base/chrome_ash_test_base.h" +#include <memory> + +#include "content/public/test/browser_task_environment.h" + ChromeAshTestBase::ChromeAshTestBase() - : ash::AshTestBase(ash::AshTestBase::SubclassManagesTaskEnvironment()) {} + : ash::AshTestBase(std::unique_ptr<base::test::TaskEnvironment>( + std::make_unique<content::BrowserTaskEnvironment>())) {} ChromeAshTestBase::~ChromeAshTestBase() = default;
diff --git a/chrome/test/base/chrome_ash_test_base.h b/chrome/test/base/chrome_ash_test_base.h index 49711f7a..efb8a05 100644 --- a/chrome/test/base/chrome_ash_test_base.h +++ b/chrome/test/base/chrome_ash_test_base.h
@@ -6,7 +6,6 @@ #define CHROME_TEST_BASE_CHROME_ASH_TEST_BASE_H_ #include "ash/test/ash_test_base.h" -#include "content/public/test/browser_task_environment.h" // AshTestBase used in Chrome. // TODO(crbug.com/890677): Chrome should not have tests subclassing @@ -14,12 +13,9 @@ class ChromeAshTestBase : public ash::AshTestBase { public: ChromeAshTestBase(); + ChromeAshTestBase(const ChromeAshTestBase&) = delete; + ChromeAshTestBase& operator=(const ChromeAshTestBase&) = delete; ~ChromeAshTestBase() override; - - private: - content::BrowserTaskEnvironment task_environment_; - - DISALLOW_COPY_AND_ASSIGN(ChromeAshTestBase); }; #endif // CHROME_TEST_BASE_CHROME_ASH_TEST_BASE_H_
diff --git a/chrome/test/chromedriver/OWNERS b/chrome/test/chromedriver/OWNERS index 2ec87fa9..b5f3ea5 100644 --- a/chrome/test/chromedriver/OWNERS +++ b/chrome/test/chromedriver/OWNERS
@@ -1,6 +1,5 @@ # primary reviewer johnchen@chromium.org -crouleau@chromium.org # backup reviewer jbudorick@chromium.org
diff --git a/chrome/test/chromedriver/server/chromedriver_server.cc b/chrome/test/chromedriver/server/chromedriver_server.cc index 00f0c89..107aae6 100644 --- a/chrome/test/chromedriver/server/chromedriver_server.cc +++ b/chrome/test/chromedriver/server/chromedriver_server.cc
@@ -447,6 +447,8 @@ printf("Unable to start server with either IPv4 or IPv6. Exiting...\n"); exit(1); } + printf("%s was started successfully.\n", kChromeDriverProductShortName); + fflush(stdout); } void RunServer(uint16_t port,
diff --git a/chrome/test/data/extensions/api_test/autofill_assistant_private/test.js b/chrome/test/data/extensions/api_test/autofill_assistant_private/test.js index 19a0b10..3c7590f 100644 --- a/chrome/test/data/extensions/api_test/autofill_assistant_private/test.js +++ b/chrome/test/data/extensions/api_test/autofill_assistant_private/test.js
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -const expectedMessages = ['Opening localhost…', 'This is a test status.']; +const expectedMessages = ['Opening version…', 'This is a test status.']; function actionsChangedListener(actions) { chrome.test.assertEq(2, actions.length);
diff --git a/chrome/test/data/extensions/api_test/networking_config/OWNERS b/chrome/test/data/extensions/api_test/networking_config/OWNERS index e7295133..87bd7ef 100644 --- a/chrome/test/data/extensions/api_test/networking_config/OWNERS +++ b/chrome/test/data/extensions/api_test/networking_config/OWNERS
@@ -1,4 +1,4 @@ stevenjb@chromium.org emaxx@chromium.org -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html index d8a1fb6..9579427 100644 --- a/chrome/test/data/local_ntp/local_ntp_browsertest.html +++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -70,8 +70,7 @@ <div id="realbox-container"> <div id="realbox-input-wrapper"> - <div id="realbox-icon" class="search-icon" - data-realbox-icon-class="search-icon"></div> + <div id="realbox-icon" data-default-icon="search"></div> <input id="realbox" type="search" autocomplete="off" spellcheck="false" autofocus> <button id="realbox-microphone" class="microphone-icon" hidden>
diff --git a/chrome/test/data/local_ntp/realbox_browsertest.js b/chrome/test/data/local_ntp/realbox_browsertest.js index e0db699..068f5fdd 100644 --- a/chrome/test/data/local_ntp/realbox_browsertest.js +++ b/chrome/test/data/local_ntp/realbox_browsertest.js
@@ -21,9 +21,9 @@ * @const */ test.realbox.CLASSES = { - CLOCK_ICON: 'clock-icon', HAS_IMAGE: 'has-image', IMAGE_CONTAINER: 'image-container', + MATCH_ICON: 'match-icon', MATCH_IMAGE: 'match-image', REMOVABLE: 'removable', REMOVE_ICON: 'remove-icon', @@ -31,11 +31,35 @@ SHOW_MATCHES: 'show-matches', }; +test.realbox.CONSTANTS = { + CLOCK_ICON: 'clock', + PAGE_ICON: 'page', + SEARCH_ICON: 'search', +}; + /** @return {boolean} */ test.realbox.areMatchesShowing = function() { return test.realbox.wrapperEl.classList.contains( test.realbox.CLASSES.SHOW_MATCHES); -} +}; + +/** + * @param {!Element} element + * @param {string} dataUrl + */ +test.realbox.assertBackgroundImageIcon = function(element, dataUrl) { + assertEquals(test.realbox.cssUrl(dataUrl), element.style.backgroundImage); + assertEquals('', element.style.webkitMaskImage); +}; + +/** + * @param {!Element} element + * @param {string} iconUrl + */ +test.realbox.assertWebkitMaskIcon = function(element, iconUrl) { + assertEquals('', element.style.backgroundImage); + assertEquals(test.realbox.cssUrl(iconUrl), element.style.webkitMaskImage); +}; /** * @param {string} name @@ -109,6 +133,14 @@ modifiers); }; +/** + * @param {string} url an absolute, relative, or a data URL. + * @return {string} the input wrapped in a url() CSS function. + */ +test.realbox.cssUrl = function(url) { + return 'url("' + url + '")'; +}; + /** @type {!Array<number>} */ test.realbox.deletedLines; @@ -1041,7 +1073,8 @@ chrome.embeddedSearch.searchBox.autocompleteresultchanged({ input: test.realbox.queries[0].input, - matches: [test.realbox.getSearchMatch()], + matches: [test.realbox.getSearchMatch( + {iconUrl: test.realbox.CONSTANTS.CLOCK_ICON})], }); assertTrue(test.realbox.areMatchesShowing()); @@ -1057,6 +1090,12 @@ assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); assertEquals('hello world', test.realbox.realboxEl.value); + // The first match is a historical search match and therefore will load a + // clock icon via webkit-mask in #realbox-icon. + const realboxIcon = $(test.realbox.IDS.REALBOX_ICON); + test.realbox.assertWebkitMaskIcon( + realboxIcon, test.realbox.CONSTANTS.CLOCK_ICON); + test.realbox.realboxEl.dispatchEvent(new Event('focusout', { bubbles: true, cancelable: true, @@ -1064,8 +1103,12 @@ relatedTarget: document.body, })); + // Focusing out should clear/hide matches but leave the input and the icon in + // #realbox-icon intact. assertFalse(test.realbox.areMatchesShowing()); assertEquals('hello world', test.realbox.realboxEl.value); + test.realbox.assertWebkitMaskIcon( + realboxIcon, test.realbox.CONSTANTS.CLOCK_ICON); }; test.realbox4.testInputAfterFocusoutZeroPrefixMatches = function() { @@ -1076,7 +1119,8 @@ chrome.embeddedSearch.searchBox.autocompleteresultchanged({ input: test.realbox.queries[0].input, - matches: [test.realbox.getSearchMatch()], + matches: [test.realbox.getSearchMatch( + {iconUrl: test.realbox.CONSTANTS.CLOCK_ICON})], }); assertTrue(test.realbox.areMatchesShowing()); @@ -1092,6 +1136,12 @@ assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); assertEquals('hello world', test.realbox.realboxEl.value); + // The first match is a historical search match and therefore will load a + // clock icon via webkit-mask in #realbox-icon. + const realboxIcon = $(test.realbox.IDS.REALBOX_ICON); + test.realbox.assertWebkitMaskIcon( + realboxIcon, test.realbox.CONSTANTS.CLOCK_ICON); + test.realbox.realboxEl.dispatchEvent(new Event('focusout', { bubbles: true, cancelable: true, @@ -1099,8 +1149,12 @@ relatedTarget: document.body, })); + // Focusing out should clear/hide matches, clear the input and restore the + // default search icon in #realbox-icon. assertFalse(test.realbox.areMatchesShowing()); assertEquals('', test.realbox.realboxEl.value); + test.realbox.assertWebkitMaskIcon( + realboxIcon, test.realbox.CONSTANTS.SEARCH_ICON); }; test.realbox4.testArrowUpDownShowsMatchesWhenHidden = function() { @@ -1200,9 +1254,18 @@ assertEquals(3, test.realbox.opens.length); }; -test.realbox4.testRealboxIconZeroSuggest = function() { +test.realbox4.testMatchIconAndRealboxIconZeroPrefix = function() { + const CLOCK_ICON = test.realbox.CONSTANTS.CLOCK_ICON; + const PAGE_ICON = test.realbox.CONSTANTS.PAGE_ICON; + const SEARCH_ICON = test.realbox.CONSTANTS.SEARCH_ICON; + const assertBackgroundImageIcon = test.realbox.assertBackgroundImageIcon; + const assertWebkitMaskIcon = test.realbox.assertWebkitMaskIcon; + const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC='; + const destinationUrl = 'http://example.com/'; + const cssUrl = test.realbox.cssUrl; + const realboxIcon = $(test.realbox.IDS.REALBOX_ICON); - assertFalse(!!realboxIcon.style.backgroundImage); + assertWebkitMaskIcon(realboxIcon, test.realbox.CONSTANTS.SEARCH_ICON); // Trigger zero suggest querying autocomplete. test.realbox.realboxEl.onmousedown(test.realbox.trustedEventFacade( @@ -1212,32 +1275,35 @@ chrome.embeddedSearch.searchBox.autocompleteresultchanged({ input: test.realbox.realboxEl.value, matches: [ - test.realbox.getSearchMatch({allowedToBeDefaultMatch: false}), - test.realbox.getUrlMatch(), + test.realbox.getSearchMatch( + {allowedToBeDefaultMatch: false, iconUrl: CLOCK_ICON}), + test.realbox.getSearchMatch({iconUrl: SEARCH_ICON}), + test.realbox.getUrlMatch({iconUrl: PAGE_ICON, destinationUrl}), ], }); - // Zero suggest matches should be showing but no selection nor icon should be - // present. + // Matches should be showing but none should be selected. Therefore the + // default search icon in #realbox-icon should remain intact. assertTrue(test.realbox.areMatchesShowing()); - const matchEls = $(test.realbox.IDS.REALBOX_MATCHES).children; - assertEquals(2, matchEls.length); + assertEquals(3, matchEls.length); assertFalse(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); - assertFalse(!!realboxIcon.style.backgroundImage); + assertWebkitMaskIcon(realboxIcon, test.realbox.CONSTANTS.SEARCH_ICON); - const arrowDown = new KeyboardEvent('keydown', { + // Arrow down should create a selection. + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowDown', - }); - test.realbox.realboxEl.dispatchEvent(arrowDown); - assertTrue(arrowDown.defaultPrevented); + })); - // Arrow down should create a selection. Because the first item is a search - // match, it shouldn't change the realbox icon (as it's search by default). + // The first match is a historical search match and therefore will load a + // clock icon via webkit-mask in .match-icon and #realbox-icon. assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); - assertFalse(!!realboxIcon.style.backgroundImage); + let matchIconEl = + matchEls[0].getElementsByClassName(test.realbox.CLASSES.MATCH_ICON)[0]; + assertWebkitMaskIcon(matchIconEl, CLOCK_ICON); + assertWebkitMaskIcon(realboxIcon, CLOCK_ICON); test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, @@ -1245,15 +1311,79 @@ key: 'ArrowDown', })); - // The second item is a URL and therefore should attempt to load the URL's - // favicon via background-image on #realbox-icon. + // The second match is a historical search match and therefore will load a + // search icon via webkit-mask in .match-icon and #realbox-icon. assertTrue(matchEls[1].classList.contains(test.realbox.CLASSES.SELECTED)); - assertTrue(!!realboxIcon.style.backgroundImage); + matchIconEl = + matchEls[1].getElementsByClassName(test.realbox.CLASSES.MATCH_ICON)[0]; + assertWebkitMaskIcon(matchIconEl, SEARCH_ICON); + assertWebkitMaskIcon(realboxIcon, SEARCH_ICON); + + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'ArrowDown', + })); + + // The third match is a URL match without a favicon and therefore will load a + // page icon via webkit-mask in .match-icon and #realbox-icon. + assertTrue(matchEls[2].classList.contains(test.realbox.CLASSES.SELECTED)); + matchIconEl = + matchEls[2].getElementsByClassName(test.realbox.CLASSES.MATCH_ICON)[0]; + assertWebkitMaskIcon(matchIconEl, PAGE_ICON); + assertWebkitMaskIcon(realboxIcon, PAGE_ICON); + + // The URL of the loaded favicon must match that of the autocomplete result at + // the given index. + chrome.embeddedSearch.searchBox.autocompletematchimageavailable( + 1, destinationUrl, dataUrl); + assertWebkitMaskIcon(realboxIcon, PAGE_ICON); + + chrome.embeddedSearch.searchBox.autocompletematchimageavailable( + 2, 'http://counterexample.com/', dataUrl); + assertWebkitMaskIcon(realboxIcon, PAGE_ICON); + + // Once the favicon for the third match is successfully loaded it will replace + // the webkit-mask with a background-image in .match-icon and #realbox-icon. + chrome.embeddedSearch.searchBox.autocompletematchimageavailable( + 2, destinationUrl, dataUrl); + assertBackgroundImageIcon(matchIconEl, dataUrl); + assertBackgroundImageIcon(realboxIcon, dataUrl); + + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'Escape', + })); + + // Pressing Escape should revert to first match and load a clock icon in + // #realbox-icon. + assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); + assertWebkitMaskIcon(realboxIcon, CLOCK_ICON); + + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'Escape', + })); + + // Escape again should clear/hide matches and restore the default search icon + // in #realbox-icon. + assertFalse(test.realbox.areMatchesShowing()); + assertWebkitMaskIcon(realboxIcon, SEARCH_ICON); }; -test.realbox4.testRealboxIconPrefixSearch = function() { +test.realbox4.testMatchAndRealboxIconPrefixSearch = function() { + const CLOCK_ICON = test.realbox.CONSTANTS.CLOCK_ICON; + const PAGE_ICON = test.realbox.CONSTANTS.PAGE_ICON; + const SEARCH_ICON = test.realbox.CONSTANTS.SEARCH_ICON; + const assertWebkitMaskIcon = test.realbox.assertWebkitMaskIcon; + const cssUrl = test.realbox.cssUrl; + const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC='; + const imageUrl = 'http://example.com/star.png'; + const realboxIcon = $(test.realbox.IDS.REALBOX_ICON); - assertFalse(!!realboxIcon.style.backgroundImage); + assertWebkitMaskIcon(realboxIcon, SEARCH_ICON); test.realbox.realboxEl.value = 'about'; test.realbox.realboxEl.dispatchEvent(new CustomEvent('input')); @@ -1261,121 +1391,91 @@ chrome.embeddedSearch.searchBox.autocompleteresultchanged({ input: test.realbox.realboxEl.value, matches: [ - test.realbox.getUrlMatch({allowedToBeDefaultMatch: true}), - test.realbox.getSearchMatch(), - test.realbox.getSearchMatch({type: 'search-history'}), + test.realbox.getUrlMatch( + {allowedToBeDefaultMatch: true, iconUrl: PAGE_ICON}), + test.realbox.getSearchMatch( + {iconUrl: CLOCK_ICON, imageUrl, imageDominantColor: '#757575'}), ], }); + + // Matches should be showing and the first match should be selected. The first + // match is a URL match and therefore will load a page icon via webkit-mask in + // .match-icon and #realbox-icon. assertTrue(test.realbox.areMatchesShowing()); - - // First URL match should be showing and the favicon should be in the realbox. - const matchEls = $(test.realbox.IDS.REALBOX_MATCHES).children; - assertEquals(3, matchEls.length); - assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); - assertTrue(!!realboxIcon.style.backgroundImage); - - const arrowDown = new KeyboardEvent('keydown', { - bubbles: true, - cancelable: true, - key: 'ArrowDown', - }); - test.realbox.realboxEl.dispatchEvent(arrowDown); - assertTrue(arrowDown.defaultPrevented); - - // Second search match should clear the favicon. - assertTrue(matchEls[1].classList.contains(test.realbox.CLASSES.SELECTED)); - assertFalse(!!realboxIcon.style.backgroundImage); - - test.realbox.realboxEl.dispatchEvent(arrowDown); - - // Third search match should change to clock icon. - assertTrue(matchEls[2].classList.contains(test.realbox.CLASSES.SELECTED)); - assertEquals(realboxIcon.className, test.realbox.CLASSES.CLOCK_ICON); - - const escapeToDefaultMatch = new KeyboardEvent('keydown', { - bubbles: true, - cancelable: true, - key: 'Escape', - }); - test.realbox.realboxEl.dispatchEvent(escapeToDefaultMatch); - assertTrue(escapeToDefaultMatch.defaultPrevented); - - // Pressing Escape should revert to first match (URL + icon in realbox). - assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); - assertTrue(!!realboxIcon.style.backgroundImage); - - const escapeToClear = new KeyboardEvent('keydown', { - bubbles: true, - cancelable: true, - key: 'Escape', - }); - test.realbox.realboxEl.dispatchEvent(escapeToClear); - assertTrue(escapeToClear.defaultPrevented); - - // Escape again should clear/hide matches and favicon. - assertFalse(test.realbox.areMatchesShowing()); - assertFalse(!!realboxIcon.style.backgroundImage); -}; - -test.realbox4.testEntityMatchImage = function() { - const imageUrl = 'http://example.com/star.png'; - const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC='; - - const realboxIcon = $(test.realbox.IDS.REALBOX_ICON); - assertFalse(!!realboxIcon.style.backgroundImage); - - test.realbox.realboxEl.value = 'star'; - test.realbox.realboxEl.dispatchEvent(new CustomEvent('input')); - - chrome.embeddedSearch.searchBox.autocompleteresultchanged({ - input: test.realbox.realboxEl.value, - matches: [ - test.realbox.getSearchMatch({ - allowedToBeDefaultMatch: true, - imageUrl, - imageDominantColor: '#757575' - }), - test.realbox.getSearchMatch(), - ], - }); - assertTrue(test.realbox.areMatchesShowing()); - - // The first match is selected but it doesn't change the realbox icon. const matchEls = $(test.realbox.IDS.REALBOX_MATCHES).children; assertEquals(2, matchEls.length); assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); - assertFalse(!!realboxIcon.style.backgroundImage); + matchIconEl = + matchEls[0].getElementsByClassName(test.realbox.CLASSES.MATCH_ICON)[0]; + assertWebkitMaskIcon(matchIconEl, PAGE_ICON); + assertWebkitMaskIcon(realboxIcon, PAGE_ICON); - // The first match is showing a placeholder color until the image loads. - assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.HAS_IMAGE)); - const imageContainerEl = matchEls[0].getElementsByClassName( + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'ArrowDown', + })); + + // The second match is a search match with an image and therefore will show a + // placeholder color in .image-container until the image loads. It also loads + // a clock icon via webkit-mask in #realbox-icon. + assertTrue(matchEls[1].classList.contains(test.realbox.CLASSES.SELECTED)); + assertTrue(matchEls[1].classList.contains(test.realbox.CLASSES.HAS_IMAGE)); + const imageContainerEl = matchEls[1].getElementsByClassName( test.realbox.CLASSES.IMAGE_CONTAINER)[0]; + assertEquals(0, imageContainerEl.children.length); assertEquals( 'rgba(117, 117, 117, 0.25)', imageContainerEl.style.backgroundColor); + assertWebkitMaskIcon(realboxIcon, CLOCK_ICON); // The URL of the loaded image must match that of the autocomplete result at // the given index. chrome.embeddedSearch.searchBox.autocompletematchimageavailable( - 1, imageUrl, dataUrl); - assertEquals(0, imageContainerEl.children.length); - assertEquals( - 'rgba(117, 117, 117, 0.25)', imageContainerEl.style.backgroundColor); - - chrome.embeddedSearch.searchBox.autocompletematchimageavailable( - 0, 'http://example.com/moon.png', dataUrl); - assertEquals(0, imageContainerEl.children.length); - assertEquals( - 'rgba(117, 117, 117, 0.25)', imageContainerEl.style.backgroundColor); - - // Once the image is successfully loaded it replaces the placeholder color. - chrome.embeddedSearch.searchBox.autocompletematchimageavailable( 0, imageUrl, dataUrl); + assertEquals(0, imageContainerEl.children.length); + assertEquals( + 'rgba(117, 117, 117, 0.25)', imageContainerEl.style.backgroundColor); + + chrome.embeddedSearch.searchBox.autocompletematchimageavailable( + 1, 'http://example.com/moon.png', dataUrl); + assertEquals(0, imageContainerEl.children.length); + assertEquals( + 'rgba(117, 117, 117, 0.25)', imageContainerEl.style.backgroundColor); + + // Once the image for the second match is successfully loaded it will replace + // the placeholder color in .image-container with a background-image but + // leaves the clock icon in #realbox-icon intact. + chrome.embeddedSearch.searchBox.autocompletematchimageavailable( + 1, imageUrl, dataUrl); assertEquals( dataUrl, imageContainerEl .getElementsByClassName(test.realbox.CLASSES.MATCH_IMAGE)[0] .src); assertEquals('transparent', imageContainerEl.style.backgroundColor); + assertWebkitMaskIcon(realboxIcon, CLOCK_ICON); + + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'Escape', + })); + + // Pressing Escape should revert to first match and load a page icon in + // #realbox-icon. + assertTrue(matchEls[0].classList.contains(test.realbox.CLASSES.SELECTED)); + assertWebkitMaskIcon(realboxIcon, PAGE_ICON); + + test.realbox.realboxEl.dispatchEvent(new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'Escape', + })); + + // Escape again should clear/hide matches and restore the default search icon + // in #realbox-icon. + assertFalse(test.realbox.areMatchesShowing()); + assertWebkitMaskIcon(realboxIcon, SEARCH_ICON); }; test.realbox4.testCharTypedToRepaintLatency = function() {
diff --git a/chrome/test/data/page_load_metrics/click_to_create_iframe.html b/chrome/test/data/page_load_metrics/click_to_create_iframe.html new file mode 100644 index 0000000..efb1a5ef --- /dev/null +++ b/chrome/test/data/page_load_metrics/click_to_create_iframe.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<body> + <script> + function createIframe() { + const iframe = document.createElement('iframe'); + iframe.src = `data:text/html, +<!DOCTYPE html> +<html> +<body> +<style> +p { + font-size: 40px; +} +</style> +<p> +This is bigger text than main frame content!!!! +</p> +</body> +</html>`; + document.body.appendChild(iframe); + } + </script> + <button id='button' onclick="createIframe()">A</button> +</body> +</html>
diff --git a/chrome/test/data/print_during_load_with_broken_pdf_then_navigate.html b/chrome/test/data/print_during_load_with_broken_pdf_then_navigate.html new file mode 100644 index 0000000..bfb8818d --- /dev/null +++ b/chrome/test/data/print_during_load_with_broken_pdf_then_navigate.html
@@ -0,0 +1,5 @@ +<embed src="404.pdf"></embed> +<script> +print(); +location = "/cross-site/b.com/simple.html"; +</script>
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index b501b40..992a20e6 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -240,6 +240,9 @@ "$root_gen_dir/chrome/test/data/webui/settings/passwords_export_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/passwords_section_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/payments_section_test.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/people_page_sync_controls_test.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/people_page_sync_page_test.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/people_page_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/pref_util_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/prefs_test_cases.m.js", "$root_gen_dir/chrome/test/data/webui/settings/prefs_tests.m.js", @@ -269,6 +272,7 @@ "$root_gen_dir/chrome/test/data/webui/settings/test_lifetime_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_open_window_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_password_manager_proxy.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/test_profile_info_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_reset_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_search_engines_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.m.js", @@ -289,6 +293,7 @@ "$root_gen_dir/chrome/test/data/webui/cr_elements/cr_searchable_drop_down_tests.m.js", "$root_gen_dir/chrome/test/data/webui/settings/site_list_tests_cros.m.js", "$root_gen_dir/chrome/test/data/webui/settings/passwords_section_test_cros.m.js", + "$root_gen_dir/chrome/test/data/webui/settings/people_page_test_cros.m.js", "$root_gen_dir/chrome/test/data/webui/settings/test_android_info_browser_proxy.m.js", ] } else {
diff --git a/chrome/test/data/webui/chromeos/edu_login/edu_login_browsertest.js b/chrome/test/data/webui/chromeos/edu_login/edu_login_browsertest.js index f31a071e..b9902da 100644 --- a/chrome/test/data/webui/chromeos/edu_login/edu_login_browsertest.js +++ b/chrome/test/data/webui/chromeos/edu_login/edu_login_browsertest.js
@@ -95,3 +95,36 @@ TEST_F('EduLoginParentsTest', 'SelectedParent', function() { this.runMochaTest(edu_login_parents_tests.TestNames.SelectedParent); }); + +var EduLoginParentSigninTest = class extends EduLoginTest { + /** @override */ + get browsePreload() { + return 'chrome://chrome-signin/test_loader.html?module=chromeos/edu_login/edu_login_parent_signin_test.js'; + } + + /** @override */ + get suiteName() { + return edu_login_parent_signin_tests.suiteName; + } +}; + +TEST_F('EduLoginParentSigninTest', 'Initialize', function() { + this.runMochaTest(edu_login_parent_signin_tests.TestNames.Initialize); +}); + +TEST_F('EduLoginParentSigninTest', 'WrongPassword', function() { + this.runMochaTest(edu_login_parent_signin_tests.TestNames.WrongPassword); +}); + +TEST_F('EduLoginParentSigninTest', 'ParentSigninSuccess', function() { + this.runMochaTest( + edu_login_parent_signin_tests.TestNames.ParentSigninSuccess); +}); + +TEST_F('EduLoginParentSigninTest', 'ShowHidePassword', function() { + this.runMochaTest(edu_login_parent_signin_tests.TestNames.ShowHidePassword); +}); + +TEST_F('EduLoginParentSigninTest', 'ClearState', function() { + this.runMochaTest(edu_login_parent_signin_tests.TestNames.ClearState); +});
diff --git a/chrome/test/data/webui/chromeos/edu_login/edu_login_parent_signin_test.js b/chrome/test/data/webui/chromeos/edu_login/edu_login_parent_signin_test.js new file mode 100644 index 0000000..fbb7973 --- /dev/null +++ b/chrome/test/data/webui/chromeos/edu_login/edu_login_parent_signin_test.js
@@ -0,0 +1,161 @@ +// Copyright 2020 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://chrome-signin/edu_login_parent_signin.js'; +import 'chrome://chrome-signin/edu_login_button.js'; + +import {EduAccountLoginBrowserProxyImpl} from 'chrome://chrome-signin/browser_proxy.js'; +import {ParentAccount} from 'chrome://chrome-signin/edu_login_util.js'; +import {assert} from 'chrome://resources/js/assert.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {TestBrowserProxy} from '../../test_browser_proxy.m.js'; +import {getFakeParent} from './edu_login_test_util.js'; + +window.edu_login_parent_signin_tests = {}; +edu_login_parent_signin_tests.suiteName = 'EduLoginParentSigninTest'; + +/** @enum {string} */ +edu_login_parent_signin_tests.TestNames = { + Initialize: 'Check page state on init', + WrongPassword: 'State after wrong password error', + ParentSigninSuccess: 'State after signin success', + ShowHidePassword: 'Icon shows/hides the password', + ClearState: 'State is cleared after back button click', +}; + +/** @type {ParentAccount} */ +const fakeParent = + getFakeParent('parent1@gmail.com', 'Parent 1', '', 'parent1gaia'); + +suite(edu_login_parent_signin_tests.suiteName, function() { + let parentSigninComponent; + let testBrowserProxy; + let passwordField; + + /** @implements {EduAccountLoginBrowserProxy} */ + class TestEduAccountLoginBrowserProxy extends TestBrowserProxy { + constructor() { + super(['parentSignin']); + /** @private {function} */ + this.parentSigninResponse_ = null; + } + + /** @param {function} parentSigninResponse */ + setParentSigninResponse(parentSigninResponse) { + this.parentSigninResponse_ = parentSigninResponse; + } + + /** @override */ + parentSignin(parent, password) { + this.methodCalled('parentSignin', parent, password); + return this.parentSigninResponse_(); + } + } + + /** @param {string} type */ + function clickButton(type) { + parentSigninComponent.$$(`edu-login-button[button-type="${type}"]`) + .$$('cr-button') + .click(); + } + + setup(function() { + testBrowserProxy = new TestEduAccountLoginBrowserProxy(); + EduAccountLoginBrowserProxyImpl.instance_ = testBrowserProxy; + PolymerTest.clearBody(); + parentSigninComponent = document.createElement('edu-login-parent-signin'); + parentSigninComponent.parent = fakeParent; + document.body.appendChild(parentSigninComponent); + flush(); + passwordField = parentSigninComponent.$$('#passwordField'); + }); + + teardown(function() { + parentSigninComponent.remove(); + }); + + test(assert(edu_login_parent_signin_tests.TestNames.Initialize), function() { + assertEquals( + loadTimeData.getStringF('parentSigninTitle', fakeParent.displayName), + parentSigninComponent.$$('h1').textContent.trim()); + assertFalse(passwordField.classList.contains('error')); + assertEquals('password', passwordField.type); + assertEquals( + 'edu-login-icons:show-password-icon', + parentSigninComponent.$$('.password-icon').getAttribute('iron-icon')); + assertTrue(parentSigninComponent.$$('edu-login-button[button-type="next"]') + .disabled); + assertTrue(parentSigninComponent.$$('.error-message').hidden); + }); + + test( + assert(edu_login_parent_signin_tests.TestNames.WrongPassword), + function() { + testBrowserProxy.setParentSigninResponse( + () => Promise.reject({isWrongPassword: true})); + + parentSigninComponent.password_ = 'fake-password'; + assertFalse( + parentSigninComponent.$$('edu-login-button[button-type="next"]') + .disabled); + clickButton('next'); + testBrowserProxy.whenCalled('parentSignin').then(function() { + assertTrue(passwordField.classList.contains('error')); + assertFalse(parentSigninComponent.$$('.error-message').hidden); + }); + }); + + test( + assert(edu_login_parent_signin_tests.TestNames.ParentSigninSuccess), + function() { + let goNextCalls = 0; + parentSigninComponent.addEventListener('go-next', function() { + goNextCalls++; + }); + testBrowserProxy.setParentSigninResponse( + () => Promise.resolve('fake-rapt')); + + parentSigninComponent.password_ = 'fake-password'; + assertFalse( + parentSigninComponent.$$('edu-login-button[button-type="next"]') + .disabled); + assertEquals(0, goNextCalls); + clickButton('next'); + testBrowserProxy.whenCalled('parentSignin').then(function() { + assertEquals(1, goNextCalls); + assertFalse(passwordField.classList.contains('error')); + assertTrue(parentSigninComponent.$$('.error-message').hidden); + }); + }); + + test( + assert(edu_login_parent_signin_tests.TestNames.ShowHidePassword), + function() { + const passwordIcon = parentSigninComponent.$$('.password-icon'); + assertEquals('password', passwordField.type); + assertEquals( + 'edu-login-icons:show-password-icon', + passwordIcon.getAttribute('iron-icon')); + passwordIcon.click(); + assertEquals('text', passwordField.type); + assertEquals( + 'edu-login-icons:hide-password-icon', + passwordIcon.getAttribute('iron-icon')); + }); + + test(assert(edu_login_parent_signin_tests.TestNames.ClearState), function() { + testBrowserProxy.setParentSigninResponse( + () => Promise.reject({isWrongPassword: true})); + parentSigninComponent.password_ = 'fake-password'; + clickButton('next'); + testBrowserProxy.whenCalled('parentSignin').then(function() { + clickButton('back'); + assertEquals('', passwordField.value); + assertFalse(passwordField.classList.contains('error')); + assertTrue(parentSigninComponent.$$('.error-message').hidden); + }); + }); +});
diff --git a/chrome/test/data/webui/chromeos/edu_login/edu_login_parents_test.js b/chrome/test/data/webui/chromeos/edu_login/edu_login_parents_test.js index 66faac77..f7da31ad 100644 --- a/chrome/test/data/webui/chromeos/edu_login/edu_login_parents_test.js +++ b/chrome/test/data/webui/chromeos/edu_login/edu_login_parents_test.js
@@ -10,6 +10,7 @@ import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {TestBrowserProxy} from '../../test_browser_proxy.m.js'; +import {getFakeParent} from './edu_login_test_util.js'; window.edu_login_parents_tests = {}; edu_login_parents_tests.suiteName = 'EduLoginParentsTest'; @@ -22,22 +23,6 @@ SelectedParent: 'Selected parent', }; -/** - * @param {string} email - * @param {string} displayName - * @param {string} profileImage - * @param {string} obfuscatedGaiaId - * @return {ParentAccount} - */ -function getFakeParent(email, displayName, profileImage, obfuscatedGaiaId) { - return { - email: email, - displayName: displayName, - profileImage: profileImage, - obfuscatedGaiaId: obfuscatedGaiaId, - }; -} - /** @return {Array<ParentAccount>} */ function getFakeParentsList() { return [
diff --git a/chrome/test/data/webui/chromeos/edu_login/edu_login_test_util.js b/chrome/test/data/webui/chromeos/edu_login/edu_login_test_util.js new file mode 100644 index 0000000..7f4cc65 --- /dev/null +++ b/chrome/test/data/webui/chromeos/edu_login/edu_login_test_util.js
@@ -0,0 +1,20 @@ +// Copyright 2020 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. + +/** + * @param {string} email + * @param {string} displayName + * @param {string} profileImage + * @param {string} obfuscatedGaiaId + * @return {ParentAccount} + */ +export function getFakeParent( + email, displayName, profileImage, obfuscatedGaiaId) { + return { + email: email, + displayName: displayName, + profileImage: profileImage, + obfuscatedGaiaId: obfuscatedGaiaId, + }; +}
diff --git a/chrome/test/data/webui/extensions/manager_unit_test.js b/chrome/test/data/webui/extensions/manager_unit_test.js index 33c9b444..fb66ad7 100644 --- a/chrome/test/data/webui/extensions/manager_unit_test.js +++ b/chrome/test/data/webui/extensions/manager_unit_test.js
@@ -132,7 +132,7 @@ expectEquals(description, detailsView.data.description); expectEquals( description, - detailsView.$$('.section .section-content').textContent.trim()); + detailsView.$$('.cr-section .section-content').textContent.trim()); }); test( @@ -170,7 +170,7 @@ expectEquals(newDescription, detailsView.data.description); expectEquals( newDescription, - detailsView.$$('.section .section-content').textContent.trim()); + detailsView.$$('.cr-section .section-content').textContent.trim()); }); test(
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index 8b89cac..dada96e5 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -38,6 +38,9 @@ "password_check_test.js", "passwords_section_test.js", "payments_section_test.js", + "people_page_test.js", + "people_page_sync_controls_test.js", + "people_page_sync_page_test.js", "prefs_test_cases.js", "prefs_tests.js", "pref_util_tests.js", @@ -69,6 +72,7 @@ "test_metrics_browser_proxy.js", "test_open_window_proxy.js", "test_password_manager_proxy.js", + "test_profile_info_browser_proxy.js", "test_reset_browser_proxy.js", "test_search_engines_browser_proxy.js", "test_site_settings_prefs_browser_proxy.js", @@ -85,6 +89,7 @@ input_files += [ "passwords_section_test_cros.js", "site_list_tests_cros.js", + "people_page_test_cros.js", "test_android_info_browser_proxy.js", ] } else { @@ -123,7 +128,9 @@ "settings_search.createSampleSearchEngine|createSampleSearchEngine", "settings_search.TestSearchEnginesBrowserProxy|TestSearchEnginesBrowserProxy", "sync_test_util.getSyncAllPrefs|getSyncAllPrefs", + "sync_test_util.setupRouterWithSyncRoutes|setupRouterWithSyncRoutes", "sync_test_util.simulateSyncStatus|simulateSyncStatus", + "sync_test_util.simulateStoredAccounts|simulateStoredAccounts", "test_util.createContentSettingTypeToValuePair|createContentSettingTypeToValuePair", "test_util.createDefaultContentSetting|createDefaultContentSetting", "test_util.createRawChooserException|createRawChooserException",
diff --git a/chrome/test/data/webui/settings/chrome_cleanup_page_test.js b/chrome/test/data/webui/settings/chrome_cleanup_page_test.js index 1f5652674f..953515d 100644 --- a/chrome/test/data/webui/settings/chrome_cleanup_page_test.js +++ b/chrome/test/data/webui/settings/chrome_cleanup_page_test.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. // clang-format off -// #import {ChromeCleanupProxyImpl, ChromeCleanupIdleReason, CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW} from 'chrome://settings/settings.js'; +// #import {ChromeCleanupProxyImpl, ChromeCleanupIdleReason, CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW} from 'chrome://settings/lazy_load.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; // #import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
diff --git a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js index c3d143c..bf4dc9a7 100644 --- a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
@@ -527,6 +527,7 @@ await Promise.all([ browserProxy.whenCalled('pageReady'), + browserProxy.whenCalled('canChangeChannel'), browserProxy.whenCalled('getChannelInfo'), browserProxy.whenCalled('getVersionInfo'), ]); @@ -544,7 +545,7 @@ browserProxy.setCanChangeChannel(canChangeChannel); page = document.createElement('settings-detailed-build-info'); document.body.appendChild(page); - await browserProxy.whenCalled('getChannelInfo'); + await browserProxy.whenCalled('canChangeChannel'); const changeChannelButton = page.$$('cr-button'); assertTrue(!!changeChannelButton); assertEquals(canChangeChannel, !changeChannelButton.disabled); @@ -558,12 +559,40 @@ return checkChangeChannelButton(false); }); + /** + * Checks whether the "change channel" button state (enabled/disabled) + * is correct before getChannelInfo() returns + * (see https://crbug.com/848750). Here, getChannelInfo() is blocked + * manually until after the button check. + */ + async function checkChangeChannelButtonWithDelayedChannelState( + canChangeChannel) { + const resolver = new PromiseResolver(); + browserProxy.getChannelInfo = async function() { + await resolver.promise; + this.methodCalled('getChannelInfo'); + return Promise.resolve(this.channelInfo_); + }; + const result = await checkChangeChannelButton(canChangeChannel); + resolver.resolve(); + return result; + } + + test('ChangeChannel_EnabledWithDelayedChannelState', function() { + return checkChangeChannelButtonWithDelayedChannelState(true); + }); + + test('ChangeChannel_DisabledWithDelayedChannelState', function() { + return checkChangeChannelButtonWithDelayedChannelState(false); + }); + async function checkCopyBuildDetailsButton() { page = document.createElement('settings-detailed-build-info'); document.body.appendChild(page); const copyBuildDetailsButton = page.$$('cr-icon-button'); await browserProxy.whenCalled('getVersionInfo'); await browserProxy.whenCalled('getChannelInfo'); + await browserProxy.whenCalled('canChangeChannel'); const expectedClipBoardText = `${loadTimeData.getString('application_label')}: ` +
diff --git a/chrome/test/data/webui/settings/chromeos/test_about_page_browser_proxy_chromeos.js b/chrome/test/data/webui/settings/chromeos/test_about_page_browser_proxy_chromeos.js index ace6286..a2ccc28 100644 --- a/chrome/test/data/webui/settings/chromeos/test_about_page_browser_proxy_chromeos.js +++ b/chrome/test/data/webui/settings/chromeos/test_about_page_browser_proxy_chromeos.js
@@ -13,6 +13,7 @@ 'refreshUpdateStatus', 'openHelpPage', 'openFeedbackDialog', + 'canChangeChannel', 'getChannelInfo', 'getVersionInfo', 'getRegulatoryInfo', @@ -39,9 +40,11 @@ this.channelInfo_ = { currentChannel: BrowserChannel.BETA, targetChannel: BrowserChannel.BETA, - canChangeChannel: true, }; + /** @private {!boolean} */ + this.canChangeChannel_ = true; + /** @private {?RegulatoryInfo} */ this.regulatoryInfo_ = null; @@ -101,7 +104,7 @@ /** @param {boolean} canChangeChannel */ setCanChangeChannel(canChangeChannel) { - this.channelInfo_.canChangeChannel = canChangeChannel; + this.canChangeChannel_ = canChangeChannel; } /** @@ -146,6 +149,12 @@ } /** @override */ + canChangeChannel() { + this.methodCalled('canChangeChannel'); + return Promise.resolve(this.canChangeChannel_); + } + + /** @override */ getEnabledReleaseNotes() { this.methodCalled('getEnabledReleaseNotes'); return Promise.resolve(this.hasReleaseNotes_);
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js index 54e0de7..01ed253 100644 --- a/chrome/test/data/webui/settings/cr_settings_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -540,6 +540,38 @@ mocha.run(); }); +GEN('#if defined(OS_CHROMEOS)'); + +/** + * Test fixture for + * chrome/browser/resources/settings/people_page/people_page.html. + * @constructor + * @extends {CrSettingsBrowserTest} + */ +function CrSettingsPeoplePageChromeOSTest() {} + +CrSettingsPeoplePageChromeOSTest.prototype = { + __proto__: CrSettingsBrowserTest.prototype, + + /** @override */ + browsePreload: 'chrome://settings/people_page/people_page.html', + + /** @override */ + extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([ + '../test_browser_proxy.js', + 'sync_test_util.js', + 'test_profile_info_browser_proxy.js', + 'test_sync_browser_proxy.js', + 'people_page_test_cros.js', + ]), +}; + +TEST_F('CrSettingsPeoplePageChromeOSTest', 'All', function() { + mocha.run(); +}); + +GEN('#endif // defined(OS_CHROMEOS)'); + /** * Test fixture for * chrome/browser/resources/settings/people_page/sync_account_control.html.
diff --git a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js index 2b2704b..197c9acd 100644 --- a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
@@ -190,6 +190,59 @@ GEN('#endif // !defined(OS_CHROMEOS)'); // eslint-disable-next-line no-var +var CrSettingsPeoplePageV3Test = class extends CrSettingsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://settings/test_loader.html?module=settings/people_page_test.m.js'; + } +}; + +TEST_F('CrSettingsPeoplePageV3Test', 'All', function() { + mocha.run(); +}); + +GEN('#if defined(OS_CHROMEOS)'); + +// eslint-disable-next-line no-var +var CrSettingsPeoplePageChromeOSV3Test = class extends CrSettingsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://settings/test_loader.html?module=settings/people_page_test_cros.m.js'; + } +}; + +TEST_F('CrSettingsPeoplePageChromeOSV3Test', 'All', function() { + mocha.run(); +}); + +GEN('#endif // defined(OS_CHROMEOS)'); + +// eslint-disable-next-line no-var +var CrSettingsPeoplePageSyncControlsV3Test = + class extends CrSettingsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://settings/test_loader.html?module=settings/people_page_sync_controls_test.m.js'; + } +}; + +TEST_F('CrSettingsPeoplePageSyncControlsV3Test', 'All', function() { + mocha.run(); +}); + +// eslint-disable-next-line no-var +var CrSettingsPeoplePageSyncPageV3Test = class extends CrSettingsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://settings/test_loader.html?module=settings/people_page_sync_page_test.m.js'; + } +}; + +TEST_F('CrSettingsPeoplePageSyncPageV3Test', 'All', function() { + mocha.run(); +}); + +// eslint-disable-next-line no-var var CrSettingsPrefUtilV3Test = class extends CrSettingsV3BrowserTest { /** @override */ get browsePreload() {
diff --git a/chrome/test/data/webui/settings/password_check_test.js b/chrome/test/data/webui/settings/password_check_test.js index 5e5db4a..e695ea0a 100644 --- a/chrome/test/data/webui/settings/password_check_test.js +++ b/chrome/test/data/webui/settings/password_check_test.js
@@ -261,15 +261,29 @@ .then(() => passwordManager.whenCalled('startBulkPasswordCheck')); }); - // Test verifies that 'Try again' visible and working when users encounter a + // Test verifies that 'Try again' is hidden when users encounter a // not-signed-in error. - test('testShowRetryAfterSignOutError', function() { + test('testHideRetryAfterSignOutErrorUntilSignedInAgain', function() { passwordManager.data.checkStatus = autofill_test_util.makePasswordCheckStatus( /*state=*/ PasswordCheckState.SIGNED_OUT); const section = createCheckPasswordSection(); + cr.webUIListenerCallback('stored-accounts-updated', []); + // <if expr="chromeos"> + sync_test_util.simulateSyncStatus({signedIn: false}); + // </if> return passwordManager.whenCalled('getPasswordCheckStatus') .then(() => { + Polymer.dom.flush(); + expectFalse(isElementVisible(section.$.controlPasswordCheckButton)); + cr.webUIListenerCallback( + 'stored-accounts-updated', [{email: 'foo@bar.com'}]); + // <if expr="chromeos"> + sync_test_util.simulateSyncStatus( + {signedIn: true, hasError: false}); + // </if> + }) + .then(() => { assertTrue(isElementVisible(section.$.controlPasswordCheckButton)); expectEquals( section.i18n('checkPasswordsAgainAfterError'),
diff --git a/chrome/test/data/webui/settings/people_page_sync_controls_test.js b/chrome/test/data/webui/settings/people_page_sync_controls_test.js index 9d0733dc..bcb4931 100644 --- a/chrome/test/data/webui/settings/people_page_sync_controls_test.js +++ b/chrome/test/data/webui/settings/people_page_sync_controls_test.js
@@ -2,6 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// clang-format off +// #import {SyncBrowserProxyImpl, StatusAction, Router} from 'chrome://settings/settings.js'; +// #import 'chrome://settings/lazy_load.js'; +// #import {TestSyncBrowserProxy} from 'chrome://test/settings/test_sync_browser_proxy.m.js'; +// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +// #import {setupRouterWithSyncRoutes, getSyncAllPrefs} from 'chrome://test/settings/sync_test_util.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {waitBeforeNextRender} from 'chrome://test/test_util.m.js'; +// clang-format on + cr.define('settings_people_page_sync_controls', function() { suite('SyncControlsTest', function() { let syncControls = null; @@ -124,16 +134,15 @@ PolymerTest.clearBody(); syncControls = document.createElement('settings-sync-controls'); - settings.Router.getInstance().navigateTo(settings.routes.SYNC_ADVANCED); + const router = settings.Router.getInstance(); + router.navigateTo(router.getRoutes().SYNC_ADVANCED); document.body.appendChild(syncControls); syncControls .syncStatus = {disabled: false, hasError: false, signedIn: true}; Polymer.dom.flush(); - assertEquals( - settings.routes.SYNC_ADVANCED, - settings.Router.getInstance().getCurrentRoute()); + assertEquals(router.getRoutes().SYNC_ADVANCED, router.getCurrentRoute()); }); teardown(function() { @@ -143,9 +152,8 @@ test('SignedOut', function() { syncControls .syncStatus = {disabled: false, hasError: false, signedIn: false}; - assertEquals( - settings.routes.SYNC, - settings.Router.getInstance().getCurrentRoute()); + const router = settings.Router.getInstance(); + assertEquals(router.getRoutes().SYNC.path, router.getCurrentRoute().path); }); test('PassphraseError', function() { @@ -155,9 +163,9 @@ signedIn: true, statusAction: settings.StatusAction.ENTER_PASSPHRASE }; + const router = settings.Router.getInstance(); assertEquals( - settings.routes.SYNC_ADVANCED, - settings.Router.getInstance().getCurrentRoute()); + router.getRoutes().SYNC_ADVANCED.path, router.getCurrentRoute().path); }); test('SyncPaused', function() { @@ -167,9 +175,8 @@ signedIn: true, statusAction: settings.StatusAction.REAUTHENTICATE }; - assertEquals( - settings.routes.SYNC, - settings.Router.getInstance().getCurrentRoute()); + const router = settings.Router.getInstance(); + assertEquals(router.getRoutes().SYNC.path, router.getCurrentRoute().path); }); }); @@ -253,4 +260,5 @@ .then(prefs => assertPrefs(prefs, datatypeControls)); }); }); + // #cr_define_end });
diff --git a/chrome/test/data/webui/settings/people_page_sync_page_test.js b/chrome/test/data/webui/settings/people_page_sync_page_test.js index ab62d62..ca72366 100644 --- a/chrome/test/data/webui/settings/people_page_sync_page_test.js +++ b/chrome/test/data/webui/settings/people_page_sync_page_test.js
@@ -2,6 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// clang-format off +// #import {Router, routes, SyncBrowserProxyImpl, PageStatus, StatusAction} from 'chrome://settings/settings.js'; +// #import 'chrome://settings/lazy_load.js'; +// #import {TestSyncBrowserProxy} from 'chrome://test/settings/test_sync_browser_proxy.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +// #import {isChromeOS} from 'chrome://resources/js/cr.m.js'; +// #import {getSyncAllPrefs, setupRouterWithSyncRoutes, simulateStoredAccounts} from 'chrome://test/settings/sync_test_util.m.js'; +// #import {eventToPromise, waitBeforeNextRender} from 'chrome://test/test_util.m.js'; +// clang-format on + cr.define('settings_people_page_sync_page', function() { suite('SyncSettingsTests', function() { let syncPage = null; @@ -14,7 +25,8 @@ function setupSyncPage() { PolymerTest.clearBody(); syncPage = document.createElement('settings-sync-page'); - settings.Router.getInstance().navigateTo(settings.routes.SYNC); + const router = settings.Router.getInstance(); + router.navigateTo(router.getRoutes().SYNC); // Preferences should exist for embedded // 'personalization_options.html'. We don't perform tests on them. syncPage.prefs = { @@ -80,14 +92,15 @@ // ####################### test('NotifiesHandlerOfNavigation', function() { + const router = settings.Router.getInstance(); function testNavigateAway() { - settings.Router.getInstance().navigateTo(settings.routes.PEOPLE); + router.navigateTo(router.getRoutes().PEOPLE); return browserProxy.whenCalled('didNavigateAwayFromSyncPage'); } function testNavigateBack() { browserProxy.resetResolver('didNavigateToSyncPage'); - settings.Router.getInstance().navigateTo(settings.routes.SYNC); + router.navigateTo(router.getRoutes().SYNC); return browserProxy.whenCalled('didNavigateToSyncPage'); } @@ -100,7 +113,7 @@ function testRecreate() { browserProxy.resetResolver('didNavigateToSyncPage'); syncPage = document.createElement('settings-sync-page'); - settings.Router.getInstance().navigateTo(settings.routes.SYNC); + router.navigateTo(router.getRoutes().SYNC); document.body.appendChild(syncPage); return browserProxy.whenCalled('didNavigateToSyncPage'); @@ -482,8 +495,8 @@ Polymer.dom.flush(); assertEquals( - settings.routes.SYNC_ADVANCED, - settings.Router.getInstance().getCurrentRoute()); + settings.routes.SYNC_ADVANCED.path, + settings.Router.getInstance().getCurrentRoute().path); }); // This test checks whether the passphrase encryption options are @@ -619,12 +632,11 @@ // Navigating away while setup is in progress opens the 'Cancel sync?' // dialog. - settings.Router.getInstance().navigateTo(settings.routes.BASIC); + const router = settings.Router.getInstance(); + router.navigateTo(settings.routes.BASIC); return test_util.eventToPromise('cr-dialog-open', syncPage) .then(() => { - assertEquals( - settings.routes.SYNC, - settings.Router.getInstance().getCurrentRoute()); + assertEquals(router.getRoutes().SYNC, router.getCurrentRoute()); assertTrue(syncPage.$$('#setupCancelDialog').open); // Clicking the cancel button on the 'Cancel sync?' dialog closes @@ -638,14 +650,12 @@ }) .then(() => { Polymer.dom.flush(); - assertEquals( - settings.routes.SYNC, - settings.Router.getInstance().getCurrentRoute()); + assertEquals(router.getRoutes().SYNC, router.getCurrentRoute()); assertFalse(!!syncPage.$$('#setupCancelDialog')); // Navigating away while setup is in progress opens the // dialog again. - settings.Router.getInstance().navigateTo(settings.routes.BASIC); + router.navigateTo(settings.routes.BASIC); return test_util.eventToPromise('cr-dialog-open', syncPage); }) .then(() => { @@ -671,8 +681,9 @@ Polymer.dom.flush(); // Searching settings while setup is in progress cancels sync. - settings.Router.getInstance().navigateTo( - settings.routes.BASIC, new URLSearchParams('search=foo')); + const router = settings.Router.getInstance(); + router.navigateTo( + router.getRoutes().BASIC, new URLSearchParams('search=foo')); return browserProxy.whenCalled('didNavigateAwayFromSyncPage') .then(abort => { @@ -704,4 +715,5 @@ }); } }); + // #cr_define_end });
diff --git a/chrome/test/data/webui/settings/people_page_test.js b/chrome/test/data/webui/settings/people_page_test.js index 9cc78050..ea333cd 100644 --- a/chrome/test/data/webui/settings/people_page_test.js +++ b/chrome/test/data/webui/settings/people_page_test.js
@@ -2,6 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// clang-format off +// #import 'chrome://settings/lazy_load.js'; +// #import {ProfileInfoBrowserProxyImpl, Router, StatusAction, SyncBrowserProxyImpl, pageVisibility, routes} from 'chrome://settings/settings.js'; +// #import {TestSyncBrowserProxy} from 'chrome://test/settings/test_sync_browser_proxy.m.js'; +// #import {TestProfileInfoBrowserProxy} from 'chrome://test/settings/test_profile_info_browser_proxy.m.js'; +// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {isChromeOS, webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; +// #import {listenOnce} from 'chrome://resources/js/util.m.js'; +// #import {simulateSyncStatus, simulateStoredAccounts} from 'chrome://test/settings/sync_test_util.m.js'; +// #import {waitBeforeNextRender} from 'chrome://test/test_util.m.js'; +// #import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +// clang-format on + cr.define('settings_people_page', function() { /** @implements {settings.PeopleBrowserProxy} */ class TestPeopleBrowserProxy extends TestBrowserProxy { @@ -126,7 +140,7 @@ profileInfoBrowserProxy; PolymerTest.clearBody(); - await settings.forceLazyLoaded(); + /* #ignore */ await settings.forceLazyLoaded(); peoplePage = document.createElement('settings-people-page'); peoplePage.pageVisibility = settings.pageVisibility; document.body.appendChild(peoplePage); @@ -475,229 +489,5 @@ }); }); - if (cr.isChromeOS) { - /** @implements {settings.AccountManagerBrowserProxy} */ - class TestAccountManagerBrowserProxy extends TestBrowserProxy { - constructor() { - super([ - 'getAccounts', - 'addAccount', - 'reauthenticateAccount', - 'removeAccount', - 'showWelcomeDialogIfRequired', - ]); - } - - /** @override */ - getAccounts() { - this.methodCalled('getAccounts'); - return Promise.resolve([{ - id: '123', - accountType: 1, - isDeviceAccount: false, - isSignedIn: true, - unmigrated: false, - fullName: 'Primary Account', - email: 'user@gmail.com', - pic: 'data:image/png;base64,primaryAccountPicData', - }]); - } - - /** @override */ - addAccount() { - this.methodCalled('addAccount'); - } - - /** @override */ - reauthenticateAccount(account_email) { - this.methodCalled('reauthenticateAccount', account_email); - } - - /** @override */ - removeAccount(account) { - this.methodCalled('removeAccount', account); - } - - /** @override */ - showWelcomeDialogIfRequired() { - this.methodCalled('showWelcomeDialogIfRequired'); - } - } - - /** @type {?settings.AccountManagerBrowserProxy} */ - let accountManagerBrowserProxy = null; - - // Preferences should exist for embedded 'personalization_options.html'. - // We don't perform tests on them. - const DEFAULT_PREFS = { - profile: {password_manager_leak_detection: {value: true}}, - signin: { - allowed_on_next_startup: - {type: chrome.settingsPrivate.PrefType.BOOLEAN, value: true} - }, - safebrowsing: - {enabled: {value: true}, scout_reporting_enabled: {value: true}}, - }; - - suite('Chrome OS', function() { - suiteSetup(function() { - loadTimeData.overrideValues({ - // Simulate SplitSettings (OS settings in their own surface). - showOSSettings: false, - // Simulate ChromeOSAccountManager (Google Accounts support). - isAccountManagerEnabled: true, - }); - }); - - setup(async function() { - syncBrowserProxy = new TestSyncBrowserProxy(); - settings.SyncBrowserProxyImpl.instance_ = syncBrowserProxy; - - profileInfoBrowserProxy = new TestProfileInfoBrowserProxy(); - settings.ProfileInfoBrowserProxyImpl.instance_ = - profileInfoBrowserProxy; - - accountManagerBrowserProxy = new TestAccountManagerBrowserProxy(); - settings.AccountManagerBrowserProxyImpl.instance_ = - accountManagerBrowserProxy; - - PolymerTest.clearBody(); - peoplePage = document.createElement('settings-people-page'); - peoplePage.prefs = DEFAULT_PREFS; - peoplePage.pageVisibility = settings.pageVisibility; - document.body.appendChild(peoplePage); - - await accountManagerBrowserProxy.whenCalled('getAccounts'); - await syncBrowserProxy.whenCalled('getSyncStatus'); - Polymer.dom.flush(); - }); - - teardown(function() { - peoplePage.remove(); - }); - - test('GAIA name and picture', async () => { - chai.assert.include( - peoplePage.$$('#profile-icon').style.backgroundImage, - 'data:image/png;base64,primaryAccountPicData'); - assertEquals( - 'Primary Account', - peoplePage.$$('#profile-name').textContent.trim()); - }); - - test('profile row is actionable', () => { - // Simulate a signed-in user. - sync_test_util.simulateSyncStatus({ - signedIn: true, - }); - - // Profile row opens account manager, so the row is actionable. - const profileIcon = assert(peoplePage.$$('#profile-icon')); - assertTrue(profileIcon.hasAttribute('actionable')); - const profileRow = assert(peoplePage.$$('#profile-row')); - assertTrue(profileRow.hasAttribute('actionable')); - const subpageArrow = assert(peoplePage.$$('#profile-subpage-arrow')); - assertFalse(subpageArrow.hidden); - }); - }); - - suite('Chrome OS with account manager disabled', function() { - 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.prefs = DEFAULT_PREFS; - 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.Router.getInstance().getCurrentRoute(); - profileIcon.click(); - assertEquals(oldRoute, settings.Router.getInstance().getCurrentRoute()); - }); - }); - - suite('Chrome OS with SplitSyncConsent', function() { - suiteSetup(function() { - loadTimeData.overrideValues({ - splitSettingsSyncEnabled: true, - splitSyncConsent: true, - }); - }); - - 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.prefs = DEFAULT_PREFS; - peoplePage.pageVisibility = settings.pageVisibility; - document.body.appendChild(peoplePage); - - await syncBrowserProxy.whenCalled('getSyncStatus'); - Polymer.dom.flush(); - }); - - teardown(function() { - peoplePage.remove(); - }); - - test('Sync account control is shown', () => { - sync_test_util.simulateSyncStatus({ - syncSystemEnabled: true, - }); - - // Account control is visible. - const accountControl = peoplePage.$$('settings-sync-account-control'); - assertNotEquals( - 'none', window.getComputedStyle(accountControl).display); - - // Profile row items are not available. - assertFalse(!!peoplePage.$$('#profile-icon')); - assertFalse(!!peoplePage.$$('#profile-row')); - }); - }); - } + // #cr_define_end });
diff --git a/chrome/test/data/webui/settings/people_page_test_cros.js b/chrome/test/data/webui/settings/people_page_test_cros.js new file mode 100644 index 0000000..5615d4b --- /dev/null +++ b/chrome/test/data/webui/settings/people_page_test_cros.js
@@ -0,0 +1,250 @@ +// Copyright 2020 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. + +// clang-format off +// #import 'chrome://settings/lazy_load.js'; +// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; +// #import {AccountManagerBrowserProxyImpl, ProfileInfoBrowserProxyImpl, pageVisibility, Router, SyncBrowserProxyImpl} from 'chrome://settings/settings.js'; +// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +// #import {TestSyncBrowserProxy} from 'chrome://test/settings/test_sync_browser_proxy.m.js'; +// #import {TestProfileInfoBrowserProxy} from 'chrome://test/settings/test_profile_info_browser_proxy.m.js'; +// #import {simulateSyncStatus} from 'chrome://test/settings/sync_test_util.m.js'; +// clang-format on + +cr.define('settings_people_page', function() { + /** @implements {settings.AccountManagerBrowserProxy} */ + class TestAccountManagerBrowserProxy extends TestBrowserProxy { + constructor() { + super([ + 'getAccounts', + 'addAccount', + 'reauthenticateAccount', + 'removeAccount', + 'showWelcomeDialogIfRequired', + ]); + } + + /** @override */ + getAccounts() { + this.methodCalled('getAccounts'); + return Promise.resolve([{ + id: '123', + accountType: 1, + isDeviceAccount: false, + isSignedIn: true, + unmigrated: false, + fullName: 'Primary Account', + email: 'user@gmail.com', + pic: 'data:image/png;base64,primaryAccountPicData', + }]); + } + + /** @override */ + addAccount() { + this.methodCalled('addAccount'); + } + + /** @override */ + reauthenticateAccount(account_email) { + this.methodCalled('reauthenticateAccount', account_email); + } + + /** @override */ + removeAccount(account) { + this.methodCalled('removeAccount', account); + } + + /** @override */ + showWelcomeDialogIfRequired() { + this.methodCalled('showWelcomeDialogIfRequired'); + } + } + + /** @type {?settings.AccountManagerBrowserProxy} */ + let accountManagerBrowserProxy = null; + + // Preferences should exist for embedded 'personalization_options.html'. + // We don't perform tests on them. + const DEFAULT_PREFS = { + profile: {password_manager_leak_detection: {value: true}}, + signin: { + allowed_on_next_startup: + {type: chrome.settingsPrivate.PrefType.BOOLEAN, value: true} + }, + safebrowsing: + {enabled: {value: true}, scout_reporting_enabled: {value: true}}, + }; + + /** @type {?SettingsPeoplePageElement} */ + let peoplePage = null; + + /** @type {?settings.ProfileInfoBrowserProxy} */ + let profileInfoBrowserProxy = null; + + /** @type {?settings.SyncBrowserProxy} */ + let syncBrowserProxy = null; + + suite('Chrome OS', function() { + suiteSetup(function() { + loadTimeData.overrideValues({ + // Simulate SplitSettings (OS settings in their own surface). + showOSSettings: false, + // Simulate ChromeOSAccountManager (Google Accounts support). + isAccountManagerEnabled: true, + }); + }); + + setup(async function() { + syncBrowserProxy = new TestSyncBrowserProxy(); + settings.SyncBrowserProxyImpl.instance_ = syncBrowserProxy; + + profileInfoBrowserProxy = new TestProfileInfoBrowserProxy(); + settings.ProfileInfoBrowserProxyImpl.instance_ = profileInfoBrowserProxy; + + accountManagerBrowserProxy = new TestAccountManagerBrowserProxy(); + settings.AccountManagerBrowserProxyImpl.instance_ = + accountManagerBrowserProxy; + + PolymerTest.clearBody(); + peoplePage = document.createElement('settings-people-page'); + peoplePage.prefs = DEFAULT_PREFS; + peoplePage.pageVisibility = settings.pageVisibility; + document.body.appendChild(peoplePage); + + await accountManagerBrowserProxy.whenCalled('getAccounts'); + await syncBrowserProxy.whenCalled('getSyncStatus'); + Polymer.dom.flush(); + }); + + teardown(function() { + peoplePage.remove(); + }); + + test('GAIA name and picture', async () => { + chai.assert.include( + peoplePage.$$('#profile-icon').style.backgroundImage, + 'data:image/png;base64,primaryAccountPicData'); + assertEquals( + 'Primary Account', peoplePage.$$('#profile-name').textContent.trim()); + }); + + test('profile row is actionable', () => { + // Simulate a signed-in user. + sync_test_util.simulateSyncStatus({ + signedIn: true, + }); + + // Profile row opens account manager, so the row is actionable. + const profileIcon = peoplePage.$$('#profile-icon'); + assertTrue(!!profileIcon); + assertTrue(profileIcon.hasAttribute('actionable')); + const profileRow = peoplePage.$$('#profile-row'); + assertTrue(!!profileRow); + assertTrue(profileRow.hasAttribute('actionable')); + const subpageArrow = peoplePage.$$('#profile-subpage-arrow'); + assertTrue(!!subpageArrow); + assertFalse(subpageArrow.hidden); + }); + }); + + suite('Chrome OS with account manager disabled', function() { + 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.prefs = DEFAULT_PREFS; + 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 = peoplePage.$$('#profile-icon'); + assertTrue(!!profileIcon); + assertFalse(profileIcon.hasAttribute('actionable')); + const profileRow = peoplePage.$$('#profile-row'); + assertTrue(!!profileRow); + assertFalse(profileRow.hasAttribute('actionable')); + const subpageArrow = peoplePage.$$('#profile-subpage-arrow'); + assertTrue(!!subpageArrow); + assertTrue(subpageArrow.hidden); + + // Clicking on profile icon doesn't navigate to a new route. + const oldRoute = settings.Router.getInstance().getCurrentRoute(); + profileIcon.click(); + assertEquals(oldRoute, settings.Router.getInstance().getCurrentRoute()); + }); + }); + + suite('Chrome OS with SplitSyncConsent', function() { + suiteSetup(function() { + loadTimeData.overrideValues({ + splitSettingsSyncEnabled: true, + splitSyncConsent: true, + }); + }); + + 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.prefs = DEFAULT_PREFS; + peoplePage.pageVisibility = settings.pageVisibility; + document.body.appendChild(peoplePage); + + await syncBrowserProxy.whenCalled('getSyncStatus'); + Polymer.dom.flush(); + }); + + teardown(function() { + peoplePage.remove(); + }); + + test('Sync account control is shown', () => { + sync_test_util.simulateSyncStatus({ + syncSystemEnabled: true, + }); + + // Account control is visible. + const accountControl = peoplePage.$$('settings-sync-account-control'); + assertNotEquals('none', window.getComputedStyle(accountControl).display); + + // Profile row items are not available. + assertFalse(!!peoplePage.$$('#profile-icon')); + assertFalse(!!peoplePage.$$('#profile-row')); + }); + }); + // #cr_define_end +});
diff --git a/chrome/test/data/webui/settings/sync_test_util.js b/chrome/test/data/webui/settings/sync_test_util.js index 9bd4ec8d..13f63b2 100644 --- a/chrome/test/data/webui/settings/sync_test_util.js +++ b/chrome/test/data/webui/settings/sync_test_util.js
@@ -5,6 +5,7 @@ // clang-format off // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; +// #import {Route,Router,routes} from 'chrome://settings/settings.js'; // clang-format on cr.define('sync_test_util', function() { @@ -44,7 +45,7 @@ }; } - function setupRouterWithSyncRoutes() { + /* #export */ function setupRouterWithSyncRoutes() { const routes = { BASIC: new settings.Route('/'), }; @@ -56,7 +57,7 @@ routes.SIGN_OUT.isNavigableDialog = true; settings.Router.resetInstanceForTesting(new settings.Router(routes)); - settings.routes = routes; + /* #ignore */ settings.routes = routes; } /** @param {!settings.SyncStatus} */ @@ -66,7 +67,7 @@ } /** @param {Array<!settings.StoredAccount>} */ - function simulateStoredAccounts(accounts) { + /* #export */ function simulateStoredAccounts(accounts) { cr.webUIListenerCallback('stored-accounts-updated', accounts); Polymer.dom.flush(); }
diff --git a/chrome/test/data/webui/settings/test_profile_info_browser_proxy.js b/chrome/test/data/webui/settings/test_profile_info_browser_proxy.js index 6532cd6c..9cde7f0 100644 --- a/chrome/test/data/webui/settings/test_profile_info_browser_proxy.js +++ b/chrome/test/data/webui/settings/test_profile_info_browser_proxy.js
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; + /** @implements {settings.ProfileInfoBrowserProxy} */ -class TestProfileInfoBrowserProxy extends TestBrowserProxy { +/* #export */ class TestProfileInfoBrowserProxy extends TestBrowserProxy { constructor() { super([ 'getProfileInfo', @@ -27,4 +29,4 @@ getProfileStatsCount() { this.methodCalled('getProfileStatsCount'); } -} \ No newline at end of file +}
diff --git a/chrome/test/views/chrome_test_views_delegate.cc b/chrome/test/views/chrome_test_views_delegate.cc deleted file mode 100644 index 466068769c..0000000 --- a/chrome/test/views/chrome_test_views_delegate.cc +++ /dev/null
@@ -1,11 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/test/views/chrome_test_views_delegate.h" - -#include "chrome/browser/ui/views/chrome_layout_provider.h" - -ChromeTestViewsDelegate::ChromeTestViewsDelegate() { - set_layout_provider(ChromeLayoutProvider::CreateLayoutProvider()); -}
diff --git a/chrome/test/views/chrome_test_views_delegate.h b/chrome/test/views/chrome_test_views_delegate.h index 20a83f0..4bd27a90 100644 --- a/chrome/test/views/chrome_test_views_delegate.h +++ b/chrome/test/views/chrome_test_views_delegate.h
@@ -5,13 +5,17 @@ #ifndef CHROME_TEST_VIEWS_CHROME_TEST_VIEWS_DELEGATE_H_ #define CHROME_TEST_VIEWS_CHROME_TEST_VIEWS_DELEGATE_H_ -#include "build/build_config.h" +#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "ui/views/test/test_views_delegate.h" // A TestViewsDelegate specific to Chrome tests. -class ChromeTestViewsDelegate : public views::TestViewsDelegate { +template <class T = views::TestViewsDelegate> +class ChromeTestViewsDelegate : public T { public: - ChromeTestViewsDelegate(); + ChromeTestViewsDelegate() { + T::set_layout_provider(ChromeLayoutProvider::CreateLayoutProvider()); + } + ~ChromeTestViewsDelegate() override = default; };
diff --git a/chrome/test/views/chrome_views_test_base.cc b/chrome/test/views/chrome_views_test_base.cc index b01816c1..28ded8e 100644 --- a/chrome/test/views/chrome_views_test_base.cc +++ b/chrome/test/views/chrome_views_test_base.cc
@@ -9,6 +9,6 @@ ChromeViewsTestBase::~ChromeViewsTestBase() = default; void ChromeViewsTestBase::SetUp() { - set_views_delegate(std::make_unique<ChromeTestViewsDelegate>()); + set_views_delegate(std::make_unique<ChromeTestViewsDelegate<>>()); views::ViewsTestBase::SetUp(); }
diff --git a/chrome/updater/app/app.cc b/chrome/updater/app/app.cc index 2cb1d019..abc0e4c 100644 --- a/chrome/updater/app/app.cc +++ b/chrome/updater/app/app.cc
@@ -16,11 +16,17 @@ namespace updater { +constexpr base::StringPiece App::kThreadPoolName; + App::App() = default; App::~App() = default; +void App::InitializeThreadPool() { + base::ThreadPoolInstance::CreateAndStartWithDefaultParams(kThreadPoolName); +} + int App::Run() { - base::ThreadPoolInstance::CreateAndStartWithDefaultParams("Updater"); + InitializeThreadPool(); base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::UI); Initialize(); int exit_code = 0; @@ -36,7 +42,6 @@ FirstTaskRun(); runloop.Run(); } - Uninitialize(); // Shutting down the thread pool involves joining threads.
diff --git a/chrome/updater/app/app.h b/chrome/updater/app/app.h index e6cf693b..d1b17179 100644 --- a/chrome/updater/app/app.h +++ b/chrome/updater/app/app.h
@@ -7,6 +7,7 @@ #include "base/callback.h" #include "base/memory/ref_counted.h" +#include "base/strings/string_piece.h" namespace updater { @@ -20,6 +21,9 @@ protected: friend class base::RefCountedThreadSafe<App>; + + static constexpr base::StringPiece kThreadPoolName = "Updater"; + App(); virtual ~App(); @@ -28,6 +32,11 @@ void Shutdown(int exitCode); private: + // Allows initialization of the thread pool for specific environments, in + // cases where the thread pool must be started with different init parameters, + // such as MTA for Windows COM servers. + virtual void InitializeThreadPool(); + // Implementations of App can override this to perform work on the main // sequence while blocking is still allowed. virtual void Initialize() {}
diff --git a/chrome/updater/mac/update_service_out_of_process.mm b/chrome/updater/mac/update_service_out_of_process.mm index 56f1359..809c637 100644 --- a/chrome/updater/mac/update_service_out_of_process.mm +++ b/chrome/updater/mac/update_service_out_of_process.mm
@@ -38,6 +38,14 @@ _xpcConnection.get().remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(CRUUpdateChecking)]; + _xpcConnection.get().interruptionHandler = ^{ + LOG(WARNING) << "CRUUpdateCheckingService: XPC connection interrupted."; + }; + + _xpcConnection.get().invalidationHandler = ^{ + LOG(WARNING) << "CRUUpdateCheckingService: XPC connection invalidated."; + }; + [_xpcConnection resume]; } @@ -72,7 +80,7 @@ reply(-1); }; - [[_xpcConnection.get() remoteObjectProxyWithErrorHandler:errorHandler] + [[_xpcConnection remoteObjectProxyWithErrorHandler:errorHandler] checkForUpdatesWithReply:reply]; } @@ -86,7 +94,7 @@ reply(-1); }; - [[_xpcConnection.get() remoteObjectProxyWithErrorHandler:errorHandler] + [[_xpcConnection remoteObjectProxyWithErrorHandler:errorHandler] checkForUpdateWithAppID:appID priority:priority updateState:updateState @@ -116,7 +124,7 @@ FROM_HERE, base::BindOnce(std::move(block_callback), response)); }; - [client_.get() + [client_ registerForUpdatesWithAppId:SysUTF8ToNSString(request.app_id) brandCode:SysUTF8ToNSString(request.brand_code) tag:SysUTF8ToNSString(request.tag) @@ -139,7 +147,7 @@ static_cast<update_client::Error>(error))); }; - [client_.get() checkForUpdatesWithReply:reply]; + [client_ checkForUpdatesWithReply:reply]; } void UpdateServiceOutOfProcess::Update(const std::string& app_id, @@ -163,10 +171,10 @@ initWithRepeatingCallback:state_update callbackRunner:callback_runner_]); - [client_.get() checkForUpdateWithAppID:SysUTF8ToNSString(app_id) - priority:priorityWrapper.get() - updateState:stateObserver.get() - reply:reply]; + [client_ checkForUpdateWithAppID:SysUTF8ToNSString(app_id) + priority:priorityWrapper.get() + updateState:stateObserver.get() + reply:reply]; } void UpdateServiceOutOfProcess::Uninitialize() {
diff --git a/chrome/updater/server/win/server.cc b/chrome/updater/server/win/server.cc index 9ce2dd2f..6bf0ff9 100644 --- a/chrome/updater/server/win/server.cc +++ b/chrome/updater/server/win/server.cc
@@ -15,9 +15,14 @@ #include <wrl/implements.h> #include <wrl/module.h> +#include <algorithm> +#include <memory> + #include "base/logging.h" #include "base/memory/ref_counted.h" #include "base/stl_util.h" +#include "base/system/sys_info.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/win/scoped_bstr.h" #include "base/win/scoped_com_initializer.h" #include "chrome/updater/app/app.h" @@ -36,8 +41,9 @@ private: ~ComServer() override = default; + // Overrides for App. + void InitializeThreadPool() override; void Initialize() override; - void FirstTaskRun() override; // Registers and unregisters the out-of-process COM class factories. @@ -111,6 +117,18 @@ ComServer::ComServer() : com_initializer_(base::win::ScopedCOMInitializer::kMTA) {} +void ComServer::InitializeThreadPool() { + base::ThreadPoolInstance::Create(kThreadPoolName); + + // Reuses the logic in base::ThreadPoolInstance::StartWithDefaultParams. + const int num_cores = base::SysInfo::NumberOfProcessors(); + const int max_num_foreground_threads = std::max(3, num_cores - 1); + base::ThreadPoolInstance::InitParams init_params(max_num_foreground_threads); + init_params.common_thread_pool_environment = base::ThreadPoolInstance:: + InitParams::CommonThreadPoolEnvironment::COM_MTA; + base::ThreadPoolInstance::Get()->Start(init_params); +} + HRESULT ComServer::RegisterClassObject() { auto& module = Microsoft::WRL::Module<Microsoft::WRL::OutOfProc>::GetModule();
diff --git a/chromecast/media/api/BUILD.gn b/chromecast/media/api/BUILD.gn index 5f64f7c..6de7b4f5 100644 --- a/chromecast/media/api/BUILD.gn +++ b/chromecast/media/api/BUILD.gn
@@ -8,6 +8,7 @@ sources = [ "cast_audio_decoder.h", "cma_backend.h", + "cma_backend_factory.h", "decoder_buffer_base.h", "monotonic_clock.h", ]
diff --git a/chromecast/media/cma/backend/cma_backend_factory.h b/chromecast/media/api/cma_backend_factory.h similarity index 69% rename from chromecast/media/cma/backend/cma_backend_factory.h rename to chromecast/media/api/cma_backend_factory.h index af3d2432..19a4e09 100644 --- a/chromecast/media/cma/backend/cma_backend_factory.h +++ b/chromecast/media/api/cma_backend_factory.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMECAST_MEDIA_CMA_BACKEND_CMA_BACKEND_FACTORY_H_ -#define CHROMECAST_MEDIA_CMA_BACKEND_CMA_BACKEND_FACTORY_H_ +#ifndef CHROMECAST_MEDIA_API_CMA_BACKEND_FACTORY_H_ +#define CHROMECAST_MEDIA_API_CMA_BACKEND_FACTORY_H_ #include <memory> @@ -18,6 +18,8 @@ public: virtual ~CmaBackendFactory() = default; + // Creates a CMA backend. Must be called on the same thread as + // |media_task_runner_|. virtual std::unique_ptr<CmaBackend> CreateBackend( const MediaPipelineDeviceParams& params) = 0; }; @@ -25,4 +27,4 @@ } // namespace media } // namespace chromecast -#endif // CHROMECAST_MEDIA_CMA_BACKEND_CMA_BACKEND_FACTORY_H_ +#endif // CHROMECAST_MEDIA_API_CMA_BACKEND_FACTORY_H_
diff --git a/chromecast/media/audio/cast_audio_manager.cc b/chromecast/media/audio/cast_audio_manager.cc index cfd77ed5..5bf2f2f 100644 --- a/chromecast/media/audio/cast_audio_manager.cc +++ b/chromecast/media/audio/cast_audio_manager.cc
@@ -12,11 +12,11 @@ #include "base/location.h" #include "base/logging.h" #include "build/build_config.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/audio/audio_buildflags.h" #include "chromecast/media/audio/cast_audio_mixer.h" #include "chromecast/media/audio/cast_audio_output_stream.h" #include "chromecast/media/audio/mixer_service/constants.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/public/cast_media_shlib.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "media/audio/audio_device_description.h"
diff --git a/chromecast/media/audio/cast_audio_manager_alsa.cc b/chromecast/media/audio/cast_audio_manager_alsa.cc index 563f20de..9c27610 100644 --- a/chromecast/media/audio/cast_audio_manager_alsa.cc +++ b/chromecast/media/audio/cast_audio_manager_alsa.cc
@@ -10,9 +10,9 @@ #include "base/memory/free_deleter.h" #include "base/stl_util.h" #include "base/strings/string_piece.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/audio/audio_buildflags.h" #include "chromecast/media/audio/cast_audio_input_stream.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "media/audio/alsa/alsa_input.h" #include "media/audio/alsa/alsa_wrapper.h"
diff --git a/chromecast/media/audio/cast_audio_mixer_unittest.cc b/chromecast/media/audio/cast_audio_mixer_unittest.cc index d856c9f..4e73c6c 100644 --- a/chromecast/media/audio/cast_audio_mixer_unittest.cc +++ b/chromecast/media/audio/cast_audio_mixer_unittest.cc
@@ -15,9 +15,9 @@ #include "base/test/task_environment.h" #include "base/time/time.h" #include "chromecast/common/mojom/service_connector.mojom.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/audio/cast_audio_manager.h" #include "chromecast/media/audio/cast_audio_output_stream.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "media/audio/audio_io.h" #include "media/audio/test_audio_thread.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/chromecast/media/audio/cast_audio_output_stream.cc b/chromecast/media/audio/cast_audio_output_stream.cc index 8307c5e..97d6b59c 100644 --- a/chromecast/media/audio/cast_audio_output_stream.cc +++ b/chromecast/media/audio/cast_audio_output_stream.cc
@@ -20,11 +20,11 @@ #include "chromecast/base/bind_to_task_runner.h" #include "chromecast/base/metrics/cast_metrics_helper.h" #include "chromecast/common/mojom/constants.mojom.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/audio/cast_audio_manager.h" #include "chromecast/media/audio/cma_audio_output_stream.h" #include "chromecast/media/audio/mixer_service/mixer_service.pb.h" #include "chromecast/media/audio/mixer_service/output_stream_connection.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/public/cast_media_shlib.h" #include "chromecast/public/media/decoder_config.h" #include "chromecast/public/media/media_pipeline_device_params.h"
diff --git a/chromecast/media/audio/cma_audio_output_stream.cc b/chromecast/media/audio/cma_audio_output_stream.cc index b45246fd..808730538 100644 --- a/chromecast/media/audio/cma_audio_output_stream.cc +++ b/chromecast/media/audio/cma_audio_output_stream.cc
@@ -13,8 +13,8 @@ #include "base/logging.h" #include "base/synchronization/waitable_event.h" #include "chromecast/base/task_runner_impl.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/base/default_monotonic_clock.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/media/cma/base/decoder_buffer_adapter.h" #include "chromecast/media/cma/base/decoder_config_adapter.h" #include "chromecast/public/media/media_pipeline_device_params.h"
diff --git a/chromecast/media/audio/mixer_service/receiver/cma_backend_shim.cc b/chromecast/media/audio/mixer_service/receiver/cma_backend_shim.cc index f77b7b7..bdda632d 100644 --- a/chromecast/media/audio/mixer_service/receiver/cma_backend_shim.cc +++ b/chromecast/media/audio/mixer_service/receiver/cma_backend_shim.cc
@@ -97,7 +97,7 @@ ConvertContentType(params_.content_type()), params_.device_id()); device_params.audio_channel = ConvertChannelSelection(params_.channel_selection()); - cma_backend_ = backend_manager_->CreateCmaBackend(device_params); + cma_backend_ = backend_manager_->CreateBackend(device_params); audio_decoder_ = cma_backend_->CreateAudioDecoder(); if (!audio_decoder_) {
diff --git a/chromecast/media/cma/backend/BUILD.gn b/chromecast/media/cma/backend/BUILD.gn index 393c820..a9de3fb 100644 --- a/chromecast/media/cma/backend/BUILD.gn +++ b/chromecast/media/cma/backend/BUILD.gn
@@ -18,7 +18,6 @@ "audio_decoder_software_wrapper.h", "audio_decoder_wrapper.cc", "audio_decoder_wrapper.h", - "cma_backend_factory.h", "cma_backend_factory_impl.cc", "cma_backend_factory_impl.h", "media_pipeline_backend_manager.cc",
diff --git a/chromecast/media/cma/backend/cma_backend_factory_impl.cc b/chromecast/media/cma/backend/cma_backend_factory_impl.cc index 3a41924..a0f6ba7 100644 --- a/chromecast/media/cma/backend/cma_backend_factory_impl.cc +++ b/chromecast/media/cma/backend/cma_backend_factory_impl.cc
@@ -21,7 +21,7 @@ std::unique_ptr<CmaBackend> CmaBackendFactoryImpl::CreateBackend( const MediaPipelineDeviceParams& params) { - return media_pipeline_backend_manager_->CreateCmaBackend(params); + return media_pipeline_backend_manager_->CreateBackend(params); } } // namespace media
diff --git a/chromecast/media/cma/backend/cma_backend_factory_impl.h b/chromecast/media/cma/backend/cma_backend_factory_impl.h index 973c506..cd99014 100644 --- a/chromecast/media/cma/backend/cma_backend_factory_impl.h +++ b/chromecast/media/cma/backend/cma_backend_factory_impl.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/macros.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" +#include "chromecast/media/api/cma_backend_factory.h" namespace chromecast { namespace media {
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_manager.cc b/chromecast/media/cma/backend/media_pipeline_backend_manager.cc index 09e8c2c2..57e5d9e3 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_manager.cc +++ b/chromecast/media/cma/backend/media_pipeline_backend_manager.cc
@@ -76,7 +76,7 @@ DCHECK(media_task_runner_->BelongsToCurrentThread()); } -std::unique_ptr<CmaBackend> MediaPipelineBackendManager::CreateCmaBackend( +std::unique_ptr<CmaBackend> MediaPipelineBackendManager::CreateBackend( const media::MediaPipelineDeviceParams& params) { DCHECK(media_task_runner_->BelongsToCurrentThread()); return std::make_unique<MediaPipelineBackendWrapper>(params, this,
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_manager.h b/chromecast/media/cma/backend/media_pipeline_backend_manager.h index ab4085e..3cdf007 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_manager.h +++ b/chromecast/media/cma/backend/media_pipeline_backend_manager.h
@@ -17,6 +17,7 @@ #include "base/observer_list_threadsafe.h" #include "base/single_thread_task_runner.h" #include "base/timer/timer.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/public/media/decoder_config.h" #include "chromecast/public/media/media_pipeline_device_params.h" @@ -34,7 +35,7 @@ // feedback sounds should be enabled based on the currently active backends. // Volume feedback sounds are only enabled when there are no active audio // streams (apart from sound-effects streams). -class MediaPipelineBackendManager { +class MediaPipelineBackendManager : public media::CmaBackendFactory { public: class ActiveAudioStreamObserver { public: @@ -89,12 +90,11 @@ MediaPipelineBackendManager( scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, MediaResourceTracker* media_resource_tracker); - ~MediaPipelineBackendManager(); + ~MediaPipelineBackendManager() override; - // Creates a CMA backend. Must be called on the same thread as - // |media_task_runner_|. - std::unique_ptr<CmaBackend> CreateCmaBackend( - const MediaPipelineDeviceParams& params); + // media::CmaBackendFactory implementation: + std::unique_ptr<CmaBackend> CreateBackend( + const MediaPipelineDeviceParams& params) override; // Inform that a backend previously created is destroyed. // Must be called on the same thread as |media_task_runner_|.
diff --git a/chromecast/media/cma/test/mock_cma_backend_factory.h b/chromecast/media/cma/test/mock_cma_backend_factory.h index fb9b7f40..a0fc97a 100644 --- a/chromecast/media/cma/test/mock_cma_backend_factory.h +++ b/chromecast/media/cma/test/mock_cma_backend_factory.h
@@ -8,7 +8,7 @@ #include <memory> #include "chromecast/media/api/cma_backend.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/public/media/media_pipeline_device_params.h" #include "testing/gmock/include/gmock/gmock.h"
diff --git a/chromecast/media/service/cast_mojo_media_client.cc b/chromecast/media/service/cast_mojo_media_client.cc index dbd8b735..101321e 100644 --- a/chromecast/media/service/cast_mojo_media_client.cc +++ b/chromecast/media/service/cast_mojo_media_client.cc
@@ -4,7 +4,7 @@ #include "chromecast/media/service/cast_mojo_media_client.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/service/cast_renderer.h" #include "chromecast/public/media/media_pipeline_backend.h" #include "media/base/cdm_factory.h"
diff --git a/chromecast/media/service/cast_renderer.h b/chromecast/media/service/cast_renderer.h index a712e506..d7ad111 100644 --- a/chromecast/media/service/cast_renderer.h +++ b/chromecast/media/service/cast_renderer.h
@@ -13,8 +13,8 @@ #include "base/unguessable_token.h" #include "chromecast/common/mojom/multiroom.mojom.h" #include "chromecast/common/mojom/service_connector.mojom.h" +#include "chromecast/media/api/cma_backend_factory.h" #include "chromecast/media/base/video_resolution_policy.h" -#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/media/service/mojom/video_geometry_setter.mojom.h" #include "media/base/renderer.h" #include "media/base/waiting.h"
diff --git a/chromecast/system/reboot/BUILD.gn b/chromecast/system/reboot/BUILD.gn index 179b81fa..a2bbb93 100644 --- a/chromecast/system/reboot/BUILD.gn +++ b/chromecast/system/reboot/BUILD.gn
@@ -13,7 +13,7 @@ deps = [ "//base" ] - if (chromecast_branding == "google") { + if (chromecast_branding == "google" && !is_fuchsia) { deps += [ "//chromecast/internal/system/reboot:reboot_util" ] } else { sources += [ "reboot_util_dummy.cc" ]
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index bb9d227..6e5bff6 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -12997.0.0 \ No newline at end of file +12999.0.0 \ No newline at end of file
diff --git a/chromeos/components/quick_answers/BUILD.gn b/chromeos/components/quick_answers/BUILD.gn index 9bd6907..6f95b46c 100644 --- a/chromeos/components/quick_answers/BUILD.gn +++ b/chromeos/components/quick_answers/BUILD.gn
@@ -26,6 +26,10 @@ "search_result_parsers/translation_result_parser.h", "search_result_parsers/unit_conversion_result_parser.cc", "search_result_parsers/unit_conversion_result_parser.h", + "understanding/intent_generator.cc", + "understanding/intent_generator.h", + "utils/language_detector.cc", + "utils/language_detector.h", "utils/quick_answers_metrics.cc", "utils/quick_answers_metrics.h", ] @@ -39,7 +43,7 @@ "//net:net", "//services/data_decoder/public/cpp", "//services/network/public/cpp:cpp", - "//third_party/re2", + "//third_party/cld_3/src/src:cld_3", "//ui/gfx", ] } @@ -59,6 +63,7 @@ "search_result_parsers/unit_conversion_result_parser_unittest.cc", "test/test_helpers.cc", "test/test_helpers.h", + "understanding/intent_generator_unittest.cc", ] deps = [
diff --git a/chromeos/components/quick_answers/DEPS b/chromeos/components/quick_answers/DEPS index 147e0128..ef49e463 100644 --- a/chromeos/components/quick_answers/DEPS +++ b/chromeos/components/quick_answers/DEPS
@@ -1,6 +1,6 @@ include_rules = [ "+ash/public", "+services/data_decoder/public", - "+third_party/re2/src/re2/re2.h", + "+third_party/cld_3/src/src/nnet_language_identifier.h", "+ui/gfx", ]
diff --git a/chromeos/components/quick_answers/quick_answers_client.cc b/chromeos/components/quick_answers/quick_answers_client.cc index 51451c21..17b06e85 100644 --- a/chromeos/components/quick_answers/quick_answers_client.cc +++ b/chromeos/components/quick_answers/quick_answers_client.cc
@@ -8,10 +8,10 @@ #include "base/strings/stringprintf.h" #include "chromeos/components/quick_answers/quick_answers_model.h" +#include "chromeos/components/quick_answers/understanding/intent_generator.h" #include "chromeos/components/quick_answers/utils/quick_answers_metrics.h" #include "chromeos/constants/chromeos_features.h" #include "third_party/icu/source/common/unicode/locid.h" -#include "third_party/re2/src/re2/re2.h" namespace chromeos { namespace quick_answers { @@ -19,26 +19,30 @@ using network::mojom::URLLoaderFactory; -constexpr char kAddressRegex[] = - "^\\d+\\s[A-z]+\\s[A-z]+, ([A-z]|\\s)+, [A-z]{2}\\s[0-9]{5}"; -constexpr char kDirectionQueryRewriteTemplate[] = "Direction to %s"; +constexpr char kDictionaryQueryRewriteTemplate[] = "Define:%s"; QuickAnswersClient::ResultLoaderFactoryCallback* g_testing_result_factory_callback = nullptr; -const QuickAnswersRequest PreprocessRequest( - const QuickAnswersRequest& request) { +const QuickAnswersRequest PreprocessRequest(const QuickAnswersRequest& request, + const std::string& intent_text, + IntentType intent_type) { QuickAnswersRequest processed_request = request; - // Temporarily classify text for demo purpose only. This will be replaced with - // TCLib when it is ready. - // TODO(llin): Query TCLib and rewrite the query based on TCLib result. - if (re2::RE2::FullMatch(request.selected_text, kAddressRegex)) { - // TODO(llin): Add localization string for query rewrite. - processed_request.selected_text = - base::StringPrintf(kDirectionQueryRewriteTemplate, - processed_request.selected_text.c_str()); - } + switch (intent_type) { + case IntentType::kUnit: + processed_request.selected_text = intent_text; + break; + case IntentType::kDictionary: + processed_request.selected_text = base::StringPrintf( + kDictionaryQueryRewriteTemplate, intent_text.c_str()); + break; + case IntentType::kTranslation: + break; + case IntentType::kUnknown: + // TODO(llin): Update to NOTREACHED after integrating with TCLib. + break; + } return processed_request; } @@ -100,14 +104,11 @@ const QuickAnswersRequest& quick_answers_request) { RecordSelectedTextLength(quick_answers_request.selected_text.length()); - // Preprocess the request. - auto& processed_request = PreprocessRequest(quick_answers_request); - delegate_->OnRequestPreprocessFinish(processed_request); - - // TODO(llin): predict user intent based on the request. - result_loader_ = CreateResultLoader(IntentType::kUnknown); - // Load and parse search result. - result_loader_->Fetch(processed_request.selected_text); + // Generate intent from |quick_answers_request|. + IntentGenerator(base::BindOnce(&QuickAnswersClient::IntentGeneratorCallback, + weak_factory_.GetWeakPtr(), + quick_answers_request)) + .GenerateIntent(quick_answers_request); } void QuickAnswersClient::OnQuickAnswerClick(ResultType result_type) { @@ -153,5 +154,22 @@ delegate_->OnQuickAnswerReceived(std::move(quick_answer)); } +void QuickAnswersClient::IntentGeneratorCallback( + const QuickAnswersRequest& quick_answers_request, + const std::string& intent_text, + IntentType intent_type) { + // Preprocess the request. + auto& processed_request = + PreprocessRequest(quick_answers_request, intent_text, intent_type); + + delegate_->OnRequestPreprocessFinish(processed_request); + + // TODO(llin): Only fetch answer if there is a intent generated after + // integrating with TCLib. + result_loader_ = CreateResultLoader(intent_type); + // Load and parse search result. + result_loader_->Fetch(processed_request.selected_text); +} + } // namespace quick_answers } // namespace chromeos
diff --git a/chromeos/components/quick_answers/quick_answers_client.h b/chromeos/components/quick_answers/quick_answers_client.h index 6fe8b505..6a31ae2 100644 --- a/chromeos/components/quick_answers/quick_answers_client.h +++ b/chromeos/components/quick_answers/quick_answers_client.h
@@ -97,6 +97,9 @@ std::unique_ptr<ResultLoader> CreateResultLoader(IntentType intent_type); void NotifyEligibilityChanged(); + void IntentGeneratorCallback(const QuickAnswersRequest& quick_answers_request, + const std::string& intent_text, + IntentType intent_type); network::mojom::URLLoaderFactory* url_loader_factory_ = nullptr; ash::AssistantState* assistant_state_ = nullptr; @@ -110,6 +113,8 @@ bool is_eligible_ = false; // Time when the quick answer is received. base::TimeTicks quick_answer_received_time_; + + base::WeakPtrFactory<QuickAnswersClient> weak_factory_{this}; }; } // namespace quick_answers
diff --git a/chromeos/components/quick_answers/quick_answers_model.h b/chromeos/components/quick_answers/quick_answers_model.h index 212e065..c13286d 100644 --- a/chromeos/components/quick_answers/quick_answers_model.h +++ b/chromeos/components/quick_answers/quick_answers_model.h
@@ -116,12 +116,21 @@ std::unique_ptr<QuickAnswerImage> image; }; +// Information of the device that used by the user to send the request. +struct DeviceProperties { + // Device language code. + std::string language; +}; + // Structure to describe an quick answer request including selected content and // context. struct QuickAnswersRequest { // The selected Text. std::string selected_text; + // Device specific properties. + DeviceProperties device_properties; + // TODO(llin): Add context and other targeted objects (e.g: images, links, // etc). };
diff --git a/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc b/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc index 4968dd7..f0c5681e 100644 --- a/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc +++ b/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc
@@ -88,8 +88,7 @@ if (!result_parser) return false; - result_parser->Parse(result, quick_answer); - return true; + return result_parser->Parse(result, quick_answer); } } // namespace quick_answers
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.cc b/chromeos/components/quick_answers/understanding/intent_generator.cc new file mode 100644 index 0000000..ebc70ad --- /dev/null +++ b/chromeos/components/quick_answers/understanding/intent_generator.cc
@@ -0,0 +1,61 @@ +// Copyright 2020 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/quick_answers/understanding/intent_generator.h" + +#include <map> + +#include "chromeos/components/quick_answers/quick_answers_model.h" + +namespace chromeos { +namespace quick_answers { + +IntentGenerator::IntentGenerator(IntentGeneratorCallback complete_callback) + : complete_callback_(std::move(complete_callback)) { + language_detector_ = std::make_unique<LanguageDetector>(); +} + +IntentGenerator::~IntentGenerator() { + if (complete_callback_) + std::move(complete_callback_).Run(std::string(), IntentType::kUnknown); +} + +void IntentGenerator::GenerateIntent(const QuickAnswersRequest& request) { + // TODO(llin): Generate intent based on text annotation result first and + // fallback to language detection for generating translation intent. Text + // annotation will be a async call. + + // Check if it is |kTranslation| intent. + + // Don't do language detection if no device language is provided. Returns + // unknown intent type. + if (request.device_properties.language.empty()) { + std::move(complete_callback_) + .Run(request.selected_text, IntentType::kUnknown); + return; + } + + // TODO(b/150974962): Investigate improving language detection accuracy using + // surrounding text or page content. + auto detected_language = + language_detector_->DetectLanguage(request.selected_text); + + if (!detected_language.empty() && + detected_language != request.device_properties.language) { + // Detected language is different from device language. + std::move(complete_callback_) + .Run(request.selected_text, IntentType::kTranslation); + } else { + std::move(complete_callback_) + .Run(request.selected_text, IntentType::kUnknown); + } +} + +void IntentGenerator::SetLanguageDetectorForTesting( + std::unique_ptr<LanguageDetector> language_detector) { + language_detector_ = std::move(language_detector); +} + +} // namespace quick_answers +} // namespace chromeos \ No newline at end of file
diff --git a/chromeos/components/quick_answers/understanding/intent_generator.h b/chromeos/components/quick_answers/understanding/intent_generator.h new file mode 100644 index 0000000..f14f0b86 --- /dev/null +++ b/chromeos/components/quick_answers/understanding/intent_generator.h
@@ -0,0 +1,48 @@ +// Copyright 2020 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_QUICK_ANSWERS_UNDERSTANDING_INTENT_GENERATOR_H_ +#define CHROMEOS_COMPONENTS_QUICK_ANSWERS_UNDERSTANDING_INTENT_GENERATOR_H_ + +#include <memory> +#include <string> + +#include "base/callback.h" +#include "chromeos/components/quick_answers/utils/language_detector.h" + +namespace chromeos { +namespace quick_answers { + +struct QuickAnswersRequest; +enum class IntentType; + +// Generate intent from the |QuickAnswersRequest|. +class IntentGenerator { + public: + // Callback used when intent generation is complete. + using IntentGeneratorCallback = + base::OnceCallback<void(const std::string& text, IntentType type)>; + + explicit IntentGenerator(IntentGeneratorCallback complete_callback); + + IntentGenerator(const IntentGenerator&) = delete; + IntentGenerator& operator=(const IntentGenerator&) = delete; + + ~IntentGenerator(); + + // Generate intent from the |request|. + void GenerateIntent(const QuickAnswersRequest& request); + + void SetLanguageDetectorForTesting( + std::unique_ptr<LanguageDetector> language_detector); + + private: + IntentGeneratorCallback complete_callback_; + std::unique_ptr<LanguageDetector> language_detector_; +}; + +} // namespace quick_answers +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_QUICK_ANSWERS_UNDERSTANDING_INTENT_GENERATOR_H_
diff --git a/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc b/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc new file mode 100644 index 0000000..10c411b --- /dev/null +++ b/chromeos/components/quick_answers/understanding/intent_generator_unittest.cc
@@ -0,0 +1,98 @@ +// Copyright 2020 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/quick_answers/understanding/intent_generator.h" + +#include <memory> +#include <string> + +#include "base/bind.h" +#include "chromeos/components/quick_answers/quick_answers_model.h" +#include "chromeos/components/quick_answers/utils/language_detector.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chromeos { +namespace quick_answers { +namespace { + +class MockLanguageDetector : public LanguageDetector { + public: + MockLanguageDetector() = default; + + MockLanguageDetector(const MockLanguageDetector&) = delete; + MockLanguageDetector& operator=(const MockLanguageDetector&) = delete; + + ~MockLanguageDetector() override = default; + + // TestResultLoader: + MOCK_METHOD1(DetectLanguage, std::string(const std::string&)); +}; + +} // namespace + +class IntentGeneratorTest : public testing::Test { + public: + IntentGeneratorTest() = default; + + IntentGeneratorTest(const IntentGeneratorTest&) = delete; + IntentGeneratorTest& operator=(const IntentGeneratorTest&) = delete; + + void SetUp() override { + intent_generator_ = std::make_unique<IntentGenerator>( + base::BindOnce(&IntentGeneratorTest::IntentGeneratorTestCallback, + base::Unretained(this))); + // Mock language detector. + mock_language_detector_ = std::make_unique<MockLanguageDetector>(); + EXPECT_CALL(*mock_language_detector_, DetectLanguage(::testing::_)) + .WillRepeatedly(::testing::Return("en")); + intent_generator_->SetLanguageDetectorForTesting( + std::move(mock_language_detector_)); + } + + void TearDown() override { intent_generator_.reset(); } + + void IntentGeneratorTestCallback(const std::string& text, IntentType type) { + intent_text_ = text; + intent_type_ = type; + } + + protected: + std::unique_ptr<IntentGenerator> intent_generator_; + std::unique_ptr<MockLanguageDetector> mock_language_detector_; + std::string intent_text_; + IntentType intent_type_ = IntentType::kUnknown; +}; + +TEST_F(IntentGeneratorTest, TranslationIntent) { + QuickAnswersRequest request; + request.selected_text = "quick answers"; + request.device_properties.language = "es"; + intent_generator_->GenerateIntent(request); + + EXPECT_EQ(IntentType::kTranslation, intent_type_); + EXPECT_EQ("quick answers", intent_text_); +} + +TEST_F(IntentGeneratorTest, TranslationIntentSameLanguage) { + QuickAnswersRequest request; + request.selected_text = "quick answers"; + request.device_properties.language = "en"; + intent_generator_->GenerateIntent(request); + + EXPECT_EQ(IntentType::kUnknown, intent_type_); + EXPECT_EQ("quick answers", intent_text_); +} + +TEST_F(IntentGeneratorTest, TranslationIntentNotEnabled) { + QuickAnswersRequest request; + request.selected_text = "quick answers"; + intent_generator_->GenerateIntent(request); + + EXPECT_EQ(IntentType::kUnknown, intent_type_); + EXPECT_EQ("quick answers", intent_text_); +} + +} // namespace quick_answers +} // namespace chromeos
diff --git a/chromeos/components/quick_answers/utils/language_detector.cc b/chromeos/components/quick_answers/utils/language_detector.cc new file mode 100644 index 0000000..d447a61 --- /dev/null +++ b/chromeos/components/quick_answers/utils/language_detector.cc
@@ -0,0 +1,38 @@ +// Copyright 2020 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/quick_answers/utils/language_detector.h" + +#include "third_party/cld_3/src/src/nnet_language_identifier.h" + +namespace chromeos { +namespace quick_answers { +namespace { + +using chrome_lang_id::NNetLanguageIdentifier; + +const int kMinNumBytes = 0; +const int kMaxNumBytes = 1000; + +} // namespace + +LanguageDetector::LanguageDetector() { + lang_id_ = + std::make_unique<NNetLanguageIdentifier>(kMinNumBytes, kMaxNumBytes); +} + +LanguageDetector::~LanguageDetector() = default; + +std::string LanguageDetector::DetectLanguage(const std::string& text) { + const NNetLanguageIdentifier::Result result = lang_id_->FindLanguage(text); + + std::string language; + if (result.is_reliable) + language = result.language; + + return language; +} + +} // namespace quick_answers +} // namespace chromeos \ No newline at end of file
diff --git a/chromeos/components/quick_answers/utils/language_detector.h b/chromeos/components/quick_answers/utils/language_detector.h new file mode 100644 index 0000000..3c244c46 --- /dev/null +++ b/chromeos/components/quick_answers/utils/language_detector.h
@@ -0,0 +1,37 @@ +// Copyright 2020 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_QUICK_ANSWERS_UTILS_LANGUAGE_DETECTOR_H_ +#define CHROMEOS_COMPONENTS_QUICK_ANSWERS_UTILS_LANGUAGE_DETECTOR_H_ + +#include <memory> +#include <string> + +namespace chrome_lang_id { +class NNetLanguageIdentifier; +} // namespace chrome_lang_id + +namespace chromeos { +namespace quick_answers { + +// Utility class for langugage detection. +class LanguageDetector { + public: + LanguageDetector(); + LanguageDetector(const LanguageDetector&) = delete; + LanguageDetector& operator=(const LanguageDetector&) = delete; + virtual ~LanguageDetector(); + + // Returns the ISO 639 language code of the specified |text|, or empty string + // if it failed. Virtual for testing. + virtual std::string DetectLanguage(const std::string& text); + + private: + std::unique_ptr<chrome_lang_id::NNetLanguageIdentifier> lang_id_; +}; + +} // namespace quick_answers +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_QUICK_ANSWERS_UTILS_LANGUAGE_DETECTOR_H_
diff --git a/chromeos/dbus/debug_daemon/debug_daemon_client.cc b/chromeos/dbus/debug_daemon/debug_daemon_client.cc index 4f9f9a4..c9091760 100644 --- a/chromeos/dbus/debug_daemon/debug_daemon_client.cc +++ b/chromeos/dbus/debug_daemon/debug_daemon_client.cc
@@ -705,14 +705,15 @@ void OnUint64Method(DBusMethodCallback<uint64_t> callback, dbus::Response* response) { if (!response) { - std::move(callback).Run(0); + std::move(callback).Run(base::nullopt); return; } dbus::MessageReader reader(response); uint64_t result; if (!reader.PopUint64(&result)) { - result = 0; + std::move(callback).Run(base::nullopt); + return; } std::move(callback).Run(std::move(result));
diff --git a/chromeos/network/OWNERS b/chromeos/network/OWNERS index 8c9e09c..995b00a1 100644 --- a/chromeos/network/OWNERS +++ b/chromeos/network/OWNERS
@@ -2,4 +2,5 @@ khorimoto@chromium.org stevenjb@chromium.org tbarzic@chromium.org -# COMPONENT: UI>Shell>Networking + +# COMPONENT: OS>Systems>Network
diff --git a/chromeos/policy/OWNERS b/chromeos/policy/OWNERS index a32fe9bd..d9132bc 100644 --- a/chromeos/policy/OWNERS +++ b/chromeos/policy/OWNERS
@@ -1,3 +1,4 @@ +anqing@chromium.org antrim@chromium.org atwilson@chromium.org bartfab@chromium.org
diff --git a/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler.cc b/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler.cc index 5a7aab83..ba67016 100644 --- a/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler.cc +++ b/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler.cc
@@ -121,36 +121,22 @@ PA_LOG(VERBOSE) << "Attempting to disable kSmartLockHost on device " << host_to_disable->GetTruncatedDeviceIdForLogs(); - // If the host has a non-trivial Instance ID, then it was returned from a v2 - // DeviceSync (Instance IDs are not part of the v1 protocol). In that case, - // exercise the v2 RPC SetFeatureStatus, even if v1 DeviceSync is still - // running in parallel. SetFeatureStatus and its v1 counterpart, - // SetSoftwareFeatureState, ultimately update the same backend database entry, - // so only one needs to be invoked. if (features::ShouldUseV1DeviceSync()) { - // In order to avoid a race condition, we are assuming that all - // SetFeatureStatus() and SetSoftwareFeatureState() requests are added to - // the same queue and processed in order. The DeviceSync service - // implementation guarantees this ordering. - if (!host_to_disable->instance_id().empty()) { - device_sync_client_->SetFeatureStatus( - host_to_disable->instance_id(), - multidevice::SoftwareFeature::kSmartLockHost, - device_sync::FeatureStatusChange::kDisable, - base::BindOnce(&GrandfatheredEasyUnlockHostDisabler:: - OnDisableEasyUnlockHostResult, - weak_ptr_factory_.GetWeakPtr(), *host_to_disable)); - - } else { - DCHECK(!host_to_disable->public_key().empty()); - device_sync_client_->SetSoftwareFeatureState( - host_to_disable->public_key(), - multidevice::SoftwareFeature::kSmartLockHost, false /* enabled */, - false /* is_exclusive */, - base::BindOnce(&GrandfatheredEasyUnlockHostDisabler:: - OnDisableEasyUnlockHostResult, - weak_ptr_factory_.GetWeakPtr(), *host_to_disable)); - } + // Even if the host has a non-trivial Instance ID, we still invoke the v1 + // DeviceSync RPC to set the feature state. This ensures that GmsCore will + // be notified of the change regardless of what version of DeviceSync it is + // running. The v1 and v2 RPCs to change feature states ultimately update + // the same backend database entry. Note: The RemoteDeviceProvider + // guarantees that every device will have a public key while v1 DeviceSync + // is enabled. + DCHECK(!host_to_disable->public_key().empty()); + device_sync_client_->SetSoftwareFeatureState( + host_to_disable->public_key(), + multidevice::SoftwareFeature::kSmartLockHost, false /* enabled */, + false /* is_exclusive */, + base::BindOnce( + &GrandfatheredEasyUnlockHostDisabler::OnDisableEasyUnlockHostResult, + weak_ptr_factory_.GetWeakPtr(), *host_to_disable)); } else { DCHECK(!host_to_disable->instance_id().empty()); device_sync_client_->SetFeatureStatus(
diff --git a/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler_unittest.cc b/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler_unittest.cc index 17f8578..58883ab 100644 --- a/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler_unittest.cc +++ b/chromeos/services/multidevice_setup/grandfathered_easy_unlock_host_disabler_unittest.cc
@@ -152,10 +152,10 @@ const base::Optional<multidevice::RemoteDeviceRef>& expected_host) { EXPECT_EQ( expected_queue_size, - HasInstanceId() - ? fake_device_sync_client_->GetSetFeatureStatusInputsQueueSize() - : fake_device_sync_client_ - ->GetSetSoftwareFeatureStateInputsQueueSize()); + features::ShouldUseV1DeviceSync() + ? fake_device_sync_client_ + ->GetSetSoftwareFeatureStateInputsQueueSize() + : fake_device_sync_client_->GetSetFeatureStatusInputsQueueSize()); if (expected_queue_size > 0) { ASSERT_TRUE(expected_host); VerifyLatestEasyUnlockHostDisableRequest(*expected_host); @@ -164,11 +164,11 @@ void InvokePendingEasyUnlockHostDisableRequestCallback( device_sync::mojom::NetworkRequestResult result_code) { - if (HasInstanceId()) { - fake_device_sync_client_->InvokePendingSetFeatureStatusCallback( + if (features::ShouldUseV1DeviceSync()) { + fake_device_sync_client_->InvokePendingSetSoftwareFeatureStateCallback( result_code); } else { - fake_device_sync_client_->InvokePendingSetSoftwareFeatureStateCallback( + fake_device_sync_client_->InvokePendingSetFeatureStatusCallback( result_code); } } @@ -212,7 +212,7 @@ void VerifyLatestEasyUnlockHostDisableRequest( const multidevice::RemoteDeviceRef& expected_host) { // Verify inputs to SetSoftwareFeatureState(). - if (expected_host.instance_id().empty()) { + if (features::ShouldUseV1DeviceSync()) { ASSERT_FALSE( fake_device_sync_client_->set_software_feature_state_inputs_queue() .empty());
diff --git a/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc b/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc index cf77ba9..cb65464 100644 --- a/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc +++ b/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc
@@ -134,12 +134,8 @@ timer_->Stop(); if (host_device) { - // If an Instance ID is available, use that to identify the device; - // otherwise, use the encoded public key. if (features::ShouldUseV1DeviceSync()) { - SetPendingHostRequest(host_device->instance_id().empty() - ? host_device->GetDeviceId() - : host_device->instance_id()); + SetPendingHostRequest(host_device->GetDeviceId()); } else { DCHECK(!host_device->instance_id().empty()); SetPendingHostRequest(host_device->instance_id()); @@ -183,12 +179,10 @@ // the persisted host ID will not be recognized, and the user will need to go // through setup again: // * The device was actually removed from the user's account. - // * Instance ID is persisted and v2 DeviceSync is rolled back. // * A public key is persisted, v1 DeviceSync is disabled, and the v2 device // data hasn't been decrypted. - // * v1 and v2 DeviceSync are running in parallel, an Instance ID is - // persisted, the device metadata is encrypted with a new group key, - // resulting in v1 device data being used. + // * Instance ID is persisted, v1 DeviceSync in re-enabled and the Instance + // ID cannot be found in the device list. // We expect all of these scenarios to be very rare. SetPendingHostRequest(kNoPendingRequest); return false; @@ -244,8 +238,7 @@ DCHECK(!id.empty()); for (const auto& remote_device : device_sync_client_->GetSyncedDevices()) { if (features::ShouldUseV1DeviceSync()) { - if (id == remote_device.instance_id() || - id == remote_device.GetDeviceId()) + if (id == remote_device.GetDeviceId()) return remote_device; } else { if (id == remote_device.instance_id()) @@ -278,38 +271,22 @@ << (should_enable ? "enable" : "disable") << " the host.\n" << GenerateDeviceIdString(device_to_set); - // If the |device_to_set| has a non-trivial Instance ID, then it was returned - // from a v2 DeviceSync (Instance IDs are not part of the v1 protocol). In - // that case, exercise the v2 RPC SetFeatureStatus, even if v1 DeviceSync is - // still running in parallel. SetFeatureStatus and its v1 counterpart, - // SetSoftwareFeatureState, ultimately update the same backend database entry, - // so only one needs to be invoked. if (features::ShouldUseV1DeviceSync()) { - // In order to avoid a race condition in mutating the BetterTogether host - // state on the CryptAuth backend, we are assuming that all - // SetFeatureStatus() and SetSoftwareFeatureState() requests are added to - // the same queue and processed in order. The DeviceSync service - // implementation guarantees this ordering. - if (!device_to_set.instance_id().empty()) { - device_sync_client_->SetFeatureStatus( - device_to_set.instance_id(), - multidevice::SoftwareFeature::kBetterTogetherHost, - should_enable ? device_sync::FeatureStatusChange::kEnableExclusively - : device_sync::FeatureStatusChange::kDisable, - base::BindOnce( - &HostBackendDelegateImpl::OnSetHostNetworkRequestFinished, - weak_ptr_factory_.GetWeakPtr(), device_to_set, should_enable)); - - } else { - DCHECK(!device_to_set.public_key().empty()); - device_sync_client_->SetSoftwareFeatureState( - device_to_set.public_key(), - multidevice::SoftwareFeature::kBetterTogetherHost, - should_enable /* enabled */, should_enable /* is_exclusive */, - base::BindOnce( - &HostBackendDelegateImpl::OnSetHostNetworkRequestFinished, - weak_ptr_factory_.GetWeakPtr(), device_to_set, should_enable)); - } + // Even if the |device_to_set| has a non-trivial Instance ID, we still + // invoke the v1 DeviceSync RPC to set the feature state. This ensures that + // GmsCore will be notified of the change regardless of what version of + // DeviceSync it is running. The v1 and v2 RPCs to change feature states + // ultimately update the same backend database entry. Note: The + // RemoteDeviceProvider guarantees that every device will have a public key + // while v1 DeviceSync is enabled. + DCHECK(!device_to_set.public_key().empty()); + device_sync_client_->SetSoftwareFeatureState( + device_to_set.public_key(), + multidevice::SoftwareFeature::kBetterTogetherHost, + should_enable /* enabled */, should_enable /* is_exclusive */, + base::BindOnce( + &HostBackendDelegateImpl::OnSetHostNetworkRequestFinished, + weak_ptr_factory_.GetWeakPtr(), device_to_set, should_enable)); } else { DCHECK(!device_to_set.instance_id().empty()); device_sync_client_->SetFeatureStatus(
diff --git a/chromeos/services/multidevice_setup/host_backend_delegate_impl_unittest.cc b/chromeos/services/multidevice_setup/host_backend_delegate_impl_unittest.cc index b6b204d..3416fd0 100644 --- a/chromeos/services/multidevice_setup/host_backend_delegate_impl_unittest.cc +++ b/chromeos/services/multidevice_setup/host_backend_delegate_impl_unittest.cc
@@ -47,15 +47,17 @@ // testing::Test: void SetUp() override { - // Tests are run once to simulate when only v1 DeviceSync is operational and - // once to simulate when only v2 DeviceSync is operational. In the former - // case, only public keys are needed for the host verifier, and in the - // latter case, only Instance IDs are needed. + SetFeatureFlags(GetParam() /* use_v1_devicesync */); + + // Tests are run once to simulate when v1 DeviceSync is enabled and once to + // simulate when it is disabled, leaving only v2 DeviceSync operational. In + // the former case, only public keys are needed, and in the latter case, + // only Instance IDs are needed. for (multidevice::RemoteDeviceRef device : test_devices_) { - if (DoTestDevicesHaveInstanceIds()) - GetMutableRemoteDevice(device)->public_key.clear(); - else + if (features::ShouldUseV1DeviceSync()) GetMutableRemoteDevice(device)->instance_id.clear(); + else + GetMutableRemoteDevice(device)->public_key.clear(); } fake_eligible_host_devices_provider_ = @@ -77,35 +79,6 @@ delegate_->RemoveObserver(observer_.get()); } - bool DoTestDevicesHaveInstanceIds() { return GetParam(); } - - void SetFeatureFlags(bool use_v1_devicesync, bool use_v2_devicesync) { - ASSERT_TRUE(use_v1_devicesync || use_v2_devicesync); - - std::vector<base::Feature> enabled_features; - std::vector<base::Feature> disabled_features; - - // This flag has no direct effect of on the RemoteDeviceProvider; however, - // v2 Enrollment is a prerequisite for v2 DeviceSync. - enabled_features.push_back(chromeos::features::kCryptAuthV2Enrollment); - - if (use_v1_devicesync) { - disabled_features.push_back( - chromeos::features::kDisableCryptAuthV1DeviceSync); - } else { - enabled_features.push_back( - chromeos::features::kDisableCryptAuthV1DeviceSync); - } - - if (use_v2_devicesync) { - enabled_features.push_back(chromeos::features::kCryptAuthV2DeviceSync); - } else { - disabled_features.push_back(chromeos::features::kCryptAuthV2DeviceSync); - } - - scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); - } - void CreateDelegate( const base::Optional<multidevice::RemoteDeviceRef>& initial_host, const std::string& initial_pending_host_request = kNoPendingRequest) { @@ -126,10 +99,10 @@ } int GetSetHostNetworkRequestCallbackQueueSize() { - return DoTestDevicesHaveInstanceIds() - ? fake_device_sync_client_->GetSetFeatureStatusInputsQueueSize() - : fake_device_sync_client_ - ->GetSetSoftwareFeatureStateInputsQueueSize(); + return features::ShouldUseV1DeviceSync() + ? fake_device_sync_client_ + ->GetSetSoftwareFeatureStateInputsQueueSize() + : fake_device_sync_client_->GetSetFeatureStatusInputsQueueSize(); } void InvokePendingSetHostNetworkRequestCallback( @@ -138,11 +111,11 @@ size_t num_failure_events_before_call = observer_->num_failed_backend_requests(); - if (DoTestDevicesHaveInstanceIds()) { - fake_device_sync_client_->InvokePendingSetFeatureStatusCallback( + if (features::ShouldUseV1DeviceSync()) { + fake_device_sync_client_->InvokePendingSetSoftwareFeatureStateCallback( result_code); } else { - fake_device_sync_client_->InvokePendingSetSoftwareFeatureStateCallback( + fake_device_sync_client_->InvokePendingSetFeatureStatusCallback( result_code); } @@ -274,11 +247,32 @@ } private: + void SetFeatureFlags(bool use_v1_devicesync) { + std::vector<base::Feature> enabled_features; + std::vector<base::Feature> disabled_features; + + // These flags have no direct effect of on the host backend delegate; + // however, v2 Enrollment and DeviceSync must be enabled before v1 + // DeviceSync can be disabled. + enabled_features.push_back(chromeos::features::kCryptAuthV2Enrollment); + enabled_features.push_back(chromeos::features::kCryptAuthV2DeviceSync); + + if (use_v1_devicesync) { + disabled_features.push_back( + chromeos::features::kDisableCryptAuthV1DeviceSync); + } else { + enabled_features.push_back( + chromeos::features::kDisableCryptAuthV1DeviceSync); + } + + scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); + } + void VerifyLatestSetHostNetworkRequest( const multidevice::RemoteDeviceRef expected_host, bool expected_should_enable) { // Verify inputs to SetSoftwareFeatureState(). - if (expected_host.instance_id().empty()) { + if (features::ShouldUseV1DeviceSync()) { ASSERT_FALSE( fake_device_sync_client_->set_software_feature_state_inputs_queue() .empty()); @@ -327,8 +321,6 @@ }; TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, Success) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */); // Set device 0. @@ -372,8 +364,6 @@ } TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, Failure) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */); // Attempt to set device 0, but fail. @@ -411,9 +401,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, StartWithDevice_SimultaneousRequests) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); - // Start with device 0 as the active host. CreateDelegate(test_devices()[0] /* initial_host */); @@ -476,8 +463,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, SimultaneousRequestsToSameDevice) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */); // Attempt to set device 0, but do not invoke the callback yet. @@ -528,8 +513,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, MultipleRequestsToSameDevice_FirstFail_ThenSucceed) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */); // Attempt to set device 0, but fail. @@ -560,13 +543,11 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, InitialPendingRequestButNoInitialDevice) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate( base::nullopt /* initial_host */, - DoTestDevicesHaveInstanceIds() - ? test_devices()[0].instance_id() - : test_devices()[0].GetDeviceId() /* initial_pending_host_request */); + features::ShouldUseV1DeviceSync() + ? test_devices()[0].GetDeviceId() + : test_devices()[0].instance_id() /* initial_pending_host_request */); // The delegate should have started a request as soon as it was created. // Simulate it succeeding. @@ -582,8 +563,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, InitialDeviceWithPendingRequestToRemoveIt) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate( test_devices()[0] /* initial_host */, kPendingRemovalOfCurrentHost /* initial_pending_host_request */); @@ -601,8 +580,6 @@ } TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, ChangedFromOtherDevice) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */); // The device changed from another device (i.e., @@ -617,8 +594,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, PendingRequestCanceledIfDeviceToSetNoLongerExists) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate(base::nullopt /* initial_host */, "nonexistentDeviceId" /* initial_pending_host_request */); @@ -629,8 +604,6 @@ TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, PendingRequestCanceledIfDeviceToRemoveNoLongerExists) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); CreateDelegate( base::nullopt /* initial_host */, kPendingRemovalOfCurrentHost /* initial_pending_host_request */); @@ -641,9 +614,6 @@ } TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, TryToSetNonEligibleHost) { - SetFeatureFlags(!DoTestDevicesHaveInstanceIds() /* use_v1_devicesync */, - DoTestDevicesHaveInstanceIds() /* use_v2_devicesync */); - // Make all test devices ineligible. fake_eligible_host_devices_provider()->set_eligible_host_devices( multidevice::RemoteDeviceRefList()); @@ -654,74 +624,7 @@ EXPECT_EQ(0u, observer()->num_pending_host_request_changes()); } -// This tests additional logic for when v1 and v2 DeviceSync run in parallel. -TEST_P(MultiDeviceSetupHostBackendDelegateImplTest, V1andV2DeviceSync) { - // Only run this test once, where device 0 has an Instance ID and device 1 - // does not. - if (!DoTestDevicesHaveInstanceIds()) - return; - - SetFeatureFlags(true /* use_v1_devicesync */, true /* use_v2_devicesync */); - - // Make device 1 a v1 DeviceSync device. - GetMutableRemoteDevice(test_devices()[1])->instance_id.clear(); - GetMutableRemoteDevice(test_devices()[1])->public_key = "public_key"; - - CreateDelegate(base::nullopt /* initial_host */); - - // Attempt to set device 0, which has an Instance ID, but do not invoke the - // callback yet. Device 0 is now the pending host. - AttemptToSetMultiDeviceHostOnBackend(test_devices()[0]); - EXPECT_TRUE(delegate()->HasPendingHostRequest()); - EXPECT_EQ(test_devices()[0], delegate()->GetPendingHostRequest()); - EXPECT_EQ(base::nullopt, delegate()->GetMultiDeviceHostFromBackend()); - EXPECT_EQ(1, fake_device_sync_client()->GetSetFeatureStatusInputsQueueSize()); - - // Now, attempt to set device 1, which does not have an Instance ID. Device 1 - // is now the pending host, but no SetSoftwareFeatureState call was made since - // the SetFeatureStatus() callback hasn't been invoked yet. - AttemptToSetMultiDeviceHostOnBackend(test_devices()[1]); - EXPECT_TRUE(delegate()->HasPendingHostRequest()); - EXPECT_EQ(test_devices()[1], delegate()->GetPendingHostRequest()); - EXPECT_EQ(base::nullopt, delegate()->GetMultiDeviceHostFromBackend()); - EXPECT_EQ( - 1, - fake_device_sync_client()->GetSetSoftwareFeatureStateInputsQueueSize()); - - // Fire the callback for device 0 and have it succeed. This should affect the - // value of GetMultiDeviceHostFromBackend(); however, because device 0 is not - // the pending host, the observer should not be notified. Now that the device - // 0 request is finished, there should be a new request for device 1. - // Note: We are assuming that the feature setting requests are processed in - // the order they are called. This is an assumption made in the - // HostBackendDelegate implementation. - fake_device_sync_client()->InvokePendingSetFeatureStatusCallback( - device_sync::mojom::NetworkRequestResult::kSuccess); - EXPECT_EQ(0, fake_device_sync_client()->GetSetFeatureStatusInputsQueueSize()); - EXPECT_EQ( - 1, - fake_device_sync_client()->GetSetSoftwareFeatureStateInputsQueueSize()); - SimulateNewHostDevicesSynced(test_devices()[0] /* host_device_after_sync */, - false /* expected_to_fulfill_pending_request */); - EXPECT_TRUE(delegate()->HasPendingHostRequest()); - EXPECT_EQ(test_devices()[1], delegate()->GetPendingHostRequest()); - EXPECT_EQ(test_devices()[0], delegate()->GetMultiDeviceHostFromBackend()); - - // Fire the callback for device 1, and have it succeed. - fake_device_sync_client()->InvokePendingSetSoftwareFeatureStateCallback( - device_sync::mojom::NetworkRequestResult::kSuccess); - EXPECT_EQ(0, fake_device_sync_client()->GetSetFeatureStatusInputsQueueSize()); - EXPECT_EQ( - 0, - fake_device_sync_client()->GetSetSoftwareFeatureStateInputsQueueSize()); - SimulateNewHostDevicesSynced(test_devices()[1] /* host_device_after_sync */, - true /* expected_to_fulfill_pending_request */); - EXPECT_FALSE(delegate()->HasPendingHostRequest()); - EXPECT_EQ(test_devices()[1], delegate()->GetMultiDeviceHostFromBackend()); -} - -// Runs tests twice; once for devices that all have Instance IDs and once for -// devices that do not. +// Runs tests twice; once with v1 DeviceSync enabled and once with it disabled. // TODO(https://crbug.com/1019206): Remove when v1 DeviceSync is disabled, // when all devices should have an Instance ID. INSTANTIATE_TEST_SUITE_P(All,
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb index a329ff5..0cf6c7c8 100644 --- a/chromeos/strings/chromeos_strings_as.xtb +++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -6,6 +6,7 @@ <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" />এ এই ডিভাইচটো পৰিচালনা কৰে তথা আপোনাৰ কাৰ্যকলাপো নিৰীক্ষণ কৰিব পাৰে।</translation> <translation id="150962533380566081">অমান্য PUK।</translation> <translation id="1510238584712386396">লঞ্চাৰ</translation> +<translation id="159973520823200404">Discover</translation> <translation id="1734367976349034509">এই ডিভাইচ এণ্টাৰপ্ৰাইজৰ দ্বাৰা পৰিচালিত</translation> <translation id="1905710495812624430">চেষ্টা কৰাৰ সৰ্বাধিক সীমা অতিক্ৰম কৰিছে।</translation> <translation id="1930797645656624981">Chrome OS ইনপুট পদ্ধতি সেৱা</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb index a3760c7..d84dacc 100644 --- a/chromeos/strings/chromeos_strings_it.xtb +++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -6,7 +6,7 @@ <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> gestisce questo dispositivo e potrebbe essere in grado di monitorare le tue attività.</translation> <translation id="150962533380566081">PUK non valido.</translation> <translation id="1510238584712386396">Avvio applicazioni</translation> -<translation id="159973520823200404">Scopri</translation> +<translation id="159973520823200404">Discover</translation> <translation id="1734367976349034509">Questo dispositivo è gestito dall'azienda</translation> <translation id="1905710495812624430">Numero massimo di tentativi consentiti superato.</translation> <translation id="1930797645656624981">Servizio metodo di immissione di Chrome OS</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb index f38b80b..00c7aa1 100644 --- a/chromeos/strings/chromeos_strings_ko.xtb +++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -6,7 +6,7 @@ <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" />에서 이 기기를 관리하며 내 활동을 모니터링할 수도 있습니다.</translation> <translation id="150962533380566081">잘못된 PUK입니다.</translation> <translation id="1510238584712386396">런처</translation> -<translation id="159973520823200404">디스커버</translation> +<translation id="159973520823200404">Discover</translation> <translation id="1734367976349034509">기업에서 관리하는 기기입니다.</translation> <translation id="1905710495812624430">허용되는 최대 시도 횟수를 초과했습니다.</translation> <translation id="1930797645656624981">Chrome OS 입력 방법 서비스</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index f2346d35..31d4bdb 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -6,7 +6,7 @@ <translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ਵੱਲੋਂ ਇਸ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਤੁਹਾਡੀ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।</translation> <translation id="150962533380566081">ਅਵੈਧ PUK।</translation> <translation id="1510238584712386396">ਲੌਂਚਰ</translation> -<translation id="159973520823200404">Discover</translation> +<translation id="159973520823200404">ਡਿਸਕਵਰ</translation> <translation id="1734367976349034509">ਇਹ ਡੀਵਾਈਸ ਐਂਟਰਪ੍ਰਾਈਜ਼ ਦੁਆਰਾ ਪ੍ਰਬੰਧਿਤ ਹੈ</translation> <translation id="1905710495812624430">ਅਧਿਕਤਮ ਮਨਜ਼ੂਰ ਕੀਤੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਵਧੀਆਂ।</translation> <translation id="1930797645656624981">Chrome OS ਇਨਪੁੱਟ ਵਿਧੀ ਸੇਵਾ</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb index 6eef9ec..2b9de7e 100644 --- a/chromeos/strings/chromeos_strings_ru.xtb +++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -6,7 +6,7 @@ <translation id="1482734542997480527">Это управляемое устройство. Администратор домена <ph name="ENROLLMENT_DOMAIN" /> может отслеживать ваши действия.</translation> <translation id="150962533380566081">Неверный PUK-код.</translation> <translation id="1510238584712386396">Панель запуска</translation> -<translation id="159973520823200404">Рекомендации</translation> +<translation id="159973520823200404">Discover</translation> <translation id="1734367976349034509">Это корпоративное устройство</translation> <translation id="1905710495812624430">Превышено максимально допустимое число попыток.</translation> <translation id="1930797645656624981">Выбор способа ввода в Chrome OS</translation>
diff --git a/components/autofill/content/renderer/BUILD.gn b/components/autofill/content/renderer/BUILD.gn index 88bf64a..9cebb7b 100644 --- a/components/autofill/content/renderer/BUILD.gn +++ b/components/autofill/content/renderer/BUILD.gn
@@ -41,6 +41,7 @@ "//base:i18n", "//components/autofill/content/common/mojom", "//components/autofill/core/common", + "//components/password_manager/core/common:common", "//components/safe_browsing:buildflags", "//components/strings", "//content/public/common",
diff --git a/components/autofill/content/renderer/DEPS b/components/autofill/content/renderer/DEPS index ac347ebe..e42f9ec 100644 --- a/components/autofill/content/renderer/DEPS +++ b/components/autofill/content/renderer/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+content/public/common", "+content/public/renderer", + "+components/password_manager/core/common/password_manager_features.h", "+components/safe_browsing/buildflags.h", "+third_party/re2", # Allow inclusion of WebKit API files.
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 19f96bb..aebb9af 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -35,6 +35,7 @@ #include "components/autofill/core/common/form_field_data.h" #include "components/autofill/core/common/mojom/autofill_types.mojom.h" #include "components/autofill/core/common/password_form_fill_data.h" +#include "components/password_manager/core/common/password_manager_features.h" #include "components/safe_browsing/buildflags.h" #include "content/public/renderer/document_state.h" #include "content/public/renderer/render_frame.h" @@ -403,6 +404,14 @@ return frame && frame->View(); } +bool ShowPopupWithoutPasswords(const WebInputElement& password_element) { + if (!base::FeatureList::IsEnabled( + password_manager::features::kEnablePasswordsAccountStorage)) { + return false; + } + return !password_element.IsNull() && IsElementEditable(password_element); +} + } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -482,11 +491,10 @@ } PasswordAutofillAgent::PasswordValueGatekeeper::PasswordValueGatekeeper() - : was_user_gesture_seen_(false) { -} + : was_user_gesture_seen_(false) {} -PasswordAutofillAgent::PasswordValueGatekeeper::~PasswordValueGatekeeper() { -} +PasswordAutofillAgent::PasswordValueGatekeeper::~PasswordValueGatekeeper() = + default; void PasswordAutofillAgent::PasswordValueGatekeeper::RegisterElement( WebInputElement* element) { @@ -854,7 +862,7 @@ FindPasswordInfoForElement(element, UseFallbackData(true), &username_element, &password_element, &password_info); - if (!password_info) { + if (!password_info && !ShowPopupWithoutPasswords(password_element)) { MaybeCheckSafeBrowsingReputation(element); return false; } @@ -885,8 +893,9 @@ // If a username element is focused, show suggestions unless all possible // usernames are filtered. if (!element.IsPasswordFieldForAutofill()) { - if (show_all || CanShowUsernameSuggestion(password_info->fill_data, - element.Value().Utf16())) { + if (show_all || + (password_info && CanShowUsernameSuggestion(password_info->fill_data, + element.Value().Utf16()))) { ShowSuggestionPopup(element.Value().Utf16(), element, show_all, OnPasswordField(false)); return true; @@ -896,9 +905,10 @@ // If the element is a password field, do not to show a popup if the user has // already accepted a password suggestion on another password field. - if (password_info->password_field_suggestion_was_accepted && - element != password_info->password_field) + if (password_info && password_info->password_field_suggestion_was_accepted && + element != password_info->password_field) { return true; + } // Show suggestions for password fields only while they are empty. if (!element.IsAutofilled() && !element.Value().IsEmpty()) {
diff --git a/components/browser_ui/util/android/BUILD.gn b/components/browser_ui/util/android/BUILD.gn index 4ff7c65..06ccb66cf 100644 --- a/components/browser_ui/util/android/BUILD.gn +++ b/components/browser_ui/util/android/BUILD.gn
@@ -16,6 +16,13 @@ ] } +static_library("android") { + sources = [ + "url_constants.cc", + "url_constants.h", + ] +} + java_library("junit") { # Skip platform checks since Robolectric depends on requires_android targets. bypass_platform_checks = true
diff --git a/components/browser_ui/util/android/url_constants.cc b/components/browser_ui/util/android/url_constants.cc new file mode 100644 index 0000000..01a3dceee --- /dev/null +++ b/components/browser_ui/util/android/url_constants.cc
@@ -0,0 +1,12 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/browser_ui/util/android/url_constants.h" + +namespace browser_ui { +#if defined(OS_ANDROID) +const char kChromeUINativeScheme[] = "chrome-native"; +#endif + +} // namespace browser_ui
diff --git a/components/browser_ui/util/android/url_constants.h b/components/browser_ui/util/android/url_constants.h new file mode 100644 index 0000000..bd418c8 --- /dev/null +++ b/components/browser_ui/util/android/url_constants.h
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_BROWSER_UI_UTIL_ANDROID_URL_CONSTANTS_H_ +#define COMPONENTS_BROWSER_UI_UTIL_ANDROID_URL_CONSTANTS_H_ + +#include "build/build_config.h" + +namespace browser_ui { +#if defined(OS_ANDROID) +extern const char kChromeUINativeScheme[]; +#endif // defined(OS_ANDROID) + +} // namespace browser_ui + +#endif // COMPONENTS_BROWSER_UI_UTIL_ANDROID_URL_CONSTANTS_H_
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimProperties.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimProperties.java index 3ef70b5..4926b79 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimProperties.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimProperties.java
@@ -4,10 +4,13 @@ package org.chromium.components.browser_ui.widget.scrim; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.view.GestureDetector; import android.view.View; +import androidx.annotation.ColorInt; + import org.chromium.base.Callback; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; @@ -21,6 +24,13 @@ /** The properties that can be used to describe the behavior of the scrim widget. */ public class ScrimProperties { /** + * An invalid color that can be specified for {@link #BACKGROUND_COLOR}. This will trigger the + * use of the default color set when the {@link ScrimCoordinator} was constructed. + */ + @ColorInt + public static final int INVALID_COLOR = Color.TRANSPARENT; + + /** * The top margin of the scrim. This can be used to shrink the scrim to show items at the * top of the screen. */
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimView.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimView.java index bda46a7..0c735e6 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimView.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/scrim/ScrimView.java
@@ -68,6 +68,12 @@ } @Override + public void setBackgroundColor(@ColorInt int color) { + super.setBackgroundColor( + color == ScrimProperties.INVALID_COLOR ? mDefaultBackgroundColor : color); + } + + @Override public boolean onTouchEvent(MotionEvent e) { if (mEventDelegate != null) return mEventDelegate.onTouchEvent(e); return super.onTouchEvent(e);
diff --git a/components/cast_channel/BUILD.gn b/components/cast_channel/BUILD.gn index d2d4908..55b42ba1 100644 --- a/components/cast_channel/BUILD.gn +++ b/components/cast_channel/BUILD.gn
@@ -26,6 +26,8 @@ "enum_table.h", "keep_alive_delegate.cc", "keep_alive_delegate.h", + "keep_alive_handler.cc", + "keep_alive_handler.h", "logger.cc", "logger.h", "mojo_data_pump.cc",
diff --git a/components/cast_channel/keep_alive_delegate.cc b/components/cast_channel/keep_alive_delegate.cc index 7b253a5..9708313e 100644 --- a/components/cast_channel/keep_alive_delegate.cc +++ b/components/cast_channel/keep_alive_delegate.cc
@@ -17,150 +17,49 @@ namespace cast_channel { -using ::cast_channel::ChannelError; - KeepAliveDelegate::KeepAliveDelegate( CastSocket* socket, scoped_refptr<Logger> logger, std::unique_ptr<CastTransport::Delegate> inner_delegate, base::TimeDelta ping_interval, base::TimeDelta liveness_timeout) - : started_(false), - socket_(socket), - logger_(logger), - inner_delegate_(std::move(inner_delegate)), - liveness_timeout_(liveness_timeout), - ping_interval_(ping_interval), - ping_message_(CreateKeepAlivePingMessage()), - pong_message_(CreateKeepAlivePongMessage()) { - DCHECK(ping_interval_ < liveness_timeout_); + : inner_delegate_(std::move(inner_delegate)), + handler_(socket, + std::move(logger), + ping_interval, + liveness_timeout, + base::BindRepeating(&KeepAliveDelegate::OnError, + base::Unretained(this))) { DCHECK(inner_delegate_); - DCHECK(socket_); } -KeepAliveDelegate::~KeepAliveDelegate() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); -} +KeepAliveDelegate::~KeepAliveDelegate() = default; void KeepAliveDelegate::SetTimersForTest( std::unique_ptr<base::RetainingOneShotTimer> injected_ping_timer, std::unique_ptr<base::RetainingOneShotTimer> injected_liveness_timer) { - ping_timer_ = std::move(injected_ping_timer); - liveness_timer_ = std::move(injected_liveness_timer); -} - -void KeepAliveDelegate::Start() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(!started_); - - DVLOG(1) << "Starting keep-alive timers."; - DVLOG(1) << "Ping timeout: " << ping_interval_; - DVLOG(1) << "Liveness timeout: " << liveness_timeout_; - - // Use injected mock timers, if provided. - if (!ping_timer_) { - ping_timer_.reset(new base::RetainingOneShotTimer()); - } - if (!liveness_timer_) { - liveness_timer_.reset(new base::RetainingOneShotTimer()); - } - - ping_timer_->Start( - FROM_HERE, ping_interval_, - base::BindRepeating(&KeepAliveDelegate::SendKeepAliveMessage, - base::Unretained(this), ping_message_, - CastMessageType::kPing)); - liveness_timer_->Start( - FROM_HERE, liveness_timeout_, - base::BindRepeating(&KeepAliveDelegate::LivenessTimeout, - base::Unretained(this))); - - started_ = true; - inner_delegate_->Start(); -} - -void KeepAliveDelegate::ResetTimers() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(started_); - ping_timer_->Reset(); - liveness_timer_->Reset(); -} - -void KeepAliveDelegate::SendKeepAliveMessage(const CastMessage& message, - CastMessageType message_type) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DVLOG(2) << "Sending " << ToString(message_type); - - socket_->transport()->SendMessage( - message, base::BindOnce(&KeepAliveDelegate::SendKeepAliveMessageComplete, - weak_factory_.GetWeakPtr(), message_type)); -} - -void KeepAliveDelegate::SendKeepAliveMessageComplete( - CastMessageType message_type, - int rv) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DVLOG(2) << "Sending " << ToString(message_type) << " complete, rv=" << rv; - if (rv != net::OK) { - // An error occurred while sending the ping response. - DVLOG(1) << "Error sending " << ToString(message_type); - logger_->LogSocketEventWithRv(socket_->id(), ChannelEvent::PING_WRITE_ERROR, - rv); - OnError(ChannelError::CAST_SOCKET_ERROR); - return; - } - - if (liveness_timer_) - liveness_timer_->Reset(); -} - -void KeepAliveDelegate::LivenessTimeout() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - OnError(ChannelError::PING_TIMEOUT); - Stop(); + handler_.SetTimersForTest(std::move(injected_ping_timer), + std::move(injected_liveness_timer)); } // CastTransport::Delegate interface. +void KeepAliveDelegate::Start() { + handler_.Start(); + inner_delegate_->Start(); +} + void KeepAliveDelegate::OnError(ChannelError error_state) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DVLOG(1) << "KeepAlive::OnError: " << ::cast_channel::ChannelErrorToString(error_state); inner_delegate_->OnError(error_state); - Stop(); + handler_.Stop(); } void KeepAliveDelegate::OnMessage(const CastMessage& message) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DVLOG(2) << "KeepAlive::OnMessage : " << message.payload_utf8(); - - if (started_) - ResetTimers(); - - // Keep-alive messages are intercepted and handled by KeepAliveDelegate - // here. All other messages are passed through to |inner_delegate_|. - // Keep-alive messages are assumed to be in the form { "type": "PING|PONG" }. - if (message.namespace_() == kHeartbeatNamespace) { - const char* ping_message_type = ToString(CastMessageType::kPing); - if (message.payload_utf8().find(ping_message_type) != std::string::npos) { - DVLOG(2) << "Received PING."; - if (started_) - SendKeepAliveMessage(pong_message_, CastMessageType::kPong); - } else { - DCHECK_NE(std::string::npos, - message.payload_utf8().find(ToString(CastMessageType::kPong))); - DVLOG(2) << "Received PONG."; - } - } else { + if (!handler_.HandleMessage(message)) { inner_delegate_->OnMessage(message); } } -void KeepAliveDelegate::Stop() { - if (started_) { - started_ = false; - ping_timer_->Stop(); - liveness_timer_->Stop(); - } -} - } // namespace cast_channel
diff --git a/components/cast_channel/keep_alive_delegate.h b/components/cast_channel/keep_alive_delegate.h index 5c70ab8..0ad91ae6d 100644 --- a/components/cast_channel/keep_alive_delegate.h +++ b/components/cast_channel/keep_alive_delegate.h
@@ -6,12 +6,10 @@ #define COMPONENTS_CAST_CHANNEL_KEEP_ALIVE_DELEGATE_H_ #include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/threading/thread_checker.h" #include "base/timer/timer.h" -#include "components/cast_channel/cast_message_util.h" +#include "components/cast_channel/cast_channel_enum.h" #include "components/cast_channel/cast_transport.h" -#include "third_party/openscreen/src/cast/common/channel/proto/cast_channel.pb.h" +#include "components/cast_channel/keep_alive_handler.h" namespace cast_channel { @@ -53,58 +51,10 @@ void OnMessage(const CastMessage& message) override; private: - // Restarts the ping/liveness timeout timers. Called when a message - // is received from the remote end. - void ResetTimers(); - - // Sends a formatted PING or PONG message to the remote side. - void SendKeepAliveMessage(const CastMessage& message, - CastMessageType message_type); - - // Callback for SendKeepAliveMessage. - void SendKeepAliveMessageComplete(CastMessageType message_type, int rv); - - // Called when the liveness timer expires, indicating that the remote - // end has not responded within the |liveness_timeout_| interval. - void LivenessTimeout(); - - // Stops the ping and liveness timers if they are started. - // To be called after an error. - void Stop(); - - // Indicates that Start() was called. - bool started_; - - // Socket that is managed by the keep-alive object. - CastSocket* socket_; - - // Logging object. - scoped_refptr<Logger> logger_; - // Delegate object which receives all non-keep alive messages. std::unique_ptr<CastTransport::Delegate> inner_delegate_; - // Amount of idle time to wait before disconnecting. - base::TimeDelta liveness_timeout_; - - // Amount of idle time to wait before pinging the receiver. - base::TimeDelta ping_interval_; - - // Fired when |ping_interval_| is exceeded or when triggered by test code. - std::unique_ptr<base::RetainingOneShotTimer> ping_timer_; - - // Fired when |liveness_timer_| is exceeded. - std::unique_ptr<base::RetainingOneShotTimer> liveness_timer_; - - // The PING message to send over the wire. - const CastMessage ping_message_; - - // The PONG message to send over the wire. - const CastMessage pong_message_; - - THREAD_CHECKER(thread_checker_); - - base::WeakPtrFactory<KeepAliveDelegate> weak_factory_{this}; + KeepAliveHandler handler_; DISALLOW_COPY_AND_ASSIGN(KeepAliveDelegate); };
diff --git a/components/cast_channel/keep_alive_handler.cc b/components/cast_channel/keep_alive_handler.cc new file mode 100644 index 0000000..6b460a9 --- /dev/null +++ b/components/cast_channel/keep_alive_handler.cc
@@ -0,0 +1,152 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/cast_channel/keep_alive_handler.h" + +#include <utility> + +#include "base/bind.h" +#include "components/cast_channel/cast_channel_enum.h" +#include "components/cast_channel/cast_message_util.h" +#include "components/cast_channel/cast_socket.h" +#include "components/cast_channel/logger.h" +#include "net/base/net_errors.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "third_party/openscreen/src/cast/common/channel/proto/cast_channel.pb.h" + +namespace cast_channel { + +KeepAliveHandler::KeepAliveHandler(CastSocket* socket, + scoped_refptr<Logger> logger, + base::TimeDelta ping_interval, + base::TimeDelta liveness_timeout, + OnErrorCallback on_error_cb) + : started_(false), + socket_(socket), + logger_(logger), + liveness_timeout_(liveness_timeout), + ping_interval_(ping_interval), + ping_message_(CreateKeepAlivePingMessage()), + pong_message_(CreateKeepAlivePongMessage()), + on_error_cb_(std::move(on_error_cb)) { + DCHECK(ping_interval_ < liveness_timeout_); + DCHECK(socket_); + DCHECK(!on_error_cb_.is_null()); +} + +KeepAliveHandler::~KeepAliveHandler() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); +} + +void KeepAliveHandler::SetTimersForTest( + std::unique_ptr<base::RetainingOneShotTimer> injected_ping_timer, + std::unique_ptr<base::RetainingOneShotTimer> injected_liveness_timer) { + ping_timer_ = std::move(injected_ping_timer); + liveness_timer_ = std::move(injected_liveness_timer); +} + +void KeepAliveHandler::Start() { + DCHECK(!started_); + + DVLOG(1) << "Starting keep-alive timers."; + DVLOG(1) << "Ping interval: " << ping_interval_; + DVLOG(1) << "Liveness timeout: " << liveness_timeout_; + + // Use injected mock timers, if provided. + if (!ping_timer_) { + ping_timer_.reset(new base::RetainingOneShotTimer()); + } + if (!liveness_timer_) { + liveness_timer_.reset(new base::RetainingOneShotTimer()); + } + + ping_timer_->Start( + FROM_HERE, ping_interval_, + base::BindRepeating(&KeepAliveHandler::SendKeepAliveMessage, + base::Unretained(this), ping_message_, + CastMessageType::kPing)); + liveness_timer_->Start(FROM_HERE, liveness_timeout_, + base::BindRepeating(&KeepAliveHandler::LivenessTimeout, + base::Unretained(this))); + + started_ = true; +} + +bool KeepAliveHandler::HandleMessage(const CastMessage& message) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DVLOG(2) << "KeepAlive::OnMessage : " << message.payload_utf8(); + + if (started_) { + ResetTimers(); + } + + // Keep-alive messages are intercepted and handled by KeepAliveHandler + // here. All other messages are passed through to |inner_delegate_|. + // Keep-alive messages are assumed to be in the form { "type": "PING|PONG" }. + if (message.namespace_() == kHeartbeatNamespace) { + static const char* ping_message_type = ToString(CastMessageType::kPing); + if (message.payload_utf8().find(ping_message_type) != std::string::npos) { + DVLOG(2) << "Received PING."; + if (started_) + SendKeepAliveMessage(pong_message_, CastMessageType::kPong); + } else { + DCHECK_NE(std::string::npos, + message.payload_utf8().find(ToString(CastMessageType::kPong))); + DVLOG(2) << "Received PONG."; + } + return true; + } + return false; +} + +void KeepAliveHandler::ResetTimers() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(started_); + ping_timer_->Reset(); + liveness_timer_->Reset(); +} + +void KeepAliveHandler::SendKeepAliveMessage(const CastMessage& message, + CastMessageType message_type) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DVLOG(2) << "Sending " << ToString(message_type); + + socket_->transport()->SendMessage( + message, base::BindOnce(&KeepAliveHandler::SendKeepAliveMessageComplete, + weak_factory_.GetWeakPtr(), message_type)); +} + +void KeepAliveHandler::SendKeepAliveMessageComplete( + CastMessageType message_type, + int rv) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DVLOG(2) << "Sending " << ToString(message_type) << " complete, rv=" << rv; + if (rv != net::OK) { + // An error occurred while sending the ping response. + DVLOG(1) << "Error sending " << ToString(message_type); + logger_->LogSocketEventWithRv(socket_->id(), ChannelEvent::PING_WRITE_ERROR, + rv); + on_error_cb_.Run(ChannelError::CAST_SOCKET_ERROR); + return; + } + + if (liveness_timer_) + liveness_timer_->Reset(); +} + +void KeepAliveHandler::LivenessTimeout() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + on_error_cb_.Run(ChannelError::PING_TIMEOUT); + Stop(); +} + +void KeepAliveHandler::Stop() { + if (started_) { + started_ = false; + ping_timer_->Stop(); + liveness_timer_->Stop(); + } +} + +} // namespace cast_channel
diff --git a/components/cast_channel/keep_alive_handler.h b/components/cast_channel/keep_alive_handler.h new file mode 100644 index 0000000..41a6de3b --- /dev/null +++ b/components/cast_channel/keep_alive_handler.h
@@ -0,0 +1,105 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CAST_CHANNEL_KEEP_ALIVE_HANDLER_H_ +#define COMPONENTS_CAST_CHANNEL_KEEP_ALIVE_HANDLER_H_ + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/threading/thread_checker.h" +#include "base/timer/timer.h" +#include "components/cast_channel/cast_channel_enum.h" +#include "components/cast_channel/cast_message_util.h" + +namespace cast_channel { + +class CastSocket; +class Logger; + +using ::cast::channel::CastMessage; + +class KeepAliveHandler { + public: + using OnErrorCallback = base::RepeatingCallback<void(ChannelError)>; + // |socket|: The socket to be kept alive. + // |logger|: The logging object which collects protocol events and error + // details. + // |ping_interval|: The amount of idle time to wait before sending a PING to + // the remote end. + // |liveness_timeout|: The amount of idle time to wait before terminating the + // connection. + KeepAliveHandler(CastSocket* socket, + scoped_refptr<Logger> logger, + base::TimeDelta ping_interval, + base::TimeDelta liveness_timeout, + OnErrorCallback on_error_cb); + ~KeepAliveHandler(); + + // Restarts the ping/liveness timeout timers. Called when a message + // is received from the remote end. + void ResetTimers(); + + void SetTimersForTest( + std::unique_ptr<base::RetainingOneShotTimer> injected_ping_timer, + std::unique_ptr<base::RetainingOneShotTimer> injected_liveness_timer); + + void Start(); + + // Stops the ping and liveness timers if they are started. + // To be called after an error. + void Stop(); + + bool HandleMessage(const CastMessage& message); + + private: + // Sends a formatted PING or PONG message to the remote side. + void SendKeepAliveMessage(const CastMessage& message, + CastMessageType message_type); + + // Callback for SendKeepAliveMessage. + void SendKeepAliveMessageComplete(CastMessageType message_type, int rv); + + // Called when the liveness timer expires, indicating that the remote + // end has not responded within the |liveness_timeout_| interval. + void LivenessTimeout(); + + // Indicates that Start() was called. + bool started_; + + // Socket that is managed by the keep-alive object. + CastSocket* socket_; + + // Logging object. + scoped_refptr<Logger> logger_; + + // Amount of idle time to wait before disconnecting. + base::TimeDelta liveness_timeout_; + + // Amount of idle time to wait before pinging the receiver. + base::TimeDelta ping_interval_; + + // Fired when |ping_interval_| is exceeded or when triggered by test code. + std::unique_ptr<base::RetainingOneShotTimer> ping_timer_; + + // Fired when |liveness_timer_| is exceeded. + std::unique_ptr<base::RetainingOneShotTimer> liveness_timer_; + + // The PING message to send over the wire. + const CastMessage ping_message_; + + // The PONG message to send over the wire. + const CastMessage pong_message_; + + OnErrorCallback on_error_cb_; + + THREAD_CHECKER(thread_checker_); + + base::WeakPtrFactory<KeepAliveHandler> weak_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(KeepAliveHandler); +}; + +} // namespace cast_channel + +#endif // COMPONENTS_CAST_CHANNEL_KEEP_ALIVE_HANDLER_H_
diff --git a/components/cdm/browser/BUILD.gn b/components/cdm/browser/BUILD.gn index 166461a1..af49e12 100644 --- a/components/cdm/browser/BUILD.gn +++ b/components/cdm/browser/BUILD.gn
@@ -20,6 +20,7 @@ deps = [ "//components/cdm/common", "//components/prefs", + "//components/user_prefs", "//content/public/common", "//ipc", "//media",
diff --git a/components/cdm/browser/DEPS b/components/cdm/browser/DEPS index 9bab7f84..ceeb43e 100644 --- a/components/cdm/browser/DEPS +++ b/components/cdm/browser/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/prefs", + "+components/user_prefs", "+content/public/browser", "+media/cdm", "+media/media_buildflags.h",
diff --git a/components/cdm/browser/media_drm_storage_impl.cc b/components/cdm/browser/media_drm_storage_impl.cc index 269b19b..22f0587 100644 --- a/components/cdm/browser/media_drm_storage_impl.cc +++ b/components/cdm/browser/media_drm_storage_impl.cc
@@ -19,6 +19,8 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" +#include "components/user_prefs/user_prefs.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/navigation_handle.h" #include "media/base/media_drm_key_type.h" #include "url/origin.h" @@ -689,11 +691,12 @@ // Create a single thread task runner for MediaDrmBridge, for posting Java // callbacks immediately to avoid rentrancy issues. // TODO(yucliu): Remove task runner from MediaDrmBridge in this case. - base::ThreadPool::PostTaskAndReply( - FROM_HERE, {base::TaskPriority::USER_VISIBLE, base::MayBlock()}, - base::BindOnce(&ClearMediaDrmLicensesBlocking, - std::move(no_license_origin_ids)), - std::move(complete_cb)); + base::ThreadPool::CreateSingleThreadTaskRunner( + {base::TaskPriority::USER_VISIBLE, base::MayBlock()}) + ->PostTaskAndReply(FROM_HERE, + base::BindOnce(&ClearMediaDrmLicensesBlocking, + std::move(no_license_origin_ids)), + std::move(complete_cb)); } #endif @@ -717,6 +720,20 @@ DCHECK(!origin().opaque()); } +MediaDrmStorageImpl::MediaDrmStorageImpl( + content::RenderFrameHost* render_frame_host, + GetOriginIdCB get_origin_id_cb, + AllowEmptyOriginIdCB allow_empty_origin_id_cb, + mojo::PendingReceiver<media::mojom::MediaDrmStorage> receiver) + : MediaDrmStorageImpl( + render_frame_host, + user_prefs::UserPrefs::Get( + content::WebContents::FromRenderFrameHost(render_frame_host) + ->GetBrowserContext()), + get_origin_id_cb, + allow_empty_origin_id_cb, + std::move(receiver)) {} + MediaDrmStorageImpl::~MediaDrmStorageImpl() { DVLOG(1) << __func__; DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/components/cdm/browser/media_drm_storage_impl.h b/components/cdm/browser/media_drm_storage_impl.h index 45640d08..a350f8d 100644 --- a/components/cdm/browser/media_drm_storage_impl.h +++ b/components/cdm/browser/media_drm_storage_impl.h
@@ -103,6 +103,14 @@ AllowEmptyOriginIdCB allow_empty_origin_id_cb, mojo::PendingReceiver<media::mojom::MediaDrmStorage> receiver); + // As above, but derives the PrefService from |render_frame_host|. + // TODO(estade): make this the only constructor. + MediaDrmStorageImpl( + content::RenderFrameHost* render_frame_host, + GetOriginIdCB get_origin_id_cb, + AllowEmptyOriginIdCB allow_empty_origin_id_cb, + mojo::PendingReceiver<media::mojom::MediaDrmStorage> receiver); + // media::mojom::MediaDrmStorage implementation. void Initialize(InitializeCallback callback) final; void OnProvisioned(OnProvisionedCallback callback) final;
diff --git a/components/certificate_transparency/chrome_require_ct_delegate_unittest.cc b/components/certificate_transparency/chrome_require_ct_delegate_unittest.cc index 4b9ce4d..8620c44 100644 --- a/components/certificate_transparency/chrome_require_ct_delegate_unittest.cc +++ b/components/certificate_transparency/chrome_require_ct_delegate_unittest.cc
@@ -30,12 +30,13 @@ class ChromeRequireCTDelegateTest : public ::testing::Test { public: void SetUp() override { + // Use a certificate with a notBefore prior to May 2018, so that CT is not + // implicitly required. cert_ = net::CreateCertificateChainFromFile( - net::GetTestCertsDirectory(), "ok_cert.pem", + net::GetTestCertsDirectory(), "expired_cert.pem", net::X509Certificate::FORMAT_PEM_CERT_SEQUENCE); ASSERT_TRUE(cert_); - hashes_.push_back(net::HashValue( - net::X509Certificate::CalculateFingerprint256(cert_->cert_buffer()))); + hashes_.push_back(net::HashValue(net::SHA256HashValue{0})); } protected:
diff --git a/components/cloud_devices/common/description_items.h b/components/cloud_devices/common/description_items.h index 9d52f360..b602cad1 100644 --- a/components/cloud_devices/common/description_items.h +++ b/components/cloud_devices/common/description_items.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_ -#define COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_ +#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_H_ +#define COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_H_ // Defines common templates that could be used to create device specific // capabilities and print tickets. @@ -11,6 +11,7 @@ #include <stddef.h> #include <algorithm> +#include <utility> #include <vector> #include "base/logging.h" @@ -44,6 +45,7 @@ class ListCapability { public: ListCapability(); + ListCapability(ListCapability&& other); ~ListCapability(); bool LoadFrom(const CloudDeviceDescription& description); @@ -66,7 +68,7 @@ void AddOption(Option&& option) { options_.emplace_back(std::move(option)); } private: - typedef std::vector<Option> OptionVector; + using OptionVector = std::vector<Option>; OptionVector options_; DISALLOW_COPY_AND_ASSIGN(ListCapability); @@ -232,4 +234,4 @@ } // namespace cloud_devices -#endif // COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_ +#endif // COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_H_
diff --git a/components/cloud_devices/common/description_items_inl.h b/components/cloud_devices/common/description_items_inl.h index 2bf849e..ede9d24 100644 --- a/components/cloud_devices/common/description_items_inl.h +++ b/components/cloud_devices/common/description_items_inl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_ -#define COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_ +#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_INL_H_ +#define COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_INL_H_ #include <stddef.h> @@ -27,8 +27,11 @@ } template <class Option, class Traits> -ListCapability<Option, Traits>::~ListCapability() { -} +ListCapability<Option, Traits>::ListCapability(ListCapability&& other) = + default; + +template <class Option, class Traits> +ListCapability<Option, Traits>::~ListCapability() = default; template <class Option, class Traits> bool ListCapability<Option, Traits>::IsValid() const { @@ -281,4 +284,4 @@ } // namespace cloud_devices -#endif // COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_ +#endif // COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_ITEMS_INL_H_
diff --git a/components/dom_distiller/core/css/distilledpage.css b/components/dom_distiller/core/css/distilledpage.css index 4870bff..ef1f43b 100644 --- a/components/dom_distiller/core/css/distilledpage.css +++ b/components/dom_distiller/core/css/distilledpage.css
@@ -11,8 +11,12 @@ :root { --google-blue-700: 25, 103, 210; + --google-blue-300: 138, 180, 248; --google-brown-900: 62, 39, 35; + --google-grey-50: 248, 249, 250; + --google-grey-900: 32, 33, 36; --google-purple-700: 132, 48, 206; + --google-purple-300: 197, 138, 249; --google-yellow-50: 254, 247, 224; --google-yellow-100: 254, 239, 195; } @@ -111,13 +115,13 @@ * and with CSS class constants in viewer.cc */ .light { - background-color: #FAFAFA; - color: #424242; + background-color: #FFF; + color: rgb(var(--google-grey-900)); } .dark { - background-color: #212121; - color: #E0E0E0; + background-color: rgb(var(--google-grey-900)); + color: #FFF; } .sepia { @@ -126,7 +130,7 @@ } .light a:link { - color: rgb(85, 85, 255); + color: rgb(var(--google-blue-600)); } .sepia a:link { @@ -134,11 +138,11 @@ } .dark a:link { - color: rgb(136, 136, 255); + color: rgb(var(--google-blue-300)); } .light a:visited { - color: rgb(144, 34, 144); + color: rgb(var(--google-purple-700)); } .sepia a:visited { @@ -146,13 +150,13 @@ } .dark a:visited { - color: rgb(216, 114, 216); + color: rgb(var(--google-purple-300)); } .light code, .light pre { - background-color: #EEE; - border-color: #AAA; + background-color: rgb(var(--google-grey-50)); + border-color: rgb(var(--google-grey-900)); } .sepia code, @@ -163,8 +167,8 @@ .dark code, .dark pre { - background-color: #333; - border-color: #555; + background-color: #000; + border-color: rgba(255, 255, 255, 0.5); } .light tbody tr:nth-child(odd) {
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc index 3b41a30..a99319b 100644 --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -207,7 +207,6 @@ AutocompleteController::AutocompleteController( std::unique_ptr<AutocompleteProviderClient> provider_client, - Observer* observer, int provider_types) : provider_client_(std::move(provider_client)), document_provider_(nullptr), @@ -222,11 +221,6 @@ first_query_(true), search_service_worker_signal_sent_(false), template_url_service_(provider_client_->GetTemplateURLService()) { - // TODO(tommycli): We should make a separate AddObserver method on this class - // and take |observer| out of the constructor. Tests pass nullptr anyways. - if (observer) - observers_.AddObserver(observer); - provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes(); if (provider_types & AutocompleteProvider::TYPE_BOOKMARK) providers_.push_back(new BookmarkProvider(provider_client_.get())); @@ -327,6 +321,10 @@ Stop(false); } +void AutocompleteController::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + void AutocompleteController::Start(const AutocompleteInput& input) { TRACE_EVENT1("omnibox", "AutocompleteController::Start", "text", base::UTF16ToUTF8(input.text()));
diff --git a/components/omnibox/browser/autocomplete_controller.h b/components/omnibox/browser/autocomplete_controller.h index 80fdfe2c..2f2212f 100644 --- a/components/omnibox/browser/autocomplete_controller.h +++ b/components/omnibox/browser/autocomplete_controller.h
@@ -83,10 +83,14 @@ // updated. AutocompleteController( std::unique_ptr<AutocompleteProviderClient> provider_client, - Observer* observer, int provider_types); ~AutocompleteController() override; + // UI elements that need to be notified when the results get updated should + // be added as an |observer|. So far there is no need for a RemoveObserver + // method because all observers outlive the AutocompleteController. + void AddObserver(Observer* observer); + // Starts an autocomplete query, which continues until all providers are // done or the query is Stop()ed. It is safe to Start() a new query without // Stop()ing the previous one.
diff --git a/components/omnibox/browser/autocomplete_provider_unittest.cc b/components/omnibox/browser/autocomplete_provider_unittest.cc index f0919e5e..4c5b6b0 100644 --- a/components/omnibox/browser/autocomplete_provider_unittest.cc +++ b/components/omnibox/browser/autocomplete_provider_unittest.cc
@@ -478,7 +478,7 @@ void AutocompleteProviderTest::ResetControllerWithType(int type) { EXPECT_FALSE(client_owned_); controller_.reset( - new AutocompleteController(base::WrapUnique(client_), nullptr, type)); + new AutocompleteController(base::WrapUnique(client_), type)); client_owned_ = true; }
diff --git a/components/omnibox/browser/omnibox_controller.cc b/components/omnibox/browser/omnibox_controller.cc index 2deee58..0a5360e6 100644 --- a/components/omnibox/browser/omnibox_controller.cc +++ b/components/omnibox/browser/omnibox_controller.cc
@@ -23,8 +23,13 @@ popup_(nullptr), autocomplete_controller_(new AutocompleteController( client_->CreateAutocompleteProviderClient(), - this, - AutocompleteClassifier::DefaultOmniboxProviders())) {} + AutocompleteClassifier::DefaultOmniboxProviders())) { + autocomplete_controller_->AddObserver(this); + + OmniboxControllerEmitter* emitter = client_->GetOmniboxControllerEmitter(); + if (emitter) + autocomplete_controller_->AddObserver(emitter); +} OmniboxController::~OmniboxController() { } @@ -33,11 +38,6 @@ const AutocompleteInput& input) const { ClearPopupKeywordMode(); - if (client_->GetOmniboxControllerEmitter()) { - client_->GetOmniboxControllerEmitter()->NotifyOmniboxQuery( - autocomplete_controller_.get(), input); - } - // We don't explicitly clear OmniboxPopupModel::manually_selected_match, as // Start ends up invoking OmniboxPopupModel::OnResultChanged which clears it. autocomplete_controller_->Start(input); @@ -47,10 +47,6 @@ bool default_match_changed) { DCHECK(controller == autocomplete_controller_.get()); - if (client_->GetOmniboxControllerEmitter()) - client_->GetOmniboxControllerEmitter()->NotifyOmniboxResultChanged( - default_match_changed, autocomplete_controller_.get()); - const bool was_open = popup_ && popup_->IsOpen(); if (default_match_changed) { // The default match has changed, we need to let the OmniboxEditModel know
diff --git a/components/omnibox/browser/omnibox_controller_emitter.cc b/components/omnibox/browser/omnibox_controller_emitter.cc index f4fd1497..2858f7cc 100644 --- a/components/omnibox/browser/omnibox_controller_emitter.cc +++ b/components/omnibox/browser/omnibox_controller_emitter.cc
@@ -69,16 +69,15 @@ observers_.RemoveObserver(observer); } -void OmniboxControllerEmitter::NotifyOmniboxQuery( - AutocompleteController* controller, - const AutocompleteInput& input) { +void OmniboxControllerEmitter::OnStart(AutocompleteController* controller, + const AutocompleteInput& input) { for (auto& observer : observers_) observer.OnStart(controller, input); } -void OmniboxControllerEmitter::NotifyOmniboxResultChanged( - bool default_match_changed, - AutocompleteController* controller) { +void OmniboxControllerEmitter::OnResultChanged( + AutocompleteController* controller, + bool default_match_changed) { for (auto& observer : observers_) observer.OnResultChanged(controller, default_match_changed); }
diff --git a/components/omnibox/browser/omnibox_controller_emitter.h b/components/omnibox/browser/omnibox_controller_emitter.h index 520676c..fe4e3fb 100644 --- a/components/omnibox/browser/omnibox_controller_emitter.h +++ b/components/omnibox/browser/omnibox_controller_emitter.h
@@ -13,9 +13,12 @@ #include "content/public/browser/browser_context.h" #endif // !defined(OS_IOS) -// Collects logs of all autocomplete queries and responses for a given profile -// and notifies observers (chrome://omnibox debug page). -class OmniboxControllerEmitter : public KeyedService { +// This KeyedService is meant to observe multiple AutocompleteController +// instances and forward the notifications to its own observers. +// Its main purpose is to act as a bridge between the chrome://omnibox WebUI +// handler, and the many usages of AutocompleteController (Views, NTP, Android). +class OmniboxControllerEmitter : public KeyedService, + public AutocompleteController::Observer { public: #if !defined(OS_IOS) static OmniboxControllerEmitter* GetForBrowserContext( @@ -29,15 +32,11 @@ void AddObserver(AutocompleteController::Observer* observer); void RemoveObserver(AutocompleteController::Observer* observer); - // Notifies registered observers when new autocomplete queries are made from - // the omnibox controller or when those queries' results change. - // - // TODO(tommycli): These two methods themselves should be overrides of - // AutocompleteController::Observer. - void NotifyOmniboxQuery(AutocompleteController* controller, - const AutocompleteInput& input); - void NotifyOmniboxResultChanged(bool default_match_changed, - AutocompleteController* controller); + // AutocompleteController::Observer: + void OnStart(AutocompleteController* controller, + const AutocompleteInput& input) override; + void OnResultChanged(AutocompleteController* controller, + bool default_match_changed) override; private: base::ObserverList<AutocompleteController::Observer> observers_;
diff --git a/components/omnibox/browser/test_omnibox_client.cc b/components/omnibox/browser/test_omnibox_client.cc index de6779e..1a64cd11 100644 --- a/components/omnibox/browser/test_omnibox_client.cc +++ b/components/omnibox/browser/test_omnibox_client.cc
@@ -26,7 +26,6 @@ autocomplete_classifier_( std::make_unique<AutocompleteController>( CreateAutocompleteProviderClient(), - nullptr, AutocompleteClassifier::DefaultOmniboxProviders()), std::make_unique<TestSchemeClassifier>()) {}
diff --git a/components/onc/OWNERS b/components/onc/OWNERS index 29efca163..09e9f939 100644 --- a/components/onc/OWNERS +++ b/components/onc/OWNERS
@@ -2,4 +2,5 @@ gauravsh@chromium.org gspencer@chromium.org stevenjb@chromium.org -# COMPONENT: UI>Shell>Networking + +# COMPONENT: OS>Systems>Network
diff --git a/components/optimization_guide/hints_fetcher.cc b/components/optimization_guide/hints_fetcher.cc index a49ebd3..93d96dc 100644 --- a/components/optimization_guide/hints_fetcher.cc +++ b/components/optimization_guide/hints_fetcher.cc
@@ -31,11 +31,6 @@ namespace { -// The duration that hosts placed in the HintsFetcherHostsSuccessfullyFetched -// dictionary pref are considered valid. -constexpr base::TimeDelta kHintsFetcherHostFetchedValidDuration = - base::TimeDelta::FromDays(7); - // Returns the string that can be used to record histograms for the request // context. // @@ -61,6 +56,10 @@ std::vector<GURL> GetValidURLsForFetching(const std::vector<GURL>& urls) { std::vector<GURL> valid_urls; for (const auto& url : urls) { + if (valid_urls.size() >= + features::MaxUrlsForOptimizationGuideServiceHintsFetch()) { + break; + } if (IsValidURLForURLKeyedHint(url)) valid_urls.push_back(url); } @@ -174,6 +173,8 @@ DCHECK_GE(features::MaxHostsForOptimizationGuideServiceHintsFetch(), filtered_hosts.size()); + DCHECK_GE(features::MaxUrlsForOptimizationGuideServiceHintsFetch(), + valid_urls.size()); if (optimization_types.empty()) { RecordRequestStatusHistogram( @@ -297,7 +298,13 @@ "OptimizationGuide.HintsFetcher.GetHintsRequest.FetchLatency." + GetStringNameForRequestContext(request_context_), fetch_latency); - UpdateHostsSuccessfullyFetched(); + base::TimeDelta valid_duration = + features::StoredFetchedHintsFreshnessDuration(); + if (get_hints_response->has_max_cache_duration()) { + valid_duration = base::TimeDelta::FromSeconds( + get_hints_response->max_cache_duration().seconds()); + } + UpdateHostsSuccessfullyFetched(valid_duration); RecordRequestStatusHistogram(request_context_, HintsFetcherRequestStatus::kSuccess); std::move(hints_fetched_callback_).Run(std::move(get_hints_response)); @@ -309,7 +316,8 @@ } } -void HintsFetcher::UpdateHostsSuccessfullyFetched() { +void HintsFetcher::UpdateHostsSuccessfullyFetched( + base::TimeDelta valid_duration) { DictionaryPrefUpdate hosts_fetched_list( pref_service_, prefs::kHintsFetcherHostsSuccessfullyFetched); @@ -347,8 +355,7 @@ } // Add the covered hosts in |hosts_fetched_| to the dictionary pref. - base::Time host_invalid_time = - time_clock_->Now() + kHintsFetcherHostFetchedValidDuration; + base::Time host_invalid_time = time_clock_->Now() + valid_duration; for (const std::string& host : hosts_fetched_) { hosts_fetched_list->SetDoubleKey( HashHostForDictionary(host),
diff --git a/components/optimization_guide/hints_fetcher.h b/components/optimization_guide/hints_fetcher.h index 98e28af7..bc56f79 100644 --- a/components/optimization_guide/hints_fetcher.h +++ b/components/optimization_guide/hints_fetcher.h
@@ -125,7 +125,7 @@ // each host is the time that the hints fetched for each host will expire. // |hosts_fetched_| is cleared once the hosts are stored // in the pref. - void UpdateHostsSuccessfullyFetched(); + void UpdateHostsSuccessfullyFetched(base::TimeDelta valid_duration); // Returns the subset of hosts from |hosts| for which the hints should be // refreshed. The count of returned hosts is limited to
diff --git a/components/optimization_guide/hints_fetcher_unittest.cc b/components/optimization_guide/hints_fetcher_unittest.cc index d7ab74d..8e7469bb 100644 --- a/components/optimization_guide/hints_fetcher_unittest.cc +++ b/components/optimization_guide/hints_fetcher_unittest.cc
@@ -129,6 +129,10 @@ EXPECT_EQ(pending_request.request.method, "POST"); EXPECT_TRUE(net::GetValueForKeyInQuery(pending_request.request.url, "key", &key_value)); + EXPECT_EQ(pending_request.request.request_body->elements()->size(), 1u); + auto& element = + pending_request.request.request_body->elements_mutable()->front(); + last_request_body_ = std::string(element.bytes(), element.length()); } } @@ -139,6 +143,8 @@ void ResetHintsFetcher() { hints_fetcher_.reset(); } + std::string last_request_body() const { return last_request_body_; } + private: void RunUntilIdle() { task_environment_.RunUntilIdle(); @@ -155,6 +161,8 @@ network::TestURLLoaderFactory test_url_loader_factory_; network::TestNetworkConnectionTracker* network_tracker_; + std::string last_request_body_; + DISALLOW_COPY_AND_ASSIGN(HintsFetcherTest); }; @@ -276,6 +284,17 @@ EXPECT_FALSE(FetchHints({"foo.com"}, {} /* urls */)); EXPECT_FALSE(FetchHints({"bar.com"}, {} /* urls */)); EXPECT_TRUE(FetchHints({"baz.com"}, {} /* urls */)); + proto::GetHintsResponse response; + response.mutable_max_cache_duration()->set_seconds(60 * 60 * 24 * 20); + response.SerializeToString(&response_content); + SimulateResponse(response_content, net::HTTP_OK); + + // Advance clock for the default duration that the hint normally expires + // under. + test_clock.Advance(features::StoredFetchedHintsFreshnessDuration()); + + // Max cache duration from response should be used for pref instead. + EXPECT_FALSE(FetchHints({"baz.com"}, {} /* urls */)); } // Tests 404 response from request. @@ -556,6 +575,43 @@ } } +TEST_F(HintsFetcherTest, MaxUrlsForOptimizationGuideServiceHintsFetch) { + base::HistogramTester histogram_tester; + std::string response_content; + std::vector<GURL> all_urls; + + // IP addresses, and localhosts should be skipped. + all_urls.push_back(GURL("localhost")); + all_urls.push_back(GURL("8.8.8.8")); + + size_t max_urls_in_fetch_request = optimization_guide::features:: + MaxUrlsForOptimizationGuideServiceHintsFetch(); + for (size_t i = 0; i < max_urls_in_fetch_request; ++i) { + all_urls.push_back(GURL("https://url" + base::NumberToString(i) + ".com/")); + } + + all_urls.push_back(GURL("https://notfetched.com/")); + all_urls.push_back(GURL("https://notfetched-2.com/")); + + EXPECT_TRUE(FetchHints({} /* hosts */, all_urls)); + VerifyHasPendingFetchRequests(); + EXPECT_TRUE(SimulateResponse(response_content, net::HTTP_OK)); + EXPECT_TRUE(hints_fetched()); + + histogram_tester.ExpectUniqueSample( + "OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount", + max_urls_in_fetch_request, 1); + + proto::GetHintsRequest last_request; + last_request.ParseFromString(last_request_body()); + EXPECT_EQ(static_cast<size_t>(last_request.urls_size()), + max_urls_in_fetch_request); + for (size_t i = 0; i < max_urls_in_fetch_request; ++i) { + EXPECT_EQ(last_request.urls(i).url(), + "https://url" + base::NumberToString(i) + ".com/"); + } +} + TEST_F(HintsFetcherTest, OnlyURLsToFetch) { base::HistogramTester histogram_tester; std::string response_content;
diff --git a/components/optimization_guide/optimization_guide_features.cc b/components/optimization_guide/optimization_guide_features.cc index 40e8449..a27d21e 100644 --- a/components/optimization_guide/optimization_guide_features.cc +++ b/components/optimization_guide/optimization_guide_features.cc
@@ -77,6 +77,12 @@ "max_hosts_for_optimization_guide_service_hints_fetch", 30); } +size_t MaxUrlsForOptimizationGuideServiceHintsFetch() { + return GetFieldTrialParamByFeatureAsInt( + kRemoteOptimizationGuideFetching, + "max_urls_for_optimization_guide_service_hints_fetch", 30); +} + size_t MaxHostsForRecordingSuccessfullyCovered() { return GetFieldTrialParamByFeatureAsInt( kRemoteOptimizationGuideFetching,
diff --git a/components/optimization_guide/optimization_guide_features.h b/components/optimization_guide/optimization_guide_features.h index 856fef2f..6dd16c4 100644 --- a/components/optimization_guide/optimization_guide_features.h +++ b/components/optimization_guide/optimization_guide_features.h
@@ -36,6 +36,10 @@ // remote Optimzation Guide Service. size_t MaxHostsForOptimizationGuideServiceHintsFetch(); +// The maximum number of URLs allowed to be requested by the client to the +// remote Optimzation Guide Service. +size_t MaxUrlsForOptimizationGuideServiceHintsFetch(); + // The maximum number of hosts allowed to be stored as covered by the hints // fetcher. size_t MaxHostsForRecordingSuccessfullyCovered();
diff --git a/components/optimization_guide/proto/hints.proto b/components/optimization_guide/proto/hints.proto index 9ed8bc5..a1770459 100644 --- a/components/optimization_guide/proto/hints.proto +++ b/components/optimization_guide/proto/hints.proto
@@ -60,8 +60,6 @@ // Response to the GetHints request. message GetHintsResponse { - reserved 2; - // An ordered list containing hints for key/optimization combinations. // // It is guaranteed that there will only be a single hint per key and key @@ -76,6 +74,10 @@ // hints from (HOST_SUFFIX,sports.cnn.com). repeated Hint hints = 1; + // The maximum duration in which the hints, or lack of hints, provided in + // this response are valid. + optional Duration max_cache_duration = 2; + // A set of hint keys to remove from the client cache. // // It is guaranteed that all entries in this list were provided by the client
diff --git a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc index 21fde492..1b6a64d 100644 --- a/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc +++ b/components/page_load_metrics/browser/observers/use_counter/ukm_features.cc
@@ -57,6 +57,8 @@ WebFeature::kCredentialManagerGetPublicKeyCredential, WebFeature::kCredentialManagerMakePublicKeyCredentialSuccess, WebFeature::kCredentialManagerGetPublicKeyCredentialSuccess, + WebFeature::kU2FCryptotokenRegister, + WebFeature::kU2FCryptotokenSign, WebFeature::kV8AudioContext_Constructor, WebFeature::kElementAttachShadow, WebFeature::kElementAttachShadowOpen,
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc index 539d1ea..88c9133b 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.cc
@@ -235,8 +235,15 @@ if (timing.paint_timing->first_meaningful_paint) matched_bits.Set(TimingField::kFirstMeaningfulPaint); if (metadata.behavior_flags & - blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload) + blink::LoadingBehaviorFlag::kLoadingBehaviorDocumentWriteBlockReload) { matched_bits.Set(TimingField::kDocumentWriteBlockReload); + } + if (timing.paint_timing->largest_image_paint || + timing.paint_timing->largest_text_paint) { + matched_bits.Set(TimingField::kLargestContentfulPaint); + } + if (timing.paint_timing->first_input_or_scroll_notified_timestamp) + matched_bits.Set(TimingField::kFirstInputOrScroll); return matched_bits; }
diff --git a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h index 9a05ec6..ebcc4d37b 100644 --- a/components/page_load_metrics/browser/page_load_metrics_test_waiter.h +++ b/components/page_load_metrics/browser/page_load_metrics_test_waiter.h
@@ -28,6 +28,8 @@ kLoadEvent = 1 << 4, // kLoadTimingInfo waits for main frame timing info only. kLoadTimingInfo = 1 << 5, + kLargestContentfulPaint = 1 << 6, + kFirstInputOrScroll = 1 << 7, }; using FrameTreeNodeId = page_load_metrics::PageLoadMetricsObserver::FrameTreeNodeId;
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc index e04911bd..1377d2a87 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -381,21 +381,19 @@ timing->input_to_navigation_start = ClampDelta(start, perf.InputForNavigationStart()); } - if (perf.FirstInputDelay() > 0.0) { - timing->interactive_timing->first_input_delay = - base::TimeDelta::FromSecondsD(perf.FirstInputDelay()); + if (perf.FirstInputDelay().has_value()) { + timing->interactive_timing->first_input_delay = *perf.FirstInputDelay(); } - if (perf.FirstInputTimestamp() > 0.0) { + if (perf.FirstInputTimestamp().has_value()) { timing->interactive_timing->first_input_timestamp = - ClampDelta(perf.FirstInputTimestamp(), start); + ClampDelta((*perf.FirstInputTimestamp()).InSecondsF(), start); } - if (perf.LongestInputDelay() > 0.0) { - timing->interactive_timing->longest_input_delay = - base::TimeDelta::FromSecondsD(perf.LongestInputDelay()); + if (perf.LongestInputDelay().has_value()) { + timing->interactive_timing->longest_input_delay = *perf.LongestInputDelay(); } - if (perf.LongestInputTimestamp() > 0.0) { + if (perf.LongestInputTimestamp().has_value()) { timing->interactive_timing->longest_input_timestamp = - ClampDelta(perf.LongestInputTimestamp(), start); + ClampDelta((*perf.LongestInputTimestamp()).InSecondsF(), start); } if (perf.TotalInputDelay() > 0.0) { timing->interactive_timing->total_input_delay =
diff --git a/components/paint_preview/browser/paint_preview_base_service.cc b/components/paint_preview/browser/paint_preview_base_service.cc index 85a18b9..a426d3c 100644 --- a/components/paint_preview/browser/paint_preview_base_service.cc +++ b/components/paint_preview/browser/paint_preview_base_service.cc
@@ -93,12 +93,18 @@ params.is_main_frame = (render_frame_host == web_contents->GetMainFrame()); params.root_dir = root_dir; + // TODO(crbug/1064253): Consider moving to client so that this always happens. + // Although, it is harder to get this right in the client due to its + // lifecycle. + web_contents->IncrementCapturerCount(gfx::Size(), true); + auto start_time = base::TimeTicks::Now(); client->CapturePaintPreview( params, render_frame_host, base::BindOnce(&PaintPreviewBaseService::OnCaptured, - weak_ptr_factory_.GetWeakPtr(), start_time, - std::move(callback))); + weak_ptr_factory_.GetWeakPtr(), + web_contents->GetMainFrame()->GetFrameTreeNodeId(), + start_time, std::move(callback))); } std::unique_ptr<PaintPreviewCompositorService> @@ -109,11 +115,17 @@ } void PaintPreviewBaseService::OnCaptured( + int frame_tree_node_id, base::TimeTicks start_time, OnCapturedCallback callback, base::UnguessableToken guid, mojom::PaintPreviewStatus status, std::unique_ptr<PaintPreviewProto> proto) { + auto* web_contents = + content::WebContents::FromFrameTreeNodeId(frame_tree_node_id); + if (web_contents) + web_contents->DecrementCapturerCount(true); + if (status != mojom::PaintPreviewStatus::kOk || !proto) { DVLOG(1) << "ERROR: Paint Preview failed to capture for document " << guid.ToString() << " with error " << status;
diff --git a/components/paint_preview/browser/paint_preview_base_service.h b/components/paint_preview/browser/paint_preview_base_service.h index d80b553a..2cc2d1e8 100644 --- a/components/paint_preview/browser/paint_preview_base_service.h +++ b/components/paint_preview/browser/paint_preview_base_service.h
@@ -128,7 +128,8 @@ base::OnceClosure disconnect_handler); private: - void OnCaptured(base::TimeTicks start_time, + void OnCaptured(int frame_tree_node_id, + base::TimeTicks start_time, OnCapturedCallback callback, base::UnguessableToken guid, mojom::PaintPreviewStatus status,
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc index b138d18..25fdb65 100644 --- a/components/password_manager/core/browser/password_manager_client.cc +++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -73,11 +73,9 @@ return false; } -#if defined(OS_ANDROID) bool PasswordManagerClient::WasCredentialLeakDialogShown() const { return false; } -#endif net::CertStatus PasswordManagerClient::GetMainFrameCertStatus() const { return 0;
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h index 5b98aa37..be298cf 100644 --- a/components/password_manager/core/browser/password_manager_client.h +++ b/components/password_manager/core/browser/password_manager_client.h
@@ -258,12 +258,10 @@ // Returns true if last navigation page had HTTP error i.e 5XX or 4XX virtual bool WasLastNavigationHTTPError() const; -#if defined(OS_ANDROID) // Returns true if a credential leak dialog was shown. Used by Autofill // Assistance to verify a password change intent. TODO(b/151391231): Remove // when proper intent signing is implemented. virtual bool WasCredentialLeakDialogShown() const; -#endif // Obtains the cert status for the main frame. virtual net::CertStatus GetMainFrameCertStatus() const;
diff --git a/components/payments/content/android/BUILD.gn b/components/payments/content/android/BUILD.gn index 9a034eea..2493925d 100644 --- a/components/payments/content/android/BUILD.gn +++ b/components/payments/content/android/BUILD.gn
@@ -12,6 +12,7 @@ "byte_buffer_helper.h", "currency_formatter_android.cc", "currency_formatter_android.h", + "error_message_util.cc", "origin_security_checker_android.cc", "payment_handler_host.cc", "payment_handler_host.h", @@ -40,6 +41,7 @@ generate_jni("jni_headers") { sources = [ "java/src/org/chromium/components/payments/CurrencyFormatter.java", + "java/src/org/chromium/components/payments/ErrorMessageUtil.java", "java/src/org/chromium/components/payments/OriginSecurityChecker.java", "java/src/org/chromium/components/payments/PaymentHandlerHost.java", "java/src/org/chromium/components/payments/PaymentManifestDownloader.java", @@ -53,6 +55,7 @@ annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] sources = [ "java/src/org/chromium/components/payments/CurrencyFormatter.java", + "java/src/org/chromium/components/payments/ErrorMessageUtil.java", "java/src/org/chromium/components/payments/OriginSecurityChecker.java", "java/src/org/chromium/components/payments/PaymentDetailsConverter.java", "java/src/org/chromium/components/payments/PaymentHandlerHost.java",
diff --git a/components/payments/content/android/error_message_util.cc b/components/payments/content/android/error_message_util.cc new file mode 100644 index 0000000..8a3abc32 --- /dev/null +++ b/components/payments/content/android/error_message_util.cc
@@ -0,0 +1,33 @@ +// Copyright 2020 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 <jni.h> +#include <set> +#include <string> +#include <vector> + +#include "base/android/jni_array.h" +#include "base/android/jni_string.h" +#include "base/android/scoped_java_ref.h" +#include "components/payments/content/android/jni_headers/ErrorMessageUtil_jni.h" +#include "components/payments/core/error_message_util.h" + +namespace payments { +namespace android { + +// static +base::android::ScopedJavaLocalRef<jstring> +JNI_ErrorMessageUtil_GetNotSupportedErrorMessage( + JNIEnv* env, + const base::android::JavaParamRef<jobjectArray>& jmethods) { + std::vector<std::string> method_vector; + base::android::AppendJavaStringArrayToStringVector(env, jmethods, + &method_vector); + return base::android::ConvertUTF8ToJavaString( + env, GetNotSupportedErrorMessage(std::set<std::string>( + method_vector.begin(), method_vector.end()))); +} + +} // namespace android +} // namespace payments
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/ErrorMessageUtil.java b/components/payments/content/android/java/src/org/chromium/components/payments/ErrorMessageUtil.java new file mode 100644 index 0000000..dd97c84 --- /dev/null +++ b/components/payments/content/android/java/src/org/chromium/components/payments/ErrorMessageUtil.java
@@ -0,0 +1,33 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.payments; + +import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.NativeMethods; + +import java.util.Set; + +/** Error messages for web payment. */ +@JNINamespace("payments::android") +public class ErrorMessageUtil { + /** + * Returns the "payment method not supported" message. + * @param methods The payment methods that are not supported. + * @return The web-developer facing error message. + */ + public static String getNotSupportedErrorMessage(Set<String> methods) { + return ErrorMessageUtilJni.get().getNotSupportedErrorMessage( + methods.toArray(new String[methods.size()])); + } + + /** + * The interface implemented by the automatically generated JNI bindings class + * ErrorMessageUtilJni. + */ + @NativeMethods + /* package */ interface Natives { + String getNotSupportedErrorMessage(String[] methods); + } +}
diff --git a/components/payments/content/installable_payment_app_crawler.cc b/components/payments/content/installable_payment_app_crawler.cc index c548b99..1cf9db7 100644 --- a/components/payments/content/installable_payment_app_crawler.cc +++ b/components/payments/content/installable_payment_app_crawler.cc
@@ -33,7 +33,6 @@ namespace payments { // TODO(crbug.com/782270): Use cache to accelerate crawling procedure. -// TODO(crbug.com/782270): Add integration tests for this class. InstallablePaymentAppCrawler::InstallablePaymentAppCrawler( const url::Origin& merchant_origin, content::RenderFrameHost* initiator_render_frame_host, @@ -44,7 +43,13 @@ : WebContentsObserver(web_contents), log_(web_contents), merchant_origin_(merchant_origin), - initiator_render_frame_host_(initiator_render_frame_host), + initiator_frame_routing_id_( + initiator_render_frame_host && + initiator_render_frame_host->GetProcess() + ? content::GlobalFrameRoutingId( + initiator_render_frame_host->GetProcess()->GetID(), + initiator_render_frame_host->GetRoutingID()) + : content::GlobalFrameRoutingId()), downloader_(downloader), parser_(parser), number_of_payment_method_manifest_to_download_(0), @@ -407,13 +412,24 @@ number_of_web_app_icons_to_download_and_decode_++; - content::GlobalFrameRoutingId frame_routing_id; - if (initiator_render_frame_host_ && - initiator_render_frame_host_->GetProcess()) { - frame_routing_id = content::GlobalFrameRoutingId( - initiator_render_frame_host_->GetProcess()->GetID(), - initiator_render_frame_host_->GetRoutingID()); + // If the initiator frame doesn't exists any more, e.g. the frame has + // navigated away, don't download the icon. + // TODO(crbug.com/1058840): Move this sanity check to ManifestIconDownloader + // after DownloadImage refactor is done. + content::RenderFrameHost* render_frame_host = + content::RenderFrameHost::FromID(initiator_frame_routing_id_); + if (!render_frame_host || !render_frame_host->IsCurrent() || + content::WebContents::FromRenderFrameHost(render_frame_host) != + web_contents()) { + // Post the result back asynchronously. + base::PostTask( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce( + &InstallablePaymentAppCrawler::FinishCrawlingPaymentAppsIfReady, + weak_ptr_factory_.GetWeakPtr())); + return; } + bool can_download_icon = content::ManifestIconDownloader::Download( web_contents(), downloader_->FindTestServerURL(best_icon_url), IconSizeCalculator::IdealIconHeight(native_view), @@ -423,7 +439,7 @@ weak_ptr_factory_.GetWeakPtr(), method_manifest_url, web_app_manifest_url), false, /* square_only */ - frame_routing_id); + initiator_frame_routing_id_); DCHECK(can_download_icon); }
diff --git a/components/payments/content/installable_payment_app_crawler.h b/components/payments/content/installable_payment_app_crawler.h index fdad1391..7b49e2d 100644 --- a/components/payments/content/installable_payment_app_crawler.h +++ b/components/payments/content/installable_payment_app_crawler.h
@@ -19,6 +19,7 @@ #include "components/payments/content/utility/payment_manifest_parser.h" #include "components/payments/content/web_app_manifest.h" #include "components/payments/core/payment_manifest_downloader.h" +#include "content/public/browser/global_routing_id.h" #include "content/public/browser/web_contents_observer.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom.h" #include "url/origin.h" @@ -111,7 +112,7 @@ DeveloperConsoleLogger log_; const url::Origin merchant_origin_; - content::RenderFrameHost* initiator_render_frame_host_; + const content::GlobalFrameRoutingId initiator_frame_routing_id_; PaymentManifestDownloader* downloader_; PaymentManifestParser* parser_; FinishedCrawlingCallback callback_;
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc index cc9c24e..62a88251 100644 --- a/components/payments/content/payment_request.cc +++ b/components/payments/content/payment_request.cc
@@ -18,6 +18,7 @@ #include "components/payments/content/payment_request_converter.h" #include "components/payments/content/payment_request_web_contents_manager.h" #include "components/payments/core/can_make_payment_query.h" +#include "components/payments/core/error_message_util.h" #include "components/payments/core/error_strings.h" #include "components/payments/core/features.h" #include "components/payments/core/method_strings.h" @@ -49,27 +50,6 @@ method_name == methods::kAndroidPay; } -std::string GetNotSupportedErrorMessage(PaymentRequestSpec* spec) { - if (!spec || spec->payment_method_identifiers_set().empty()) - return errors::kGenericPaymentMethodNotSupportedMessage; - - std::vector<std::string> method_names( - spec->payment_method_identifiers_set().size()); - std::transform( - spec->payment_method_identifiers_set().begin(), - spec->payment_method_identifiers_set().end(), method_names.begin(), - [](const std::string& method_name) { return "\"" + method_name + "\""; }); - - std::string output; - bool replaced = base::ReplaceChars( - method_names.size() == 1 - ? errors::kSinglePaymentMethodNotSupportedFormat - : errors::kMultiplePaymentMethodsNotSupportedFormat, - "$", base::JoinString(method_names, ", "), &output); - DCHECK(replaced); - return output; -} - // Redact shipping address before exposing it in ShippingAddressChangeEvent. // https://w3c.github.io/payment-request/#shipping-address-changed-algorithm mojom::PaymentAddressPtr RedactShippingAddress( @@ -580,7 +560,9 @@ journey_logger_.SetNotShown( JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD); client_->OnError(mojom::PaymentErrorReason::NOT_SUPPORTED, - GetNotSupportedErrorMessage(spec_.get()) + + GetNotSupportedErrorMessage( + spec_ ? spec_->payment_method_identifiers_set() + : std::set<std::string>()) + (error_message.empty() ? "" : " " + error_message)); if (observer_for_testing_) observer_for_testing_->OnNotSupportedError();
diff --git a/components/payments/core/BUILD.gn b/components/payments/core/BUILD.gn index 699989dd..084d14c4 100644 --- a/components/payments/core/BUILD.gn +++ b/components/payments/core/BUILD.gn
@@ -12,6 +12,8 @@ "currency_formatter.h", "error_logger.cc", "error_logger.h", + "error_message_util.cc", + "error_message_util.h", "features.cc", "features.h", "journey_logger.cc", @@ -196,95 +198,3 @@ "//ui/base", ] } - -if (is_ios) { - bundle_data("payments_test_bundle_data") { - testonly = true - - sources = [ - "//components/test/data/payments/abort.js", - "//components/test/data/payments/alicepay_bobpay_charliepay_and_cards.js", - "//components/test/data/payments/blob_url.js", - "//components/test/data/payments/bobpay.js", - "//components/test/data/payments/bobpay_and_basic_card_with_modifier_optional_data.js", - "//components/test/data/payments/bobpay_and_basic_card_with_modifiers.js", - "//components/test/data/payments/bobpay_and_cards.js", - "//components/test/data/payments/bobpay_ui_skip.js", - "//components/test/data/payments/bobpay_ui_skip_preload.js", - "//components/test/data/payments/can_make_payment_metrics.js", - "//components/test/data/payments/can_make_payment_query.js", - "//components/test/data/payments/can_make_payment_query_bobpay.js", - "//components/test/data/payments/can_make_payment_query_cc.js", - "//components/test/data/payments/contact_details.js", - "//components/test/data/payments/contact_details_and_free_shipping.js", - "//components/test/data/payments/dynamic_shipping.js", - "//components/test/data/payments/email.js", - "//components/test/data/payments/email_and_free_shipping.js", - "//components/test/data/payments/email_and_phone.js", - "//components/test/data/payments/extra_shipping_options.js", - "//components/test/data/payments/fail_complete.js", - "//components/test/data/payments/free_shipping.js", - "//components/test/data/payments/initiated.js", - "//components/test/data/payments/initiated_test.html", - "//components/test/data/payments/long_id.js", - "//components/test/data/payments/metrics.js", - "//components/test/data/payments/modifier.js", - "//components/test/data/payments/multiple_show.js", - "//components/test/data/payments/name.js", - "//components/test/data/payments/name_and_free_shipping.js", - "//components/test/data/payments/no_shipping.js", - "//components/test/data/payments/payment_method_identifier.js", - "//components/test/data/payments/payment_request.html", - "//components/test/data/payments/payment_request.js", - "//components/test/data/payments/payment_request_abort_test.html", - "//components/test/data/payments/payment_request_alicepay_bobpay_charliepay_and_cards_test.html", - "//components/test/data/payments/payment_request_blob_url_test.html", - "//components/test/data/payments/payment_request_bobpay_and_basic_card_with_modifier_optional_data_test.html", - "//components/test/data/payments/payment_request_bobpay_and_basic_card_with_modifiers_test.html", - "//components/test/data/payments/payment_request_bobpay_and_cards_test.html", - "//components/test/data/payments/payment_request_bobpay_test.html", - "//components/test/data/payments/payment_request_bobpay_ui_skip_preload_test.html", - "//components/test/data/payments/payment_request_bobpay_ui_skip_test.html", - "//components/test/data/payments/payment_request_can_make_payment_metrics_test.html", - "//components/test/data/payments/payment_request_can_make_payment_query_bobpay_test.html", - "//components/test/data/payments/payment_request_can_make_payment_query_cc_test.html", - "//components/test/data/payments/payment_request_can_make_payment_query_test.html", - "//components/test/data/payments/payment_request_contact_details_and_free_shipping_test.html", - "//components/test/data/payments/payment_request_contact_details_test.html", - "//components/test/data/payments/payment_request_dynamic_shipping_test.html", - "//components/test/data/payments/payment_request_email_and_free_shipping_test.html", - "//components/test/data/payments/payment_request_email_and_phone_test.html", - "//components/test/data/payments/payment_request_email_test.html", - "//components/test/data/payments/payment_request_extra_shipping_options_test.html", - "//components/test/data/payments/payment_request_fail_complete_test.html", - "//components/test/data/payments/payment_request_free_shipping_test.html", - "//components/test/data/payments/payment_request_id.js", - "//components/test/data/payments/payment_request_id_test.html", - "//components/test/data/payments/payment_request_iframe.html", - "//components/test/data/payments/payment_request_long_id_test.html", - "//components/test/data/payments/payment_request_main.html", - "//components/test/data/payments/payment_request_metrics_test.html", - "//components/test/data/payments/payment_request_modifier_test.html", - "//components/test/data/payments/payment_request_multiple_requests.html", - "//components/test/data/payments/payment_request_multiple_show_test.html", - "//components/test/data/payments/payment_request_name_and_free_shipping_test.html", - "//components/test/data/payments/payment_request_name_test.html", - "//components/test/data/payments/payment_request_no_shipping_test.html", - "//components/test/data/payments/payment_request_payment_method_identifier_test.html", - "//components/test/data/payments/payment_request_phone_and_free_shipping_test.html", - "//components/test/data/payments/payment_request_phone_test.html", - "//components/test/data/payments/payment_request_shipping_address_change_test.html", - "//components/test/data/payments/payment_request_show_promise.html", - "//components/test/data/payments/payment_request_show_twice_test.html", - "//components/test/data/payments/phone.js", - "//components/test/data/payments/phone_and_free_shipping.js", - "//components/test/data/payments/shipping_address_change.js", - "//components/test/data/payments/show_promise.js", - "//components/test/data/payments/show_twice.js", - "//components/test/data/payments/style.css", - "//components/test/data/payments/util.js", - ] - outputs = [ "{{bundle_resources_dir}}/" + - "{{source_root_relative_dir}}/{{source_file_part}}" ] - } -}
diff --git a/components/payments/core/error_message_util.cc b/components/payments/core/error_message_util.cc new file mode 100644 index 0000000..0bd30d2 --- /dev/null +++ b/components/payments/core/error_message_util.cc
@@ -0,0 +1,35 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/payments/core/error_message_util.h" + +#include <algorithm> +#include <vector> + +#include "base/logging.h" +#include "base/strings/string_util.h" +#include "components/payments/core/native_error_strings.h" + +namespace payments { + +std::string GetNotSupportedErrorMessage(const std::set<std::string>& methods) { + if (methods.empty()) + return errors::kGenericPaymentMethodNotSupportedMessage; + + std::vector<std::string> with_quotes(methods.size()); + std::transform( + methods.begin(), methods.end(), with_quotes.begin(), + [](const std::string& method_name) { return "\"" + method_name + "\""; }); + + std::string output; + bool replaced = base::ReplaceChars( + with_quotes.size() == 1 + ? errors::kSinglePaymentMethodNotSupportedFormat + : errors::kMultiplePaymentMethodsNotSupportedFormat, + "$", base::JoinString(with_quotes, ", "), &output); + DCHECK(replaced); + return output; +} + +} // namespace payments
diff --git a/components/payments/core/error_message_util.h b/components/payments/core/error_message_util.h new file mode 100644 index 0000000..a998704 --- /dev/null +++ b/components/payments/core/error_message_util.h
@@ -0,0 +1,19 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_PAYMENTS_CORE_ERROR_MESSAGE_UTIL_H_ +#define COMPONENTS_PAYMENTS_CORE_ERROR_MESSAGE_UTIL_H_ + +#include <set> +#include <string> + +namespace payments { + +// Returns a developer-facing error message that the given payment |methods| are +// not supported. +std::string GetNotSupportedErrorMessage(const std::set<std::string>& methods); + +} // namespace payments + +#endif // COMPONENTS_PAYMENTS_CORE_ERROR_MESSAGE_UTIL_H_
diff --git a/components/payments/core/error_strings.cc b/components/payments/core/error_strings.cc index a411d7ad..ccf6dfa 100644 --- a/components/payments/core/error_strings.cc +++ b/components/payments/core/error_strings.cc
@@ -17,7 +17,6 @@ const char kCannotShowWithoutInit[] = "Attempted show without initialization."; const char kCannotUpdateWithoutInit[] = "Attempted updateWith without initialization."; const char kCannotUpdateWithoutShow[] = "Attempted updateWith without show."; -const char kGenericPaymentMethodNotSupportedMessage[] = "Payment method not supported."; const char kInvalidState[] = "Invalid state."; const char kNotInASecureOrigin[] = "Not in a secure origin."; const char kProhibitedOrigin[] = "Only localhost, file://, and cryptographic scheme origins allowed.";
diff --git a/components/payments/core/error_strings.h b/components/payments/core/error_strings.h index ced992e..7187e4d8 100644 --- a/components/payments/core/error_strings.h +++ b/components/payments/core/error_strings.h
@@ -35,9 +35,6 @@ // Mojo call PaymentRequest::Show() must precede PaymentRequest::UpdateWith(). extern const char kCannotUpdateWithoutShow[]; -// A message about unsupported payment method. -extern const char kGenericPaymentMethodNotSupportedMessage[]; - // Used when an invalid state is encountered generically. extern const char kInvalidState[];
diff --git a/components/payments/core/native_error_strings.cc b/components/payments/core/native_error_strings.cc index 3a5ce594..a99c5fc 100644 --- a/components/payments/core/native_error_strings.cc +++ b/components/payments/core/native_error_strings.cc
@@ -217,5 +217,8 @@ "Browser did not fire \"canmakepayment\" event because the payment handler " "does not support any explicitly verified payment methods."; +const char kGenericPaymentMethodNotSupportedMessage[] = + "Payment method not supported."; + } // namespace errors } // namespace payments
diff --git a/components/payments/core/native_error_strings.h b/components/payments/core/native_error_strings.h index d2509f1..3b9775b1 100644 --- a/components/payments/core/native_error_strings.h +++ b/components/payments/core/native_error_strings.h
@@ -247,6 +247,9 @@ // methods, i.e., not when "supportedOrigins": "*". extern const char kCanMakePaymentEventNoExplicitlyVerifiedMethods[]; +// A message about unsupported payment method. +extern const char kGenericPaymentMethodNotSupportedMessage[]; + } // namespace errors } // namespace payments
diff --git a/components/permissions/permissions_client.cc b/components/permissions/permissions_client.cc index bbd212e..941f6fa 100644 --- a/components/permissions/permissions_client.cc +++ b/components/permissions/permissions_client.cc
@@ -92,6 +92,20 @@ } #if defined(OS_ANDROID) +bool PermissionsClient::IsPermissionControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) { + return false; +} + +bool PermissionsClient::ResetPermissionIfControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin) { + return false; +} + infobars::InfoBarManager* PermissionsClient::GetInfoBarManager( content::WebContents* web_contents) { return nullptr;
diff --git a/components/permissions/permissions_client.h b/components/permissions/permissions_client.h index 28386719..0a7eaa4 100644 --- a/components/permissions/permissions_client.h +++ b/components/permissions/permissions_client.h
@@ -134,6 +134,21 @@ const GURL& embedding_origin); #if defined(OS_ANDROID) + // Returns whether the permission is controlled by the default search + // engine (DSE). For example, in Chrome, making a search engine default + // automatically grants notification permissions for the associated origin. + virtual bool IsPermissionControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin); + + // Resets the permission if it's controlled by the default search + // engine (DSE). The return value is true if the permission was reset. + virtual bool ResetPermissionIfControlledByDse( + content::BrowserContext* browser_context, + ContentSettingsType type, + const url::Origin& origin); + // Retrieves the InfoBarManager for the web contents. The returned // pointer has the same lifetime as |web_contents|. virtual infobars::InfoBarManager* GetInfoBarManager(
diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc index 602ed14e..3b59f92 100644 --- a/components/policy/core/common/cloud/cloud_policy_client.cc +++ b/components/policy/core/common/cloud/cloud_policy_client.cc
@@ -765,6 +765,16 @@ request_jobs_.push_back(service_->CreateJob(std::move(config))); } +void CloudPolicyClient::UpdateServiceAccount(const std::string& account_email) { + // The service account identity is always set on policy data, so don't notify + // the observers if it's the same as it was during the previous fetch. + if (service_account_email_ == account_email) + return; + + service_account_email_ = account_email; + NotifyServiceAccountChanged(); +} + void CloudPolicyClient::AddObserver(Observer* observer) { observers_.AddObserver(observer); } @@ -1361,6 +1371,11 @@ observer.OnClientError(this); } +void CloudPolicyClient::NotifyServiceAccountChanged() { + for (auto& observer : observers_) + observer.OnServiceAccountChanged(this); +} + void CloudPolicyClient::CreateDeviceRegisterRequest( const RegistrationParameters& params, const std::string& client_id,
diff --git a/components/policy/core/common/cloud/cloud_policy_client.h b/components/policy/core/common/cloud/cloud_policy_client.h index 13dbcf1..786dc6cb 100644 --- a/components/policy/core/common/cloud/cloud_policy_client.h +++ b/components/policy/core/common/cloud/cloud_policy_client.h
@@ -111,6 +111,11 @@ // Indicates there's been an error in a previously-issued request. virtual void OnClientError(CloudPolicyClient* client) = 0; + + // Called when the Service Account Identity is set on a policy data object + // after a policy fetch. |service_account_email()| will return the new + // account's email. + virtual void OnServiceAccountChanged(CloudPolicyClient* client) {} }; struct POLICY_EXPORT RegistrationParameters { @@ -364,6 +369,10 @@ const std::string& public_key, ClientCertProvisioningDownloadCertCallback callback); + // Used the update the current service account email associated with this + // policy client and notify observers. + void UpdateServiceAccount(const std::string& account_email); + // Adds an observer to be called back upon policy and state changes. void AddObserver(Observer* observer); @@ -394,6 +403,10 @@ public_key_version_valid_ = false; } + const std::string& service_account_email() const { + return service_account_email_; + } + // FetchPolicy() calls will request this policy type. // If |settings_entity_id| is empty then it won't be set in the // PolicyFetchRequest. @@ -597,6 +610,7 @@ void NotifyPolicyFetched(); void NotifyRegistrationStateChanged(); void NotifyClientError(); + void NotifyServiceAccountChanged(); // Data necessary for constructing policy requests. const std::string machine_id_; @@ -687,6 +701,9 @@ // error |DM_STATUS_SERVICE_DEVICE_NOT_FOUND|. std::string reregistration_dm_token_; + // The Service Account email that was set on the last policy fetch. + std::string service_account_email_; + // Used to create tasks which run delayed on the UI thread. base::WeakPtrFactory<CloudPolicyClient> weak_ptr_factory_{this};
diff --git a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc index c929420c..ef6e422d 100644 --- a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc +++ b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.cc
@@ -11,6 +11,7 @@ #include "components/policy/core/common/cloud/cloud_external_data_manager.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_store.h" +#include "components/policy/core/common/features.h" #include "components/policy/core/common/policy_pref_names.h" #include "components/prefs/pref_service.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -113,4 +114,19 @@ CloudPolicyManager::Shutdown(); } +void MachineLevelUserCloudPolicyManager::OnStoreLoaded( + CloudPolicyStore* cloud_policy_store) { + DCHECK_EQ(store(), cloud_policy_store); + CloudPolicyManager::OnStoreLoaded(cloud_policy_store); + + if (!base::FeatureList::IsEnabled(policy::features::kCBCMServiceAccounts)) + return; + + if (store()->policy() && store()->policy()->has_service_account_identity()) { + std::string service_account_id = + store()->policy()->service_account_identity(); + client()->UpdateServiceAccount(service_account_id); + } +} + } // namespace policy
diff --git a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h index 8b065405..9a36ce4 100644 --- a/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h +++ b/components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h
@@ -54,6 +54,9 @@ void Shutdown() override; private: + // CloudPolicyStore::Observer: + void OnStoreLoaded(CloudPolicyStore* cloud_policy_store) override; + std::unique_ptr<MachineLevelUserCloudPolicyStore> store_; std::unique_ptr<CloudExternalDataManager> external_data_manager_;
diff --git a/components/policy/core/common/features.cc b/components/policy/core/common/features.cc index 7875ac3..570fd883 100644 --- a/components/policy/core/common/features.cc +++ b/components/policy/core/common/features.cc
@@ -11,6 +11,9 @@ const base::Feature kPolicyAtomicGroup{"PolicyAtomicGroup", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kCBCMServiceAccounts{"CBCMServiceAccounts", + base::FEATURE_DISABLED_BY_DEFAULT}; + } // namespace features } // namespace policy
diff --git a/components/policy/core/common/features.h b/components/policy/core/common/features.h index 10d024cb..2ca3e9a2 100644 --- a/components/policy/core/common/features.h +++ b/components/policy/core/common/features.h
@@ -15,6 +15,9 @@ // TODO(994227) Remove references to this now unused feature. POLICY_EXPORT extern const base::Feature kPolicyAtomicGroup; +// Feature that controls whether the browser reads the service account +// information from policy data. +POLICY_EXPORT extern const base::Feature kCBCMServiceAccounts; } } // namespace policy
diff --git a/components/policy/core/common/mock_configuration_policy_provider.cc b/components/policy/core/common/mock_configuration_policy_provider.cc index da826f3..2c0eecf 100644 --- a/components/policy/core/common/mock_configuration_policy_provider.cc +++ b/components/policy/core/common/mock_configuration_policy_provider.cc
@@ -10,6 +10,7 @@ #include "base/message_loop/message_loop_current.h" #include "base/run_loop.h" +#include "build/build_config.h" #include "components/policy/core/common/policy_bundle.h" using testing::Invoke; @@ -26,7 +27,12 @@ bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) .CopyFrom(policy); UpdatePolicy(std::move(bundle)); - if (base::MessageLoopCurrent::IsSet()) + bool spin_run_loop = base::MessageLoopCurrent::IsSet(); +#if defined(IS_IOS) + // On iOS, the UI message loop does not support RunUntilIdle(). + spin_run_loop &= !base::MessageLoopCurrentForUI::IsSet(); +#endif // defined(OS_IOS) + if (spin_run_loop) base::RunLoop().RunUntilIdle(); }
diff --git a/components/printing/common/cloud_print_cdd_conversion.cc b/components/printing/common/cloud_print_cdd_conversion.cc index a71c9bb..a8f4e57f 100644 --- a/components/printing/common/cloud_print_cdd_conversion.cc +++ b/components/printing/common/cloud_print_cdd_conversion.cc
@@ -7,6 +7,7 @@ #include <stddef.h> #include <memory> +#include <utility> #include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" @@ -57,6 +58,99 @@ } #endif // defined(OS_CHROMEOS) +printer::MediaCapability GetMediaCapabilities( + const printing::PrinterSemanticCapsAndDefaults& semantic_info) { + printer::MediaCapability media_capabilities; + bool is_default_set = false; + + printer::Media default_media(semantic_info.default_paper.display_name, + semantic_info.default_paper.vendor_id, + semantic_info.default_paper.size_um.width(), + semantic_info.default_paper.size_um.height()); + default_media.MatchBySize(); + + for (const auto& paper : semantic_info.papers) { + gfx::Size paper_size = paper.size_um; + if (paper_size.width() > paper_size.height()) + paper_size.SetSize(paper_size.height(), paper_size.width()); + printer::Media new_media(paper.display_name, paper.vendor_id, + paper_size.width(), paper_size.height()); + new_media.MatchBySize(); + if (!new_media.IsValid()) + continue; + + if (media_capabilities.Contains(new_media)) + continue; + + if (!default_media.IsValid()) + default_media = new_media; + media_capabilities.AddDefaultOption(new_media, new_media == default_media); + is_default_set = is_default_set || (new_media == default_media); + } + if (!is_default_set && default_media.IsValid()) + media_capabilities.AddDefaultOption(default_media, true); + + return media_capabilities; +} + +printer::DpiCapability GetDpiCapabilities( + const printing::PrinterSemanticCapsAndDefaults& semantic_info) { + printer::DpiCapability dpi_capabilities; + bool is_default_set = false; + + printer::Dpi default_dpi(semantic_info.default_dpi.width(), + semantic_info.default_dpi.height()); + for (const auto& dpi : semantic_info.dpis) { + printer::Dpi new_dpi(dpi.width(), dpi.height()); + if (!new_dpi.IsValid()) + continue; + + if (dpi_capabilities.Contains(new_dpi)) + continue; + + if (!default_dpi.IsValid()) + default_dpi = new_dpi; + dpi_capabilities.AddDefaultOption(new_dpi, new_dpi == default_dpi); + is_default_set = is_default_set || (new_dpi == default_dpi); + } + if (!is_default_set && default_dpi.IsValid()) + dpi_capabilities.AddDefaultOption(default_dpi, true); + + return dpi_capabilities; +} + +#if defined(OS_CHROMEOS) +printer::VendorCapabilities GetVendorCapabilities( + const printing::PrinterSemanticCapsAndDefaults& semantic_info) { + printer::VendorCapabilities vendor_capabilities; + for (const auto& capability : semantic_info.advanced_capabilities) { + std::string capability_name = capability.display_name.empty() + ? capability.name + : capability.display_name; + if (capability.values.empty()) { + vendor_capabilities.AddOption( + printer::VendorCapability(capability.name, capability_name, + printer::TypedValueVendorCapability( + ToCloudValueType(capability.type)))); + continue; + } + + printer::SelectVendorCapability select_capability; + for (const auto& value : capability.values) { + std::string localized_value = + value.display_name.empty() ? value.name : value.display_name; + select_capability.AddDefaultOption( + printer::SelectVendorCapabilityOption(value.name, localized_value), + value.name == capability.default_value); + } + vendor_capabilities.AddOption(printer::VendorCapability( + capability.name, capability_name, std::move(select_capability))); + } + + return vendor_capabilities; +} +#endif // defined(OS_CHROMEOS) + } // namespace base::Value PrinterSemanticCapsAndDefaultsToCdd( @@ -104,53 +198,13 @@ color.SaveTo(&description); if (!semantic_info.papers.empty()) { - printer::Media default_media(semantic_info.default_paper.display_name, - semantic_info.default_paper.vendor_id, - semantic_info.default_paper.size_um.width(), - semantic_info.default_paper.size_um.height()); - default_media.MatchBySize(); - - printer::MediaCapability media; - bool is_default_set = false; - for (size_t i = 0; i < semantic_info.papers.size(); ++i) { - gfx::Size paper_size = semantic_info.papers[i].size_um; - if (paper_size.width() > paper_size.height()) - paper_size.SetSize(paper_size.height(), paper_size.width()); - printer::Media new_media(semantic_info.papers[i].display_name, - semantic_info.papers[i].vendor_id, - paper_size.width(), paper_size.height()); - new_media.MatchBySize(); - if (new_media.IsValid() && !media.Contains(new_media)) { - if (!default_media.IsValid()) - default_media = new_media; - media.AddDefaultOption(new_media, new_media == default_media); - is_default_set = is_default_set || (new_media == default_media); - } - } - if (!is_default_set && default_media.IsValid()) - media.AddDefaultOption(default_media, true); - + printer::MediaCapability media = GetMediaCapabilities(semantic_info); DCHECK(media.IsValid()); media.SaveTo(&description); } if (!semantic_info.dpis.empty()) { - printer::DpiCapability dpi; - printer::Dpi default_dpi(semantic_info.default_dpi.width(), - semantic_info.default_dpi.height()); - bool is_default_set = false; - for (size_t i = 0; i < semantic_info.dpis.size(); ++i) { - printer::Dpi new_dpi(semantic_info.dpis[i].width(), - semantic_info.dpis[i].height()); - if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) { - if (!default_dpi.IsValid()) - default_dpi = new_dpi; - dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi); - is_default_set = is_default_set || (new_dpi == default_dpi); - } - } - if (!is_default_set && default_dpi.IsValid()) - dpi.AddDefaultOption(default_dpi, true); + printer::DpiCapability dpi = GetDpiCapabilities(semantic_info); DCHECK(dpi.IsValid()); dpi.SaveTo(&description); } @@ -169,30 +223,8 @@ if (base::FeatureList::IsEnabled( printing::features::kAdvancedPpdAttributes) && !semantic_info.advanced_capabilities.empty()) { - printer::VendorCapabilities vendor_capabilities; - for (const auto& capability : semantic_info.advanced_capabilities) { - std::string capability_name = capability.display_name.empty() - ? capability.name - : capability.display_name; - if (!capability.values.empty()) { - printer::SelectVendorCapability select_capability; - for (const auto& value : capability.values) { - std::string localized_value = - value.display_name.empty() ? value.name : value.display_name; - select_capability.AddDefaultOption( - printer::SelectVendorCapabilityOption(value.name, - localized_value), - value.name == capability.default_value); - } - vendor_capabilities.AddOption(printer::VendorCapability( - capability.name, capability_name, std::move(select_capability))); - } else { - vendor_capabilities.AddOption( - printer::VendorCapability(capability.name, capability_name, - printer::TypedValueVendorCapability( - ToCloudValueType(capability.type)))); - } - } + printer::VendorCapabilities vendor_capabilities = + GetVendorCapabilities(semantic_info); vendor_capabilities.SaveTo(&description); } #endif // defined(OS_CHROMEOS)
diff --git a/components/proxy_config/OWNERS b/components/proxy_config/OWNERS index de8464c09..f8bc0eda 100644 --- a/components/proxy_config/OWNERS +++ b/components/proxy_config/OWNERS
@@ -1,2 +1,4 @@ +pmarko@chromium.org stevenjb@chromium.org -# COMPONENT: UI>Shell>Networking + +# COMPONENT: OS>Systems>Network
diff --git a/components/safe_browsing/core/db/v4_local_database_manager.cc b/components/safe_browsing/core/db/v4_local_database_manager.cc index c16b552f..72205acc 100644 --- a/components/safe_browsing/core/db/v4_local_database_manager.cc +++ b/components/safe_browsing/core/db/v4_local_database_manager.cc
@@ -699,6 +699,8 @@ SBThreatType* most_severe_threat_type, ThreatMetadata* metadata, FullHash* matching_full_hash) { + UMA_HISTOGRAM_COUNTS_100("SafeBrowsing.V4LocalDatabaseManager.ThreatInfoSize", + full_hash_infos.size()); ThreatSeverity most_severe_yet = kLeastSeverity; for (const FullHashInfo& fhi : full_hash_infos) { ThreatSeverity severity = GetThreatSeverity(fhi.list_id);
diff --git a/components/safe_browsing/core/db/v4_local_database_manager_unittest.cc b/components/safe_browsing/core/db/v4_local_database_manager_unittest.cc index 88c8098..5f6428fd0 100644 --- a/components/safe_browsing/core/db/v4_local_database_manager_unittest.cc +++ b/components/safe_browsing/core/db/v4_local_database_manager_unittest.cc
@@ -15,6 +15,7 @@ #include "base/run_loop.h" #include "base/sequenced_task_runner.h" #include "base/strings/string_tokenizer.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_simple_task_runner.h" #include "base/threading/thread_task_runner_handle.h" @@ -820,6 +821,7 @@ } TEST_F(V4LocalDatabaseManagerTest, TestGetSeverestThreatTypeAndMetadata) { + base::HistogramTester histograms; WaitForTasksOnTaskRunner(); FullHash fh_malware("Malware"); @@ -864,6 +866,10 @@ EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, result_threat_type); EXPECT_EQ("malware_popid", metadata.population_id); EXPECT_EQ(fh_malware, matching_full_hash); + + histograms.ExpectUniqueSample( + "SafeBrowsing.V4LocalDatabaseManager.ThreatInfoSize", + /* sample */ 2, /* expected_count */ 2); } TEST_F(V4LocalDatabaseManagerTest, TestChecksAreQueued) {
diff --git a/components/safe_browsing/core/realtime/url_lookup_service.cc b/components/safe_browsing/core/realtime/url_lookup_service.cc index 6019347..7a649a8 100644 --- a/components/safe_browsing/core/realtime/url_lookup_service.cc +++ b/components/safe_browsing/core/realtime/url_lookup_service.cc
@@ -280,6 +280,9 @@ MayBeCacheRealTimeUrlVerdict(url, *response); + UMA_HISTOGRAM_COUNTS_100("SafeBrowsing.RT.ThreatInfoSize", + response->threat_info_size()); + base::PostTask(FROM_HERE, CreateTaskTraits(ThreadID::IO), base::BindOnce(std::move(it->second), is_rt_lookup_successful, std::move(response)));
diff --git a/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc b/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc index 93dff22..b0ae65b5 100644 --- a/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc +++ b/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc
@@ -4,6 +4,7 @@ #include "components/safe_browsing/core/realtime/url_lookup_service.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" @@ -547,6 +548,7 @@ } TEST_F(RealTimeUrlLookupServiceTest, TestStartLookup_ResponseIsAlreadyCached) { + base::HistogramTester histograms; EnableRealTimeUrlLookup(/* is_with_token_enabled */ false); GURL url("http://example.test/"); MayBeCacheRealTimeUrlVerdict(url, RTLookupResponse::ThreatInfo::DANGEROUS, @@ -565,10 +567,17 @@ EXPECT_CALL(response_callback, Run(/* is_rt_lookup_successful */ true, _)); task_environment_->RunUntilIdle(); + + // This metric is not recorded because the response is obtained from the + // cache. + histograms.ExpectUniqueSample("SafeBrowsing.RT.ThreatInfoSize", + /* sample */ 0, + /* expected_count */ 0); } TEST_F(RealTimeUrlLookupServiceTest, TestStartLookup_AttachTokenWhenWithTokenIsEnabled) { + base::HistogramTester histograms; EnableRealTimeUrlLookup(/* is_with_token_enabled */ true); SetupPrimaryAccount(); GURL url("http://example.test/"); @@ -595,6 +604,10 @@ std::unique_ptr<RTLookupResponse> cache_response = GetCachedRealTimeUrlVerdict(url); EXPECT_NE(nullptr, cache_response); + + histograms.ExpectUniqueSample("SafeBrowsing.RT.ThreatInfoSize", + /* sample */ 1, + /* expected_count */ 1); } TEST_F(RealTimeUrlLookupServiceTest, TestStartLookup_NoTokenWhenNotSignedIn) {
diff --git a/components/signin/internal/identity_manager/oauth_multilogin_helper.cc b/components/signin/internal/identity_manager/oauth_multilogin_helper.cc index f796f320..08d22b2 100644 --- a/components/signin/internal/identity_manager/oauth_multilogin_helper.cc +++ b/components/signin/internal/identity_manager/oauth_multilogin_helper.cc
@@ -200,7 +200,7 @@ options.set_include_httponly(); // Permit it to set a SameSite cookie if it wants to. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( cookie, "https", options, mojo::WrapCallbackWithDefaultInvokeIfNotRun(
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc index 1c50efb..8fdcf18 100644 --- a/components/signin/public/base/signin_switches.cc +++ b/components/signin/public/base/signin_switches.cc
@@ -13,19 +13,6 @@ // Disables sending signin scoped device id to LSO with refresh token request. const char kDisableSigninScopedDeviceId[] = "disable-signin-scoped-device-id"; -#if !BUILDFLAG(ENABLE_MIRROR) -// Command line flag for enabling account consistency. Default mode is disabled. -// Mirror is a legacy mode in which Google accounts are always addded to Chrome, -// and Chrome then adds them to the Google authentication cookies. -// Dice is a new experiment in which Chrome is aware of the accounts in the -// Google authentication cookies. -const char kAccountConsistency[] = "account-consistency"; - -// Values for the kAccountConsistency flag. -const char kAccountConsistencyMirror[] = "mirror"; -const char kAccountConsistencyDice[] = "dice"; -#endif - #if defined(OS_CHROMEOS) const base::Feature kAccountIdMigration{"AccountIdMigration", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h index 7e6fb31..d354b0a 100644 --- a/components/signin/public/base/signin_switches.h +++ b/components/signin/public/base/signin_switches.h
@@ -19,14 +19,6 @@ extern const char kClearTokenService[]; extern const char kDisableSigninScopedDeviceId[]; -#if !BUILDFLAG(ENABLE_MIRROR) -// Note: Account consistency (Mirror) is already enabled on mobile platforms, so -// this switch only exist on desktop platforms. -extern const char kAccountConsistency[]; -extern const char kAccountConsistencyMirror[]; -extern const char kAccountConsistencyDice[]; -#endif - #if defined(OS_CHROMEOS) extern const base::Feature kAccountIdMigration; #endif
diff --git a/components/soda/constants.cc b/components/soda/constants.cc index a7a92a7c..e29887d 100644 --- a/components/soda/constants.cc +++ b/components/soda/constants.cc
@@ -25,9 +25,14 @@ base::PathService::Get(component_updater::DIR_COMPONENT_USER, &components_dir); - base::FileEnumerator enumerator( - components_dir.Append(kSodaInstallationRelativePath), false, - base::FileEnumerator::DIRECTORIES); + return components_dir.empty() + ? base::FilePath() + : components_dir.Append(kSodaInstallationRelativePath); +} + +const base::FilePath GetLatestSodaDirectory() { + base::FileEnumerator enumerator(GetSodaDirectory(), false, + base::FileEnumerator::DIRECTORIES); base::FilePath latest_version_dir; for (base::FilePath version_dir = enumerator.Next(); !version_dir.empty(); version_dir = enumerator.Next()) { @@ -39,13 +44,14 @@ } const base::FilePath GetSodaBinaryPath() { - base::FilePath soda_dir = GetSodaDirectory(); - return soda_dir.empty() ? soda_dir : soda_dir.Append(kSodaBinaryRelativePath); + base::FilePath soda_dir = GetLatestSodaDirectory(); + return soda_dir.empty() ? base::FilePath() + : soda_dir.Append(kSodaBinaryRelativePath); } const base::FilePath GetSodaConfigPath() { - base::FilePath soda_dir = GetSodaDirectory(); - return soda_dir.empty() ? soda_dir + base::FilePath soda_dir = GetLatestSodaDirectory(); + return soda_dir.empty() ? base::FilePath() : soda_dir.Append(kSodaConfigFileRelativePath); }
diff --git a/components/soda/constants.h b/components/soda/constants.h index 576ca7aa..7a5d0f8 100644 --- a/components/soda/constants.h +++ b/components/soda/constants.h
@@ -19,12 +19,15 @@ // directory. Note: SODA is currently only available in English. extern const base::FilePath::CharType kSodaConfigFileRelativePath[]; +// Get the absolute path of the SODA component directory. +const base::FilePath GetSodaDirectory(); + // Get the directory containing the latest version of SODA. In most cases // there will only be one version of SODA, but it is possible for there to be // multiple versions if a newer version of SODA was recently downloaded before // the old version gets cleaned up. Returns an empty path if SODA is not // installed. -const base::FilePath GetSodaDirectory(); +const base::FilePath GetLatestSodaDirectory(); // Get the path to the SODA binary. Returns an empty path if SODA is not // installed.
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 607e216..09e59d9 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -1026,7 +1026,7 @@ <translation id="536296301121032821">የመምሪያ ቅንብሮችን ማከማቸት አልተሳካም</translation> <translation id="5371425731340848620">ካርድ ያዘምኑ</translation> <translation id="5377026284221673050">«የእርስዎ ሰዓት ቀርቷል» ወይም «የእርስዎ ሰዓት ቀድሟል» ወይም «<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>»</translation> -<translation id="5380442954567233718">እየሄዱበት ያለው አገልጋይ <ph name="ORIGIN" /> ወደ እሱ በሚደረጉ ሁሉም ጥያቄዎች ላይ የምንጭ መመሪያ እንዲተገብር የሚፈልግ ራስጌ አቀናብሯል። ነገር ግን ራስጌው የተበላሸ ነው፣ ይህ አሳሹ <ph name="SITE" /> ጥያቄዎን እንዳያሟላ ይከለክለዋል። የምንጭ መመሪያዎች በጣቢያ ሥርዓት ከዋኞች የደኅንነት እና ሌላ ባሕሪያትን ለጣቢያው ለማዋቀር ጥቅም ላይ ሊውል ይችላል።</translation> +<translation id="5380442954567233718">እየሄዱበት ያለው አገልጋይ <ph name="ORIGIN" /> ወደ እሱ በሚደረጉ ሁሉም ጥያቄዎች ላይ የምንጭ መመሪያ እንዲተገብር የሚፈልግ ራስጌ አቀናብሯል። ነገር ግን ራስጌው የተበላሸ ነው፣ ይህ አሳሹ <ph name="SITE" /> ጥያቄዎን እንዳያሟላ ይከለክለዋል። የምንጭ መመሪያዎች በጣቢያ ሥርዓት ከዋነኞች የደኅንነት እና ሌላ ባሕሪያትን ለጣቢያው ለማዋቀር ጥቅም ላይ ሊውል ይችላል።</translation> <translation id="5386426401304769735">የዚህ ጣቢያ የዕውቅና ማረጋገጫ ሰንሰለቱ SHA-1 በመጠቀም የተፈረመ የዕውቅና ማረጋገጫን ያካትታል።</translation> <translation id="538659543871111977">A4-ትር</translation> <translation id="5396631636586785122">ቀኝ ጫፍን ስፋ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 9fe96b12..94b51b3 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">تتم مراقبة أي نص تكتبه أو أي صفحات تطّلع عليها أو أي نشاط آخر تجريه على الإنترنت، ويمكن أن يتم تغيير المحتوى على المواقع الإلكترونية بدون معرفتك.</translation> <translation id="2289385804009217824">قطع</translation> <translation id="2292556288342944218">تم حظر دخولك إلى الإنترنت</translation> +<translation id="2293443924986248631">عند تفعيل هذه الميزة، لا يمكن للمواقع الإلكترونية استخدام ملفات تعريف الارتباط التي تتبع خطواتك على الإنترنت. وقد تتوقف الميزات عن العمل في بعض المواقع الإلكترونية.</translation> <translation id="2297722699537546652">B5 (مغلف)</translation> <translation id="2300306941146563769">لم يتم التحميل</translation> <translation id="2310021320168182093">Chou2 (مغلف)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{الصفحة 1}zero{الصفحة {COUNT}}two{الصفحة {COUNT}}few{الصفحة {COUNT}}many{الصفحة {COUNT}}other{الصفحة {COUNT}}}</translation> <translation id="4154664944169082762">بصمات الأصابع</translation> <translation id="4159784952369912983">أرجواني</translation> +<translation id="4163132590327127354">بسّط Chrome هذه الصفحة لتسهيل قراءتها.</translation> <translation id="4165986682804962316">إعدادات المواقع الإلكترونية</translation> <translation id="4171400957073367226">توقيع تحقق سيئ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -855,7 +857,7 @@ <translation id="467662567472608290">هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ بل إنه شهادة أمان تحتوي على أخطاء. وربما يكون السبب في ذلك خطأ في التكوين أو مهاجمًا يعترض اتصالك.</translation> <translation id="4677585247300749148">يريد <ph name="URL" /> الاستجابة لأحداث إمكانية الوصول.</translation> <translation id="467809019005607715">العروض التقديمية من Google</translation> -<translation id="4680804919228900307">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. ينصحك Chromium الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="4680804919228900307">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك Chromium بالتحقّق من كلمات المرور المحفوظة للمواقع الإلكترونية الثلاثة <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> وغيرها من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="4690462567478992370">التوقف عن استخدام شهادة غير صالحة</translation> <translation id="4691835149146451662">Architecture-A (مغلف)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">تعذّر تخزين إعدادات السياسة</translation> <translation id="5371425731340848620">تحديث البطاقة</translation> <translation id="5377026284221673050">""توقيت ساعتك متأخِّر" أو "توقيت ساعتك متقدِّم" أو "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">إنّ خادم <ph name="ORIGIN" /> الذي تنتقل إليه أعدّ عنوانًا يتطلب فيه + أن يتم تطبيق سياسة المصدر على جميع الطلبات المقدّمة إليه. ولكن + العنوان غير صالح، وبالتالي يُمنع المتصفّح من توصيل + الطلب إلى الموقع الإلكتروني <ph name="SITE" />. يمكن استخدام سياسات المصدر من خلال + عوامل تشغيل الموقع الإلكتروني لضبط الأمان والخصائص الأخرى للموقع الإلكتروني.</translation> <translation id="5386426401304769735">تتضمن سلسلة الشهادات لهذا الموقع شهادة موقعة باستخدام SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">خزم الحواف يمينًا</translation> @@ -1435,7 +1442,7 @@ <translation id="7219179957768738017">الاتصال يستخدم <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">جارٍ المعالجة</translation> <translation id="7221855153210829124">عرض الإشعارات</translation> -<translation id="7229659723041939809">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. لذلك، ينصحك Chrome الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="7229659723041939809">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك متصفّح Chrome بالتحقّق من كلمات المرور المحفوظة للمواقع الإلكترونية الثلاثة <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /> وغيرها من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="7233592378249864828">طباعة ورقة التأكيد</translation> <translation id="7238585580608191973">بصمة أصبع SHA-256</translation> <translation id="7240120331469437312">الاسم البديل لصاحب الشهادة</translation> @@ -1503,7 +1510,7 @@ <translation id="7485870689360869515">لم يتم العثور على بيانات.</translation> <translation id="7495290002932347110">تمّ الكشف عن كلمة مرورك من خلال عملية اختراق للبيانات على موقع إلكتروني أو تطبيق تستخدمه. يقترح متصفّح Chrome التحقّق من كلمات المرور المحفوظة وتغيير كلمة مرورك على <ph name="ORIGIN" /> الآن.</translation> <translation id="7498234416455752244">متابعة التعديل</translation> -<translation id="7503664977220660814">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. ينصحك Chromium الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="7503664977220660814">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك Chromium بالتحقّق من كلمات المرور المحفوظة للموقعين الإلكترونيين <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> وغيرهما من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="7508255263130623398">رقم تعريف الجهاز المعروض للسياسة فارغ أو لا يتطابق مع رقم تعريف الجهاز الحالي</translation> <translation id="7508870219247277067">أخضر مصفر</translation> <translation id="7511955381719512146">قد يتتطلب Wi-Fi الذي تستخدمه زيارة <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ربما حظر الجدار الناري أو برامج مكافحة الفيروسات الاتصال.</translation> <translation id="7759163816903619567">نطاق العرض:</translation> +<translation id="776110834126722255">متوقّفة</translation> <translation id="7761701407923456692">لا تتطابق شهادة الخادم مع عنوان URL.</translation> <translation id="7763386264682878361">المحلل اللغوي لبيان الدفع</translation> <translation id="7764225426217299476">إضافة عنوان</translation> @@ -1600,7 +1608,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">هل تريد مغادرة الموقع؟</translation> <translation id="7865448901209910068">أفضل سرعة</translation> -<translation id="7874263914261512992">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. ينصحك Chrome الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="7874263914261512992">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك متصفّح Chrome بالتحقّق من كلمات المرور المحفوظة للموقعين الإلكترونيين <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /> وغيرهما من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="7878562273885520351">من المحتمل أنه تم اختراق كلمة مرورك</translation> <translation id="7882421473871500483">بني</translation> <translation id="7887683347370398519">تحقق من رمز التحقق من البطاقة (CVC) ثم أعد المحاولة.</translation> @@ -1737,7 +1745,7 @@ <translation id="8474910779563686872">عرض تفاصيل مطوّر البرامج</translation> <translation id="8479754468255770962">وضع دبوس أسفل اليسار</translation> <translation id="8483780878231876732">لاستخدام البطاقات من حسابك في Google، يُرجى تسجيل الدخول إلى Chrome</translation> -<translation id="8485393050551136813">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. ينصحك Chromium الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="8485393050551136813">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك Chromium بالتحقّق من كلمات المرور المحفوظة للموقع الإلكتروني <ph name="WEBSITE_1" /> وغيره من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="8488350697529856933">تنطبق على</translation> <translation id="8490137692873530638">المكدِّس 10</translation> <translation id="8498891568109133222">استغرق <ph name="HOST_NAME" /> وقتًا أطول مما يجب للاستجابة.</translation> @@ -1788,7 +1796,7 @@ <translation id="87601671197631245">يستخدم هذا الموقع الإلكتروني إعداد أمان غير محدَّث، وقد يكشف ذلك عن معلوماتك (مثل كلمات المرور أو الرسائل أو بطاقات الائتمان) عند إرسالها إلى هذا الموقع الإلكتروني.</translation> <translation id="8761567432415473239">عثر التصفح الآمن من Google مؤخرًا <ph name="BEGIN_LINK" />على برامج ضارة<ph name="END_LINK" /> في <ph name="SITE" />.</translation> <translation id="8763927697961133303">جهاز USB</translation> -<translation id="8774457497170244317">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. ينصحك Chrome الآن بالتحقّق من كلمات المرور المحفوظة في <ph name="WEBSITE_1" /> ومواقع إلكترونية أخرى تستخدم فيها كلمة المرور هذه.</translation> +<translation id="8774457497170244317">لقد أدخلت للتو كلمة المرور في موقع إلكتروني مريب. وللحفاظ على أمان بياناتك، ينصحك متصفّح Chrome بالتحقّق من كلمات المرور المحفوظة للموقع الإلكتروني <ph name="WEBSITE_1" /> وغيره من المواقع التي تستخدم فيها الآن كلمة المرور هذه.</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">إعادة الح&ذف</translation> <translation id="8792621596287649091">قد تفقد إمكانية الوصول إلى حسابك على <ph name="ORG_NAME" /> أو تتعرض لسرقة هويتك. لذا يوصي Chromium بتغيير كلمة مرورك الآن.</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 589b802..ba37db7 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">আপুনি টাইপ কৰা যিকোনো পাঠ, আপুনি চোৱা যিকোনো পৃষ্ঠা অথবা ৱেবত কৰা অন্য যিকোনো কার্যকলাপ চাই থকা হৈছে। আপোনাৰ অজ্ঞাতে ছাইটসমূহত থকা সমল সলনি কৰা হ’ব পাৰে।</translation> <translation id="2289385804009217824">ট্ৰিম কৰক</translation> <translation id="2292556288342944218">আপোনাৰ ইণ্টাৰনেটৰ এক্সেছ অৱৰোধ কৰা হ’ল</translation> +<translation id="2293443924986248631">অন কৰা থাকিলে ছাইটসমূহে সমগ্ৰ ৱেবত আপোনাক ট্ৰেক কৰা কুকিসমূহ ব্যৱহাৰ কৰিব নোৱাৰে। কিছুমান ছাইটত সুবিধাসমূহ ব্যাহত হ’ব পাৰে।</translation> <translation id="2297722699537546652">B5 (লেফাফা)</translation> <translation id="2300306941146563769">আপল'ড কৰা হোৱা নাই</translation> <translation id="2310021320168182093">Chou2 (লেফাফা)</translation> @@ -597,6 +598,7 @@ <translation id="3587738293690942763">মাজভাগ</translation> <translation id="3592413004129370115">ইটালিয়ান (লেফাফা)</translation> <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation> +<translation id="3603507503523709">আপোনাৰ প্ৰশাসকৰ দ্বাৰা এপ্লিকেশ্বনটো অৱৰোধ কৰা হৈছে</translation> <translation id="3608932978122581043">ফীডৰ দিশ</translation> <translation id="3614103345592970299">আকাৰ ২</translation> <translation id="361438452008624280">তালিকাত থকা "<ph name="LANGUAGE_ID" />": অজ্ঞাত বা অসমৰ্থিত ভাষা।</translation> @@ -724,6 +726,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{পৃষ্ঠা ১}one{পৃষ্ঠা {COUNT}}other{পৃষ্ঠা {COUNT}}}</translation> <translation id="4154664944169082762">ফিংগাৰপ্ৰিণ্ট</translation> <translation id="4159784952369912983">বেঙুনীয়া</translation> +<translation id="4163132590327127354">পঢ়াৰ বাবে সহজ কৰিবলৈ Chromeএ এই পৃষ্ঠাখন সৰলীকৃত কৰিছে।</translation> <translation id="4165986682804962316">ছাইটৰ ছেটিংসমূহ</translation> <translation id="4171400957073367226">সত্যাপনৰ স্বাক্ষৰটো বেয়া</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -849,6 +852,7 @@ <translation id="467662567472608290">ছাৰ্ভাৰটোৱে এইটো <ph name="DOMAIN" /> বুলি প্ৰমাণ কৰিব নোৱাৰিলে; ইয়াৰ সুৰক্ষা সম্পৰ্কীয় প্ৰমাণপত্ৰত আসোঁৱাহ আছে। এয়া কোনো ভুল কনফিগাৰেশ্বনৰ বাবে বা কোনো আক্ৰমণকাৰীয়ে আপোনাৰ সংযোগ অৱৰোধ কৰাৰ বাবে হ’ব পাৰে।</translation> <translation id="4677585247300749148">সাধ্য সুবিধাৰ অনুষ্ঠানসমূ্হলৈ <ph name="URL" />এ সঁহাৰি জনাব খোজে</translation> <translation id="467809019005607715">Google Slides</translation> +<translation id="4680804919228900307">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromiumএ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="4690462567478992370">অমান্য প্ৰমাণপত্ৰ ব্যৱহাৰ কৰা বন্ধ কৰক</translation> <translation id="4691835149146451662">স্থাপত্য বিদ্যা-A (লেফাফা)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1014,12 +1018,19 @@ <translation id="5329858041417644019">আপোনাৰ ব্ৰাউজাৰটো পৰিচালিত নহয়</translation> <translation id="5332219387342487447">শ্বিপিঙৰ পদ্ধতি</translation> <translation id="5334013548165032829">ছিষ্টেমৰ সূক্ষ্মাতিসূক্ষ্ম লগ</translation> +<translation id="5340250774223869109">এপ্লিকেশ্বনটো অৱৰোধ কৰা হৈছে</translation> <translation id="534295439873310000">NFC ডিভাইচসমূহ</translation> <translation id="5344579389779391559">এই পৃষ্ঠাটোৱে আপোনাৰ পৰা মাচুল লোৱাৰ চেষ্টা কৰিব পাৰে</translation> +<translation id="5346336634660260557">ক্লিপব’ৰ্ডৰ সমলৰ লগতে আপুনি Chromeত ডাউনল’ড অথবা আপল’ড কৰা ফাইলসমূহ স্কেন কৰক।</translation> <translation id="5355557959165512791">বর্তমান আপুনি <ph name="SITE" />ৰ চাব নোৱাৰে কাৰণ ইয়াৰ প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে। নেটৱর্কৰ সমস্যা আৰু আক্ৰমণবোৰ সাধাৰণতে অস্থায়ী হয় গতিকে এই পৃষ্ঠাটোৱে পাছত কাম কৰিব পাৰে।</translation> <translation id="536296301121032821">নীতিৰ ছেটিংসমূহ ষ্ট’ৰ কৰিবলৈ সক্ষম নহ’ল</translation> <translation id="5371425731340848620">কাৰ্ড আপডে’ট কৰক</translation> <translation id="5377026284221673050">"আপোনাৰ ঘড়ী লেহেমীয়াকৈ চলি আছে" বা "আপোনাৰ ঘড়ী খৰকৈ চলি আছে " বা "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">আপুনি ব্যৱহাৰ কৰিবলৈ লোৱা ছাৰ্ভাৰ <ph name="ORIGIN" />এ এটা হেডাৰ ছেট কৰিছে যাৰ + বাবে এইটোলৈ কৰা সকলো অনুৰোধত এটা মূল নীতি প্ৰয়োগ কৰা হ’ব। কিন্তু + হেডাৰটো ভালকৈ বনোৱা হোৱা নাই, যিয়ে ব্ৰাউজাৰটোক আপুনি কৰা <ph name="SITE" />ৰ + অনুৰোধটো পৰিপূৰণ কৰাত বাধা দিছে। কোনো ছাইটৰ বাবে + সুৰক্ষা আৰু অন্য বৈশিষ্ট্যবোৰ কনফিগাৰ কৰিবলৈ ছাইট অপাৰেটৰসকলে মূল নীতিসমূহ ব্যৱহাৰ কৰিব পাৰে।</translation> <translation id="5386426401304769735">এই ছাইটটোৰ প্ৰমাণপত্ৰৰ চ্চেইনত SHA-1 ব্যৱহাৰ কৰি ছাইন কৰা এখন প্ৰমাণপত্ৰ আছে।</translation> <translation id="538659543871111977">A4-টেব</translation> <translation id="5396631636586785122">সোঁফালে কাষত চিলাওক</translation> @@ -1422,6 +1433,7 @@ <translation id="7219179957768738017">সংযোগটোৱে <ph name="SSL_VERSION" /> ব্যৱহাৰ কৰে।</translation> <translation id="7220786058474068424">প্ৰক্ৰিয়া চলি আছে</translation> <translation id="7221855153210829124">জাননী দেখুৱাওক</translation> +<translation id="7229659723041939809">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromeএ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="7233592378249864828">প্ৰিণ্ট নিশ্চিতি শ্বীট</translation> <translation id="7238585580608191973">SHA-256 ফিংগাৰপ্ৰিণ্ট</translation> <translation id="7240120331469437312">প্ৰমাণপত্ৰৰ বিষয় বিকল্প নাম</translation> @@ -1489,6 +1501,7 @@ <translation id="7485870689360869515">কোনো ডেটা বিচাৰি পোৱা নগ’ল।</translation> <translation id="7495290002932347110">কোনো এটা ছাইট অথবা এপত হোৱা ডেটা উলংঘনে আপোনাৰ পাছৱৰ্ডটো ফাদিল কৰিছে। Chromeএ আপোনাৰ ছেভ হৈ থকা পাছৱৰ্ডসমূহ পৰীক্ষা কৰিবলৈ আৰু আপোনাৰ পাছৱৰ্ডটো <ph name="ORIGIN" />ত এতিয়াই সলনি কৰিবলৈ চুপাৰিছ কৰে।</translation> <translation id="7498234416455752244">সম্পাদনা কৰি থাকক</translation> +<translation id="7503664977220660814">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromiumএ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="7508255263130623398">উভতোৱা নীতিৰ ডিভাইচ আইডি খালী বা বর্তমান আইডি সৈতে অমিল</translation> <translation id="7508870219247277067">গাঢ় সেউজীয়া</translation> <translation id="7511955381719512146">আপুনি ব্যৱহাৰ কৰি থকা ৱাই-ফাইৰ বাবে আপুনি <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />লৈ যাব লগিব।</translation> @@ -1559,10 +1572,12 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ফায়াৰৱাল বা এণ্টিভাইৰাছ ছফটৱেৰে সংযোগটো অৱৰোধ কৰিব পাৰে।</translation> <translation id="7759163816903619567">ড’মেইন প্ৰদৰ্শন কৰক:</translation> +<translation id="776110834126722255">অপ্ৰচলিত</translation> <translation id="7761701407923456692">ছাৰ্ভাৰৰ প্ৰমাণপত্ৰ URLৰ সৈতে নিমিলে।</translation> <translation id="7763386264682878361">পৰিশোধ ঘোষণাৰ পার্ছাৰ</translation> <translation id="7764225426217299476">ঠিকনা যোগ কৰক</translation> <translation id="7766518757692125295">স্কাৰ্ট</translation> +<translation id="7767271804335921384">আপোনাৰ প্ৰশাসকে এপ্লিকেশ্বনটো অৱৰোধ কৰিছে</translation> <translation id="7770259615151589601">নিৰ্দিষ্ট-দৈৰ্ঘ্য</translation> <translation id="7773005668374414287">ওপৰমুখীয়াকৈ একেই ক্ৰম</translation> <translation id="777702478322588152">জিলাৰ মুৰব্বী</translation> @@ -1583,6 +1598,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">ছাইটোৰ পৰা বাহিৰ হ’বনে?</translation> <translation id="7865448901209910068">উত্তম বেগ</translation> +<translation id="7874263914261512992">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromeএ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="7878562273885520351">আপোনাৰ পাছৱৰ্ডটো হয়তো হেক হৈছে</translation> <translation id="7882421473871500483">মাটীয়া</translation> <translation id="7887683347370398519">আপোনাৰ CVC পৰীক্ষা কৰি আকৌ চেষ্টা কৰক</translation> @@ -1719,6 +1735,7 @@ <translation id="8474910779563686872">বিকাশকর্তাৰ সবিশেষ দেখুৱাওক</translation> <translation id="8479754468255770962">বাওঁফালে তলৰ অংশত ষ্টে'পল কৰক</translation> <translation id="8483780878231876732">আপোনাৰ Google একাউণ্টৰ পৰা কাৰ্ড ব্যৱহাৰ কৰিবলৈ Chromeত ছাইন ইন কৰক</translation> +<translation id="8485393050551136813">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromiumএ <ph name="WEBSITE_1" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="8488350697529856933">এইসমূহত প্ৰযোজ্য হয়</translation> <translation id="8490137692873530638">ষ্টেকাৰ ১০</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> ল’ড হোৱাত বহুত বেছি সময় লাগিল৷</translation> @@ -1768,6 +1785,7 @@ <translation id="87601671197631245">এই ছাইটটোৱে সুৰক্ষা সম্পৰ্কীয় এটা পুৰণি কনফিগাৰেশ্বন ব্যৱহাৰ কৰে, যিটোৱে আপোনাৰ তথ্য (উদাহৰণস্বৰূপে, পাছৱৰ্ড, বার্তা অথবা ক্ৰেডিট কাৰ্ডসমূহ) এই ছাইটটোলৈ পঠিওৱা হ’লে সেয়া ফাদিল কৰিব পাৰে।</translation> <translation id="8761567432415473239">Googleৰ সুৰক্ষিত ব্ৰাউজিঙে শেহতীয়াকৈ <ph name="SITE" />ত <ph name="BEGIN_LINK" />কিছুমান ক্ষতিকাৰক প্ৰ’গাম বিচাৰি পাইছিল<ph name="END_LINK" />।</translation> <translation id="8763927697961133303">ইউএছবি ডিভাইচ</translation> +<translation id="8774457497170244317">আপুনি এটা প্ৰৱঞ্চনামূলক ছাইটত এইমাত্ৰ নিজৰ পাছৱৰ্ডটো দিছে। Chromeএ <ph name="WEBSITE_1" /> আৰু অন্য ছাইটসমূহ, য’ত আপুনি এই পাছৱৰ্ডটো ব্যৱহাৰ কৰে সেইবিলাকত ছেভ কৰি থোৱা আপোনাৰ পাছৱৰ্ডসমূহ এতিয়াই পৰীক্ষা কৰাটো চুপাৰিছ কৰে।</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">মচা কার্য &ৰিডু কৰক</translation> <translation id="8792621596287649091">আপুনি <ph name="ORG_NAME" /> একাউণ্টটো এক্সেছ কৰিব নোৱাৰা হ’ব পাৰে বা আপোনাৰ পৰিচয় চুৰি হোৱাৰ নিচিনা ঘটনাৰ মুখামুখী হ’ব পাৰে। Chromiumএ আপোনাৰ পাছৱৰ্ডটো এতিয়াই সলনি কৰাটো চুপাৰিছ কৰিছে।</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index 4c62ade..2fd90b7 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Yazdığınız hər mətn, baxdığınız hər səhifə və ya vebdəki digər bütün fəaliyyətləriniz izlənilir. Saytlardakı məzmun xəbəriniz olmadan dəyişdirilə bilər.</translation> <translation id="2289385804009217824">Kəsin</translation> <translation id="2292556288342944218">İnternet girişiniz blok edilib</translation> +<translation id="2293443924986248631">Aktiv edildiyi zaman saytlar vebdə sizi izləyən kukilərdən istifadə edə bilmir. Bəzi saytlardakı funksiyalar dayandırıla bilər.</translation> <translation id="2297722699537546652">B5 (Zərf)</translation> <translation id="2300306941146563769">Yüklənməyib</translation> <translation id="2310021320168182093">Chou2 (Zərf)</translation> @@ -725,6 +726,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Səhifə 1}other{Səhifə {COUNT}}}</translation> <translation id="4154664944169082762">Barmaq izi</translation> <translation id="4159784952369912983">Bənövşəyi</translation> +<translation id="4163132590327127354">Chrome bu səhifənin daha rahat oxunması üçün onu sadələşdirdi.</translation> <translation id="4165986682804962316">Sayt ayarları</translation> <translation id="4171400957073367226">Pis doğrulama imzası</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1025,6 +1027,11 @@ <translation id="536296301121032821">Siyasət ayarlarını saxlamaq uğursuz oldu</translation> <translation id="5371425731340848620">Kartı yeniləyin</translation> <translation id="5377026284221673050">"Saatınız geridədir" və ya "Saatınız qabaqdadır" və ya "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Daxil olduğunuz server (<ph name="ORIGIN" />) ona yönləndirilən + bütün sorğulara mənbə siyasətin tətbiq edilməsini tələb edən başlıq ayarlayıb. Lakin + başlıq yanlış formadadır, bu da brauzerin <ph name="SITE" /> + üzrə olan sorğunuzu icra etməsinə mane olur. Mənbə siyasətlər + sayt üçün təhlükəsizlik və digər xüsusiyyətləri konfiqurasiya etmək üçün sayt operatorları tərəfindən istifadə edilə bilər.</translation> <translation id="5386426401304769735">Bu saytın sertifikat zənciri SHA-1 istifadə edərək imzalanmış sertifikatdan ibarətdir.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Sağdan kənarını tikin</translation> @@ -1571,6 +1578,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Qoruyucu divar və ya antivirus proqramı bağlantını blok etmiş ola bilər.</translation> <translation id="7759163816903619567">Displey domeni:</translation> +<translation id="776110834126722255">Müddəti keçib</translation> <translation id="7761701407923456692">Serverin sertifikatı URL ilə uyğun gəlmir.</translation> <translation id="7763386264682878361">Ödəniş Manifest Təhlili</translation> <translation id="7764225426217299476">Ünvan əlavə edin</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 0a16257..467d4d9 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Уся інфармацыя, якую вы набіраеце, усе старонкі, якія вы праглядаеце, а таксама любыя іншыя вашы дзеянні ў інтэрнэце адсочваюцца. Змесціва сайтаў можа быць зменена без вашага ведама.</translation> <translation id="2289385804009217824">Абрэзка</translation> <translation id="2292556288342944218">Доступ да інтэрнэту заблакіраваны</translation> +<translation id="2293443924986248631">Калі ўключыць гэту наладу, сайты не змогуць выкарыстоўваць файлы cookie для адсочвання вас у інтэрнэце. Функцыі на некаторых сайтах могуць перастаць працаваць.</translation> <translation id="2297722699537546652">B5 (канверт)</translation> <translation id="2300306941146563769">Не запампавана</translation> <translation id="2310021320168182093">Chou2 (канверт)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Старонка 1}one{Старонка {COUNT}}few{Старонка {COUNT}}many{Старонка {COUNT}}other{Старонка {COUNT}}}</translation> <translation id="4154664944169082762">Лічбавыя адбіткі</translation> <translation id="4159784952369912983">Фіялетавы</translation> +<translation id="4163132590327127354">Chrome спрасціў гэту старонку для больш зручнага чытання.</translation> <translation id="4165986682804962316">Налады сайта</translation> <translation id="4171400957073367226">Подпіс спраўджання недапушчальны</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">Не ўдалося захаваць налады палітыкі</translation> <translation id="5371425731340848620">Абнавіць картку</translation> <translation id="5377026284221673050">"Ваш гадзіннік спазняецца", або "Ваш гадзіннік спяшаецца", або "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Сервер, на які вы пераходзіце (<ph name="ORIGIN" />), мае загаловак, які патрабуе, + каб на ўсе запыты да сервера распаўсюджвалася палітыка крыніцы. Аднак + фармат загалоўка няправільны, што не дазваляе браўзеру + выканаць запыт сайта "<ph name="SITE" />". Палітыкі крыніцы могуць выкарыстоўвацца + аператарамі сайтаў для наладжвання бяспекі і іншых уласцівасцей сайта.</translation> <translation id="5386426401304769735">Ланцужок сертыфікатаў для гэтага сайта змяшчае сертыфікат, падпісаны з выкарыстаннем алгарытму SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Сшыванне па краі справа</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Падключэнне магло быць заблакіравана брандмаўэрам або антывірусам.</translation> <translation id="7759163816903619567">Бачны дамен:</translation> +<translation id="776110834126722255">Састарэлая</translation> <translation id="7761701407923456692">Несупадзенне паміж сертыфікатам сервера і URL-адрасам.</translation> <translation id="7763386264682878361">Аналізатар плацежных маніфестаў</translation> <translation id="7764225426217299476">Дадаць адрас</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 4f264bf6..52c8cd1e 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -314,6 +314,7 @@ <translation id="2288422996159078444">আপনি যা লিখছেন, যে পৃষ্ঠাগুলি দেখছেন বা ওয়েবে আপনার অন্যান্য অ্যাক্টিভিটি, সব কিছুতেই নজর রাখা হচ্ছে। আপনাকে না জানিয়ে সাইটের কন্টেন্টে পরিবর্তন করা হতে পারে।</translation> <translation id="2289385804009217824">ট্রিম করুন</translation> <translation id="2292556288342944218">আপনার ইন্টারনেট অ্যাক্সেস অবরুদ্ধ করা হয়েছে</translation> +<translation id="2293443924986248631">এটি চালু করা থাকলে যেসব কুকি ওয়েব জুড়ে আপনার অ্যাক্টিভিটি ট্র্যাক করে, সাইট সেগুলি ব্যবহার করতে পারবে না। কিছু কিছু সাইটের ফিচারগুলি কাজ নাও করতে পারে।</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">আপলোড করা হয়নি</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -601,7 +602,7 @@ <translation id="3587738293690942763">মাঝারি</translation> <translation id="3592413004129370115">Italian (Envelope)</translation> <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation> -<translation id="3603507503523709">আপনার অ্যাডমিনিস্ট্রেটর অ্যাপ্লিকেশনটি ব্লক করেছে</translation> +<translation id="3603507503523709">অ্যাপ্লিকেশনটিকে আপনার অ্যাডমিনিস্ট্রেটর ব্লক করেছে</translation> <translation id="3608932978122581043">ফিড ওরিয়েন্টেশন</translation> <translation id="3614103345592970299">সাইজ ২</translation> <translation id="361438452008624280">তালিকার এন্ট্রি "<ph name="LANGUAGE_ID" />": অজানা বা কাজ করে না এমন ভাষা।</translation> @@ -730,6 +731,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{১ নম্বর পৃষ্ঠা}one{{COUNT} নম্বর পৃষ্ঠা}other{{COUNT} নম্বর পৃষ্ঠা}}</translation> <translation id="4154664944169082762">আঙ্গুলের ছাপ</translation> <translation id="4159784952369912983">বেগুনি</translation> +<translation id="4163132590327127354">সহজে যাতে পড়া যায়, তার জন্য Chrome এই পৃষ্ঠাকে সহজপাঠ্য করেছে।</translation> <translation id="4165986682804962316">সাইটের সেটিংস</translation> <translation id="4171400957073367226">খারাপ যাচাইকরণের স্বাক্ষর</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1030,6 +1032,11 @@ <translation id="536296301121032821">নীতি সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে</translation> <translation id="5371425731340848620">কার্ড আপডেট করুন</translation> <translation id="5377026284221673050">"আপনার ঘড়ি লেটে চলছে" অথবা "আপনার ঘড়ি ফাস্ট আছে" অথবা "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">আপনি যে <ph name="ORIGIN" /> সার্ভারে যাচ্ছেন, সেটি একটি হেডার + সেট করেছে এবং সেখানে করা সব অনুরোধে ক্ষেত্রে একটি 'অরিজিন নীতি' প্রয়োগ হবে। কিন্তু + হেডারটির আকার ঠিক নয়, যা ব্রাউজারকে <ph name="SITE" /> + দেখানোর জন্য বাধা দিচ্ছে। সাইট অপারেটর কোনও সাইটের + নিরাপত্তা ও অন্যান্য প্রপার্টি কনফিগার করতে 'অরিজিন নীতি' ব্যবহার করতে পারে।</translation> <translation id="5386426401304769735">এই সাইটের সার্টিফিকেট শৃঙ্খলে SHA-1 ব্যবহার করে স্বাক্ষর করা একটি সার্টিফিকেট রয়েছে।</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">ডানদিকে ধারের দিকে সেলাই</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ফায়ারওয়াল বা অ্যান্টিভাইরাস সফটওয়্যার সংযোগকে অবরুদ্ধ করে থাকতে পারে।</translation> <translation id="7759163816903619567">ডিসপ্লে ডোমেন:</translation> +<translation id="776110834126722255">বাতিল করে দেওয়া</translation> <translation id="7761701407923456692">সার্ভারের সার্টিফিকেট ইউআরএল-এর সাথে মেলে না৷</translation> <translation id="7763386264682878361">পেমেন্ট ম্যানিফেস্ট বিশ্লেষক</translation> <translation id="7764225426217299476">ঠিকানা যোগ করুন</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index bc76a90bc..90b861e12 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Všechno, co zadáváte, všechny zobrazované stránky a veškerá další aktivita na webu jsou sledovány. Obsah na webech může být bez vašeho vědomí změněn.</translation> <translation id="2289385804009217824">Oříznutí</translation> <translation id="2292556288342944218">Vaše připojení k internetu je blokováno</translation> +<translation id="2293443924986248631">Když je tato možnost zapnutá, weby vás na internetu nemohou sledovat pomocí souborů cookie. Některé weby mohou přestat fungovat.</translation> <translation id="2297722699537546652">B5 (obálka)</translation> <translation id="2300306941146563769">Nenahráno</translation> <translation id="2310021320168182093">Chou2 (obálka)</translation> @@ -719,6 +720,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Strana 1}few{Strana {COUNT}}many{Strana {COUNT}}other{Strana {COUNT}}}</translation> <translation id="4154664944169082762">Digitální otisky</translation> <translation id="4159784952369912983">Nachová</translation> +<translation id="4163132590327127354">Chrome tuto stránku zjednodušil, aby se snadněji četla.</translation> <translation id="4165986682804962316">Nastavení webu</translation> <translation id="4171400957073367226">Chybný ověřovací podpis</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1018,6 +1020,7 @@ <translation id="536296301121032821">Ukládání nastavení zásady se nezdařilo</translation> <translation id="5371425731340848620">Aktualizace karty</translation> <translation id="5377026284221673050">Vaše hodiny se zpožďují, Vaše hodiny jdou napřed nebo <span class="error-code">NET::ERR_CERT_DATE_INVALID</span></translation> +<translation id="5380442954567233718">Server, na který přecházíte (<ph name="ORIGIN" />), nastavil záhlaví, které vyžaduje, aby se na všechny na něj odesílané požadavky vztahovaly zásady ohledně původu. Záhlaví má ale nesprávný tvar. Prohlížeč proto váš požadavek na web <ph name="SITE" /> nemůže splnit. Zásady ohledně původu mohou použít provozovatelé webů ke konfiguraci bezpečnostních a dalších vlastností webu.</translation> <translation id="5386426401304769735">Řetězec certifikátů tohoto webu obsahuje certifikát podepsaný algoritmem SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Sešití na pravém okraji</translation> @@ -1562,6 +1565,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Připojení mohlo být zablokováno firewallem nebo antivirovým softwarem.</translation> <translation id="7759163816903619567">Zobrazovaná doména:</translation> +<translation id="776110834126722255">Zastaralé</translation> <translation id="7761701407923456692">Certifikát serveru neodpovídá adrese URL.</translation> <translation id="7763386264682878361">Analyzátor manifestů plateb</translation> <translation id="7764225426217299476">Přidat adresu</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 793072ac..a6b5bee1 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -1582,7 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Firewall- eller antivirussoftware kan have blokeret forbindelsen.</translation> <translation id="7759163816903619567">Vist domæne:</translation> -<translation id="776110834126722255">Udfaset</translation> +<translation id="776110834126722255">Forældet</translation> <translation id="7761701407923456692">Serverens certifikat passer ikke til webadressen.</translation> <translation id="7763386264682878361">Værktøj til parsing af betalingsmanifester</translation> <translation id="7764225426217299476">Tilføj adresse</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 43c1ddf3..d0f7b8d 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Alles, was Sie eingeben, alle Seiten, die Sie besuchen, und alle sonstigen Aktivitäten im Internet werden überwacht. Inhalte von Websites können ohne Ihr Wissen verändert werden.</translation> <translation id="2289385804009217824">Zuschneiden</translation> <translation id="2292556288342944218">Ihre Internetverbindung ist gesperrt</translation> +<translation id="2293443924986248631">Wenn diese Funktion aktiviert ist, können Websites keine Cookies verwenden, die Ihre Browserdaten über mehrere Websites hinweg erfassen. Einige Websites funktionieren möglicherweise dann nicht mehr richtig.</translation> <translation id="2297722699537546652">B5 (Umschlag)</translation> <translation id="2300306941146563769">Nicht hochgeladen</translation> <translation id="2310021320168182093">Chou2 (Umschlag)</translation> @@ -722,6 +723,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Seite 1}other{Seite {COUNT}}}</translation> <translation id="4154664944169082762">Fingerabdrücke</translation> <translation id="4159784952369912983">Lila</translation> +<translation id="4163132590327127354">Chrome hat diese Seite vereinfacht, damit sie leichter zu lesen ist.</translation> <translation id="4165986682804962316">Website-Einstellungen</translation> <translation id="4171400957073367226">Ungültige Bestätigungssignatur</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1022,6 +1024,7 @@ <translation id="536296301121032821">Fehler beim Speichern der Richtlinieneinstellungen</translation> <translation id="5371425731340848620">Karte aktualisieren</translation> <translation id="5377026284221673050">"Ihre Uhr geht nach", "Ihre Uhr geht vor" oder "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Der Server <ph name="ORIGIN" />, zu dem Sie gehen, verlangt in einer Header-Datei, dass auf alle an ihn gerichteten Anfragen eine Ursprungsrichtlinie angewendet wird. Die Header-Datei ist allerdings fehlerhaft. Daher kann der Browser Ihre Anforderung für <ph name="SITE" /> nicht ausführen. Ursprungsrichtlinien können von Websitebetreibern verwendet werden, um die Sicherheit und andere Eigenschaften einer Website zu konfigurieren.</translation> <translation id="5386426401304769735">Die Zertifikatskette für diese Website enthält ein Zertifikat mit SHA-1-Signatur.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Mehrere Heftklammern rechts</translation> @@ -1568,6 +1571,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Möglicherweise wurde die Verbindung von einer Firewall oder Antivirensoftware blockiert.</translation> <translation id="7759163816903619567">Anzeigebereich: </translation> +<translation id="776110834126722255">Veraltet</translation> <translation id="7761701407923456692">Das Serverzertifikat stimmt nicht mit der URL überein.</translation> <translation id="7763386264682878361">Zahlungsmanifest-Parser</translation> <translation id="7764225426217299476">Adresse hinzufügen</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 9c210bdb..508729e 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Todo lo que escribas, las páginas que visites o cualquier otra actividad que realices en la Web está visible. Además, se puede cambiar contenido en los sitios sin tu conocimiento.</translation> <translation id="2289385804009217824">Cortar</translation> <translation id="2292556288342944218">Se bloqueó tu acceso a Internet</translation> +<translation id="2293443924986248631">Cuando esta opción está activada, los sitios no pueden usar cookies para rastrearte en la Web. Es posible que las características de algunos sitios no funcionen de forma adecuada.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">No se subió</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Página 1}other{Página {COUNT}}}</translation> <translation id="4154664944169082762">Huellas digitales</translation> <translation id="4159784952369912983">Púrpura</translation> +<translation id="4163132590327127354">Chrome simplificó esta página para facilitar la lectura.</translation> <translation id="4165986682804962316">Configuración de sitios</translation> <translation id="4171400957073367226">La firma de verificación no es válida.</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">Error al almacenar la configuración de la política</translation> <translation id="5371425731340848620">Actualizar tarjeta</translation> <translation id="5377026284221673050">"El reloj está atrasado", "El reloj está adelantado" o "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">El servidor <ph name="ORIGIN" /> al que te diriges estableció un encabezado + donde se indica que se aplicará una política de origen a todas las solicitudes. Sin embargo, + el encabezado tiene un formato no válido, por lo que el navegador no puede cumplir + con tu solicitud para <ph name="SITE" />. Los operadores de sitios pueden usar + las políticas de origen para configurar la seguridad y otras propiedades de un sitio.</translation> <translation id="5386426401304769735">La cadena del certificado de este sitio web contiene un certificado que se firmó con SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Costura de borde a la derecha</translation> @@ -1574,6 +1581,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Es posible que un software antivirus o un firewall hayan bloqueado la conexión.</translation> <translation id="7759163816903619567">Dominio para mostrar:</translation> +<translation id="776110834126722255">Obsoleta</translation> <translation id="7761701407923456692">El certificado del servidor no coincide con la dirección URL.</translation> <translation id="7763386264682878361">Analizador del manifiesto de pagos</translation> <translation id="7764225426217299476">Agregar dirección</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index b872064..103e326 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Se está vigilando todo lo que escribes, las páginas que visitas y el resto de la actividad que realizas en Internet. Es posible que se modifique el contenido de los sitios web sin que lo sepas.</translation> <translation id="2289385804009217824">Recortar</translation> <translation id="2292556288342944218">Tu acceso a Internet está bloqueado</translation> +<translation id="2293443924986248631">Si activas esta opción, los sitios web no podrán usar cookies para hacer un seguimiento de tu actividad en la Web. Es posible que las funciones de algunos sitios web no funcionen correctamente.</translation> <translation id="2297722699537546652">B5 (sobre)</translation> <translation id="2300306941146563769">No subido</translation> <translation id="2310021320168182093">Chou2 (sobre)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Página 1}other{Página {COUNT}}}</translation> <translation id="4154664944169082762">Huellas digitales</translation> <translation id="4159784952369912983">Morado</translation> +<translation id="4163132590327127354">Chrome ha simplificado esta página para facilitar su lectura.</translation> <translation id="4165986682804962316">Configuración del sitio web</translation> <translation id="4171400957073367226">La firma de verificación no es válida</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">Error al almacenar la configuración de la política</translation> <translation id="5371425731340848620">Actualizar tarjeta</translation> <translation id="5377026284221673050">"Tu reloj está atrasado" o "Tu reloj está adelantado" o "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">El servidor al que te diriges (<ph name="ORIGIN" />) ha establecido un encabezado + que requiere aplicar una política de origen a todas las solicitudes que reciba. Sin embargo, + el encabezado tiene errores, lo que impide al navegador procesar + tu solicitud de ir a <ph name="SITE" />. Los operadores de sitio web + pueden usar las políticas de origen para configurar la seguridad y otras propiedades de un sitio web.</translation> <translation id="5386426401304769735">La cadena de certificados de este sitio web contiene un certificado firmado con SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Grapado en el borde derecho</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Puede que el cortafuegos o el software antivirus hayan bloqueado la conexión.</translation> <translation id="7759163816903619567">Dominio visible:</translation> +<translation id="776110834126722255">Obsoleta</translation> <translation id="7761701407923456692">El certificado del servidor no coincide con la URL.</translation> <translation id="7763386264682878361">Analizador de archivos de manifiesto de pagos</translation> <translation id="7764225426217299476">Añadir dirección</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index c34f1c1..dce6fc0 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Zer idazten duzun, zer orri ikusten dituzun edo, orokorrean, sarean egiten duzun edozer ari dira gainbegiratzen. Baliteke webguneetako edukia aldatzea zuk jakin gabe.</translation> <translation id="2289385804009217824">Moztu</translation> <translation id="2292556288342944218">Blokeatuta duzu Interneteko konexioa</translation> +<translation id="2293443924986248631">Aktibatzen bada, webguneek ezingo dituzte erabili sarean jarraipena egiten dizuten cookieak. Baliteke webgune batzuetako eginbideek ez funtzionatzea.</translation> <translation id="2297722699537546652">B5 (gutun-azala)</translation> <translation id="2300306941146563769">Kargatu gabe</translation> <translation id="2310021320168182093">Chou2 (gutun-azala)</translation> @@ -722,6 +723,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1. orria}other{{COUNT}. orria}}</translation> <translation id="4154664944169082762">Erreferentzia-fitxategiak</translation> <translation id="4159784952369912983">Morea</translation> +<translation id="4163132590327127354">Chrome-k orri hau sinplifikatu egin du errazago irakurri ahal izan dadin.</translation> <translation id="4165986682804962316">Webgunearen ezarpenak</translation> <translation id="4171400957073367226">Egiaztapen-sinadurak ez du balio</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1017,11 +1019,12 @@ <translation id="5340250774223869109">Aplikazioa blokeatuta dago</translation> <translation id="534295439873310000">NFC darabilten gailuak</translation> <translation id="5344579389779391559">Baliteke orri hau dirua kobratzen saiatzea</translation> -<translation id="5346336634660260557">Aztertu arbelaren zein Chrome-ren bidez deskargatzen edo kargatzen dituzun fitxategien edukia.</translation> +<translation id="5346336634660260557">Aztertu arbeleko edukia eta Chrome-ren bidez deskargatzen edo kargatzen dituzun fitxategiak.</translation> <translation id="5355557959165512791">Une honetan ezin zara joan <ph name="SITE" /> webgunera ziurtagiria ukatu egin delako. Sareko erroreak eta erasoak aldi baterakoak izan ohi dira; beraz, geroago funtzionatuko du orriak, segur aski.</translation> <translation id="536296301121032821">Ezin izan dira gorde gidalerroaren ezarpenak</translation> <translation id="5371425731340848620">Eguneratu txartela</translation> <translation id="5377026284221673050">"Erlojua atzeratuta duzu", "Erlojua aurreratuta duzu" edo "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Erabili nahi duzun zerbitzariak (<ph name="ORIGIN" />) goiburu bat ezarri du; haren arabera, jatorri-gidalerro bat aplikatuko zaie bertan egindako eskaera guztiei. Alabaina, goiburua oker dago eratuta; ondorioz, arakatzaileak ezin du gauzatu <ph name="SITE" /> webgunean sartzeko egin duzu eskaera. Webgunearen segurtasuna eta beste propietate batzuk konfiguratzeko erabili ohi dituzte webguneen eragileek jatorri-gidalerroak.</translation> <translation id="5386426401304769735">Webgune honen ziurtagiri-kateak SHA-1 bidez sinatutako ziurtagiri bat dauka.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Eskuineko ertza josita</translation> @@ -1567,6 +1570,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Baliteke suebakiak edo birusen aurkako softwareak konexioa eten izatea.</translation> <translation id="7759163816903619567">Bistaratzeko domeinua:</translation> +<translation id="776110834126722255">Zaharkitua</translation> <translation id="7761701407923456692">Zerbitzariaren ziurtagiria ez dator bat URLarekin.</translation> <translation id="7763386264682878361">Ordainketa-manifestuen analizatzailea</translation> <translation id="7764225426217299476">Gehitu helbidea</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index b95c50c4..90f46a7e0 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">هرچه تایپ میکنید، هر صفحهای که میببینید، یا هر فعالیتی که در وب تماشا میشود. محتوای سایتها ممکن است بدون اطلاع شما تغییر کند.</translation> <translation id="2289385804009217824">برش دادن</translation> <translation id="2292556288342944218">دسترسی شما به اینترنت مسدود است</translation> +<translation id="2293443924986248631">وقتی روشن باشد، سایتها نمیتوانند از کوکیهایی که شما را در وب ردیابی میکند استفاده کنند. ویژگیهای بعضی از سایتها ممکن است درست کار نکنند.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">بارگذاری نشد</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -727,6 +728,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{صفحه ۱}one{صفحه {COUNT}}other{صفحه {COUNT}}}</translation> <translation id="4154664944169082762">اثر انگشت</translation> <translation id="4159784952369912983">بنفش</translation> +<translation id="4163132590327127354">Chrome این صفحه را ساده کرده است تا خواندن آن آسانتر باشد</translation> <translation id="4165986682804962316">تنظیمات سایت</translation> <translation id="4171400957073367226">امضای تأیید نامناسب</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1027,6 +1029,11 @@ <translation id="536296301121032821">تنظیمات خطمشی ذخیره نشد</translation> <translation id="5371425731340848620">بهروزرسانی کارت</translation> <translation id="5377026284221673050">«ساعتتان عقب است» یا «ساعتتان جلو است» یا «<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>»</translation> +<translation id="5380442954567233718">سروری که به آن میروید، <ph name="ORIGIN" />، سرصفحهای تنظیم کرده است که + ملزم میکند برای همه درخواستهایش خطمشی اصلی اعمال شود. اما + قالب سرصفحه نادرست است و این موضوع اجازه نمیدهد + مرورگر درخواستتان را برای <ph name="SITE" /> اجرا کند. اپراتورهای سایت میتوانند از + خطمشیهای اصلی برای پیکربندی امنیت و دیگر ویژگیهای سایت استفاده کنند.</translation> <translation id="5386426401304769735">زنجیره گواهی این سایت حاوی یک گواهی با امضای SHA-1 است.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">دوختن لبه راست</translation> @@ -1573,6 +1580,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">دیوار آتش یا نرمافزار ضدویروس ممکن است مانع اتصال شده باشد.</translation> <translation id="7759163816903619567">نمایش دامنه:</translation> +<translation id="776110834126722255">منسوخ</translation> <translation id="7761701407923456692">گواهی سرور با نشانی وب مطابقت ندارد.</translation> <translation id="7763386264682878361">تجزیهکننده مانیفست پرداخت</translation> <translation id="7764225426217299476">افزودن آدرس</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 5c86f4fe3..698aaab44 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Binabantayan ang anumang bagay na tina-type mo, ang anumang page na iyong tinitingnan, o ang anupamang aktibidad mo sa web. Puwedeng mabago ang content sa mga site nang hindi mo alam.</translation> <translation id="2289385804009217824">Paikliin</translation> <translation id="2292556288342944218">Naka-block ang iyong access sa Internet</translation> +<translation id="2293443924986248631">Kapag naka-on, ang mga site ay hindi makakagamit ng cookies na sumusubaybay sa iyo sa buong web. Posibleng masira ang mga feature sa ilang site.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">Hindi na-upload</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -725,6 +726,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Page 1}one{Page {COUNT}}other{Page {COUNT}}}</translation> <translation id="4154664944169082762">Mga fingerprint</translation> <translation id="4159784952369912983">Lila</translation> +<translation id="4163132590327127354">Pinasimple ng Chrome ang page na ito para mas madali itong mabasa</translation> <translation id="4165986682804962316">Mga setting ng site</translation> <translation id="4171400957073367226">Hindi wasto ang signature sa pag-verify</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -850,7 +852,7 @@ <translation id="467662567472608290">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; naglalaman ng mga error ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation> <translation id="4677585247300749148">Gustong tumugon ng <ph name="URL" /> sa mga kaganapan ng pagiging accessible</translation> <translation id="467809019005607715">Google Slides</translation> -<translation id="4680804919228900307">Kakalagay mo lang ng iyong password sa isang mapanlinlang na site. Inirerekomda ng Chromium na suriin mo ngayon ang iyong mga naka-save na password para sa <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, at iba pang site kung saan mo ginagamit ang password na ito.</translation> +<translation id="4680804919228900307">Kakalagay mo lang ng iyong password sa isang mapanlinlang na site. Inirerekomenda ng Chromium na suriin mo ngayon ang iyong mga naka-save na password para sa <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" />, at iba pang site kung saan mo ginagamit ang password na ito.</translation> <translation id="4690462567478992370">Ihinto ang paggamit ng di-wastong certificate</translation> <translation id="4691835149146451662">Architecture-A (Envelope)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1024,6 +1026,11 @@ <translation id="536296301121032821">Nabigo i-load ang mga setting ng patakaran sa store</translation> <translation id="5371425731340848620">I-update ang card</translation> <translation id="5377026284221673050">"Nahuhuli ang iyong orasan" o "Nauuna ang iyong orasan" o "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">May nakatakdang header ang pupuntahan mong server na <ph name="ORIGIN" /> na + humihiling na maglapat ng patakaran ng pinagmulan sa lahat ng kahilingan dito. Pero + sira ang header, na dahilan kaya napipigilan ang browser na tumugon + sa iyong kahilingan para sa <ph name="SITE" />. Magagamit ng mga operator ng site ang + mga patakaran ng pinagmulan para i-configure ang seguridad at iba pang property para sa isang site.</translation> <translation id="5386426401304769735">Naglalaman ang chain ng certificate para sa site na ito ng certificate na naka-sign gamit ang SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Edge stitch right</translation> @@ -1570,6 +1577,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Maaaring na-block ng firewall o antivirus software ang koneksyon.</translation> <translation id="7759163816903619567">Display domain:</translation> +<translation id="776110834126722255">Hindi na Ginagamit</translation> <translation id="7761701407923456692">Hindi tumutugma sa URL ang certificate ng server.</translation> <translation id="7763386264682878361">Pang-parse ng Manifest ng Pagbabayad</translation> <translation id="7764225426217299476">Magdagdag ng address</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 09d6fb0..81461e0 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -1431,7 +1431,7 @@ <translation id="7219179957768738017">La connexion utilise <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Traitement en cours</translation> <translation id="7221855153210829124">Afficher les notifications</translation> -<translation id="7229659723041939809">Vous venez d'entrer votre mot de passe sur un site trompeur. Chrome vous recommande de vérifier vos mots de passe enregistrés pour <ph name="WEBSITE_1" />, pour<ph name="WEBSITE_2" />, pour <ph name="WEBSITE_3" /> et pour tout autre site sur lequel vous utilisez ce mot de passe maintenant.</translation> +<translation id="7229659723041939809">Vous venez d'entrer votre mot de passe sur un site trompeur. Chrome vous recommande de vérifier vos mots de passe enregistrés pour <ph name="WEBSITE_1" />, pour <ph name="WEBSITE_2" />, pour <ph name="WEBSITE_3" /> et pour tout autre site sur lequel vous utilisez ce mot de passe maintenant.</translation> <translation id="7233592378249864828">Imprimer la feuille de confirmation</translation> <translation id="7238585580608191973">Empreintes digitales SHA-256</translation> <translation id="7240120331469437312">Autre nom de l'objet du certificat</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 28f5a2a..863f481 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Tout texte saisi, toute page consultée ou toute activité effectuée sur le Web sont surveillés. Le contenu des sites peut être modifié à votre insu.</translation> <translation id="2289385804009217824">Couper</translation> <translation id="2292556288342944218">Votre accès à Internet est bloqué</translation> +<translation id="2293443924986248631">Lorsque cette option est activée, les sites ne peuvent pas utiliser de cookies pour suivre votre activité sur le Web. Les fonctionnalités de certains sites peuvent être bloquées.</translation> <translation id="2297722699537546652">B5 (enveloppe)</translation> <translation id="2300306941146563769">Non importé</translation> <translation id="2310021320168182093">Chou2 (enveloppe)</translation> @@ -723,6 +724,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Page 1}one{Page {COUNT}}other{Page {COUNT}}}</translation> <translation id="4154664944169082762">Empreintes</translation> <translation id="4159784952369912983">Violet</translation> +<translation id="4163132590327127354">Chrome a simplifié cette page pour qu'elle soit plus facile à lire.</translation> <translation id="4165986682804962316">Paramètres de site</translation> <translation id="4171400957073367226">Signature de validation non valide.</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1022,6 +1024,7 @@ <translation id="536296301121032821">Échec du stockage des paramètres de la règle.</translation> <translation id="5371425731340848620">Mettre à jour la carte</translation> <translation id="5377026284221673050">"Votre horloge est en retard.", "Votre horloge est en avance." ou "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Le serveur auquel vous accédez, <ph name="ORIGIN" />, a défini un en-tête exigeant qu'une règle relative à l'origine soit appliquée à toutes les demandes qu'il reçoit. Cependant, l'en-tête est mal formé, ce qui signifie que le navigateur ne peut pas répondre à votre demande pour <ph name="SITE" />. Les exploitants de sites peuvent utiliser des règles relatives à l'origine pour configurer la sécurité et d'autres propriétés d'un site.</translation> <translation id="5386426401304769735">La chaîne de certificats de ce site contient un certificat signé avec SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Agrafage par le bord droit</translation> @@ -1568,6 +1571,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Il est possible qu'un pare-feu ou un logiciel antivirus ait bloqué la connexion.</translation> <translation id="7759163816903619567">Domaine d'affichage : </translation> +<translation id="776110834126722255">Obsolète</translation> <translation id="7761701407923456692">Le certificat du serveur ne correspond pas à l'URL.</translation> <translation id="7763386264682878361">Analyseur du fichier manifeste du paiement</translation> <translation id="7764225426217299476">Ajouter une adresse</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 9e5aea23..b1cf320 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Estase vixiando todo o que escribes, as páxinas que visitas e calquera outra actividade que realices na Web. Ademais, pode que se modifique o contido dos sitios sen que o saibas.</translation> <translation id="2289385804009217824">Recortar</translation> <translation id="2292556288342944218">O teu acceso a Internet está bloqueado</translation> +<translation id="2293443924986248631">Ao activar esta función, os sitios non poden utilizar cookies para seguirte pola Web. As funcións dalgúns sitios poden quedar bloqueadas.</translation> <translation id="2297722699537546652">B5 (sobre)</translation> <translation id="2300306941146563769">Non se cargou</translation> <translation id="2310021320168182093">Chou2 (sobre)</translation> @@ -727,6 +728,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Páxina 1}other{Páxina {COUNT}}}</translation> <translation id="4154664944169082762">Impresións dixitais</translation> <translation id="4159784952369912983">Púrpura</translation> +<translation id="4163132590327127354">Chrome simplificou esta páxina para que sexa máis fácil de ler.</translation> <translation id="4165986682804962316">Configuración do sitio</translation> <translation id="4171400957073367226">Sinatura de verificación incorrecta</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" />, <ph name="RESULT_OWNER" /> (<ph name="RESULT_PRODUCT_SOURCE" />)</translation> @@ -1027,6 +1029,7 @@ <translation id="536296301121032821">Non se puido almacenar a configuración da política</translation> <translation id="5371425731340848620">Actualizar tarxeta</translation> <translation id="5377026284221673050">"O reloxo está atrasado", "O reloxo está adiantado" ou "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">O servidor que vas visitar, <ph name="ORIGIN" />, definiu un título que require que se aplique unha política de orixe a todas as solicitudes que reciba. Non obstante, o título ten un formato incorrecto, o que impide que o navegador complete a solicitude de <ph name="SITE" />. Os operadores dos sitios poden utilizar as políticas de orixe para configurar a seguranza e outras propiedades dos sitios.</translation> <translation id="5386426401304769735">A cadea de certificados deste sitio contén un certificado que se asinou con SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Grampa no bordo dereito</translation> @@ -1573,6 +1576,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">É posible que o software do firewall ou do antivirus bloquease a conexión.</translation> <translation id="7759163816903619567">Dominio visible:</translation> +<translation id="776110834126722255">Política obsoleta</translation> <translation id="7761701407923456692">O certificado do servidor non coincide co URL.</translation> <translation id="7763386264682878361">Analizador de manifestos de pago</translation> <translation id="7764225426217299476">Engadir enderezo</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index e773e70..d2cd47b 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Megfigyelik, hogy mit gépel be, milyen oldalakat keres fel, illetve milyen egyéb tevékenységeket végez az interneten; emellett a webhelyek tartalma is módosulhat az Ön tudta nélkül.</translation> <translation id="2289385804009217824">Vágás</translation> <translation id="2292556288342944218">Az internethez való hozzáférést a rendszer letiltotta</translation> +<translation id="2293443924986248631">Bekapcsolt állapotban a webhelyek nem tudnak olyan cookie-kat használni, amelyek nyomon követik tevékenységeit az interneten. Előfordulhat, hogy bizonyos webhelyek funkciói nem működnek megfelelően.</translation> <translation id="2297722699537546652">B5 (boríték)</translation> <translation id="2300306941146563769">Nincs feltöltve</translation> <translation id="2310021320168182093">Chou2 (boríték)</translation> @@ -725,6 +726,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1. oldal}other{{COUNT}. oldal}}</translation> <translation id="4154664944169082762">Ujjlenyomatok</translation> <translation id="4159784952369912983">Lila</translation> +<translation id="4163132590327127354">A Chrome egyszerűsítette ezt az oldalt, hogy könnyebben olvasható legyen.</translation> <translation id="4165986682804962316">Webhelybeállítások</translation> <translation id="4171400957073367226">Hibás igazoló aláírás.</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1025,6 +1027,7 @@ <translation id="536296301121032821">Az irányelv-beállítások tárolása sikertelen</translation> <translation id="5371425731340848620">Kártya frissítése</translation> <translation id="5377026284221673050">„Az óra késik”, „Az óra siet” vagy „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>”</translation> +<translation id="5380442954567233718">A felkeresni kívánt szerver (<ph name="ORIGIN" />) beállított fejléce eredetházirend alkalmazását követeli meg az összes hozzá irányuló kérés esetében. A fejléc formátuma azonban nem megfelelő, így a böngésző nem tudja teljesíteni a(z) <ph name="SITE" /> webhelyre irányuló kérelmet. Az eredetházirendek segítségével a webhelyek üzemeltetői a webhely biztonsági és egyéb tulajdonságait konfigurálhatják.</translation> <translation id="5386426401304769735">A webhely tanúsítványlánca SHA-1 titkosítással aláírt tanúsítványt tartalmaz.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Éltűzés a jobb oldalon</translation> @@ -1571,6 +1574,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Előfordulhat, hogy a tűzfal vagy a vírusirtó szoftver tiltotta le a kapcsolatot.</translation> <translation id="7759163816903619567">Megjelenített domain:</translation> +<translation id="776110834126722255">Megszüntetve</translation> <translation id="7761701407923456692">A szerver tanúsítványa nem egyezik az URL-lel</translation> <translation id="7763386264682878361">Fizetésijegyzék-elemző</translation> <translation id="7764225426217299476">Cím hozzáadása</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 4452dd6..08ff468a 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Apa pun yang Anda ketik, halaman mana pun yang Anda lihat, atau aktivitas lain di web sedang dipantau. Konten di situs dapat berubah tanpa pemberitahuan sebelumnya.</translation> <translation id="2289385804009217824">Trim</translation> <translation id="2292556288342944218">Akses Internet Anda diblokir</translation> +<translation id="2293443924986248631">Jika diaktifkan, situs tidak dapat menggunakan cookie yang akan melacak Anda di seluruh web. Fitur di beberapa situs mungkin error.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">Tidak diupload</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Halaman 1}other{Halaman {COUNT}}}</translation> <translation id="4154664944169082762">Sidik jari</translation> <translation id="4159784952369912983">Ungu</translation> +<translation id="4163132590327127354">Chrome menyederhanakan halaman ini agar lebih mudah dibaca.</translation> <translation id="4165986682804962316">Setelan situs</translation> <translation id="4171400957073367226">Tanda tangan verifikasi tidak valid</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">Gagal menyimpan setelan kebijakan</translation> <translation id="5371425731340848620">Perbarui kartu</translation> <translation id="5377026284221673050">"Jam Anda terlalu lambat" atau "Jam Anda terlalu cepat" atau "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Server yang akan Anda akses, <ph name="ORIGIN" />, telah menetapkan header + yang mengharuskan kebijakan asal diterapkan ke semua permintaannya. Namun, + format header tersebut salah, yang membuat browser tidak dapat memenuhi + permintaan Anda untuk <ph name="SITE" />. Kebijakan asal dapat digunakan oleh + operator situs guna mengonfigurasi keamanan dan properti lainnya untuk sebuah situs.</translation> <translation id="5386426401304769735">Rantai sertifikat untuk situs ini berisi sertifikat yang ditandatangani menggunakan SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Jahitan tepi di kanan</translation> @@ -1572,6 +1579,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Software antivirus atau firewall mungkin memblokir sambungan.</translation> <translation id="7759163816903619567">Tampilkan domain:</translation> +<translation id="776110834126722255">Tidak digunakan lagi</translation> <translation id="7761701407923456692">Sertifikat server tidak cocok dengan URL.</translation> <translation id="7763386264682878361">Parser Manifes Pembayaran</translation> <translation id="7764225426217299476">Tambahkan alamat</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index cbbc4f47..c78b25f 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -314,6 +314,7 @@ <translation id="2288422996159078444">Verið er að fylgjast með öllu sem þú slærð inn, síðum sem þú skoðar og öllum öðrum aðgerðum á vefnum. Innihald vefsvæða getur breyst án vitundar þinnar.</translation> <translation id="2289385804009217824">Klippa</translation> <translation id="2292556288342944218">Lokað er fyrir aðgang þinn að internetinu</translation> +<translation id="2293443924986248631">Þegar kveikt er á þessu geta vefsvæði ekki notað fótspor sem rekja virkni þína á vefnum. Ekki er víst að allir eiginleikar á öllum vefsvæðum virki.</translation> <translation id="2297722699537546652">B5 (umslag)</translation> <translation id="2300306941146563769">Ekki sent</translation> <translation id="2310021320168182093">Chou2 (umslag)</translation> @@ -730,6 +731,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Síða 1}one{Síða {COUNT}}other{Síða {COUNT}}}</translation> <translation id="4154664944169082762">Fingraför</translation> <translation id="4159784952369912983">Purpurarauður</translation> +<translation id="4163132590327127354">Chrome einfaldaði þessa síðu svo það yrði auðveldara að lesa hana.</translation> <translation id="4165986682804962316">Svæðisstillingar</translation> <translation id="4171400957073367226">Röng staðfestingarundirskrift</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1030,6 +1032,11 @@ <translation id="536296301121032821">Mistókst að vista reglustillingar</translation> <translation id="5371425731340848620">Uppfæra kort</translation> <translation id="5377026284221673050">„Klukkan er á eftir“, „Klukkan þín er á undan“ eða „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>“</translation> +<translation id="5380442954567233718">Netþjónninn sem þú hefur valið, <ph name="ORIGIN" />, er með stilltan haus + þar sem farið er fram á að upprunaregla sé notuð við allar aðgangsbeiðnir. En + hausinn er gallaður, sem kemur í veg fyrir að vafrinn geti uppfyllt + beiðni þína fyrir <ph name="SITE" />. Upprunareglur geta verið notaðar af + stjórnendum vefsvæða til að stilla öryggi og aðra eiginleika fyrir vefsvæði.</translation> <translation id="5386426401304769735">Vottorðskeðja þessa vefsvæðis inniheldur vottorð sem var undirritað með SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Saumur hægra megin</translation> @@ -1576,6 +1583,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Hugsanlega lokaði eldveggur eða vírusvörn fyrir þessa tengingu.</translation> <translation id="7759163816903619567">Birt lén:</translation> +<translation id="776110834126722255">Úrelt</translation> <translation id="7761701407923456692">Vottorð þjónsins passar ekki við vefslóðina.</translation> <translation id="7763386264682878361">Þáttari upplýsingaskráa greiðslna</translation> <translation id="7764225426217299476">Bæta við heimilisfangi</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index e9d5977..30b1588 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -1799,7 +1799,7 @@ <translation id="87601671197631245">באתר הזה נעשה שימוש בתצורת הגנה מיושנת, כך שמידע נשלח אליו עשוי להיחשף (למשל סיסמאות, הודעות או כרטיסי אשראי).</translation> <translation id="8761567432415473239">גלישה בטוחה של Google <ph name="BEGIN_LINK" />איתרה לאחרונה תוכניות מזיקות<ph name="END_LINK" /> באתר <ph name="SITE" />.</translation> <translation id="8763927697961133303">התקן USB</translation> -<translation id="8774457497170244317">הזנת כרגע את הסיסמה שלך באתר מטעה. Chrome היא לבדוק באופן מיידי את הסיסמאות השמורות של <ph name="WEBSITE_1" /> ואתרים אחרים שבהם הסיסמה הזו נמצאת בשימוש.</translation> +<translation id="8774457497170244317">הזנת כרגע את הסיסמה שלך באתר מטעה. ההמלצה של Chrome היא לבדוק באופן מיידי את הסיסמאות השמורות של <ph name="WEBSITE_1" /> ואתרים אחרים שבהם הסיסמה הזו נמצאת בשימוש.</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">&ביצוע מחדש של מחיקה</translation> <translation id="8792621596287649091">הגישה שלך לחשבון <ph name="ORG_NAME" /> עשויה להישלל והזהות שלך עשויה להיגנב. ההמלצה של Chromium היא לשנות את הסיסמה עכשיו.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 5f39d302..23b3ccd 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">ウェブで入力した情報やアクセスしたページ、その他のアクティビティがすべて監視され、知らない間にサイトのコンテンツが改変されるおそれがあります。</translation> <translation id="2289385804009217824">トリミング</translation> <translation id="2292556288342944218">インターネット アクセスがブロックされています</translation> +<translation id="2293443924986248631">オンにすると、サイトは Cookie を使用してあなたをウェブ上でトラッキングできなくなります。一部サイトの機能が使用できなくなる可能性もあります。</translation> <translation id="2297722699537546652">B5(封筒)</translation> <translation id="2300306941146563769">アップロードされていません</translation> <translation id="2310021320168182093">長2(封筒)</translation> @@ -723,6 +724,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1 ページ}other{{COUNT} ページ}}</translation> <translation id="4154664944169082762">指紋</translation> <translation id="4159784952369912983">パープル</translation> +<translation id="4163132590327127354">ページを見やすくするため、Chrome によって簡易表示されています。</translation> <translation id="4165986682804962316">サイトの設定</translation> <translation id="4171400957073367226">確認用の署名に問題があります</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1022,6 +1024,7 @@ <translation id="536296301121032821">ポリシー設定を保存できませんでした</translation> <translation id="5371425731340848620">カードを更新</translation> <translation id="5377026284221673050">「時計が遅れています」、「時計が進んでいます」、「<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>」</translation> +<translation id="5380442954567233718">アクセスしているサーバー <ph name="ORIGIN" /> では、サーバーへのすべてのリクエストにオリジン ポリシーを適用することを求めるヘッダーが設定されていますが、ヘッダーの形式が正しくないため、ブラウザは <ph name="SITE" /> のリクエストを満たすことができません。オリジン ポリシーは、サイトのセキュリティやその他のプロパティを設定する目的でサイト運営者が使用するものです。</translation> <translation id="5386426401304769735">このサイトの証明書チェーンには SHA-1 を使って署名された証明書が含まれています。</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">端綴じ(右)</translation> @@ -1568,6 +1571,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ファイアウォールまたはウイルス対策ソフトウェアによって接続がブロックされた可能性があります。</translation> <translation id="7759163816903619567">表示ドメイン:</translation> +<translation id="776110834126722255">廃止</translation> <translation id="7761701407923456692">サーバーの証明書が URL と一致しません。</translation> <translation id="7763386264682878361">Payment Manifest Parser</translation> <translation id="7764225426217299476">住所を追加</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 3745f407..ab08099 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">თქვენ მიერ აკრეფილი ტექსტი, მონახულებული გვერდები ან სხვა აქტივობა ვებში მონიტორინგის ქვეშაა. საიტების კონტენტი შეიძლება შეიცვალოს თქვენი ინფორმირების გარეშე.</translation> <translation id="2289385804009217824">შემოჭრა</translation> <translation id="2292556288342944218">თქვენი კავშირი ინტერნეტთან დაბლოკილია</translation> +<translation id="2293443924986248631">ჩართვის შემთხვევაში ვებსაიტებს აეკრძალება თქვენთვის თვალის მიდევნება ქუქი-ჩანაწერების მეშვეობით. ზოგიერთი საიტის ფუნქციებმა შეიძლება არასათანადოდ იმუშაოს.</translation> <translation id="2297722699537546652">B5 (კონვერტი)</translation> <translation id="2300306941146563769">აუტვირთავია</translation> <translation id="2310021320168182093">Chou2 (კონვერტი)</translation> @@ -723,6 +724,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{გვერდი 1}other{გვერდი {COUNT}}}</translation> <translation id="4154664944169082762">თითის ანაბეჭდები</translation> <translation id="4159784952369912983">მეწამული</translation> +<translation id="4163132590327127354">Chrome-მა გაამარტივა ეს გვერდი მისი წაკითხვის გასაიოლებლად.</translation> <translation id="4165986682804962316">საიტის პარამეტრები</translation> <translation id="4171400957073367226">დამოწმების ცუდი ხელმოწერა</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> — <ph name="RESULT_OWNER" /> — <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1022,6 +1024,7 @@ <translation id="536296301121032821">ვერ მოხერხდა პოლიტიკის პარამეტრების შენახვა</translation> <translation id="5371425731340848620">ბარათის განახლება</translation> <translation id="5377026284221673050">„თქვენი საათი უკანაა“, „თქვენი საათი წინაა“ ან „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>“</translation> +<translation id="5380442954567233718">სერვერმა, რომელზე გადასვლასაც ცდილობთ (<ph name="ORIGIN" />), დააყენა სათაური, რომლისადმი ყველა მიმართვაც საჭიროებს წყაროს წესების გამოყენებას. სამწუხაროდ, სათაური არასწორად ფორმულირებულია, რის გამოც ბრაუზერი <ph name="SITE" />-თან დაკავშირებულ თქვენს მოთხოვნას ვერ ასრულებს. წყაროს წესების მეშვეობით საიტების ოპერატორებს შეუძლიათ ამა თუ იმ საიტის უსაფრთხოებისა და სხვა მახასიათებლების კონფიგურაცია.</translation> <translation id="5386426401304769735">ამ საიტის სერტიფიკატთა ჯაჭვი SHA-1-ის მეშვეობით ხელმოწერილ სერტიფიკატს შეიცავს.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">კიდეების მიკერება მარჯვნივ</translation> @@ -1568,6 +1571,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">კავშირი შეიძლება ქსელის დაცვის ან ანტივირუსული პროგრამული უზრუნველყოფის მიერ იყოს დაბლოკილი.</translation> <translation id="7759163816903619567">საჩვენებელი დომენი:</translation> +<translation id="776110834126722255">მოძველებული</translation> <translation id="7761701407923456692">სერვერის სერტიფიკატი არ ემთხვევა URL-ს.</translation> <translation id="7763386264682878361">გადახდის აღწერის ფაილის სინტაქსიკური ანალიზის პროგრამა</translation> <translation id="7764225426217299476">მისამართის დამატება</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 45226d2..fdfbfd99 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Терген мәтініңіз, көрген беттеріңіз не желідегі басқа да әрекеттеріңіз бақыланады. Сайттардағы мазмұн сізге хабарланбай өзгертілуі мүмкін.</translation> <translation id="2289385804009217824">Кесу</translation> <translation id="2292556288342944218">Интернетке кіруге тыйым салынған</translation> +<translation id="2293443924986248631">Бұл параметр қосулы кезде, сайттар интернеттегі әрекеттеріңізді бақылайтын cookie файлдарын пайдалана алмайды. Кейбір сайттағы функциялар дұрыс жұмыс істемеуі мүмкін.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">Жүктеп салынбады</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1-бет}other{{COUNT}-бет}}</translation> <translation id="4154664944169082762">Саусақ іздері</translation> <translation id="4159784952369912983">Күлгін</translation> +<translation id="4163132590327127354">Chrome бұл режимде беттің оқылуын жеңілдетті.</translation> <translation id="4165986682804962316">Сайт параметрлері</translation> <translation id="4171400957073367226">Растау қолтаңбасы жарамсыз</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">Саясат параметрлерін сақтау сәтсіз аяқталды</translation> <translation id="5371425731340848620">Картаны жаңарту</translation> <translation id="5377026284221673050">"Сағатыңыз артта", "Сағатыңыз алда" немесе "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Сіз өткелі тұрған <ph name="ORIGIN" /> сервері орнатқан атау + өзіне берілген сұраулардың барлығына бастапқы саясаттың қолданылуын талап етеді. Бірақ + атауының пішіні өзгерген, бұл — браузердің <ph name="SITE" /> сайтына берілген сұрауларды толтыруына + жол бермейді. Сайттың қауіпсіздік параметрлері мен + басқа сипаттарын конфигурациялау үшін сайт операторлары бастапқы саясаттарды қолдануы мүмкін.</translation> <translation id="5386426401304769735">Осы сайтқа арналған сертификат тізбегінде SHA-1 көмегімен қолтаңба қойылған сертификат бар.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Оң жақ жиегін тігу</translation> @@ -1574,6 +1581,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Брандмауэр немесе вирусқа қарсы бағдарламалық құрал байланысты бөгеп қойған болуы мүмкін.</translation> <translation id="7759163816903619567">Доменді көрсету:</translation> +<translation id="776110834126722255">Ескірген</translation> <translation id="7761701407923456692">Сервер сертификаты URL мекенжайына сәйкес келмейді.</translation> <translation id="7763386264682878361">Төлем манифестін талдау құралы</translation> <translation id="7764225426217299476">Мекенжай қосу</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index db2e0ce..e0e3bb18 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -315,6 +315,7 @@ <translation id="2288422996159078444">អ្វីដែលអ្នកវាយបញ្ចូល ទំព័រទាំងឡាយដែលអ្នកមើល ឬសកម្មភាពផ្សេងទៀតនៅលើបណ្ដាញកំពុងត្រូវបានឃ្លាំមើល។ ខ្លឹមសារនៅលើគេហទំព័រផ្សេងៗអាចនឹងត្រូវបានប្ដូរដោយមិនឱ្យអ្នកដឹង។</translation> <translation id="2289385804009217824">តម្រឹម</translation> <translation id="2292556288342944218">ការចូលប្រើអ៊ីនធឺណិតរបស់អ្នកត្រូវបានរារាំង</translation> +<translation id="2293443924986248631">នៅពេលបើក គេហទំព័រមិនអាចប្រើខូគី ដែលតាមដានអ្នកនៅលើអ៊ីនធឺណិតបានទេ។ មុខងារនៅលើគេហទំព័រមួយចំនួនអាចដំណើរការមិនត្រឹមត្រូវ។</translation> <translation id="2297722699537546652">B5 (ស្រោមសំបុត្រ)</translation> <translation id="2300306941146563769">មិនបានបង្ហោះទេ</translation> <translation id="2310021320168182093">Chou2 (ស្រោមសំបុត្រ)</translation> @@ -732,6 +733,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{ទំព័រទី 1}other{ទំព័រទី {COUNT}}}</translation> <translation id="4154664944169082762">ស្នាមម្រាមដៃ</translation> <translation id="4159784952369912983">ស្វាយ</translation> +<translation id="4163132590327127354">Chrome បានសម្រួលទំព័រនេះ ដើម្បីឱ្យងាយស្រួលអានជាងមុន។</translation> <translation id="4165986682804962316">ការកំណត់គេហទំព័រ</translation> <translation id="4171400957073367226">ហេត្ថលេខាផ្ទៀងផ្ទាត់មិនល្អ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1033,6 +1035,11 @@ <translation id="536296301121032821">បានបរាជ័យក្នុងការស្តារការកំណត់គោលការណ៍នេះ</translation> <translation id="5371425731340848620">ធ្វើបច្ចុប្បន្នភាពកាត</translation> <translation id="5377026284221673050">"នាឡិការបស់អ្នកដើរយឺត" ឬ "នាឡិការបស់អ្នកដើរលឿន" ឬ "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">ម៉ាស៊ីនមេ <ph name="ORIGIN" /> ដែលអ្នកកំពុងចូលបានកំណត់ផ្នែកក្បាល + ដែលនឹងតម្រូវឱ្យអនុវត្តគោលការណ៍ដើមចំពោះគ្រប់សំណើមកកាន់វា។ ប៉ុន្តែ + ផ្នែកក្បាលនោះមានទម្រង់មិនត្រឹមត្រូវ ដែលទប់ស្កាត់កម្មវិធីរុករកតាមអ៊ីនធឺណិតមិនឱ្យបំពេញ + តាមសំណើរបស់អ្នកសម្រាប់ <ph name="SITE" />។ ប្រតិបត្តិករគេហទំព័រអាចប្រើ + គោលការណ៍ដើម ដើម្បីកំណត់រចនាសម្ព័ន្ធសុវត្ថិភាព និងលក្ខណសម្បត្តិផ្សេងទៀតសម្រាប់គេហទំព័រ។</translation> <translation id="5386426401304769735">ខ្សែវិញ្ញាបនបត្រសម្រាប់ទំព័រនេះផ្ទុកវិញ្ញាបនបត្រមួយដែលចុះហត្ថលេខាដោយប្រើ SHA-1 ។</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">ដេរគែមខាងស្ដាំ</translation> @@ -1580,6 +1587,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">កម្មវិធីកំចាត់មេរោគ ឬ Firewall ប្រហែលជាបានរារាំងការតភ្ជាប់</translation> <translation id="7759163816903619567">បង្ហាញដែន៖</translation> +<translation id="776110834126722255">បានបញ្ឈប់</translation> <translation id="7761701407923456692">វិញ្ញាបនប័ត្ររបស់ម៉ាស៊ីនមេមិនត្រូវគ្នានឹង URL នេះទេ។</translation> <translation id="7763386264682878361">ការបង់ប្រាក់សម្រាប់កម្មវិធីញែកជាក់លាក់</translation> <translation id="7764225426217299476">បន្ថែមអាសយដ្ឋាន</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index c12e636f..3accc02 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -312,6 +312,7 @@ <translation id="2288422996159078444">ನೀವು ಟೈಪ್ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯ, ವೀಕ್ಷಿಸುವ ಯಾವುದೇ ಪುಟಗಳು ಅಥವಾ ವೆಬ್ನಲ್ಲಿ ನಡೆಸುವ ಇತರ ಯಾವುದೇ ಚಟುವಟಿಕೆಯ ಮೇಲೆ ನಿಗಾ ಇರಿಸಲಾಗಿದೆ. ಸೈಟ್ಗಳಲ್ಲಿನ ವಿಷಯವನ್ನು ನಿಮ್ಮ ಗಮನಕ್ಕೆ ತರದೇ ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="2289385804009217824">ಟ್ರಿಮ್ ಮಾಡಿ</translation> <translation id="2292556288342944218">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> +<translation id="2293443924986248631">ಆನ್ ಮಾಡಿದಾಗ, ನಿಮ್ಮನ್ನು ವೆಬ್ನಾದ್ಯಂತ ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಕುಕೀಗಳನ್ನು ಬಳಸಲು ಸೈಟ್ಗಳಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಕೆಲವು ವೆಬ್ಸೈಟ್ಗಳಲ್ಲಿನ ವೈಶಿಷ್ಟ್ಯಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಬಹುದು.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">ಅಪ್ಲೋಡ್ ಮಾಡಿಲ್ಲ</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -719,6 +720,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{ಪುಟ 1}one{ಪುಟ {COUNT}}other{ಪುಟ {COUNT}}}</translation> <translation id="4154664944169082762">ಫಿಂಗರ್ಪ್ರಿಂಟ್ಗಳು</translation> <translation id="4159784952369912983">ನೇರಳೆ</translation> +<translation id="4163132590327127354">ಓದುವುದನ್ನು ಸುಲಭಗೊಳಿಸಲು, Chrome ಈ ಪುಟವನ್ನು ಸರಳೀಕರಿಸಿದೆ.</translation> <translation id="4165986682804962316">ಸೈಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="4171400957073367226">ತಪ್ಪು ಪರಿಶೀಲನೆ ಸಹಿ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1018,6 +1020,10 @@ <translation id="536296301121032821">ನೀತಿಯ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ</translation> <translation id="5371425731340848620">ಕಾರ್ಡ್ ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> <translation id="5377026284221673050">"ನಿಮ್ಮ ಗಡಿಯಾರ ಹಿಂದಿದೆ" ಅಥವಾ "ನಿಮ್ಮ ಗಡಿಯಾರ ಮುಂದಿದೆ" ಅಥವಾ "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">ನೀವು ಪ್ರವೇಶಿಸುತ್ತಿರುವ ಸರ್ವರ್, <ph name="ORIGIN" />, ಹೆಡರ್ ಫೈಲ್ ಅನ್ನು ಹೊಂದಿಸಿದೆ + ಹಾಗೂ ತನ್ನ ಎಲ್ಲಾ ವಿನಂತಿಗಳಿಗೆ ಮೂಲ ಕಾರ್ಯನೀತಿಯನ್ನು ಅನ್ವಯಿಸಲು ವಿನಂತಿಸಿದೆ. ಆದರೆ, + ಹೆಡರ್ ಫೈಲ್ ವಿರೂಪಗೊಂಡಿದೆ, <ph name="SITE" /> ಅನ್ನು ಪ್ರವೇಶಿಸಲು ನಿಮ್ಮ ವಿನಂತಿಯನ್ನು + ಬ್ರೌಸರ್ ಪೂರೈಸದಂತೆ ತಡೆಯುತ್ತದೆ. ಸೈಟ್ ಒಂದಕ್ಕಾಗಿ ಸುರಕ್ಷತೆ ಮತ್ತು ಇತರ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸೈಟ್ ಆಪರೇಟರ್ಗಳು ಮೂಲ ಕಾರ್ಯನೀತಿಗಳನ್ನು ಬಳಸಬಹುದು.</translation> <translation id="5386426401304769735">ಈ ಸೈಟ್ಗೆ ಪ್ರಮಾಣಪತ್ರ ಸರಣಿಯು SHA-1 ಬಳಸಿಕೊಂಡು ಸಹಿ ಮಾಡಲಾದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">ಬಲಭಾಗದ ಅಂಚನ್ನು ಹೊಲಿಯಿರಿ</translation> @@ -1562,6 +1568,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ಸಂಪರ್ಕವನ್ನು ಫೈರ್ವಾಲ್ ಅಥವಾ ಆಂಟಿವೈರಸ್ ಸಾಫ್ಟ್ವೇರ್ ನಿರ್ಬಂಧಿಸಿರಬಹುದು.</translation> <translation id="7759163816903619567">ಡಿಸ್ಪ್ಲೇ ಡೊಮೇನ್:</translation> +<translation id="776110834126722255">ತಡೆಹಿಡಿಯಲಾಗಿದೆ</translation> <translation id="7761701407923456692">ಸರ್ವರ್ನ ಪ್ರಮಾಣಪತ್ರವು URL ಗೆ ಸರಿ ಹೊಂದುವುದಿಲ್ಲ.</translation> <translation id="7763386264682878361">ಪಾವತಿ ಮ್ಯಾನಿಫೆಸ್ಟ್ ವಿಶ್ಲೇಷಕರು</translation> <translation id="7764225426217299476">ವಿಳಾಸ ಸೇರಿಸಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index c563a5e5..d294f95 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">내가 입력하는 내용, 접속하는 페이지, 웹상의 기타 모든 활동이 감시되며, 사이트의 콘텐츠가 눈치채지 못하게 변경될 수 있습니다.</translation> <translation id="2289385804009217824">트림</translation> <translation id="2292556288342944218">인터넷 액세스가 차단됨</translation> +<translation id="2293443924986248631">이 옵션을 사용 설정하면 사이트가 웹 전반에서 사용자를 추적하는 쿠키를 사용할 수 없습니다. 일부 사이트에서는 기능이 작동하지 않을 수 있습니다.</translation> <translation id="2297722699537546652">B5(봉투)</translation> <translation id="2300306941146563769">업로드되지 않음</translation> <translation id="2310021320168182093">Chou2(봉투)</translation> @@ -598,7 +599,7 @@ <translation id="3587738293690942763">보통</translation> <translation id="3592413004129370115">Italian(봉투)</translation> <translation id="3600246354004376029"><ph name="TITLE" />, <ph name="DOMAIN" />, <ph name="TIME" /></translation> -<translation id="3603507503523709">관리자가 애플리케이션을 차단함</translation> +<translation id="3603507503523709">관리자가 차단한 애플리케이션</translation> <translation id="3608932978122581043">종이 공급 방향</translation> <translation id="3614103345592970299">크기 2</translation> <translation id="361438452008624280">목록 항목 ‘<ph name="LANGUAGE_ID" />’: 알 수 없거나 지원되지 않는 언어입니다.</translation> @@ -727,6 +728,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{페이지 1}other{페이지 {COUNT}}}</translation> <translation id="4154664944169082762">지문</translation> <translation id="4159784952369912983">보라색</translation> +<translation id="4163132590327127354">Chrome에서 페이지를 읽기 쉽도록 간소화했습니다.</translation> <translation id="4165986682804962316">사이트 설정</translation> <translation id="4171400957073367226">잘못된 인증 서명입니다.</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1027,6 +1029,11 @@ <translation id="536296301121032821">정책 설정 저장 실패</translation> <translation id="5371425731340848620">카드 업데이트</translation> <translation id="5377026284221673050">'시간이 너무 먼 과거로 설정되어 있습니다.', '시간이 너무 먼 미래로 설정되어 있습니다.', 또는 '<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>'</translation> +<translation id="5380442954567233718">대상 서버인 <ph name="ORIGIN" />에서 헤더를 설정하고 + 모든 요청에 기존 정책 적용을 요청했습니다. 하지만 + 헤더의 형식이 잘못되어 + 브라우저가 <ph name="SITE" />에 관한 요청을 처리할 수 없습니다. 사이트 운영자는 기존 정책을 사용해 + 사이트의 보안 및 기타 속성을 구성할 수 있습니다.</translation> <translation id="5386426401304769735">이 사이트의 인증서 체인은 SHA-1을 사용하여 서명된 인증서를 포함합니다.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">오른쪽 에지 스티치</translation> @@ -1572,6 +1579,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">방화벽이나 바이러스 백신 소프트웨어가 연결을 차단했을 수 있습니다.</translation> <translation id="7759163816903619567">표시 도메인:</translation> +<translation id="776110834126722255">지원 중단됨</translation> <translation id="7761701407923456692">서버의 인증서가 URL과 일치하지 않습니다.</translation> <translation id="7763386264682878361">결제 매니페스트 파서</translation> <translation id="7764225426217299476">주소 추가</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index b4f4a594..6a054d8b 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Сиз терген сөздөрдүн, көргөн барактардын же башка аракеттердин баары каралып турат. Ал эми сайттагы мазмундар сизге кабарланбастан өзгөртүлүшү мүмкүн.</translation> <translation id="2289385804009217824">Кыркуу</translation> <translation id="2292556288342944218">Интернетке кирүү мүмкүнчүлүгүңүз бөгөттөлгөн</translation> +<translation id="2293443924986248631">Күйгүзүлсө, сайттар сизге вебде көз салуу үчүн cookie файлдарын колдоно алышпайт. Функциялар айрым сайттарда туура иштебеши мүмкүн.</translation> <translation id="2297722699537546652">B5 (Конверт)</translation> <translation id="2300306941146563769">Жүктөлүп берилген жок</translation> <translation id="2310021320168182093">Chou2 (Конверт)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1-бет}other{{COUNT}-бет}}</translation> <translation id="4154664944169082762">Манжа издери</translation> <translation id="4159784952369912983">Кызгылт көгүш</translation> +<translation id="4163132590327127354">Chrome бул баракты окууну жеңилдетүү үчүн аны жөнөкөйлөттү</translation> <translation id="4165986682804962316">Сайт жөндөөлөрү</translation> <translation id="4171400957073367226">Текшерүү колтамгасы начар</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">Саясат жөндөөлөрү сакталбай калды</translation> <translation id="5371425731340848620">Картаны жаңыртуу</translation> <translation id="5377026284221673050">"Саатыңыз артта" же "Саатыңыз алдыда" же "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Сиз өтүүгө аракет кылып жаткан <ph name="ORIGIN" /> сервери + ушул сыяктуу бардык өтүнүчтөр үчүн баштапкы саясат колдонулсун деген аталышты койду. Бирок + аталыш бузук болгондуктан серепчи <ph name="SITE" /> сайты үчүн коюлган өтүнүчтү + аткара албайт. Баштапкы саясаттар + сайттын операторлору тарабынан сайттын коопсуздугун жана башка касиеттерин конфигурациялоо үчүн колдонулат.</translation> <translation id="5386426401304769735">Бул сайттын тастыктамалар чынжырында SHA-1 алгоритми менен кол коюлган тастыктама камтылган.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Оң четин жамоо</translation> @@ -1574,6 +1581,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Туташуу брандмауэр же антивирус программасы менен бөгөттөлгөн окшойт.</translation> <translation id="7759163816903619567">Көрсөтүлүүчү домен:</translation> +<translation id="776110834126722255">Жоюлган саясат</translation> <translation id="7761701407923456692">Сервердин тастыктамасы URL'ге дал келбейт.</translation> <translation id="7763386264682878361">Төлөм манифестин талдоочу</translation> <translation id="7764225426217299476">Дарек кошуу</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 58c6758..6382c0b 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Таны бичдэг дурын зүйл, таны үздэг дурын хуудас эсвэл вэб дээрх бусад дурын үйл ажиллагааг хянан үзэж байна. Сайтуудын контентыг танд мэдэгдэлгүйгээр өөрчилж болзошгүй.</translation> <translation id="2289385804009217824">Тайрах</translation> <translation id="2292556288342944218">Таны интернэт холболтыг блоклосон байна</translation> +<translation id="2293443924986248631">Асаасан үед сайтууд нь таныг вэб дээр хянадаг күүкиг ашиглах боломжгүй байна. Зарим сайтын онцлогууд ажиллахгүй байж болзошгүй.</translation> <translation id="2297722699537546652">B5 (Дугтуй)</translation> <translation id="2300306941146563769">Байршуулаагүй</translation> <translation id="2310021320168182093">Chou2 (Дугтуй)</translation> @@ -730,6 +731,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Хуудас 1}other{Хуудас {COUNT}}}</translation> <translation id="4154664944169082762">Хурууны хээ</translation> <translation id="4159784952369912983">Нил ягаан</translation> +<translation id="4163132590327127354">Chrome нь энэ хуудсыг уншихад илүү амар болгож хялбаршуулсан.</translation> <translation id="4165986682804962316">Сайтын тохиргоо</translation> <translation id="4171400957073367226">Баталгаажуулалт хийхэд ашигласан гарын үсэг хангалтгүй байна</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1030,6 +1032,10 @@ <translation id="536296301121032821">бодлогын тохиргоог хадгалах үйлдэл амжилтгүй болсон байна.</translation> <translation id="5371425731340848620">Картыг шинэчлэх</translation> <translation id="5377026284221673050">"Таны цаг хоцорч байна" эсвэл "Таны цаг түрүүлж байна" эсвэл "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Таны очих гэж буй <ph name="ORIGIN" /> сервер нь үндсэн удирдамжийг + бүх хүсэлтдээ хэрэгжүүлэхийг шаарддаг толгой хэсгийг тохируулсан байна. Гэсэн хэдий ч, + толгой хэсэг нь гэмтсэн тул <ph name="SITE" />-д зочлох таны хүсэлтийг гүйцэтгэхэд хөтчид саад болж байна. Үндсэн удирдамжийг + сайтад зориулж аюулгүй байдал болон бусад шинж чанарыг тохируулахад сайтын оператор ашиглаж болно.</translation> <translation id="5386426401304769735">Энэ сайтын сертификатын хэлхээ нь SHA-1-г ашиглан баталгаажуулсан байна.</translation> <translation id="538659543871111977">A4-Таб</translation> <translation id="5396631636586785122">Баруун ирмэгийг нь нийлүүлж үдэх</translation> @@ -1575,6 +1581,7 @@ <translation id="7757555340166475417">Дай-Па-Кай</translation> <translation id="7758069387465995638">Галт хана, эсвэл вирусын эсрэг програм холболтыг блоклосон байж болзошгүй.</translation> <translation id="7759163816903619567">Харуулах домайн:</translation> +<translation id="776110834126722255">Зогсоосон</translation> <translation id="7761701407923456692">Серверийн гэрчилгээ нь холбоостой таарахгүй байна.</translation> <translation id="7763386264682878361">Төлбөрийн тодорхойлогч файлыг задлан шинжлэгч</translation> <translation id="7764225426217299476">Хаяг нэмэх</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 27def52..8c07059 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">तुम्ही टाइप करत असलेले काहीही, तुम्ही पाहत असलेली कोणतीही पेज किंवा वेबवरील इतर कोणत्याही अॅक्टिव्हिटीवर नजर ठेवली जाते. साइटवरचा आशय कदाचित तुमच्या नकळत बदलला जाऊ शकतो.</translation> <translation id="2289385804009217824">ट्रिम करा</translation> <translation id="2292556288342944218">तुमचा इंटरनेट ॲक्सेस ब्लॉक केला आहे</translation> +<translation id="2293443924986248631">सुरू असताना, साइट संपूर्ण वेबवर तुमचा माग ठेवणाऱ्या कुकी वापरू शकत नाहीत. काही साइटवरील वैशिष्ट्यांमध्ये खंड पडू शकतो.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">अपलोड केला नाही</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -728,6 +729,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{पेज एक}other{पेज {COUNT}}}</translation> <translation id="4154664944169082762">बोटाचा ठसा</translation> <translation id="4159784952369912983">जांभळा</translation> +<translation id="4163132590327127354">हे पेज वाचणे सोपे करण्यासाठी Chrome ने ते सुलभ केले आहे.</translation> <translation id="4165986682804962316">साइट सेटिंग्ज</translation> <translation id="4171400957073367226">खराब पडताळणी स्वाक्षरी</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1028,6 +1030,11 @@ <translation id="536296301121032821">धोरण सेटिंग्ज संचयित करण्यात अयशस्वी</translation> <translation id="5371425731340848620">कार्ड अपडेट करा</translation> <translation id="5377026284221673050">"तुमचे क्लॉक मागे पडले आहे" किंवा "तुमचे क्लॉक वेळेपेक्षा पुढे आहे" किंवा "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">तुम्ही जात आहात तो सर्व्हर, <ph name="ORIGIN" />, ने त्याला केलेल्या सर्व विनंत्यांवर + मूळ धोरण लागू केले जाईल अशी आवश्यकता असलेले हेडर सेट केले आहे. परंतु + हेडर विकृत झालेले आहे, ज्यामुळे ब्राउझरला + तुमच्या <ph name="SITE" /> साठीच्या विनंतीची पूर्तता करण्यापासून रोखले जात आहे. साइटची सुरक्षितता आणि इतर गुणधर्म कॉन्फिगर करण्यासाठी + साइट ऑपरेटरकडून मूळ धोरणे वापरली जाऊ शकतात.</translation> <translation id="5386426401304769735">या साइटसाठी असलेल्या सर्टिफिकेट श्रृंखलेत SHA-1 वापरून स्वाक्षरी केलेले सर्टिफिकेट असते.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">एज स्टिच राइट</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">फायरवॉल किंवा अँटीव्हायरस सॉफ्टवेअरने कदाचित कनेक्शन अवरोधित केले असावे.</translation> <translation id="7759163816903619567">डोमेन दाखवा:</translation> +<translation id="776110834126722255">कालबाह्य झाले</translation> <translation id="7761701407923456692">सर्व्हरचे सर्टिफिकेट URL शी जुळत नाही.</translation> <translation id="7763386264682878361">पेमेंट मॅनिफेस्ट पार्सर</translation> <translation id="7764225426217299476">पत्ता जोडा</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 9d38126..0545906 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">तपाईंले टाइप गर्ने हरेक कुरा, तपाईंले हेर्ने हरेक पृष्ठ वा तपाईंले वेबमा गर्ने अन्य कुनै पनि गतिविधिमाथि निगरानी राखिन्छ र यी साइटका सामग्री तपाईंले थाहै नपाई परिवर्तन गर्न सकिन्छ।</translation> <translation id="2289385804009217824">छाँटकाँट गर्नुहोस्</translation> <translation id="2292556288342944218">तपाईंको इन्टरनेट पहुँचमाथि रोक लगाइएको छ</translation> +<translation id="2293443924986248631">यो सुविधा सक्रिय हुँदा साइटहरूले वेबमा तपाईंलाई ट्र्याक गर्ने कुकीहरू प्रयोग गर्न सक्दैनन्। तर कतिपय साइटका सुविधाहरूले काम नगर्न सक्छन्।</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">अपलोड नगरिएको</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -722,6 +723,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{पृष्ठ १}other{पृष्ठ {COUNT}}}</translation> <translation id="4154664944169082762">औँलाछापहरू</translation> <translation id="4159784952369912983">बैजनी</translation> +<translation id="4163132590327127354">Chrome ले यो पृष्ठ पढ्न अझ सजिलो बनाउन यसलाई सरलीकृत गर्यो।</translation> <translation id="4165986682804962316">साइट सेटिङहरू</translation> <translation id="4171400957073367226">खराब रूजू हस्ताक्षर।</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1021,6 +1023,7 @@ <translation id="536296301121032821">नीति सेटिङहरू भण्डारण गर्न असफल भयो</translation> <translation id="5371425731340848620">कार्ड अद्यावधिक गर्नुहोस्</translation> <translation id="5377026284221673050">"तपाईंको घडी ढिला छ" वा "तपाईंको घडी छिटो छ" अथवा "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">तपाईंले प्रयोग गर्न आँट्नुभएको सर्भर <ph name="ORIGIN" /> ले यसमा गरिने सबै अनुरोधहरूमा कुनै मूल नीति लागू गरिनु पर्ने माग गर्दै एउटा हेडर सेट गरेको छ। तर उक्त हेडरले अहिले काम गरिरहेको छैन। परिणामस्वरूप, ब्राउजरलाई तपाईंले <ph name="SITE" /> का लागि गर्नुभएको अनुरोध पूरा गर्नबाट रोक्छ। साइटका सञ्चालकहरूले सुरक्षाका साथै साइटका अन्य विशेषता कन्फिगर गर्ने प्रयोजनका लागि मूल नीतिहरू प्रयोग गर्न सक्छन्।</translation> <translation id="5386426401304769735">यस साइटको प्रमाणपत्र श्रृंखलामा SHA-१ प्रयोग गरी हस्ताक्षर गरिएको प्रमाणपत्र समावेश छ।</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">दायाँ किनारमा स्टिच</translation> @@ -1567,6 +1570,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">फायरवाल वा एन्टिभाइरस सफ्टवेयरले जडानमाथि रोक लगाएको हुनसक्छ।</translation> <translation id="7759163816903619567">देखाइने डोमेन:</translation> +<translation id="776110834126722255">चल्तीबाट हटाइएको</translation> <translation id="7761701407923456692">सर्भर प्रमाणपत्रहरू युआरएलसँग मिल्दैन।</translation> <translation id="7763386264682878361">भुक्तानी म्यानिफेस्ट पार्सर</translation> <translation id="7764225426217299476">ठेगाना थप्नुहोस्</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 9338d39..95525ad 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -1014,7 +1014,7 @@ <translation id="5340250774223869109">App is geblokkeerd</translation> <translation id="534295439873310000">NFC-apparaten</translation> <translation id="5344579389779391559">Deze pagina brengt je mogelijk kosten in rekening</translation> -<translation id="5346336634660260557">De content van het klembord scannen, evenals bestanden die je downloadt of uploadt in Chrome.</translation> +<translation id="5346336634660260557">De content van het klembord scannen, en ook bestanden die je downloadt of uploadt in Chrome.</translation> <translation id="5355557959165512791">Je kunt <ph name="SITE" /> momenteel niet bezoeken, omdat het bijbehorende certificaat is ingetrokken. Netwerkfouten en aanvallen zijn doorgaans tijdelijk, dus deze pagina werkt later waarschijnlijk correct.</translation> <translation id="536296301121032821">Opslaan van beleidsinstellingen is mislukt</translation> <translation id="5371425731340848620">Pas updaten</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index a2e4031..9dcb0f6 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">ୱେବ୍ରେ ଆପଣ ଯାହା କିଛି ଟାଇପ୍ କରନ୍ତି, ଯେଉଁ ପୃଷ୍ଠା ଆପଣ ଦେଖନ୍ତି କିମ୍ବା ଅନ୍ୟ କୌଣସି କାର୍ଯ୍ୟକଳାପ କରନ୍ତି ତାହା ନିରୀକ୍ଷଣ କରାଯାଉଛି। ଆପଣଙ୍କର ଅଜାଣତରେ ସାଇଟ୍ଗୁଡ଼ିକର ବିଷୟବସ୍ତୁ ପରିବର୍ତ୍ତନ କରାଯାଇପାରେ।</translation> <translation id="2289385804009217824">ଟ୍ରିମ୍</translation> <translation id="2292556288342944218">ଆପଣଙ୍କ ଇଣ୍ଟର୍ନେଟ୍ ଆକ୍ସେସ୍ ବ୍ଲକ୍ କରାଯାଇଛି</translation> +<translation id="2293443924986248631">ଯେତେବେଳେ ଚାଲୁ ଥାଏ, ସାଇଟଗୁଡ଼ିକ ସମଗ୍ର ୱେବରେ ଆପଣଙ୍କୁ ଟ୍ରାକ୍ କରୁଥିବା କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ। କିଛି ସାଇଟରେ ଫିଚରଗୁଡ଼ିକ ଠିକ୍ ଭାବେ କାମ କରିନପାରେ।</translation> <translation id="2297722699537546652">B5 (ଏନଭଲପ୍)</translation> <translation id="2300306941146563769">ଅପଲୋଡ୍ କରାଯାଇନାହିଁ</translation> <translation id="2310021320168182093">Chou2 (ଏନଭଲପ୍)</translation> @@ -720,6 +721,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{ପୃଷ୍ଠା 1}other{ପୃଷ୍ଠା {COUNT}}}</translation> <translation id="4154664944169082762">ଟିପଚିହ୍ନ</translation> <translation id="4159784952369912983">ବାଇଗଣୀ</translation> +<translation id="4163132590327127354">ଏହି ପୃଷ୍ଠାଟି ପଢ଼ିବାକୁ ସହଜ କରିବା ପାଇଁ Chrome ଏହାକୁ ସରଳୀକୃତ କରିଛି।</translation> <translation id="4165986682804962316">ସାଇଟ୍ ସେଟିଂସ୍</translation> <translation id="4171400957073367226">ଖରାପ ଯାଞ୍ଚକରଣ ଦସ୍ତଖତ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1019,6 +1021,7 @@ <translation id="536296301121032821">ନୀତି ସେଟିଂସ୍ ଷ୍ଟୋର୍ କରିବାରେ ବିଫଳ ହେଲା</translation> <translation id="5371425731340848620">କାର୍ଡ ଅପ୍ଡେଟ୍ କରନ୍ତୁ</translation> <translation id="5377026284221673050">"ଆପଣଙ୍କର ଘଣ୍ଟା ପଛୁଆ ଅଛି" କିମ୍ବା "ଆପଣଙ୍କର ଘଣ୍ଟା ଆଗୁଆ ଅଛି " କିମ୍ବା "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">ଆପଣ ବ୍ୟବହାର କରିବାକୁ ଯାଉଥିବା ସର୍ଭର, <ph name="ORIGIN" />, ଏକ ହେଡର୍ ସେଟ୍ କରିଛି ଯାହା ଏହାର ସମସ୍ତ ଅନୁରୋଧରେ ମୂଳ ନୀତି ଲାଗୁ କରିବା ଆବଶ୍ୟକ କରେ। କିନ୍ତୁ ହେଡର୍ ତ୍ରୁଟିପୂର୍ଣ୍ଣ ଅଟେ, ଯେଉଁଟି <ph name="SITE" /> ପାଇଁ ଆପଣଙ୍କ ଅନୁରୋଧ ପୂରଣ କରିବାରୁ ବ୍ରାଉଜରକୁ ପ୍ରତିରୋଧ କରେ। ଏକ ସାଇଟ୍ ପାଇଁ ସୁରକ୍ଷା ଏବଂ ଅନ୍ୟ ପ୍ରୋପର୍ଟିଗୁଡ଼ିକ କନଫିଗର୍ କରିବାକୁ ସାଇଟ୍ ଅପରେଟରମାନଙ୍କ ଦ୍ୱାରା ମୂଳ ନୀତିଗୁଡ଼ିକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ।</translation> <translation id="5386426401304769735">ଏହି ସାଇଟ୍ ପାଇଁ ଥିବା ସାର୍ଟିଫିକେଟ୍ ଶୃଙ୍ଖଳାରେ SHA-1ର ବ୍ୟବହାର କରି ଦସ୍ତଖତ କରାଯାଇଥିବା ସାର୍ଟିଫିକେଟ୍ ଅଛି।</translation> <translation id="538659543871111977">A4-ଟାବ୍</translation> <translation id="5396631636586785122">ଡାହାଣ ପଟରେ ଏଜ୍ ଷ୍ଟିଚ୍</translation> @@ -1564,6 +1567,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Firewall ବା ଆଣ୍ଟିଭାଇରସ୍ ସଫ୍ଟୱେର୍ ବୋଧହୁଏ ସଂଯୋଗକୁ ବ୍ଲକ୍ କରିଦେଇଛନ୍ତି।</translation> <translation id="7759163816903619567">ଡୋମେନ୍କୁ ପ୍ରଦର୍ଶିତ କରନ୍ତୁ:</translation> +<translation id="776110834126722255">ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି</translation> <translation id="7761701407923456692">ସର୍ଭରର ସାର୍ଟିଫିକେଟ୍ URL ସହ ମେଳ ହେଉନାହିଁ</translation> <translation id="7763386264682878361">ପେମେଣ୍ଟ୍ ମେନିଫେଷ୍ଟ ପାର୍ସର୍</translation> <translation id="7764225426217299476">ଠିକଣା ଯୋଗ କରନ୍ତୁ</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index e165941e..87b04b98 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">ਤੁਸੀਂ ਜੋ ਵੀ ਟਾਈਪ ਕਰਦੇ ਹੋ, ਤੁਸੀਂ ਜੋ ਵੀ ਪੰਨੇ ਦੇਖਦੇ ਹੋ ਜਾਂ ਵੈੱਬ 'ਤੇ ਕੋਈ ਵੀ ਹੋਰ ਸਰਗਰਮੀ ਕਰਦੇ ਹੋ, ਉਸ 'ਤੇ ਨਜ਼ਰ ਰੱਖੀ ਜਾਂਦੀ ਹੈ। ਸਾਈਟਾਂ 'ਤੇ ਸਮੱਗਰੀ ਨੂੰ ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ ਤੋਂ ਬਿਨਾਂ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।</translation> <translation id="2289385804009217824">ਕਟਾਈ</translation> <translation id="2292556288342944218">ਤੁਹਾਡੀ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨੂੰ ਬਲੌਕ ਕੀਤਾ ਗਿਆ ਹੈ</translation> +<translation id="2293443924986248631">ਚਾਲੂ ਹੋਣ 'ਤੇ, ਸਾਈਟਾਂ ਉਹਨਾਂ ਕੁਕੀਜ਼ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ ਜੋ ਵੈੱਬ 'ਤੇ ਤੁਹਾਨੂੰ ਟਰੈਕ ਕਰਦੀਆਂ ਹਨ। ਸ਼ਾਇਦ ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਠੀਕ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਨਾ ਕਰਨ।</translation> <translation id="2297722699537546652">B5 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="2300306941146563769">ਅੱਪਲੋਡ ਨਹੀਂ ਕੀਤੀ ਗਈ</translation> <translation id="2310021320168182093">Chou2 (ਲਿਫ਼ਾਫ਼ਾ)</translation> @@ -725,6 +726,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{ਪੰਨਾ 1}one{ਪੰਨਾ {COUNT}}other{ਪੰਨਾ {COUNT}}}</translation> <translation id="4154664944169082762">ਫਿੰਗਰਪ੍ਰਿੰਟ</translation> <translation id="4159784952369912983">ਜਾਮਨੀ</translation> +<translation id="4163132590327127354">Chrome ਨੇ ਇਸ ਪੰਨੇ ਨੂੰ ਪੜ੍ਹਨ ਵਿੱਚ ਵਧੇਰੇ ਆਸਾਨ ਬਣਾਉਣ ਲਈ ਸਰਲੀਕਿਰਤ ਕੀਤਾ।</translation> <translation id="4165986682804962316">ਸਾਈਟ ਸੈਟਿੰਗਾਂ</translation> <translation id="4171400957073367226">ਖ਼ਰਾਬ ਜਾਂਚ ਹਸਤਾਖਰ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -851,7 +853,7 @@ <translation id="467662567472608290">ਇਹ ਸਰਵਰ ਇਹ ਸਾਬਤ ਨਹੀਂ ਕਰ ਸਕਿਆ ਕਿ ਇਹ <ph name="DOMAIN" /> ਹੈ; ਇਸਦੇ ਸੁਰੱਖਿਆ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਿੱਚ ਗੜਬੜੀਆਂ ਹਨ। ਇਹ ਇੱਕ ਗਲਤ ਸੰਰੂਪਣ ਕਾਰਨ ਹੋ ਸਕਦਾ ਹੈ ਜਾਂ ਕੋਈ ਹਮਲਾਵਰ ਤੁਹਾਡੇ ਕਨੈਕਸ਼ਨ ਨੂੰ ਰਾਹ ਵਿੱਚ ਰੋਕ ਰਿਹਾ ਹੈ।</translation> <translation id="4677585247300749148"><ph name="URL" /> ਦੀ ਪਹੁੰਚਯੋਗਤਾ ਇਵੈਂਟਾਂ 'ਤੇ ਪ੍ਰਤਿਕਿਰਿਆ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ</translation> <translation id="467809019005607715">Google ਸਲਾਈਡਾਂ</translation> -<translation id="4680804919228900307">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="4680804919228900307">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ ਹੋ।</translation> <translation id="4690462567478992370">ਅਵੈਧ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਰਤਣਾ ਬੰਦ ਕਰੋ</translation> <translation id="4691835149146451662">Architecture-A (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1020,11 +1022,16 @@ <translation id="5340250774223869109">ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation> <translation id="534295439873310000">NFC ਡੀਵਾਈਸਾਂ</translation> <translation id="5344579389779391559">ਸ਼ਾਇਦ ਇਸ ਪੰਨੇ 'ਤੇ ਤੁਹਾਡੇ ਤੋਂ ਖਰਚਾ ਲਿਆ ਜਾਵੇ</translation> -<translation id="5346336634660260557">Chrome ਵਿੱਚ ਤੁਹਾਡੇ ਵੱਲੋਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਕਲਿੱਪਬੋਰਡ ਅਤੇ ਨਾਲ ਹੀ ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਸਮੱਗਰੀਆਂ ਸਕੈਨ ਕਰੋ।</translation> +<translation id="5346336634660260557">Chrome ਵਿੱਚ ਤੁਹਾਡੇ ਵੱਲੋਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਫ਼ਾਈਲਾਂ ਦੇ ਨਾਲ-ਨਾਲ ਕਲਿੱਪਬੋਰਡ ਦੀ ਸਮੱਗਰੀ ਵੀ ਸਕੈਨ ਕਰੋ।</translation> <translation id="5355557959165512791">ਤੁਸੀਂ ਇਸ ਵੇਲੇ <ph name="SITE" /> 'ਤੇ ਨਹੀਂ ਜਾ ਸਕਦੇ ਹੋ, ਕਿਉਂਕਿ ਇਸਦਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਰੱਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਨੈੱਟਵਰਕ ਗੜਬੜੀਆਂ ਅਤੇ ਹਮਲੇ ਆਮ ਤੌਰ 'ਤੇ ਅਸਥਾਈ ਹੁੰਦੇ ਹਨ, ਇਸਲਈ ਇਹ ਪੰਨਾ ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ ਠੀਕ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰੇਗਾ।</translation> <translation id="536296301121032821">ਨੀਤੀ ਸੈਟਿੰਗਾਂ ਸਟੋਰ ਕਰਨ ਵਿੱਚ ਅਸਫਲ</translation> <translation id="5371425731340848620">ਕਾਰਡ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="5377026284221673050">"ਤੁਹਾਡੀ ਘੜੀ ਪਿੱਛੇ ਹੈ" ਜਾਂ "ਤੁਹਾਡੀ ਘੜੀ ਅੱਗੇ ਹੈ" ਜਾਂ "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">ਜਿਸ ਸਰਵਰ 'ਤੇ ਤੁਸੀਂ ਜਾ ਰਹੇ ਹੋ, <ph name="ORIGIN" />, ਨੇ ਇੱਕ ਸਿਰਲੇਖ ਸੈੱਟ ਕੀਤਾ ਹੈ ਜਿਸ ਵਿੱਚ + ਇਹ ਚੀਜ਼ ਲੋੜੀਂਦੀ ਹੈ ਕਿ ਮੂਲ ਨੀਤੀ ਨੂੰ ਇਸ 'ਤੇ ਕੀਤੀਆਂ ਗਈਆਂ ਸਾਰੀਆਂ ਬੇਨਤੀਆਂ 'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ। ਪਰ + ਸਿਰਲੇਖ ਨੁਕਸਦਾਰ ਹੈ, ਜੋ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ <ph name="SITE" /> ਲਈ ਤੁਹਾਡੀ ਬੇਨਤੀ ਨੂੰ ਪੂਰਾ ਕਰਨ ਤੋਂ + ਰੋਕਦਾ ਹੈ। ਮੂਲ ਸੰਬੰਧੀ ਨੀਤੀਆਂ ਨੂੰ ਕਿਸੇ ਸਾਈਟ ਦੀ ਸੁਰੱਖਿਆ ਅਤੇ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ + ਦਾ ਸੰਰੂਪਣ ਕਰਨ ਲਈ ਸਾਈਟ ਓਪਰੇਟਰਾਂ ਵੱਲੋਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ।</translation> <translation id="5386426401304769735">ਇਸ ਸਾਈਟ ਲਈ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਲੜੀ ਵਿੱਚ SHA-1 ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹਸਤਾਖਰ ਕੀਤਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਸ਼ਾਮਲ ਹੈ।</translation> <translation id="538659543871111977">A4-ਟੈਬ</translation> <translation id="5396631636586785122">ਸੱਜੇ ਕਿਨਾਰੇ ਤੋਂ ਸਿਲਾਈ</translation> @@ -1430,7 +1437,7 @@ <translation id="7219179957768738017">ਕਨੈਕਸ਼ਨ <ph name="SSL_VERSION" /> ਵਰਤਦਾ ਹੈ।</translation> <translation id="7220786058474068424">ਪ੍ਰਕਿਰਿਆ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</translation> <translation id="7221855153210829124">ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ</translation> -<translation id="7229659723041939809">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="7229659723041939809">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ ਹੋ।</translation> <translation id="7233592378249864828">ਪੁਸ਼ਟੀਕਰਨ ਸ਼ੀਟ ਨੂੰ ਪ੍ਰਿੰਟ ਕਰੋ</translation> <translation id="7238585580608191973">SHA-256 ਫਿੰਗਰਪ੍ਰਿੰਟ</translation> <translation id="7240120331469437312">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਿਸ਼ਾ ਵਿਕਲਪਕ ਨਾਮ</translation> @@ -1498,7 +1505,7 @@ <translation id="7485870689360869515">ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਮਿਲਿਆ।</translation> <translation id="7495290002932347110">ਕਿਸੇ ਸਾਈਟ ਜਾਂ ਐਪ 'ਤੇ ਡਾਟਾ ਉਲੰਘਣਾ ਹੋਣ ਕਾਰਨ ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਉਜਾਗਰ ਹੋਇਆ। Chrome ਤੁਹਾਡੇ ਰੱਖਿਅਤ ਕੀਤੇ ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਅਤੇ ਹੁਣੇ <ph name="ORIGIN" /> ਦਾ ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕਰਦਾ ਹੈ।</translation> <translation id="7498234416455752244">ਸੰਪਾਦਨ ਕਰਦੇ ਰਹੋ</translation> -<translation id="7503664977220660814">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="7503664977220660814">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ ਹੋ।</translation> <translation id="7508255263130623398">ਵਾਪਸੀ ਸੰਬੰਧੀ ਨੀਤੀ ਡੀਵਾਈਸ ਆਈ.ਡੀ. ਖਾਲੀ ਹੈ ਜਾਂ ਵਰਤਮਾਨ ਡੀਵਾਈਸ ਆਈ.ਡੀ. ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ ਹੈ</translation> <translation id="7508870219247277067">ਐਵੋਕਾਡੋ ਹਰਾ</translation> <translation id="7511955381719512146">ਜੋ Wi-Fi ਤੁਸੀਂ ਵਰਤ ਰਹੇ ਹੋ, ਉਸ ਲਈ ਤੁਹਾਨੂੰ <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> ਤੇ ਵਿਜਿਟ ਕਰਨ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ।</translation> @@ -1570,6 +1577,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ਫਾਇਰਵਾਲ ਜਾਂ ਐਂਟੀਵਾਇਰਸ ਸਾਫਟਵੇਅਰ ਵੱਲੋਂ ਕਨੈਕਸ਼ਨ ਬਲਾਕ ਕੀਤਾ ਹੋ ਸਕਦਾ ਹੈ।</translation> <translation id="7759163816903619567">ਡਿਸਪਲੇ ਡੋਮੇਨ:</translation> +<translation id="776110834126722255">ਨਾਪਸੰਦ ਕੀਤਾ</translation> <translation id="7761701407923456692">ਸਰਵਰ ਦਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ URL ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ।</translation> <translation id="7763386264682878361">ਭੁਗਤਾਨ ਮੈਨੀਫ਼ੈਸਟ ਪਾਰਸਰ</translation> <translation id="7764225426217299476">ਪਤਾ ਜੋੜੋ</translation> @@ -1595,7 +1603,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">ਕੀ ਸਾਈਟ ਛੱਡਣੀ ਹੈ?</translation> <translation id="7865448901209910068">ਬਿਹਤਰੀਨ ਗਤੀ</translation> -<translation id="7874263914261512992">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="7874263914261512992">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ ਹੋ।</translation> <translation id="7878562273885520351">ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ</translation> <translation id="7882421473871500483">ਭੂਰਾ</translation> <translation id="7887683347370398519">ਆਪਣੇ CVC ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ</translation> @@ -1732,7 +1740,7 @@ <translation id="8474910779563686872">ਵਿਕਾਸਕਾਰ ਵੇਰਵੇ ਦਿਖਾਓ</translation> <translation id="8479754468255770962">ਹੇਠਾਂ ਖੱਬੇ ਪਾਸੇ ਪਿੰਨ</translation> <translation id="8483780878231876732">ਆਪਣੇ Google ਖਾਤੇ ਤੋਂ ਕਾਰਡਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, Chrome ਵਿੱਚ ਸਾਈਨ ਇਨ ਕਰੋ</translation> -<translation id="8485393050551136813">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="8485393050551136813">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chromium ਵੱਲੋਂ <ph name="WEBSITE_1" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ।</translation> <translation id="8488350697529856933">ਤੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ</translation> <translation id="8490137692873530638">ਸਟੈਕਰ 10</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> ਨੇ ਪ੍ਰਤਿਕਿਰਿਆ ਦੇਣ ਵਿੱਚ ਬਹੁਤ ਜ਼ਿਆਦਾ ਸਮਾਂ ਲਗਾਇਆ।</translation> @@ -1782,7 +1790,7 @@ <translation id="87601671197631245">ਇਹ ਸਾਈਟ ਬਹੁਤ ਪੁਰਾਣਾ ਸੁਰੱਖਿਆ ਸੰਰੂਪਣ ਵਰਤਦੀ ਹੈ, ਜਿਸ ਕਰਕੇ ਸ਼ਾਇਦ ਤੁਹਾਡੀ ਜਾਣਕਾਰੀ (ਉਦਾਹਰਨ ਵਜੋਂ, ਪਾਸਵਰਡ, ਸੁਨੇਹੇ ਜਾਂ ਕ੍ਰੈਡਿਟ ਕਾਰਡ) ਨੂੰ ਇਸ ਸਾਈਟ 'ਤੇ ਭੇਜਣ ਵੇਲੇ ਉਹ ਜਾਣਕਾਰੀ ਉਜਾਗਰ ਹੋ ਜਾਵੇ।</translation> <translation id="8761567432415473239">Google Safe Browsing ਨੂੰ <ph name="SITE" /> ਤੇ ਹੁਣੇ ਜਿਹੇ <ph name="BEGIN_LINK" />ਹਾਨੀਕਾਰਕ ਪ੍ਰੋਗਰਾਮ ਮਿਲੇ<ph name="END_LINK" />।</translation> <translation id="8763927697961133303">USB ਡੀਵਾਈਸ</translation> -<translation id="8774457497170244317">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣੇ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਿਆ ਹੈ।</translation> +<translation id="8774457497170244317">ਤੁਸੀਂ ਹੁਣੇ-ਹੁਣੇ ਕਿਸੇ ਭਰਮਪੂਰਨ ਸਾਈਟ 'ਤੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕੀਤਾ ਹੈ। Chrome ਵੱਲੋਂ <ph name="WEBSITE_1" /> ਅਤੇ ਉਹਨਾਂ ਹੋਰ ਸਾਈਟਾਂ 'ਤੇ ਆਪਣੇ ਰੱਖਿਅਤ ਪਾਸਵਰਡਾਂ ਨੂੰ ਜਾਂਚਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਹੁਣ ਤੁਸੀਂ ਇਹ ਪਾਸਵਰਡ ਵਰਤਦੇ ਹੋ।</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">&ਮਿਟਾਏ ਗਏ ਨੂੰ ਮੁੜ-ਓਹੀ ਕਰੋ</translation> <translation id="8792621596287649091">ਤੁਸੀਂ ਆਪਣੇ <ph name="ORG_NAME" /> ਖਾਤੇ 'ਤੇ ਪਹੁੰਚ ਗੁਆ ਸਕਦੇ ਹੋ ਜਾਂ ਤੁਹਾਡੀ ਪਛਾਣ ਚੋਰੀ ਹੋ ਸਕਦੀ ਹੈ। Chromium ਵੱਲੋਂ ਹੁਣੇ ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਬਦਲਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 20b71424..c21b847 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -857,7 +857,7 @@ <translation id="467662567472608290">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa ma błędy. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation> <translation id="4677585247300749148"><ph name="URL" /> chce odpowiadać na zdarzenia dotyczące ułatwień dostępu</translation> <translation id="467809019005607715">Prezentacje Google</translation> -<translation id="4680804919228900307">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chromium zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> i innych stron, na których używasz tego hasła.</translation> +<translation id="4680804919228900307">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chromium zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /> oraz do innych stron, na których używasz tego hasła.</translation> <translation id="4690462567478992370">Przestań używać nieprawidłowego certyfikatu</translation> <translation id="4691835149146451662">Architecture-A (koperta)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1026,7 +1026,7 @@ <translation id="5340250774223869109">Aplikacja jest zablokowana</translation> <translation id="534295439873310000">Urządzenia z funkcją NFC</translation> <translation id="5344579389779391559">Ta strona może próbować obciążyć Cię płatnością</translation> -<translation id="5346336634660260557">Skanowanie zawartości schowka oraz plików pobieranych i wysyłanych w Chrome.</translation> +<translation id="5346336634660260557">Skanowanie zawartości schowka oraz plików pobieranych i przesyłanych w Chrome.</translation> <translation id="5355557959165512791">Nie możesz teraz otworzyć strony <ph name="SITE" />, bo jej certyfikat został unieważniony. Błędy sieci i ataki są zazwyczaj przejściowe, więc prawdopodobnie strona będzie wkrótce działać.</translation> <translation id="536296301121032821">Zapisanie ustawień zasady nie powiodło się</translation> <translation id="5371425731340848620">Zaktualizuj dane karty</translation> @@ -1438,7 +1438,7 @@ <translation id="7219179957768738017">Połączenie z szyfrowaniem <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Przetwarzanie</translation> <translation id="7221855153210829124">Pokazywanie powiadomień</translation> -<translation id="7229659723041939809">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chrome zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> i innych stron, na których używasz tego hasła.</translation> +<translation id="7229659723041939809">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chrome zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> i <ph name="WEBSITE_3" /> oraz do innych stron, na których używasz tego hasła.</translation> <translation id="7233592378249864828">Drukuj arkusz potwierdzenia</translation> <translation id="7238585580608191973">Odcisk cyfrowy SHA-256</translation> <translation id="7240120331469437312">Alternatywna nazwa podmiotu certyfikatu</translation> @@ -1506,7 +1506,7 @@ <translation id="7485870689360869515">Nie znaleziono danych.</translation> <translation id="7495290002932347110">Naruszenie bezpieczeństwa danych w jednej z witryn lub aplikacji spowodowało ujawnienie Twojego hasła. Chrome zaleca natychmiastowe sprawdzenie zapisanych haseł i zmianę hasła na <ph name="ORIGIN" />.</translation> <translation id="7498234416455752244">Edytuj dalej</translation> -<translation id="7503664977220660814">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chromium zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /> oraz innych stron, na których używasz tego hasła.</translation> +<translation id="7503664977220660814">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chromium zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /> oraz do innych stron, na których używasz tego hasła.</translation> <translation id="7508255263130623398">Zwrócony identyfikator urządzenia dla zasad jest pusty lub nie pasuje do bieżącego identyfikatora urządzenia</translation> <translation id="7508870219247277067">Zielony awokado</translation> <translation id="7511955381719512146">Sieć Wi-Fi, której używasz, może wymagać otwarcia strony <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> @@ -1604,7 +1604,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" />: <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="7862185352068345852">Opuścić stronę?</translation> <translation id="7865448901209910068">Optymalna szybkość</translation> -<translation id="7874263914261512992">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chrome zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /> oraz innych stron, na których używasz tego hasła.</translation> +<translation id="7874263914261512992">Przed chwilą wpisano hasło na stronie wprowadzającej w błąd. Chrome zaleca, by sprawdzić zapisane hasła do witryn <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /> oraz do innych stron, na których używasz tego hasła.</translation> <translation id="7878562273885520351">Ktoś mógł poznać Twoje hasło</translation> <translation id="7882421473871500483">Brązowy</translation> <translation id="7887683347370398519">Sprawdź kod CVC i spróbuj ponownie</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index ab9fe845..296217b 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -850,7 +850,7 @@ <translation id="467662567472608290">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança contém erros. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation> <translation id="4677585247300749148"><ph name="URL" /> quer responder a eventos de acessibilidade</translation> <translation id="467809019005607715">Apresentações Google</translation> -<translation id="4680804919228900307">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> e outros sites em que você usa essa senha.</translation> +<translation id="4680804919228900307">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> e outros sites em que você usa essa senha.</translation> <translation id="4690462567478992370">Suspender o uso de um certificado inválido</translation> <translation id="4691835149146451662">Arch A (Envelope)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1019,7 +1019,7 @@ <translation id="5340250774223869109">O aplicativo foi bloqueado</translation> <translation id="534295439873310000">Dispositivos NFC</translation> <translation id="5344579389779391559">Esta página pode tentar cobrar pagamento em dinheiro</translation> -<translation id="5346336634660260557">Verificar o conteúdo da área de transferência, assim como dos arquivos que você salva ou envia para o Chrome.</translation> +<translation id="5346336634660260557">Verificar o conteúdo da área de transferência, assim como dos arquivos que você faz o download ou upload no Chrome.</translation> <translation id="5355557959165512791">Não é possível acessar <ph name="SITE" /> neste momento, porque o certificado dele foi revogado. Como os ataques e erros de rede são geralmente temporários, esta página provavelmente funcionará mais tarde.</translation> <translation id="536296301121032821">Falha ao armazenar as configurações da política</translation> <translation id="5371425731340848620">Atualizar cartão</translation> @@ -1431,7 +1431,7 @@ <translation id="7219179957768738017">A conexão usa a <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Processando</translation> <translation id="7221855153210829124">Mostrar notificações</translation> -<translation id="7229659723041939809">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique suas senhas salvas em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> e outros sites em que você usa essa senha.</translation> +<translation id="7229659723041939809">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> e outros sites em que você usa essa senha.</translation> <translation id="7233592378249864828">Imprimir página de confirmação</translation> <translation id="7238585580608191973">Assinatura digital SHA-256</translation> <translation id="7240120331469437312">Nome alternativo do requerente do certificado</translation> @@ -1499,7 +1499,7 @@ <translation id="7485870689360869515">Nenhum dado encontrado</translation> <translation id="7495290002932347110">Sua senha foi exposta em violação de dados em um site ou app acessado por você. Por recomendação do Chrome, verifique suas senhas salvas e mude-as imediatamente em <ph name="ORIGIN" />.</translation> <translation id="7498234416455752244">Continuar editando</translation> -<translation id="7503664977220660814">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e outros sites em que você usa essa senha.</translation> +<translation id="7503664977220660814">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e outros sites em que você usa essa senha.</translation> <translation id="7508255263130623398">O código do dispositivo da política retornado está em branco ou não corresponde ao código do dispositivo atual</translation> <translation id="7508870219247277067">Verde-abacate</translation> <translation id="7511955381719512146">O Wi-Fi que você está usando pode exigir a visita a <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> @@ -1597,7 +1597,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Sair do site?</translation> <translation id="7865448901209910068">Melhor velocidade</translation> -<translation id="7874263914261512992">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique suas senhas salvas em <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e outros sites em que você usa essa senha.</translation> +<translation id="7874263914261512992">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> e outros sites em que você usa essa senha.</translation> <translation id="7878562273885520351">Sua senha pode estar comprometida</translation> <translation id="7882421473871500483">Marrom</translation> <translation id="7887683347370398519">Verifique seu CVC e tente novamente</translation> @@ -1734,7 +1734,7 @@ <translation id="8474910779563686872">Mostrar detalhes do desenvolvedor</translation> <translation id="8479754468255770962">Grampo na parte inferior esquerda</translation> <translation id="8483780878231876732">Para usar os cards da sua Conta do Google, faça login no Google Chrome</translation> -<translation id="8485393050551136813">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique suas senhas salvas em <ph name="WEBSITE_1" /> e outros sites em que você usa essa senha.</translation> +<translation id="8485393050551136813">Você acabou de digitar sua senha em um site suspeito. O Chromium recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" /> e outros sites em que você usa essa senha.</translation> <translation id="8488350697529856933">Aplicável a</translation> <translation id="8490137692873530638">Empilhador 10</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> demorou muito para responder.</translation> @@ -1785,7 +1785,7 @@ <translation id="87601671197631245">Este site usa uma configuração de segurança desatualizada que pode expor suas informações (como senhas, mensagens ou números de cartão de crédito) quando elas forem enviadas para o site.</translation> <translation id="8761567432415473239">Recentemente, a Navegação Segura do Google <ph name="BEGIN_LINK" />encontrou programas nocivos<ph name="END_LINK" /> no site <ph name="SITE" />.</translation> <translation id="8763927697961133303">Dispositivo USB</translation> -<translation id="8774457497170244317">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique suas senhas salvas em <ph name="WEBSITE_1" /> e outros sites em que você usa essa senha.</translation> +<translation id="8774457497170244317">Você acabou de digitar sua senha em um site suspeito. O Chrome recomenda que você verifique agora suas senhas salvas para <ph name="WEBSITE_1" /> e outros sites em que você usa essa senha.</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">&Refazer excluir</translation> <translation id="8792621596287649091">Você pode perder o acesso à sua conta de <ph name="ORG_NAME" /> ou ter sua identidade roubada. O Chromium recomenda que sua senha seja alterada agora.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 77a8edd..47167c2 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Tudo o que escreve, todas as páginas que visualiza ou quaisquer outras atividades que realiza na Web estão a ser monitorizadas. O conteúdo dos sites pode ser alterado sem o seu conhecimento.</translation> <translation id="2289385804009217824">Cortar</translation> <translation id="2292556288342944218">O acesso à Internet está bloqueado</translation> +<translation id="2293443924986248631">Quando ativados, os sites não podem utilizar cookies que monitorizam o utilizador na Web. As funcionalidades em alguns sites podem falhar.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">Não carregado</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Página 1}other{Página {COUNT}}}</translation> <translation id="4154664944169082762">Impressões digitais</translation> <translation id="4159784952369912983">Roxo</translation> +<translation id="4163132590327127354">O Chrome simplificou esta página para facilitar a leitura.</translation> <translation id="4165986682804962316">Definições de sites</translation> <translation id="4171400957073367226">Assinatura de verificação incorreta</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">Falha ao armazenar as definições da política</translation> <translation id="5371425731340848620">Atualizar cartão</translation> <translation id="5377026284221673050">"O seu relógio está atrasado" ou "O seu relógio está adiantado" ou "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">O servidor ao qual irá aceder, <ph name="ORIGIN" />, definiu um cabeçalho + que solicita que seja aplicada uma política de origem a todos os pedidos. Contudo, + o cabeçalho está formatado incorretamente, o que impede que o navegador satisfaça + o seu pedido para <ph name="SITE" />. As políticas de origem podem ser utilizadas + pelos operadores de sites para configurar a segurança e outras propriedades de um site.</translation> <translation id="5386426401304769735">A cadeia de certificados inclui um certificado assinado através de SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Coser extremidade direita</translation> @@ -1574,6 +1581,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">O software de firewall ou antivírus pode ter bloqueado a ligação.</translation> <translation id="7759163816903619567">Domínio de apresentação:</translation> +<translation id="776110834126722255">Descontinuada</translation> <translation id="7761701407923456692">O certificado do servidor não corresponde ao URL.</translation> <translation id="7763386264682878361">Analisador de manifestos de pagamento</translation> <translation id="7764225426217299476">Adicionar endereço</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 1b11ac8..673eedf 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Все ваши действия в Интернете (текст, который вы набираете, страницы, которые просматриваете, и т. д.) отслеживаются, а контент сайтов может изменяться без вашего ведома.</translation> <translation id="2289385804009217824">Подрезание</translation> <translation id="2292556288342944218">Доступ в Интернет закрыт</translation> +<translation id="2293443924986248631">Когда эта настройка включена, сайты не могут использовать файлы cookie, которые отслеживают ваши действия в Интернете. Из-за этого некоторые функции на сайтах могут работать некорректно.</translation> <translation id="2297722699537546652">B5 (конверт)</translation> <translation id="2300306941146563769">Не загружен</translation> <translation id="2310021320168182093">Chou2 (конверт)</translation> @@ -722,6 +723,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Страница 1}one{Страница {COUNT}}few{Страница {COUNT}}many{Страница {COUNT}}other{Страница {COUNT}}}</translation> <translation id="4154664944169082762">Отпечатки</translation> <translation id="4159784952369912983">Фиолетовый</translation> +<translation id="4163132590327127354">Браузер Chrome убрал лишние элементы, чтобы сделать эту страницу удобнее для чтения.</translation> <translation id="4165986682804962316">Настройки сайтов</translation> <translation id="4171400957073367226">Подтверждающая подпись недействительна</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1021,6 +1023,7 @@ <translation id="536296301121032821">Не удалось сохранить настройки политики</translation> <translation id="5371425731340848620">Изменить информацию о карте</translation> <translation id="5377026284221673050">"Часы отстают", "Часы спешат" или <span class="error-code">NET::ERR_CERT_DATE_INVALID</span></translation> +<translation id="5380442954567233718">Для всех запросов, отправляемых на сервер <ph name="ORIGIN" />, задан заголовок, требующий применения правил в отношении источников. Однако из-за неверного формата заголовка браузер не может выполнить ваш запрос для сайта <ph name="SITE" />. Правила в отношении источников позволяют операторам сайтов настраивать параметры безопасности и другие свойства сайтов.</translation> <translation id="5386426401304769735">В цепочке сертификатов этого сайта есть сертификат, подписанный с помощью алгоритма SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Скобы по правому краю</translation> @@ -1567,6 +1570,7 @@ <translation id="7757555340166475417">Dai Pa Kai</translation> <translation id="7758069387465995638">Возможно, подключение заблокировано брандмауэром или антивирусным ПО.</translation> <translation id="7759163816903619567">Показывать домен:</translation> +<translation id="776110834126722255">Устаревшее правило</translation> <translation id="7761701407923456692">Сертификат сервера не соответствует URL.</translation> <translation id="7763386264682878361">Синтаксический анализатор манифестов</translation> <translation id="7764225426217299476">Добавить адрес</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 6f727f0..f599dc1e 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Çdo gjë që shkruan, çdo faqe që shikon ose çdo aktivitet tjetër në ueb po shikohet. Përmbajtjet në sajte mund të ndryshohen pa dijeninë tënde.</translation> <translation id="2289385804009217824">Prerje</translation> <translation id="2292556288342944218">Qasja jote në internet është bllokuar</translation> +<translation id="2293443924986248631">Kur është aktivizuar, sajtet nuk mund t'i përdorin kukit për të të monitoruar në ueb. Veçoritë në disa sajte mund të ndalojnë së funksionuari.</translation> <translation id="2297722699537546652">B5 (Zarf)</translation> <translation id="2300306941146563769">Pa ngarkuar</translation> <translation id="2310021320168182093">Chou2 (Zarf)</translation> @@ -723,6 +724,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Faqja 1}other{Faqja {COUNT}}}</translation> <translation id="4154664944169082762">Gjurmë gishtash</translation> <translation id="4159784952369912983">Vjollcë</translation> +<translation id="4163132590327127354">Chrome e ka thjeshtuar këtë faqe për ta bërë më të lehtë për t'u lexuar.</translation> <translation id="4165986682804962316">Cilësimet e sajtit</translation> <translation id="4171400957073367226">Nënshkrim vërtetimi i gabuar</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1022,6 +1024,10 @@ <translation id="536296301121032821">Dështoi në ruajtjen e cilësimeve të politikës.</translation> <translation id="5371425731340848620">Përditëso kartën</translation> <translation id="5377026284221673050">"Ora jote është prapa" ose "Ora jote është përpara" ose "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Serveri ku po shkon, <ph name="ORIGIN" />, ka vendosur një titull + që kërkon që të aplikohet një politikë origjine për të gjitha kërkesat për të. Por + titulli është formuar gabimisht, gjë që e parandalon përmbushjen e + kërkesës sate për <ph name="SITE" />. Politikat e origjinës mund të përdoren nga operatorët e sajtit për të konfiguruar karakteristikat e sigurisë dhe karakteristika të tjera për një sajt.</translation> <translation id="5386426401304769735">Zinxhiri i certifikatës për këtë sajt përmban një certifikatë të nënshkruar me SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Qepje anësore djathtas</translation> @@ -1567,6 +1573,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Muri mbrojtës ose softueri i antivirusit mund ta ketë bllokuar lidhjen.</translation> <translation id="7759163816903619567">Shfaq domenin:</translation> +<translation id="776110834126722255">E vjetruar</translation> <translation id="7761701407923456692">Certifikata e serverit nuk përputhet me URL-në.</translation> <translation id="7763386264682878361">Analizuesi i manifestit të pagesës</translation> <translation id="7764225426217299476">Shto adresë</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index d1f1cde..5f90062 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Све што унесете, све странице које прегледате или све друге активности на вебу се прате. Садржај на сајтовима може да се мења без вашег знања.</translation> <translation id="2289385804009217824">Скраћивање</translation> <translation id="2292556288342944218">Приступ интернету је блокиран</translation> +<translation id="2293443924986248631">Када је ова опција укључена, сајтови не могу да користе колачиће који вас прате на вебу. Функције на неким сајтовима могу да престану са радом.</translation> <translation id="2297722699537546652">B5 (коверат)</translation> <translation id="2300306941146563769">Није отпремљено</translation> <translation id="2310021320168182093">Chou2 (коверат)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1. страница}one{{COUNT}. страница}few{{COUNT}. страница}other{{COUNT}. страница}}</translation> <translation id="4154664944169082762">Отисци</translation> <translation id="4159784952369912983">Љубичаста</translation> +<translation id="4163132590327127354">Chrome је поједноставио ову страницу ради лакшег читања.</translation> <translation id="4165986682804962316">Подешавања сајта</translation> <translation id="4171400957073367226">Неисправан потпис за верификацију</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -855,7 +857,7 @@ <translation id="467662567472608290">Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат садржи грешке. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу.</translation> <translation id="4677585247300749148"><ph name="URL" /> жели да одговара на догађаје приступачности</translation> <translation id="467809019005607715">Google презентације</translation> -<translation id="4680804919228900307">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="4680804919228900307">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="4690462567478992370">Обустави коришћење неважећег сертификата</translation> <translation id="4691835149146451662">Architecture-A (коверат)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">Складиштење подешавања смерница није успело</translation> <translation id="5371425731340848620">Ажурирајте картицу</translation> <translation id="5377026284221673050">„Сат касни“ или „Сат жури“ или „<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>“</translation> +<translation id="5380442954567233718">Сервер на који идете, <ph name="ORIGIN" />, подесио је заглавље + које захтева да се смернице за порекло примењују на све захтеве ка њему. Међутим, + формат заглавља је нетачан, што спречава прегледач да испуни + захтев за <ph name="SITE" />. Помоћу смерница за порекло + оператори сајтова могу да конфигуришу безбедност и друга својства за сајт.</translation> <translation id="5386426401304769735">Ланац сертификата за овај сајт садржи сертификат потписан помоћу алгоритма SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Спајање ивица шавом на десној страни</translation> @@ -1434,7 +1441,7 @@ <translation id="7219179957768738017">Веза користи <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Обрада</translation> <translation id="7221855153210829124">приказује обавештења</translation> -<translation id="7229659723041939809">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="7229659723041939809">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="7233592378249864828">Лист потврде штампања</translation> <translation id="7238585580608191973">SHA-256 Fingerprint</translation> <translation id="7240120331469437312">Алтернативно име субјекта сертификата</translation> @@ -1502,7 +1509,7 @@ <translation id="7485870689360869515">Нису пронађени подаци.</translation> <translation id="7495290002932347110">Ваша лозинка је откривена при упаду у податке на сајту или у апликацији. Chrome препоручује да проверите сачуване лозинке и да одмах промените лозинку на <ph name="ORIGIN" />.</translation> <translation id="7498234416455752244">Наставите са изменама</translation> -<translation id="7503664977220660814">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="7503664977220660814">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="7508255263130623398">Враћени ИД уређаја за смернице је празан или се не подудара са актуелним ИД-ом уређаја</translation> <translation id="7508870219247277067">Зеленожута</translation> <translation id="7511955381719512146">Wi-Fi мрежа коју користите ће можда захтевати да посетите <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> @@ -1574,6 +1581,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Можда је заштитни зид или антивирусни софтвер блокирао везу.</translation> <translation id="7759163816903619567">Домен за приказ:</translation> +<translation id="776110834126722255">Застарело</translation> <translation id="7761701407923456692">Сертификат сервера се не подудара са URL адресом.</translation> <translation id="7763386264682878361">Рашчлањивач манифеста за плаћање</translation> <translation id="7764225426217299476">Додајте адресу</translation> @@ -1599,7 +1607,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" />: <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="7862185352068345852">Желите ли да напустите сајт?</translation> <translation id="7865448901209910068">Најбоља брзина</translation> -<translation id="7874263914261512992">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="7874263914261512992">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="7878562273885520351">Лозинка је можда компромитована</translation> <translation id="7882421473871500483">Браон</translation> <translation id="7887683347370398519">Проверите CVC и покушајте поново</translation> @@ -1736,7 +1744,7 @@ <translation id="8474910779563686872">Прикажи детаље о програмеру</translation> <translation id="8479754468255770962">Спајање у доњем левом углу</translation> <translation id="8483780878231876732">Да бисте користили картице са Google налога, пријавите се у Chrome</translation> -<translation id="8485393050551136813">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="8485393050551136813">Управо сте унели лозинку на обмањујућем сајту. Chromium вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="8488350697529856933">Односе се на</translation> <translation id="8490137692873530638">10. преграда за слагање</translation> <translation id="8498891568109133222">Одговор хоста <ph name="HOST_NAME" /> је трајао предуго.</translation> @@ -1787,7 +1795,7 @@ <translation id="87601671197631245">Овај сајт користи застарелу безбедносну конфигурацију која може да открије ваше информације (на пример, лозинке, поруке или кредитне картице) када се шаљу том сајту.</translation> <translation id="8761567432415473239">Google безбедно прегледање је недавно <ph name="BEGIN_LINK" />открило штетне програме<ph name="END_LINK" /> на <ph name="SITE" />.</translation> <translation id="8763927697961133303">USB уређај</translation> -<translation id="8774457497170244317">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверавате сачуване лозинке за <ph name="WEBSITE_1" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> +<translation id="8774457497170244317">Управо сте унели лозинку на обмањујућем сајту. Chrome вам препоручује да проверите сачуване лозинке за <ph name="WEBSITE_1" /> и друге сајтове на којима тренутно користите ову лозинку.</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">&Понови брисање</translation> <translation id="8792621596287649091">Можете да изгубите приступ налогу за <ph name="ORG_NAME" /> или би могло да дође до крађе идентитета. Chromium вам препоручује да одмах промените лозинку.</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index bce2c37e..1f7f81e3 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Allt du skriver, sidor du visar och all annan aktivitet på webben övervakas. Innehåll på webbplatser kan ändras utan din vetskap.</translation> <translation id="2289385804009217824">Beskär</translation> <translation id="2292556288342944218">Internetanslutningen har blockerats</translation> +<translation id="2293443924986248631">När detta har aktiverats kan en webbplats inte använda cookies som spårar dig på webben. Funktioner på vissa webbplatser kan sluta fungera.</translation> <translation id="2297722699537546652">B5 (kuvert)</translation> <translation id="2300306941146563769">Inte uppladdad</translation> <translation id="2310021320168182093">Chou2 (kuvert)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Sida 1}other{Sida {COUNT}}}</translation> <translation id="4154664944169082762">Fingeravtryck</translation> <translation id="4159784952369912983">Lila</translation> +<translation id="4163132590327127354">Chrome har förenklat sidan så att den ska bli lättare att läsa.</translation> <translation id="4165986682804962316">Platsinställningar</translation> <translation id="4171400957073367226">Felaktig verifieringssignatur</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">Det gick inte att spara policyinställningarna</translation> <translation id="5371425731340848620">Uppdatera kortet</translation> <translation id="5377026284221673050">Klockan går efter, Klockan går före eller <span class="error-code">NET::ERR_CERT_DATE_INVALID</span></translation> +<translation id="5380442954567233718">Servern som du är på väg till, <ph name="ORIGIN" />, har en inställning som innebär + att en ursprungsprincip ska gälla för varje begäran den svarar på. Men + inställningen har fel format, och därför går det inte att slutföra begäran + om <ph name="SITE" /> i webbläsaren. Ursprungsprinciper kan användas av + webbplatsoperatörer för att konfigurera säkerhetsfunktioner och andra funktioner för webbplatser.</translation> <translation id="5386426401304769735">Certifikatkedjan för den här webbplatsen innehåller ett certifikat som signerades med SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Kanthäftning till höger</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Anslutningen kan ha blockerats av en brandvägg eller antivirusprogram.</translation> <translation id="7759163816903619567">Visningsdomän:</translation> +<translation id="776110834126722255">Utfasad</translation> <translation id="7761701407923456692">Servercertifikatet överensstämmer inte med webbadressen.</translation> <translation id="7763386264682878361">Textanalysator för manifest för betalning</translation> <translation id="7764225426217299476">Lägg till adress</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 698c482a..3b7eb62 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -315,6 +315,7 @@ <translation id="2288422996159078444">మీరు ఏదైనా టైప్ చేసినా, ఏవైనా పేజీలు వీక్షించినా లేదా వెబ్లో ఇతర కార్యకలాపం ఏదైనా చూసినా. సైట్లలోని కంటెంట్ మీకు తెలియకుండానే మారిపోవచ్చు.</translation> <translation id="2289385804009217824">కత్తిరించండి</translation> <translation id="2292556288342944218">మీ ఇంటర్నెట్ యాక్సెస్ బ్లాక్ చేయబడింది</translation> +<translation id="2293443924986248631">ఆన్లో ఉన్నప్పుడు, వెబ్ అంతటా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించే కుక్కీలను సైట్లు ఉపయోగించడం సాధ్యం కాదు. కొన్ని సైట్లలోని ఫీచర్లు సరిగ్గా పని చేయకపోవచ్చు.</translation> <translation id="2297722699537546652">B5 (ఎన్వలప్)</translation> <translation id="2300306941146563769">అప్లోడ్ చేయలేదు</translation> <translation id="2310021320168182093">Chou2 (ఎన్వలప్)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1వ పేజీ}other{{COUNT}వ పేజీ}}</translation> <translation id="4154664944169082762">వేలిముద్రలు</translation> <translation id="4159784952369912983">వంగపండు రంగు</translation> +<translation id="4163132590327127354">మరింత తేలికగా చదవడం కోసం Chrome ఈ పేజీని సులభతరం చేసింది.</translation> <translation id="4165986682804962316">సైట్ సెట్టింగ్లు</translation> <translation id="4171400957073367226">ధృవీకరణ సంతకం చెల్లదు</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">విధాన సెట్టింగ్లను నిల్వ చేయడంలో విఫలమైంది</translation> <translation id="5371425731340848620">కార్డ్ని అప్డేట్ చేయండి</translation> <translation id="5377026284221673050">"మీ గడియారం ఆలస్యంగా నడుస్తోంది" లేదా "మీ గడియారం ముందుగా ఉంది" లేదా "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">మీరు వెళ్లాలనుకుంటున్న సర్వర్ <ph name="ORIGIN" />, + దానికి పంపే అన్ని అభ్యర్థనలకు ఆరిజిన్ పాలసీని వర్తింపజేయాలని తెలిపే ఒక ముఖ్య శీర్షికను సెట్ చేసింది. కానీ + ముఖ్య శీర్షిక తప్పుగా సెట్ చేయబడింది, దాని వలన <ph name="SITE" />కు మీరు పంపిన అభ్యర్థనను + బ్రౌజర్ పూర్తి చేయలేకపోతోంది. భద్రతను, సైట్ ఇతర ఫిచర్లను కాన్ఫిగర్ చేయడానికి + సైట్ ఆపరేటర్లు ఆరిజిన్ పాలసీలను ఉపయోగించవచ్చు.</translation> <translation id="5386426401304769735">ఈ సైట్ సర్టిఫికెట్ గొలుసులో SHA-1 ఉపయోగించి సంతకం చేసిన సర్టిఫికెట్ ఉంది.</translation> <translation id="538659543871111977">A4-ట్యాబ్</translation> <translation id="5396631636586785122">కుడివైపు కుట్టిన అంచు</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">డాయ్-పా-కాయ్</translation> <translation id="7758069387465995638">ఫైర్వాల్ లేదా యాంటీవైరస్ సాఫ్ట్వేర్ కనెక్షన్ను బ్లాక్ చేసి ఉండవచ్చు.</translation> <translation id="7759163816903619567">ప్రదర్శన డొమైన్:</translation> +<translation id="776110834126722255">విస్మరించబడింది</translation> <translation id="7761701407923456692">సర్వర్ ప్రమాణపత్రం URLతో సరిపోలలేదు.</translation> <translation id="7763386264682878361">చెల్లింపు మానిఫెస్ట్ అన్వయ ప్రక్రియ</translation> <translation id="7764225426217299476">చిరునామాను జోడించు</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index cacfc0e..386b60a 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Yazdığınız her şey, görüntülediğiniz her sayfa ve web'deki diğer tüm etkinlikleriniz izlenir. Sitelerdeki içerik, bilginiz dışında değiştirilebilir.</translation> <translation id="2289385804009217824">Kırp</translation> <translation id="2292556288342944218">İnternet erişiminiz engellendi</translation> +<translation id="2293443924986248631">Etkinleştirildiğinde, siteler sizi web'de takip eden çerezler kullanamaz. Bazı sitelerdeki özellikler bozulabilir.</translation> <translation id="2297722699537546652">B5 (Zarf)</translation> <translation id="2300306941146563769">Yüklenmeyenler</translation> <translation id="2310021320168182093">Chou2 (Zarf)</translation> @@ -726,6 +727,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1. sayfa}other{{COUNT}. sayfa}}</translation> <translation id="4154664944169082762">Parmak izleri</translation> <translation id="4159784952369912983">Mor</translation> +<translation id="4163132590327127354">Chrome, okumayı kolaylaştırmak için bu sayfayı basitleştirdi.</translation> <translation id="4165986682804962316">Site ayarları</translation> <translation id="4171400957073367226">Geçersiz doğrulama imzası</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1026,6 +1028,8 @@ <translation id="536296301121032821">Politika ayarları saklanamadı</translation> <translation id="5371425731340848620">Kartı güncelle</translation> <translation id="5377026284221673050">"Saatiniz geri", "Saatiniz ileri" veya "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Ziyaret etmek üzere olduğunuz sunucu (<ph name="ORIGIN" />) kendisine gelen tüm isteklere bir kaynak politikası uygulanmasını gerektiren bir üst bilgi ayarladı. Ancak üst bilgi yanlış biçimlendirildiği için tarayıcı, <ph name="SITE" /> sitesiyle ilgili isteğinizi yerine getiremiyor. Kaynak politikaları + site operatörleri tarafından sitenin güvenliğini ve diğer mülklerini yapılandırmak için kullanılabilir.</translation> <translation id="5386426401304769735">Bu sitenin sertifika zinciri, SHA-1 kullanılarak imzalanmış bir sertifika içeriyor.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Sağda kenar dikişi</translation> @@ -1572,6 +1576,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Bağlantıyı güvenlik duvarı veya virüsten korunma yazılımı engellemiş olabilir.</translation> <translation id="7759163816903619567">Görünen alan:</translation> +<translation id="776110834126722255">Kullanımdan kaldırıldı</translation> <translation id="7761701407923456692">Sunucu sertifikası URL ile eşleşmiyor.</translation> <translation id="7763386264682878361">Ödeme Bildirimi Ayrıştırıcısı</translation> <translation id="7764225426217299476">Adres ekle</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 43a7614..f469c0d 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -314,6 +314,7 @@ <translation id="2288422996159078444">آپ جو بھی ٹائپ کرتے ہیں، جو بھی صفحات آپ دیکھتے ہیں، یا ویب پر دیکھی جانے والی کوئی بھی دوسری سرگرمی، اور سائٹس پر موجود کسی بھی مواد کو آپ کی معلومات کے بغیر تبدیل کیا جا سکتا ہے۔</translation> <translation id="2289385804009217824">تراشیں</translation> <translation id="2292556288342944218">انٹرنیٹ تک آپ کی رسائی مسدود ہے</translation> +<translation id="2293443924986248631">آن ہونے پر، سائٹس ان کوکیز کا استعمال نہیں کر سکتی ہیں جو آپ کو پورے ویب پر ٹریک کرتی ہیں۔ کچھ سائٹس پر خصوصیات میں خلل ہو سکتا ہے۔</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">اپ لوڈ نہیں ہوا</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -730,6 +731,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{صفحہ 1}other{صفحہ {COUNT}}}</translation> <translation id="4154664944169082762">فنگر پرنٹس</translation> <translation id="4159784952369912983">جامنی</translation> +<translation id="4163132590327127354">پڑھنے کو زیادہ آسان بنانے کے ليے Chrome نے اس صفحے کو آسان بنایا۔</translation> <translation id="4165986682804962316">سائٹ کی ترتیبات</translation> <translation id="4171400957073367226">توثیق کی غلط دستخط</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1024,11 +1026,16 @@ <translation id="5340250774223869109">ایپلیکیشن مسدود ہے</translation> <translation id="534295439873310000">NFC آلات</translation> <translation id="5344579389779391559">یہ صفحہ آپ سے رقم چارج کرنے کی کوشش کر سکتا ہے</translation> -<translation id="5346336634660260557">کلپ بورڈ کے موادوں کے ساتھ ساتھ ان فائلز کو بھی اسکین کریں جنہیں آپ Chrome میں اپ لوڈ یا ڈاؤن لوڈ کرتے ہیں۔</translation> +<translation id="5346336634660260557">کلپ بورڈ کے مواد کے ساتھ ساتھ ان فائلز کو بھی اسکین کریں جنہیں آپ Chrome میں اپ لوڈ یا ڈاؤن لوڈ کرتے ہیں۔</translation> <translation id="5355557959165512791">آپ ابھی <ph name="SITE" /> ملاحظہ نہیں کر سکتے کیونکہ اس کے سرٹیفکیٹ کو کالعدم قرار دے دیا گیا ہے۔ نیٹ ورک کی خرابیاں اور حملے عام طور پر عارضی ہوتے ہیں، لہذا یہ صفحہ شاید بعد میں کام کرے گا۔</translation> <translation id="536296301121032821">پالیسی کی ترتیبات کو اسٹور کرنے میں ناکام</translation> <translation id="5371425731340848620">کارڈ اپ ڈیٹ کریں</translation> <translation id="5377026284221673050">"آپ کی گھڑی پیچھے ہے" یا "آپ کی گھڑی آگے ہے" یا "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">آپ جس سرور پر جا رہے ہیں، <ph name="ORIGIN" />، نے ہیڈر سیٹ کیا ہے + اس کی ضرورت ہوتی ہے کہ ایک اصل پالیسی اس سے کی جانے والی تمام درخواستوں پر لاگو ہوگی۔ لیکن + ہیڈر ناقص ہے، جو براؤزر کو <ph name="SITE" /> کے ليے کی گئی + آپ کی درخواست کو پورا کرنے سے روکتی ہے۔ کسی سائٹ کی خاطر سیکیورٹی اور دیگر پراپرٹیز کو ترتیب دینے کے لیے + سائٹ آپریٹرز کے ذریعے اصل پالیسیوں کا استعمال کیا جا سکتا ہے۔</translation> <translation id="5386426401304769735">اس سائٹ کیلئے سرٹیفکیٹ چین میں SHA-1 کا استعمال کر کے دستخط کردہ سرٹیفکیٹ شامل ہے۔</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">دائیں طرف کنارے کی سلائی</translation> @@ -1576,6 +1583,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">ممکن ہے فائروال یا اینٹی وائرس سافٹ ویئر نے کنکشن کو مسدود کر دیا ہو۔</translation> <translation id="7759163816903619567">ڈسپلے ڈومین:</translation> +<translation id="776110834126722255">فرسودہ</translation> <translation id="7761701407923456692">سرور سرٹیفکیٹ URL سے مماثل نہیں ہے۔</translation> <translation id="7763386264682878361">ادائیگی مینی فیسٹ پارسر</translation> <translation id="7764225426217299476">پتہ شامل کریں</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index 2358ec0..95fe1a6 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -312,6 +312,7 @@ <translation id="2288422996159078444">Internetdagi harakatlaringiz (qidirayotgan soʻrovlar, ochayotgan sahifalar va boshqa amallar) kuzatuv ostida, saytlar kontenti oʻzgarishi mumkin.</translation> <translation id="2289385804009217824">Qirqish</translation> <translation id="2292556288342944218">Internet taqiqlab qo‘yilgan</translation> +<translation id="2293443924986248631">Yoqilsa, sizni internet boʻylab kuzatadigan cookie fayllardan saytlar foydalana olmaydi. Ayrim saytlardagi funksiyalar ishalamay qolishi mumkin.</translation> <translation id="2297722699537546652">B5 (Envelope)</translation> <translation id="2300306941146563769">Yuklanmagan</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> @@ -724,6 +725,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{1-sahifa}other{{COUNT}-sahifa}}</translation> <translation id="4154664944169082762">Barmoq izlari</translation> <translation id="4159784952369912983">Siyohrang</translation> +<translation id="4163132590327127354">Mutoalani osonlashtirish uchun bu sahifa Chrome tomonidan soddalashtirildi.</translation> <translation id="4165986682804962316">Sayt sozlamalari</translation> <translation id="4171400957073367226">Tasdiqlash imzosi noto‘g‘ri</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1024,6 +1026,11 @@ <translation id="536296301121032821">Tartib-qoida parametrlarini saqlab bo‘lmadi</translation> <translation id="5371425731340848620">Kartani yangilash</translation> <translation id="5377026284221673050">“Soatingiz orqada” yoki “Soatingiz oldinda” yoki “<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>”</translation> +<translation id="5380442954567233718">Siz ochmoqchi boʻlgan <ph name="ORIGIN" /> serverida + barcha soʻrovlar manba siyosati tekshiruvidan oʻtishini talab qiluvchi sarlavha sozlangan. Lekin + sarlavha xato formatdaligi sababli brauzer <ph name="SITE" /> saytidagi soʻrovingizni + bajara olmaydi. Manba siyosatlari sayt operatorlari + tomonidan xavfsizlik kabi sayt parametrlarini sozlashda ishlatiladi.</translation> <translation id="5386426401304769735">Bu veb-saytning sertifikatlari zanjiridagi sertifikat SHA-1 algoritmi asosida yozilgan.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">Oʻng chekkasini tikish</translation> @@ -1569,6 +1576,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Himoya devori yoki antivirus dasturi tarmoqqa ulanishni taqiqlab qo‘ygan bo‘lishi mumkin.</translation> <translation id="7759163816903619567">Domenni ko‘rsatish:</translation> +<translation id="776110834126722255">Eskirgan</translation> <translation id="7761701407923456692">Server sertifikati URL manziliga mos kelmayapti.</translation> <translation id="7763386264682878361">To‘lov manifesti tahlilchisi</translation> <translation id="7764225426217299476">Manzil qo‘shish</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 383c7dd..212ca69 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">Mọi thông tin bạn nhập, mọi trang bạn xem hoặc mọi hoạt động khác trên web đều sẽ bị theo dõi. Nội dung trên các trang web có thể bị thay đổi mà bạn không hề hay biết.</translation> <translation id="2289385804009217824">Cắt bỏ</translation> <translation id="2292556288342944218">Quyền truy cập Internet của bạn bị chặn</translation> +<translation id="2293443924986248631">Khi tùy chọn này bật, các trang web không thể dùng cookie theo dõi bạn trên web. Do đó, các tính năng trên một số trang web có thể hoạt động không đúng cách.</translation> <translation id="2297722699537546652">B5 (Phong bì)</translation> <translation id="2300306941146563769">Chưa tải lên</translation> <translation id="2310021320168182093">Chou2 (Phong bì)</translation> @@ -729,6 +730,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{Trang 1}other{Trang {COUNT}}}</translation> <translation id="4154664944169082762">Dấu vân tay</translation> <translation id="4159784952369912983">Tím</translation> +<translation id="4163132590327127354">Chrome đã đơn giản hóa trang này để dễ đọc hơn.</translation> <translation id="4165986682804962316">Cài đặt trang web</translation> <translation id="4171400957073367226">Chữ ký xác minh không hợp lệ</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -855,7 +857,7 @@ <translation id="467662567472608290">Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này có lỗi. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation> <translation id="4677585247300749148"><ph name="URL" /> muốn phản hồi các sự kiện trợ năng</translation> <translation id="467809019005607715">Google Trang trình bày</translation> -<translation id="4680804919228900307">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="4680804919228900307">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chromium khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="4690462567478992370">Dừng sử dụng chứng chỉ không hợp lệ</translation> <translation id="4691835149146451662">Architecture-A (Phong bì)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1029,6 +1031,11 @@ <translation id="536296301121032821">Không thể lưu trữ cài đặt chính sách</translation> <translation id="5371425731340848620">Cập nhật thẻ</translation> <translation id="5377026284221673050">"Đồng hồ của bạn chạy chậm" hoặc "Đồng hồ của bạn chạy nhanh" hay "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>"</translation> +<translation id="5380442954567233718">Máy chủ bạn định truy cập vào, <ph name="ORIGIN" />, đã đặt tiêu đề + yêu cầu áp dụng một chính sách nguồn gốc cho tất cả các yêu cầu được gửi tới máy chủ đó. Tuy nhiên, + tiêu đề đó không đúng định dạng. Điều này khiến trình duyệt không hoàn thành được + yêu cầu truy cập vào <ph name="SITE" /> của bạn. Nhà điều hành trang web có thể + dựa vào chính sách nguồn gốc để định cấu hình bảo mật và các thuộc tính khác cho trang web.</translation> <translation id="5386426401304769735">Chuỗi chứng chỉ cho trang web này có chứa một chứng chỉ đã ký bằng SHA-1.</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">May viền ở bên phải</translation> @@ -1435,7 +1442,7 @@ <translation id="7219179957768738017">Kết nối sử dụng <ph name="SSL_VERSION" />.</translation> <translation id="7220786058474068424">Đang xử lý</translation> <translation id="7221855153210829124">Hiển thị thông báo</translation> -<translation id="7229659723041939809">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="7229659723041939809">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chrome khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" />, <ph name="WEBSITE_3" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="7233592378249864828">In tờ xác nhận</translation> <translation id="7238585580608191973">SHA-256 Fingerprint</translation> <translation id="7240120331469437312">Tên Thay thế Đối tượng của Chứng chỉ</translation> @@ -1503,7 +1510,7 @@ <translation id="7485870689360869515">Không tìm thấy dữ liệu.</translation> <translation id="7495290002932347110">Một sự cố rò rỉ dữ liệu xảy ra trên một trang web hoặc ứng dụng đã làm lộ mật khẩu của bạn. Bạn nên kiểm tra các mật khẩu đã lưu và đổi mật khẩu dùng trên <ph name="ORIGIN" /> ngay bây giờ.</translation> <translation id="7498234416455752244">Tiếp tục chỉnh sửa</translation> -<translation id="7503664977220660814">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="7503664977220660814">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chromium khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="7508255263130623398">ID thiết bị thuộc chính sách trả lại trống hoặc không khớp với ID của thiết bị hiện tại</translation> <translation id="7508870219247277067">Xanh quả bơ</translation> <translation id="7511955381719512146">Wi-Fi mà bạn đang sử dụng có thể yêu cầu bạn phải truy cập <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> @@ -1575,6 +1582,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">Tường lửa hoặc phần mềm diệt vi-rút có thể đã chặn kết nối.</translation> <translation id="7759163816903619567">Miền hiển thị:</translation> +<translation id="776110834126722255">Không dùng nữa</translation> <translation id="7761701407923456692">Chứng chỉ của máy chủ không phù hợp với URL.</translation> <translation id="7763386264682878361">Trình phân tích cú pháp tệp kê khai thanh toán</translation> <translation id="7764225426217299476">Thêm địa chỉ</translation> @@ -1600,7 +1608,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Rời khỏi trang web?</translation> <translation id="7865448901209910068">Tốc độ tốt nhất</translation> -<translation id="7874263914261512992">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="7874263914261512992">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chrome khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" />, <ph name="WEBSITE_2" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="7878562273885520351">Mật khẩu của bạn có thể bị xâm phạm</translation> <translation id="7882421473871500483">Nâu</translation> <translation id="7887683347370398519">Kiểm tra CVC của bạn và thử lại</translation> @@ -1737,7 +1745,7 @@ <translation id="8474910779563686872">Hiển thị thông tin chi tiết của nhà phát triển</translation> <translation id="8479754468255770962">Dập ghim dưới cùng bên trái</translation> <translation id="8483780878231876732">Để sử dụng thẻ từ Tài khoản Google, hãy đăng nhập vào Chrome</translation> -<translation id="8485393050551136813">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="8485393050551136813">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chromium khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="8488350697529856933">Áp dụng cho</translation> <translation id="8490137692873530638">Khay xếp chồng 10</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> mất quá nhiều thời gian để phản hồi.</translation> @@ -1788,7 +1796,7 @@ <translation id="87601671197631245">Trang web này dùng cấu hình bảo mật lỗi thời nên có thể làm lộ thông tin của bạn (chẳng hạn như mật khẩu, thư hoặc thẻ tín dụng) trong quá trình gửi các thông tin này đến trang web này.</translation> <translation id="8761567432415473239">Gần đây, Duyệt web an toàn của Google <ph name="BEGIN_LINK" />tìm thấy chương trình độc hại<ph name="END_LINK" /> trên trang <ph name="SITE" />.</translation> <translation id="8763927697961133303">Thiết bị USB</translation> -<translation id="8774457497170244317">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Bạn nên kiểm tra ngay những mật khẩu đã lưu trên <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> +<translation id="8774457497170244317">Bạn vừa nhập mật khẩu vào một trang web lừa đảo. Chrome khuyên bạn nên kiểm tra ngay những mật khẩu bạn đã lưu cho <ph name="WEBSITE_1" /> và các trang web khác mà bạn sử dụng mật khẩu này.</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">&Làm lại xóa</translation> <translation id="8792621596287649091">Bạn có thể mất quyền truy cập vào tài khoản <ph name="ORG_NAME" /> của mình hoặc bị đánh cắp danh tính. Chromium khuyên bạn nên thay đổi mật khẩu ngay bây giờ.</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index 4e532b9..d3fd96f 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -312,6 +312,7 @@ <translation id="2288422996159078444">您輸入的內容、瀏覽的網頁或其他網絡活動都會被監視,且網站內容可能會在您不知情的情況下變更。</translation> <translation id="2289385804009217824">修剪</translation> <translation id="2292556288342944218">您的互聯網存取權已被封鎖</translation> +<translation id="2293443924986248631">開啟此功能時,網站不能使用 Cookie 追蹤您的網絡活動。有些網站的功能可能會無法正常運作。</translation> <translation id="2297722699537546652">B5 (信封)</translation> <translation id="2300306941146563769">未上載</translation> <translation id="2310021320168182093">Chou2 (信封)</translation> @@ -721,6 +722,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{第 1 頁}other{第 {COUNT} 頁}}</translation> <translation id="4154664944169082762">指紋</translation> <translation id="4159784952369912983">紫色</translation> +<translation id="4163132590327127354">Chrome 已簡化此頁面,讓您更輕易閱讀。</translation> <translation id="4165986682804962316">網站設定</translation> <translation id="4171400957073367226">驗證簽名錯誤</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -1020,6 +1022,7 @@ <translation id="536296301121032821">無法儲存政策設定</translation> <translation id="5371425731340848620">更新信用卡</translation> <translation id="5377026284221673050">「您的時鐘慢了」、「您的時鐘快了」或「<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>」</translation> +<translation id="5380442954567233718">您的目標伺服器「<ph name="ORIGIN" />」已設定標題,要求為收到的所有要求套用來源政策。不過,由於該標題格式錯誤,因此瀏覽器無法完成您向 <ph name="SITE" /> 提出的要求。網站網絡供應商可使用來源政策設定網站的安全性及其他屬性。</translation> <translation id="5386426401304769735">此網站的憑證鏈內包含使用 SHA-1 簽署的憑證。</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">邊緣釘裝 (右側)</translation> @@ -1566,6 +1569,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">連線可能遭防火牆或防毒軟件封鎖。</translation> <translation id="7759163816903619567">顯示網域:</translation> +<translation id="776110834126722255">已淘汰</translation> <translation id="7761701407923456692">伺服器憑證與網址不符。</translation> <translation id="7763386264682878361">付款資訊清單剖析器</translation> <translation id="7764225426217299476">新增地址</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index c8fea76a..30c34396 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -313,6 +313,7 @@ <translation id="2288422996159078444">你輸入的內容、瀏覽的網頁或任何其他網路活動都會遭到監視,而且網站內容可能會在你不知情的情況下遭到變更。</translation> <translation id="2289385804009217824">裁切</translation> <translation id="2292556288342944218">您的網際網路存取權遭到封鎖</translation> +<translation id="2293443924986248631">開啟這項功能時,網站無法使用 Cookie 來追蹤你在網路上的活動。某些網站的功能可能無法正常運作。</translation> <translation id="2297722699537546652">B5 (信封)</translation> <translation id="2300306941146563769">未上傳</translation> <translation id="2310021320168182093">Chou2 (信封)</translation> @@ -594,7 +595,7 @@ <translation id="3587738293690942763">中間</translation> <translation id="3592413004129370115">Italian (信封)</translation> <translation id="3600246354004376029"><ph name="TITLE" />,<ph name="DOMAIN" />,<ph name="TIME" /></translation> -<translation id="3603507503523709">系統管理員已封鎖應用程式</translation> +<translation id="3603507503523709">已遭系統管理員封鎖的應用程式</translation> <translation id="3608932978122581043">送紙方向</translation> <translation id="3614103345592970299">粗細:2</translation> <translation id="361438452008624280">清單項目「<ph name="LANGUAGE_ID" />」:不明或不支援的語言。</translation> @@ -723,6 +724,7 @@ <translation id="4152318981910038897">{COUNT,plural, =1{第 1 頁}other{第 {COUNT} 頁}}</translation> <translation id="4154664944169082762">指紋</translation> <translation id="4159784952369912983">紫色</translation> +<translation id="4163132590327127354">Chrome 已簡化這個頁面,讓內容更易於閱讀。</translation> <translation id="4165986682804962316">網站設定</translation> <translation id="4171400957073367226">驗證簽名無效</translation> <translation id="4171489848299289778"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> @@ -848,7 +850,7 @@ <translation id="467662567472608290">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證含有錯誤。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> <translation id="4677585247300749148"><ph name="URL" /> 要求回應無障礙事件</translation> <translation id="467809019005607715">Google 簡報</translation> -<translation id="4680804919228900307">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查已儲存在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="4680804919228900307">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及使用這組密碼的其他網站。</translation> <translation id="4690462567478992370">停止使用無效的憑證</translation> <translation id="4691835149146451662">Architecture-A (信封)</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -1014,7 +1016,7 @@ <translation id="5329858041417644019">你的瀏覽器未受管理</translation> <translation id="5332219387342487447">運送方式</translation> <translation id="5334013548165032829">詳細系統記錄</translation> -<translation id="5340250774223869109">已封鎖應用程式</translation> +<translation id="5340250774223869109">應用程式已遭封鎖</translation> <translation id="534295439873310000">NFC 裝置</translation> <translation id="5344579389779391559">進入接下來的頁面後,系統可能會向您收費</translation> <translation id="5346336634660260557">掃描剪貼簿內容,以及透過 Chrome 下載或上傳的檔案。</translation> @@ -1022,6 +1024,7 @@ <translation id="536296301121032821">無法儲存政策設定</translation> <translation id="5371425731340848620">更新信用卡</translation> <translation id="5377026284221673050">「你的時鐘時間過慢」、「你的時鐘時間過快」或 「<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>」</translation> +<translation id="5380442954567233718">你要存取的伺服器「<ph name="ORIGIN" />」已設定標頭,指定所有收到的要求都必須套用來源政策。但標頭格式錯誤,因此瀏覽器無法完成你向「<ph name="SITE" />」提出的要求。網站業者可使用來源政策設定網站的安全性及其他屬性。</translation> <translation id="5386426401304769735">這個網站的憑證鏈結包含使用 SHA-1 進行簽署的憑證。</translation> <translation id="538659543871111977">A4-Tab</translation> <translation id="5396631636586785122">邊緣裝訂 (右側)</translation> @@ -1428,7 +1431,7 @@ <translation id="7219179957768738017">這個連線使用 <ph name="SSL_VERSION" />。</translation> <translation id="7220786058474068424">處理中</translation> <translation id="7221855153210829124">顯示通知</translation> -<translation id="7229659723041939809">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查已儲存在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="7229659723041939809">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />、<ph name="WEBSITE_3" />,以及使用這組密碼的其他網站。</translation> <translation id="7233592378249864828">列印確認工作表</translation> <translation id="7238585580608191973">SHA-256 指紋</translation> <translation id="7240120331469437312">憑證主體替代名稱</translation> @@ -1496,7 +1499,7 @@ <translation id="7485870689360869515">找不到任何資料。</translation> <translation id="7495290002932347110">你使用的某個網站或應用程式發生資料侵害事件,因此你的密碼已遭洩露。Chrome 建議你立即檢查已儲存的密碼,並變更 <ph name="ORIGIN" /> 上的密碼。</translation> <translation id="7498234416455752244">繼續編輯</translation> -<translation id="7503664977220660814">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查已儲存在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />,以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="7503664977220660814">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />,以及使用這組密碼的其他網站。</translation> <translation id="7508255263130623398">傳回的政策裝置 ID 沒有任何內容,或是與目前的裝置 ID 不符</translation> <translation id="7508870219247277067">酪梨綠</translation> <translation id="7511955381719512146">目前使用的 Wi-Fi 網路可能會要求您造訪 <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />。</translation> @@ -1568,6 +1571,7 @@ <translation id="7757555340166475417">Dai-Pa-Kai</translation> <translation id="7758069387465995638">防火牆或防毒軟體可能封鎖了連線。</translation> <translation id="7759163816903619567">顯示網域:</translation> +<translation id="776110834126722255">已淘汰</translation> <translation id="7761701407923456692">伺服器憑證與網址不符。</translation> <translation id="7763386264682878361">付款資訊清單剖析器</translation> <translation id="7764225426217299476">新增地址</translation> @@ -1593,7 +1597,7 @@ <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">要離開網站嗎?</translation> <translation id="7865448901209910068">最佳速度</translation> -<translation id="7874263914261512992">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查已儲存在 <ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />,以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="7874263914261512992">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" />、<ph name="WEBSITE_2" />,以及使用這組密碼的其他網站。</translation> <translation id="7878562273885520351">你的密碼可能已經外洩</translation> <translation id="7882421473871500483">棕色</translation> <translation id="7887683347370398519">請檢查您的 CVC,然後再試一次</translation> @@ -1730,7 +1734,7 @@ <translation id="8474910779563686872">顯示開發人員詳細資料</translation> <translation id="8479754468255770962">釘裝 (左下方)</translation> <translation id="8483780878231876732">如要使用您的 Google 帳戶中的信用卡,請登入 Chrome</translation> -<translation id="8485393050551136813">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查已儲存在 <ph name="WEBSITE_1" /> 以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="8485393050551136813">你剛才在詐騙網站上輸入了密碼。Chromium 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" /> 和使用這組密碼的其他網站。</translation> <translation id="8488350697529856933">適用對象</translation> <translation id="8490137692873530638">堆疊出紙器 10</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> 的回應時間過長。</translation> @@ -1780,7 +1784,7 @@ <translation id="87601671197631245">這個網站的安全性設定過舊,因此你傳送給這個網站的的資訊 (例如密碼、訊息或信用卡資訊) 可能會外洩。</translation> <translation id="8761567432415473239">Google 安全瀏覽最近在「<ph name="SITE" />」<ph name="BEGIN_LINK" />發現了有害程式<ph name="END_LINK" />。</translation> <translation id="8763927697961133303">USB 裝置</translation> -<translation id="8774457497170244317">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查已儲存在 <ph name="WEBSITE_1" /> 以及也使用這個密碼的其他網站上的密碼。</translation> +<translation id="8774457497170244317">你剛才在詐騙網站上輸入了密碼。Chrome 建議你立即檢查為以下網站儲存的密碼:<ph name="WEBSITE_1" /> 和使用這組密碼的其他網站。</translation> <translation id="877985182522063539">A4</translation> <translation id="8790007591277257123">重做刪除(&R)</translation> <translation id="8792621596287649091">你可能會失去 <ph name="ORG_NAME" /> 帳戶存取權,或身分遭到冒用。Chromium 建議你立即變更密碼。</translation>
diff --git a/components/sync/protocol/autofill_specifics.proto b/components/sync/protocol/autofill_specifics.proto index 9f91978..1eb5886 100644 --- a/components/sync/protocol/autofill_specifics.proto +++ b/components/sync/protocol/autofill_specifics.proto
@@ -106,6 +106,15 @@ optional string instrument_token = 5; } +message CardIssuer { + enum Issuer { + ISSUER_UNKNOWN = 0; + // Card where the issuer is Google. + GOOGLE = 1; + } + optional Issuer issuer = 1; +} + message WalletMaskedCreditCard { reserved 9; reserved "card_class"; @@ -161,6 +170,9 @@ // The card's nickname, if it exists. optional string nickname = 12; + + // Issuer of the card. + optional CardIssuer card_issuer = 13; } // Different than an AutofillProfile because this represents some known address
diff --git a/components/sync/protocol/proto_enum_conversions.cc b/components/sync/protocol/proto_enum_conversions.cc index d861edb..0e4dd00e 100644 --- a/components/sync/protocol/proto_enum_conversions.cc +++ b/components/sync/protocol/proto_enum_conversions.cc
@@ -457,6 +457,15 @@ return ""; } +const char* ProtoEnumToString(sync_pb::CardIssuer::Issuer issuer) { + switch (issuer) { + ENUM_CASE(sync_pb::CardIssuer, ISSUER_UNKNOWN); + ENUM_CASE(sync_pb::CardIssuer, GOOGLE); + } + NOTREACHED(); + return ""; +} + const char* ProtoEnumToString( sync_pb::WalletMetadataSpecifics::Type wallet_metadata_type) { ASSERT_ENUM_BOUNDS(sync_pb::WalletMetadataSpecifics, Type, UNKNOWN, ADDRESS);
diff --git a/components/sync/protocol/proto_enum_conversions.h b/components/sync/protocol/proto_enum_conversions.h index e772283..7882eb4 100644 --- a/components/sync/protocol/proto_enum_conversions.h +++ b/components/sync/protocol/proto_enum_conversions.h
@@ -96,6 +96,8 @@ const char* ProtoEnumToString( sync_pb::WalletMaskedCreditCard::WalletCardType wallet_card_type); +const char* ProtoEnumToString(sync_pb::CardIssuer::Issuer issuer); + const char* ProtoEnumToString( sync_pb::WalletMetadataSpecifics::Type wallet_metadata_type);
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index 2a1edfe..b163ec6 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -1010,6 +1010,10 @@ VISIT(instrument_token); } +VISIT_PROTO_FIELDS(const sync_pb::CardIssuer& proto) { + VISIT_ENUM(issuer); +} + VISIT_PROTO_FIELDS(const sync_pb::WalletMaskedCreditCard& proto) { VISIT(id); VISIT_ENUM(status); @@ -1021,6 +1025,7 @@ VISIT(billing_address_id); VISIT(bank_name); VISIT(nickname); + VISIT(card_issuer); } VISIT_PROTO_FIELDS(const sync_pb::WalletMetadataSpecifics& proto) {
diff --git a/components/test/data/autofill_assistant/html/form_target_website.html b/components/test/data/autofill_assistant/html/form_target_website.html index 4333dfb2..2f12587 100644 --- a/components/test/data/autofill_assistant/html/form_target_website.html +++ b/components/test/data/autofill_assistant/html/form_target_website.html
@@ -72,9 +72,10 @@ <h4>Password Form</h4> <div> <form id="form3" action="https://example.com/" method="post"> - Username: <input type="text" id="username" name="username"><br> - Password: <input type="password" id="password" name="password"><br> - Confirmation password: <input type="password" id="password-conf" name="password-conf"> + <div>Username: <input type="text" id="username" name="username"><div> + <div>Old password: <input type="password" id="old-password" name="old-password"></div> + <div>New password: <input type="password" id="new-password" name="new-password"></div> + <div>Confirmation password: <input type="password" id="password-conf" name="password-conf"></div> </form> </div>
diff --git a/components/variations/field_trial_config/BUILD.gn b/components/variations/field_trial_config/BUILD.gn index 592dba5..b0490e7b 100644 --- a/components/variations/field_trial_config/BUILD.gn +++ b/components/variations/field_trial_config/BUILD.gn
@@ -35,11 +35,15 @@ "--output=$out_name", ] - # At build-time, Android Chrome and WebView both use platform "android", but - # at run-time, variations has separate platforms "android" and - # "android_webview". So if building "android", also include WebView. + # At build-time, Android Chrome and WebView/WebLayer use the platform + # "android", but at run-time, variations has separate platforms "android", + # "android_webview" and "android_weblayer". So if building "android", also + # include WebView/WebLayer. if (platform == "android") { - args += [ "--platform=android_webview" ] + args += [ + "--platform=android_weblayer", + "--platform=android_webview", + ] } }
diff --git a/components/viz/host/gpu_host_impl.cc b/components/viz/host/gpu_host_impl.cc index 4218efd..efae4f8 100644 --- a/components/viz/host/gpu_host_impl.cc +++ b/components/viz/host/gpu_host_impl.cc
@@ -417,10 +417,6 @@ gpu_info_for_hardware_gpu, gpu_feature_info_for_hardware_gpu, gpu_extra_info); - // Remove entries so that GPU process shader caches get populated on any - // GPU process start. - client_id_to_shader_cache_.clear(); - if (!params_.disable_gpu_shader_disk_cache) { CreateChannelCache(gpu::kInProcessCommandBufferClientId);
diff --git a/components/viz/service/display/overlay_processor_interface.cc b/components/viz/service/display/overlay_processor_interface.cc index e0c4b2c..5f9990fb 100644 --- a/components/viz/service/display/overlay_processor_interface.cc +++ b/components/viz/service/display/overlay_processor_interface.cc
@@ -108,7 +108,7 @@ overlay_manager->CreateOverlayCandidates(surface_handle); } - if (features::ShouldUseRealBuffersForPageFlipTest()) { + if (overlay_enabled && features::ShouldUseRealBuffersForPageFlipTest()) { CHECK(shared_image_interface); } else { shared_image_interface = nullptr;
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 2fd23ff..a547985 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -910,7 +910,6 @@ break; case ax::mojom::Role::kLayoutTable: case ax::mojom::Role::kLayoutTableCell: - case ax::mojom::Role::kLayoutTableColumn: case ax::mojom::Role::kLayoutTableRow: // No role description. break;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index bd9fa917..1573834f 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -983,8 +983,6 @@ - (NSArray*)children { if (![self instanceActive]) return nil; - if ([self internalRole] == ax::mojom::Role::kLayoutTableColumn) - return nil; if (!_children) { uint32_t childCount = _owner->PlatformChildCount(); _children.reset([[NSMutableArray alloc] initWithCapacity:childCount]);
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 1ed20d2..6094d85 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -247,6 +247,18 @@ AccessibilityTreeFormatter::GetTestPasses().size()), DumpAccessibilityTreeTestPassToString()); +// TODO(crbug.com/1063155): put this back in sorted order once it passes +// with the kEnableAccessibilityExposeHTMLElement flag. +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, + AccessibilityAriaProgressbar) { + RunAriaTest(FILE_PATH_LITERAL("aria-progressbar.html")); +} + +// TODO(crbug.com/1063155): in process of refactoring all tests to enable the +// kEnableAccessibilityExposeHTMLElement flag, without doing all at the +// same time. +#define DumpAccessibilityTreeTest DumpAccessibilityTreeTestWithHTMLElement + IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityCSSColor) { RunCSSTest(FILE_PATH_LITERAL("color.html")); } @@ -938,11 +950,6 @@ RunAriaTest(FILE_PATH_LITERAL("aria-pressed.html")); } -IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, - AccessibilityAriaProgressbar) { - RunAriaTest(FILE_PATH_LITERAL("aria-progressbar.html")); -} - IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityAriaRadio) { RunAriaTest(FILE_PATH_LITERAL("aria-radio.html")); } @@ -1200,6 +1207,9 @@ RunAriaTest(FILE_PATH_LITERAL("label-with-selected-option.html")); } +// TODO(crbug.com/1063155) - see TODO with the same bug number above. +#undef DumpAccessibilityTreeTest + IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityArticle) { RunHtmlTest(FILE_PATH_LITERAL("article.html")); }
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.cc b/content/browser/bluetooth/web_bluetooth_service_impl.cc index f37ee42..84d452d5 100644 --- a/content/browser/bluetooth/web_bluetooth_service_impl.cc +++ b/content/browser/bluetooth/web_bluetooth_service_impl.cc
@@ -478,12 +478,15 @@ void WebBluetoothServiceImpl::OnVisibilityChanged(Visibility visibility) { if (visibility == content::Visibility::HIDDEN || visibility == content::Visibility::OCCLUDED) { - allowed_scan_filters_.clear(); - accept_all_advertisements_ = false; - scanning_clients_.clear(); + ClearDeviceAdvertisementClients(); } } +void WebBluetoothServiceImpl::OnWebContentsLostFocus( + RenderWidgetHost* render_widget_host) { + ClearDeviceAdvertisementClients(); +} + void WebBluetoothServiceImpl::AdapterPoweredChanged( device::BluetoothAdapter* adapter, bool powered) { @@ -1961,10 +1964,14 @@ new FrameConnectedBluetoothDevices(render_frame_host_)); device_chooser_controller_.reset(); device_scanning_prompt_controller_.reset(); + ClearDeviceAdvertisementClients(); + BluetoothAdapterFactoryWrapper::Get().ReleaseAdapter(this); +} + +void WebBluetoothServiceImpl::ClearDeviceAdvertisementClients() { scanning_clients_.clear(); allowed_scan_filters_.clear(); accept_all_advertisements_ = false; - BluetoothAdapterFactoryWrapper::Get().ReleaseAdapter(this); } bool WebBluetoothServiceImpl::IsAllowedToAccessAtLeastOneService(
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.h b/content/browser/bluetooth/web_bluetooth_service_impl.h index 94b68ae..7ab5a25 100644 --- a/content/browser/bluetooth/web_bluetooth_service_impl.h +++ b/content/browser/bluetooth/web_bluetooth_service_impl.h
@@ -105,6 +105,8 @@ BluetoothScanningPermissionRevokedWhenTabOccluded); FRIEND_TEST_ALL_PREFIXES(WebBluetoothServiceImplTest, BluetoothScanningPermissionRevokedWhenBlocked); + FRIEND_TEST_ALL_PREFIXES(WebBluetoothServiceImplTest, + BluetoothScanningPermissionRevokedWhenFocusIsLost); friend class FrameConnectedBluetoothDevicesTest; friend class WebBluetoothServiceImplTest; using PrimaryServicesRequestCallback = @@ -160,6 +162,7 @@ // is this->render_frame_host_ and not some other frame in the same tab. void DidFinishNavigation(NavigationHandle* navigation_handle) override; void OnVisibilityChanged(Visibility visibility) override; + void OnWebContentsLostFocus(RenderWidgetHost* render_widget_host) override; // BluetoothAdapter::Observer: void AdapterPoweredChanged(device::BluetoothAdapter* adapter, @@ -385,6 +388,9 @@ // Clears all state (maps, sets, etc). void ClearState(); + // Clears state associated with Bluetooth LE Scanning. + void ClearDeviceAdvertisementClients(); + bool IsAllowedToAccessAtLeastOneService( const blink::WebBluetoothDeviceId& device_id); bool IsAllowedToAccessService(const blink::WebBluetoothDeviceId& device_id,
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc b/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc index 346bca2..3ec54580 100644 --- a/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc +++ b/content/browser/bluetooth/web_bluetooth_service_impl_unittest.cc
@@ -360,6 +360,23 @@ } TEST_F(WebBluetoothServiceImplTest, + BluetoothScanningPermissionRevokedWhenFocusIsLost) { + blink::mojom::WebBluetoothLeScanFilterPtr filter = CreateScanFilter("a", "b"); + base::Optional<WebBluetoothServiceImpl::ScanFilters> filters; + filters.emplace(); + filters->push_back(filter.Clone()); + FakeWebBluetoothScanClientImpl client_impl; + RequestScanningStartAndSimulatePromptEvent( + *filter, &client_impl, content::BluetoothScanningPrompt::Event::kAllow); + EXPECT_TRUE(service_->AreScanFiltersAllowed(filters)); + + main_test_rfh()->GetRenderWidgetHost()->LostFocus(); + + // The previously granted Bluetooth scanning permission should be revoked. + EXPECT_FALSE(service_->AreScanFiltersAllowed(filters)); +} + +TEST_F(WebBluetoothServiceImplTest, BluetoothScanningPermissionRevokedWhenBlocked) { blink::mojom::WebBluetoothLeScanFilterPtr filter_1 = CreateScanFilter("a", "b");
diff --git a/content/browser/browsing_data/same_site_data_remover_impl_browsertest.cc b/content/browser/browsing_data/same_site_data_remover_impl_browsertest.cc index 42d8c75..b19bed0 100644 --- a/content/browser/browsing_data/same_site_data_remover_impl_browsertest.cc +++ b/content/browser/browsing_data/same_site_data_remover_impl_browsertest.cc
@@ -96,10 +96,11 @@ IN_PROC_BROWSER_TEST_F(SameSiteDataRemoverBrowserTest, TestClearDataWithStorageRemoval) { StoragePartition* storage_partition = GetStoragePartition(); - CreateCookieForTest("TestCookie", "www.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, GetBrowserContext()); + CreateCookieForTest( + "TestCookie", "www.google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, GetBrowserContext()); browsing_data_browsertest_utils::AddServiceWorker( "www.google.com", storage_partition, GetHttpsServer()); @@ -119,10 +120,11 @@ IN_PROC_BROWSER_TEST_F(SameSiteDataRemoverBrowserTest, TestClearDataWithoutStorageRemoval) { StoragePartition* storage_partition = GetStoragePartition(); - CreateCookieForTest("TestCookie", "www.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, GetBrowserContext()); + CreateCookieForTest( + "TestCookie", "www.google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, GetBrowserContext()); browsing_data_browsertest_utils::AddServiceWorker( "www.google.com", storage_partition, GetHttpsServer());
diff --git a/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc b/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc index fb61c18..c3e0e34 100644 --- a/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc +++ b/content/browser/browsing_data/same_site_data_remover_impl_unittest.cc
@@ -107,14 +107,17 @@ TEST_F(SameSiteDataRemoverImplTest, TestRemoveSameSiteNoneCookies) { BrowserContext* browser_context = GetBrowserContext(); - CreateCookieForTest("TestCookie1", "www.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, browser_context); - CreateCookieForTest("TestCookie2", "www.gmail.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, browser_context); + CreateCookieForTest( + "TestCookie1", "www.google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, browser_context); + CreateCookieForTest( + "TestCookie2", "www.gmail.google.com", + net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, browser_context); DeleteSameSiteNoneCookies(); @@ -128,15 +131,18 @@ TEST_F(SameSiteDataRemoverImplTest, TestRemoveOnlySameSiteNoneCookies) { BrowserContext* browser_context = GetBrowserContext(); - CreateCookieForTest("TestCookie1", "www.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, browser_context); - // The second cookie has SameSite value STRICT_MODE instead of NO_RESTRICTION. CreateCookieForTest( - "TestCookie2", "www.gmail.google.com", net::CookieSameSite::STRICT_MODE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + "TestCookie1", "www.google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), true /* is_cookie_secure */, browser_context); + // The second cookie has SameSite value STRICT_MODE instead of NO_RESTRICTION. + CreateCookieForTest("TestCookie2", "www.gmail.google.com", + net::CookieSameSite::STRICT_MODE, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_STRICT), + true /* is_cookie_secure */, browser_context); DeleteSameSiteNoneCookies(); @@ -151,16 +157,19 @@ TEST_F(SameSiteDataRemoverImplTest, TestRemoveSameDomainCookies) { BrowserContext* browser_context = GetBrowserContext(); - CreateCookieForTest("TestCookie1", "www.google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, browser_context); + CreateCookieForTest( + "TestCookie1", "www.google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, browser_context); // The second cookie has the same domain as the first cookie, but also has // SameSite value STRICT_MODE instead of NO_RESTRICTION. - CreateCookieForTest( - "TestCookie2", "www.google.com", net::CookieSameSite::STRICT_MODE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - false /* is_cookie_secure */, browser_context); + CreateCookieForTest("TestCookie2", "www.google.com", + net::CookieSameSite::STRICT_MODE, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_STRICT), + false /* is_cookie_secure */, browser_context); DeleteSameSiteNoneCookies(); @@ -177,12 +186,16 @@ BrowserContext* browser_context = GetBrowserContext(); CreateCookieForTest("TestCookie1", "www.google.com", net::CookieSameSite::LAX_MODE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX), false /* is_cookie_secure */, browser_context); - CreateCookieForTest( - "TestCookie2", "www.gmail.google.com", net::CookieSameSite::STRICT_MODE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - false /* is_cookie_secure */, browser_context); + CreateCookieForTest("TestCookie2", "www.gmail.google.com", + net::CookieSameSite::STRICT_MODE, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_STRICT), + false /* is_cookie_secure */, browser_context); DeleteSameSiteNoneCookies(); @@ -219,7 +232,9 @@ base::RunLoop run_loop2; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX)); result_out = false; cookie_manager->SetCanonicalCookie( net::CanonicalCookie("TestCookie2", "10", "gmail.google.com", "/", @@ -255,10 +270,11 @@ GetSameSiteDataRemoverImpl()->OverrideStoragePartitionForTesting( &storage_partition); - CreateCookieForTest("TestCookie1", ".google.com", - net::CookieSameSite::NO_RESTRICTION, - net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - true /* is_cookie_secure */, browser_context); + CreateCookieForTest( + "TestCookie1", ".google.com", net::CookieSameSite::NO_RESTRICTION, + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + true /* is_cookie_secure */, browser_context); DeleteSameSiteNoneCookies(); ClearStoragePartitionData();
diff --git a/content/browser/cookie_store/cookie_change_subscription.cc b/content/browser/cookie_store/cookie_change_subscription.cc index 0faf3c54..5367928 100644 --- a/content/browser/cookie_store/cookie_change_subscription.cc +++ b/content/browser/cookie_store/cookie_change_subscription.cc
@@ -166,7 +166,7 @@ net::CookieOptions net_options; net_options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); return cookie.IncludeForRequestURL(url_, net_options, access_semantics) .IsInclude();
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc index 9a1e6a28..b881e126 100644 --- a/content/browser/devtools/protocol/network_handler.cc +++ b/content/browser/devtools/protocol/network_handler.cc
@@ -1182,7 +1182,7 @@ net::CookieOptions options; // Permit it to set a SameSite cookie if it wants to. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); options.set_include_httponly(); storage_partition_->GetCookieManagerForBrowserProcess()->SetCanonicalCookie( *cookie, "https", options, @@ -1219,7 +1219,7 @@ options.set_include_httponly(); // Permit it to set a SameSite cookie if it wants to. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); for (const auto& cookie : net_cookies) { cookie_manager->SetCanonicalCookie( *cookie, "https", options,
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc index 6cdee520..6a0ce955 100644 --- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
@@ -2811,6 +2811,28 @@ EXPECT_FALSE(iframe->AccessibilityIsMainFrame()); } +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + RequestSnapshotAXTreeAfterRenderProcessHostDeath) { + EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL))); + auto* rfh = static_cast<RenderFrameHostImpl*>( + shell()->web_contents()->GetMainFrame()); + + // Kill the renderer process. + RenderProcessHostWatcher crash_observer( + rfh->GetProcess(), RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); + rfh->GetProcess()->Shutdown(0); + crash_observer.Wait(); + + // Call RequestAXSnapshotTree method. The browser process should not crash. + rfh->RequestAXTreeSnapshot( + base::BindOnce([](const ui::AXTreeUpdate& snapshot) { NOTREACHED(); }), + ui::AXMode::kWebContents); + + base::RunLoop().RunUntilIdle(); + + // Pass if this didn't crash. +} + void FileChooserCallback(base::RunLoop* run_loop, blink::mojom::FileChooserResultPtr result) { run_loop->Quit();
diff --git a/content/browser/frame_host/render_frame_message_filter_browsertest.cc b/content/browser/frame_host/render_frame_message_filter_browsertest.cc index 19bb16f..36b26cc 100644 --- a/content/browser/frame_host/render_frame_message_filter_browsertest.cc +++ b/content/browser/frame_host/render_frame_message_filter_browsertest.cc
@@ -66,7 +66,7 @@ net::CookieOptions options; // Allow setting SameSite cookies. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); auto cookie_obj = net::CanonicalCookie::Create( url, cookie_line, base::Time::Now(), base::nullopt /* server_time */); @@ -87,7 +87,7 @@ net::CookieOptions options; // Allow setting SameSite cookies. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); net::CookieList result; base::RunLoop run_loop; BrowserContext::GetDefaultStoragePartition(tab->GetBrowserContext())
diff --git a/content/browser/gpu/peak_gpu_memory_tracker_impl.cc b/content/browser/gpu/peak_gpu_memory_tracker_impl.cc index 7bcff9db..e37f3d8 100644 --- a/content/browser/gpu/peak_gpu_memory_tracker_impl.cc +++ b/content/browser/gpu/peak_gpu_memory_tracker_impl.cc
@@ -10,6 +10,7 @@ #include "base/containers/flat_map.h" #include "base/location.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/strcat.h" #include "base/task/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/gpu/gpu_process_host.h" @@ -20,6 +21,61 @@ namespace { +// These count values should be recalculated in case of changes to the number +// of values in their respective enums. +constexpr int kUsageTypeCount = + static_cast<int>(PeakGpuMemoryTracker::Usage::USAGE_MAX) + 1; +constexpr int kAllocationSourceTypeCount = + static_cast<int>(gpu::GpuPeakMemoryAllocationSource:: + GPU_PEAK_MEMORY_ALLOCATION_SOURCE_MAX) + + 1; +constexpr int kAllocationSourceHistogramIndex = + kUsageTypeCount * kAllocationSourceTypeCount; + +// Histogram values based on UMA_HISTOGRAM_MEMORY_KB +constexpr int kMemoryHistogramMin = 1000; +constexpr int kMemoryHistogramMax = 500000; +constexpr int kMemoryHistogramBucketCount = 50; + +constexpr const char* GetUsageName(PeakGpuMemoryTracker::Usage usage) { + switch (usage) { + case PeakGpuMemoryTracker::Usage::CHANGE_TAB: + return "ChangeTab"; + case PeakGpuMemoryTracker::Usage::PAGE_LOAD: + return "PageLoad"; + case PeakGpuMemoryTracker::Usage::SCROLL: + return "Scroll"; + } +} + +constexpr const char* GetAllocationSourceName( + gpu::GpuPeakMemoryAllocationSource source) { + switch (source) { + case gpu::GpuPeakMemoryAllocationSource::UNKNOWN: + return "Unknown"; + case gpu::GpuPeakMemoryAllocationSource::COMMAND_BUFFER: + return "CommandBuffer"; + case gpu::GpuPeakMemoryAllocationSource::SHARED_CONTEXT_STATE: + return "SharedContextState"; + case gpu::GpuPeakMemoryAllocationSource::SHARED_IMAGE_STUB: + return "SharedImageStub"; + case gpu::GpuPeakMemoryAllocationSource::SKIA: + return "Skia"; + } +} + +std::string GetPeakMemoryUsageUMAName(PeakGpuMemoryTracker::Usage usage) { + return base::StrCat({"Memory.GPU.PeakMemoryUsage.", GetUsageName(usage)}); +} + +std::string GetPeakMemoryAllocationSourceUMAName( + PeakGpuMemoryTracker::Usage usage, + gpu::GpuPeakMemoryAllocationSource source) { + return base::StrCat({"Memory.GPU.PeakMemoryAllocationSource.", + GetUsageName(usage), ".", + GetAllocationSourceName(source)}); +} + // Callback provided to the GpuService, which will be notified of the // |peak_memory| used. This will then report that to UMA Histograms, for the // requested |usage|. Some tests may provide an optional |testing_callback| in @@ -30,22 +86,27 @@ const base::flat_map<gpu::GpuPeakMemoryAllocationSource, uint64_t>& allocation_per_source) { uint64_t memory_in_kb = peak_memory / 1024u; - switch (usage) { - case PeakGpuMemoryTracker::Usage::CHANGE_TAB: - UMA_HISTOGRAM_MEMORY_KB("Memory.GPU.PeakMemoryUsage.ChangeTab", - memory_in_kb); - break; - case PeakGpuMemoryTracker::Usage::PAGE_LOAD: - UMA_HISTOGRAM_MEMORY_KB("Memory.GPU.PeakMemoryUsage.PageLoad", - memory_in_kb); - break; - case PeakGpuMemoryTracker::Usage::SCROLL: - UMA_HISTOGRAM_MEMORY_KB("Memory.GPU.PeakMemoryUsage.Scroll", - memory_in_kb); - break; - } + STATIC_HISTOGRAM_POINTER_GROUP( + GetPeakMemoryUsageUMAName(usage), static_cast<int>(usage), + kUsageTypeCount, Add(memory_in_kb), + base::Histogram::FactoryGet( + GetPeakMemoryUsageUMAName(usage), kMemoryHistogramMin, + kMemoryHistogramMax, kMemoryHistogramBucketCount, + base::HistogramBase::kUmaTargetedHistogramFlag)); - // TODO(jonross): Report |allocation_per_source| to UMA is a follow up change. + for (auto& source : allocation_per_source) { + uint64_t source_memory_in_kb = source.second / 1024u; + STATIC_HISTOGRAM_POINTER_GROUP( + GetPeakMemoryAllocationSourceUMAName(usage, source.first), + static_cast<int>(usage) * kAllocationSourceTypeCount + + static_cast<int>(source.first), + kAllocationSourceHistogramIndex, Add(source_memory_in_kb), + base::Histogram::FactoryGet( + GetPeakMemoryAllocationSourceUMAName(usage, source.first), + kMemoryHistogramMin, kMemoryHistogramMax, + kMemoryHistogramBucketCount, + base::HistogramBase::kUmaTargetedHistogramFlag)); + } std::move(testing_callback).Run(); }
diff --git a/content/browser/gpu/peak_gpu_memory_tracker_impl_browsertest.cc b/content/browser/gpu/peak_gpu_memory_tracker_impl_browsertest.cc index 06c40cb..78fb5412 100644 --- a/content/browser/gpu/peak_gpu_memory_tracker_impl_browsertest.cc +++ b/content/browser/gpu/peak_gpu_memory_tracker_impl_browsertest.cc
@@ -17,6 +17,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "content/public/test/content_browser_test.h" +#include "gpu/ipc/common/gpu_peak_memory.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/viz/privileged/mojom/gl/gpu_service.mojom.h" @@ -46,6 +47,8 @@ GetPeakMemoryUsageCallback callback) override { base::flat_map<gpu::GpuPeakMemoryAllocationSource, uint64_t> allocation_per_source; + allocation_per_source[gpu::GpuPeakMemoryAllocationSource::UNKNOWN] = + kPeakMemory; std::move(callback).Run(kPeakMemory, allocation_per_source); } @@ -211,6 +214,8 @@ FlushRemoteForTesting(); // No report in response to creation. histogram.ExpectTotalCount("Memory.GPU.PeakMemoryUsage.PageLoad", 0); + histogram.ExpectTotalCount( + "Memory.GPU.PeakMemoryAllocationSource.PageLoad.Unknown", 0); // However the serive should have started monitoring. EXPECT_TRUE(gpu_service()->peak_memory_monitor_started()); @@ -223,6 +228,9 @@ run_loop.Run(); histogram.ExpectUniqueSample("Memory.GPU.PeakMemoryUsage.PageLoad", kPeakMemoryKB, 1); + histogram.ExpectUniqueSample( + "Memory.GPU.PeakMemoryAllocationSource.PageLoad.Unknown", kPeakMemoryKB, + 1); } } // namespace content
diff --git a/content/browser/indexed_db/indexed_db_context_impl.cc b/content/browser/indexed_db/indexed_db_context_impl.cc index ec305ca..29d3a71 100644 --- a/content/browser/indexed_db/indexed_db_context_impl.cc +++ b/content/browser/indexed_db/indexed_db_context_impl.cc
@@ -216,13 +216,15 @@ leveldb::Status s = IndexedDBClassFactory::Get()->leveldb_factory().DestroyLevelDB( idb_directory); - if (s.ok()) { - base::DeleteFileRecursively(GetBlobStorePath(origin)); + bool success = s.ok(); + if (success) + success = base::DeleteFileRecursively(GetBlobStorePath(origin)); + QueryDiskAndUpdateQuotaUsage(origin); + if (success) { GetOriginSet()->erase(origin); origin_size_map_.erase(origin); } - QueryDiskAndUpdateQuotaUsage(origin); - std::move(callback).Run(s.ok()); + std::move(callback).Run(success); } void IndexedDBContextImpl::ForceClose(const Origin& origin,
diff --git a/content/browser/indexed_db/indexed_db_context_impl.h b/content/browser/indexed_db/indexed_db_context_impl.h index 20402aa2..ab7b2ea7 100644 --- a/content/browser/indexed_db/indexed_db_context_impl.h +++ b/content/browser/indexed_db/indexed_db_context_impl.h
@@ -222,6 +222,9 @@ int64_t ReadUsageFromDisk(const url::Origin& origin) const; void EnsureDiskUsageCacheInitialized(const url::Origin& origin); + // Compares the disk usage stored in |origin_size_map_| with disk. If there + // is a difference, it updates |origin_size_map_| and notifies the quota + // system. void QueryDiskAndUpdateQuotaUsage(const url::Origin& origin); base::Time GetOriginLastModified(const url::Origin& origin);
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc index 24753d9..8694a2d 100644 --- a/content/browser/media/media_web_contents_observer.cc +++ b/content/browser/media/media_web_contents_observer.cc
@@ -150,6 +150,12 @@ return handled; } +void MediaWebContentsObserver::MediaPictureInPictureChanged( + bool is_picture_in_picture) { + session_controllers_manager_.PictureInPictureStateChanged( + is_picture_in_picture); +} + void MediaWebContentsObserver::DidUpdateAudioMutingState(bool muted) { session_controllers_manager_.WebContentsMutedStateChanged(muted); }
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h index f5f92952..36b7d7a7 100644 --- a/content/browser/media/media_web_contents_observer.h +++ b/content/browser/media/media_web_contents_observer.h
@@ -80,6 +80,7 @@ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override; bool OnMessageReceived(const IPC::Message& message, RenderFrameHost* render_frame_host) override; + void MediaPictureInPictureChanged(bool is_picture_in_picture) override; void DidUpdateAudioMutingState(bool muted) override; // TODO(zqzhang): this method is temporarily in MediaWebContentsObserver as
diff --git a/content/browser/media/session/media_session_controller.cc b/content/browser/media/session/media_session_controller.cc index c3755cf..087bfba6 100644 --- a/content/browser/media/session/media_session_controller.cc +++ b/content/browser/media/session/media_session_controller.cc
@@ -65,8 +65,7 @@ // Don't bother with a MediaSession for remote players or without audio. If // we already have a session from a previous call, release it. - if (!has_audio_ || is_remote || - media_web_contents_observer_->web_contents()->IsAudioMuted()) { + if (!IsMediaSessionNeeded()) { has_session_ = false; media_session_->RemovePlayer(this, player_id_); return true; @@ -155,19 +154,14 @@ media_session_->OnPlayerPaused(this, player_id_); } -void MediaSessionController::WebContentsMutedStateChanged(bool muted) { - if (!has_audio_ || is_remote_) - return; +void MediaSessionController::PictureInPictureStateChanged( + bool is_picture_in_picture) { + is_picture_in_picture_active_ = is_picture_in_picture; + AddOrRemovePlayer(); +} - // We want to make sure we do not request audio focus on a muted tab as it - // would break user expectations by pausing/ducking other playbacks. - if (!muted && !has_session_) { - if (media_session_->AddPlayer(this, player_id_, media_content_type_)) - has_session_ = true; - } else if (muted) { - has_session_ = false; - media_session_->RemovePlayer(this, player_id_); - } +void MediaSessionController::WebContentsMutedStateChanged(bool muted) { + AddOrRemovePlayer(); } void MediaSessionController::OnMediaPositionStateChanged( @@ -182,4 +176,24 @@ media_session_->OnPictureInPictureAvailabilityChanged(); } +bool MediaSessionController::IsMediaSessionNeeded() const { + // We want to make sure we do not request audio focus on a muted tab as it + // would break user expectations by pausing/ducking other playbacks. + const bool has_audio = + has_audio_ && + !media_web_contents_observer_->web_contents()->IsAudioMuted(); + return !is_remote_ && (has_audio || is_picture_in_picture_active_); +} + +void MediaSessionController::AddOrRemovePlayer() { + const bool needs_session = IsMediaSessionNeeded(); + if (needs_session && !has_session_) { + has_session_ = + media_session_->AddPlayer(this, player_id_, media_content_type_); + } else if (!needs_session && has_session_) { + has_session_ = false; + media_session_->RemovePlayer(this, player_id_); + } +} + } // namespace content
diff --git a/content/browser/media/session/media_session_controller.h b/content/browser/media/session/media_session_controller.h index 4f457a8..471936e 100644 --- a/content/browser/media/session/media_session_controller.h +++ b/content/browser/media/session/media_session_controller.h
@@ -64,6 +64,10 @@ // Test helpers. int get_player_id_for_testing() const { return player_id_; } + // Called when entering/leaving Picture-in-Picture for the given media + // player. + void PictureInPictureStateChanged(bool is_picture_in_picture); + // Called when the WebContents is either muted or unmuted. void WebContentsMutedStateChanged(bool muted); @@ -74,6 +78,12 @@ // Called when the media picture-in-picture availability has changed. void OnPictureInPictureAvailabilityChanged(bool available); + bool IsMediaSessionNeeded() const; + + // Determines whether a session is needed and adds or removes the player + // accordingly. + void AddOrRemovePlayer(); + private: friend class MediaSessionControllerTest; @@ -92,6 +102,7 @@ bool has_audio_ = false; bool is_remote_ = false; bool is_picture_in_picture_available_ = false; + bool is_picture_in_picture_active_ = false; media::MediaContentType media_content_type_ = media::MediaContentType::Persistent;
diff --git a/content/browser/media/session/media_session_controller_unittest.cc b/content/browser/media/session/media_session_controller_unittest.cc index baf0107..7781257 100644 --- a/content/browser/media/session/media_session_controller_unittest.cc +++ b/content/browser/media/session/media_session_controller_unittest.cc
@@ -66,6 +66,12 @@ multiplier); } + void SetWebContentsAudioMuted(bool muted) { + contents()->SetAudioMuted(muted); + // The following happens automatically in a running browser. + controller_->WebContentsMutedStateChanged(muted); + } + void ResetHasSessionBit() { controller_->has_session_ = false; } template <typename T> @@ -326,4 +332,102 @@ controller_->get_player_id_for_testing())); } +TEST_F(MediaSessionControllerTest, AddPlayerWhenUnmuted) { + SetWebContentsAudioMuted(true); + + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_FALSE(media_session()->IsActive()); + + SetWebContentsAudioMuted(false); + EXPECT_TRUE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, RemovePlayerWhenMuted) { + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_TRUE(media_session()->IsActive()); + + SetWebContentsAudioMuted(true); + EXPECT_FALSE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, EnterLeavePictureInPictureMuted) { + SetWebContentsAudioMuted(true); + + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_FALSE(media_session()->IsActive()); + + // Entering PictureInPicture means the user expects to control the media, so + // this should activate the session. + controller_->PictureInPictureStateChanged(true); + EXPECT_TRUE(media_session()->IsActive()); + + controller_->PictureInPictureStateChanged(false); + EXPECT_FALSE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, MuteWithPictureInPicture) { + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + controller_->PictureInPictureStateChanged(true); + ASSERT_TRUE(media_session()->IsActive()); + + SetWebContentsAudioMuted(true); + EXPECT_TRUE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, LeavePictureInPictureUnmuted) { + SetWebContentsAudioMuted(true); + + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_FALSE(media_session()->IsActive()); + + controller_->PictureInPictureStateChanged(true); + SetWebContentsAudioMuted(false); + + // Media was unmuted, so we now have audio focus, which should keep the + // session active. + controller_->PictureInPictureStateChanged(false); + EXPECT_TRUE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, AddPlayerWhenAddingAudio) { + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ false, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_FALSE(media_session()->IsActive()); + + EXPECT_TRUE(controller_->Initialize( + /* has_audio = */ true, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + EXPECT_TRUE(media_session()->IsActive()); +} + +TEST_F(MediaSessionControllerTest, + AddPlayerWhenEnteringPictureInPictureWithNoAudio) { + ASSERT_TRUE(controller_->Initialize( + /* has_audio = */ false, /* is_remote = */ false, + media::MediaContentType::Persistent, nullptr, + /* is_pip_available = */ true)); + ASSERT_FALSE(media_session()->IsActive()); + + controller_->PictureInPictureStateChanged(true); + EXPECT_TRUE(media_session()->IsActive()); +} + } // namespace content
diff --git a/content/browser/media/session/media_session_controllers_manager.cc b/content/browser/media/session/media_session_controllers_manager.cc index 686b7cb8..fd72a97 100644 --- a/content/browser/media/session/media_session_controllers_manager.cc +++ b/content/browser/media/session/media_session_controllers_manager.cc
@@ -120,6 +120,15 @@ it->second->OnMediaPositionStateChanged(position); } +void MediaSessionControllersManager::PictureInPictureStateChanged( + bool is_picture_in_picture) { + if (!IsMediaSessionEnabled()) + return; + + for (auto& entry : controllers_map_) + entry.second->PictureInPictureStateChanged(is_picture_in_picture); +} + void MediaSessionControllersManager::WebContentsMutedStateChanged(bool muted) { if (!IsMediaSessionEnabled()) return;
diff --git a/content/browser/media/session/media_session_controllers_manager.h b/content/browser/media/session/media_session_controllers_manager.h index 5d8eb76..bac172c 100644 --- a/content/browser/media/session/media_session_controllers_manager.h +++ b/content/browser/media/session/media_session_controllers_manager.h
@@ -64,6 +64,10 @@ const MediaPlayerId& id, const media_session::MediaPosition& position); + // Called when entering/leaving Picture-in-Picture for the given media + // player. + void PictureInPictureStateChanged(bool is_picture_in_picture); + // Called when the WebContents was muted or unmuted. void WebContentsMutedStateChanged(bool muted);
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc index 0579bfd8..9c65cae 100644 --- a/content/browser/renderer_host/compositor_impl_android.cc +++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -342,6 +342,9 @@ void CompositorImpl::SetSurface(jobject surface, bool can_be_used_with_surface_control) { + can_be_used_with_surface_control &= + !root_window_->ApplyDisableSurfaceControlWorkaround(); + JNIEnv* env = base::android::AttachCurrentThread(); gpu::GpuSurfaceTracker* tracker = gpu::GpuSurfaceTracker::Get();
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 495da83e..725b698a 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -90,6 +90,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_observer.h" +#include "ui/aura/window_tree_host.h" #include "ui/base/clipboard/clipboard.h" #include "ui/base/ime/init/input_method_factory.h" #include "ui/base/ime/input_method.h" @@ -497,7 +498,7 @@ aura_test_helper_.reset(new aura::test::AuraTestHelper()); aura_test_helper_->SetUp( ImageTransportFactory::GetInstance()->GetContextFactory()); - new wm::DefaultActivationClient(aura_test_helper_->root_window()); + new wm::DefaultActivationClient(aura_test_helper_->GetContext()); browser_context_.reset(new TestBrowserContext); process_host_ = new MockRenderProcessHost(browser_context_.get()); @@ -513,7 +514,7 @@ parent_view_ = new RenderWidgetHostViewAura(parent_host_); parent_view_->InitAsChild(nullptr); aura::client::ParentWindowWithContext(parent_view_->GetNativeView(), - aura_test_helper_->root_window(), + aura_test_helper_->GetContext(), gfx::Rect()); view_ = CreateView(); widget_host_ = static_cast<MockRenderWidgetHostImpl*>(view_->host()); @@ -2522,7 +2523,7 @@ // Device scale factor changes to 2, so the physical pixel sizes should // change, while the DIP sizes do not. - aura_test_helper_->test_screen()->SetDeviceScaleFactor(2.0f); + aura_test_helper_->GetTestScreen()->SetDeviceScaleFactor(2.0f); // Physical pixel size. EXPECT_EQ(gfx::Size(200, 200), view_->GetCompositorViewportPixelSize()); // Update to the renderer. @@ -2549,7 +2550,7 @@ } sink_->ClearMessages(); - aura_test_helper_->test_screen()->SetDeviceScaleFactor(1.0f); + aura_test_helper_->GetTestScreen()->SetDeviceScaleFactor(1.0f); // Physical pixel size. EXPECT_EQ(gfx::Size(100, 100), view_->GetCompositorViewportPixelSize()); @@ -2625,7 +2626,7 @@ // Changing the device scale factor updates the renderer. sink_->ClearMessages(); - aura_test_helper_->test_screen()->SetDeviceScaleFactor(2.0f); + aura_test_helper_->GetTestScreen()->SetDeviceScaleFactor(2.0f); // Update to the renderer. // TODO(samans): There should be only one message in the sink, but some @@ -2830,7 +2831,7 @@ } // Cause a conflicting viz::LocalSurfaceId allocation - aura_test_helper_->test_screen()->SetDeviceScaleFactor(2.0f); + aura_test_helper_->GetTestScreen()->SetDeviceScaleFactor(2.0f); viz::LocalSurfaceIdAllocation merged_local_surface_id_allocation( view_->GetLocalSurfaceIdAllocation()); EXPECT_NE(local_surface_id_allocation1, merged_local_surface_id_allocation); @@ -3135,7 +3136,7 @@ EXPECT_EQ(nullptr, view_->window_->layer()->GetOldestAcceptableFallback()); // Resizing should update the primary SurfaceId. - aura_test_helper_->test_screen()->SetDeviceScaleFactor(2.0f); + aura_test_helper_->GetTestScreen()->SetDeviceScaleFactor(2.0f); viz::SurfaceId new_surface_id = *view_->window_->layer()->GetSurfaceId(); EXPECT_NE(new_surface_id, initial_surface_id); EXPECT_EQ(gfx::Size(300, 300), view_->window_->layer()->bounds().size());
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc index e13ea0f8..c9361b5 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc
@@ -528,34 +528,50 @@ // SameSiteCookieContext in order to match up with the UMAs which are // recording similar information. // TODO(https://crbug.com/1046456): Remove after deprecated. + net::CookieOptions::SameSiteCookieContext same_site_context; switch (reason) { case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL: - return static_cast<int64_t>( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL); + same_site_context.context = net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX_METHOD_UNSAFE; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE; + return same_site_context.ConvertToMetricsValue(); case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_LAX_CROSS_SCHEME_SECURE_URL: - return static_cast<int64_t>(net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL); + same_site_context.context = + net::CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE; + return same_site_context.ConvertToMetricsValue(); case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_STRICT_CROSS_SCHEME_SECURE_URL: - return static_cast<int64_t>(net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL); + same_site_context.context = net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_STRICT; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE; + return same_site_context.ConvertToMetricsValue(); case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL: - return static_cast<int64_t>( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL); + same_site_context.context = net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX_METHOD_UNSAFE; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE; + return same_site_context.ConvertToMetricsValue(); case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_LAX_CROSS_SCHEME_INSECURE_URL: - return static_cast<int64_t>(net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL); + same_site_context.context = + net::CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE; + return same_site_context.ConvertToMetricsValue(); case net::CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_STRICT_CROSS_SCHEME_INSECURE_URL: - return static_cast<int64_t>( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL); + same_site_context.context = net::CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_STRICT; + same_site_context.cross_schemeness = net::CookieOptions:: + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE; + return same_site_context.ConvertToMetricsValue(); default: // Return invalid value if there is no cross-scheme warning. return -1;
diff --git a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc index 4f19f7eb..b3238701 100644 --- a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc +++ b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
@@ -23,8 +23,7 @@ // process and hence does not support capture: https://crbug.com/641559. #define MAYBE_CaptureFromMediaElement DISABLED_CaptureFromMediaElement #else -// crbug.com/769903: Disabling due to TSAN error. -#define MAYBE_CaptureFromMediaElement DISABLED_CaptureFromMediaElement +#define MAYBE_CaptureFromMediaElement CaptureFromMediaElement #endif namespace { @@ -125,16 +124,6 @@ IN_PROC_BROWSER_TEST_P(WebRtcCaptureFromElementBrowserTest, MAYBE_CaptureFromMediaElement) { -#if defined(OS_ANDROID) - // TODO(mcasas): flaky on Lollipop Low-End devices, investigate and reconnect - // https://crbug.com/626299 - if (base::SysInfo::IsLowEndDevice() && - base::android::BuildInfo::GetInstance()->sdk_int() < - base::android::SDK_VERSION_MARSHMALLOW) { - return; - } -#endif - MakeTypicalCall(JsReplace("testCaptureFromMediaElement($1, $2, $3, $4)", GetParam().filename, GetParam().has_video, GetParam().has_audio, GetParam().use_audio_tag),
diff --git a/content/browser/worker_host/worker_browsertest.cc b/content/browser/worker_host/worker_browsertest.cc index 2e84fdf..8a14128e 100644 --- a/content/browser/worker_host/worker_browsertest.cc +++ b/content/browser/worker_host/worker_browsertest.cc
@@ -155,7 +155,9 @@ cookie_manager.BindNewPipeAndPassReceiver()); net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX)); std::unique_ptr<net::CanonicalCookie> cookie = net::CanonicalCookie::Create( ssl_server_.GetURL(host, "/"), std::string(kSameSiteCookie) + "; SameSite=Lax; Secure",
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index e4d268c..e1d26e1 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -140,6 +140,9 @@ // Enables the Blink feature when the base::Feature is enabled, // otherwise no change. kEnableOnly, + // Enables the Blink feature when the base::Feature is enabled + // via an override on the command-line, otherwise no change. + kEnableOnlyIfOverriddenFromCommandLine, // Disables the Blink feature when the base::Feature is *disabled*, // otherwise no change. kDisableOnly, @@ -157,6 +160,34 @@ const RuntimeFeatureEnableOptions option; }; +template <typename Enabler> +void SetRuntimeFeatureFromChromiumFeature(const base::Feature& chromium_feature, + RuntimeFeatureEnableOptions option, + const Enabler& enabler) { + using FeatureList = base::FeatureList; + const bool feature_enabled = FeatureList::IsEnabled(chromium_feature); + switch (option) { + case kEnableOnly: + if (feature_enabled) + enabler(true); + break; + case kEnableOnlyIfOverriddenFromCommandLine: + if (FeatureList::GetInstance()->IsFeatureOverriddenFromCommandLine( + chromium_feature.name, FeatureList::OVERRIDE_ENABLE_FEATURE)) { + DCHECK(feature_enabled); + enabler(true); + } + break; + case kDisableOnly: + if (!feature_enabled) + enabler(false); + break; + case kUseFeatureState: + enabler(feature_enabled); + break; + } +} + // Sets blink runtime features that are either directly // controlled by Chromium base::Feature or are overridden // by base::Feature states. @@ -238,7 +269,8 @@ blink::features::kAllowSyncXHRInPageDismissal, kEnableOnly}, {wf::EnableAutoplayIgnoresWebAudio, media::kAutoplayIgnoreWebAudio, kUseFeatureState}, - {wf::EnablePortals, blink::features::kPortals, kEnableOnly}, + {wf::EnablePortals, blink::features::kPortals, + kEnableOnlyIfOverriddenFromCommandLine}, {wf::EnableImplicitRootScroller, blink::features::kImplicitRootScroller, kUseFeatureState}, {wf::EnableCSSOMViewScrollCoordinates, @@ -296,20 +328,8 @@ {wf::EnableTrustTokens, network::features::kTrustTokens, kEnableOnly}, }; for (const auto& mapping : blinkFeatureToBaseFeatureMapping) { - const bool featureEnabled = - base::FeatureList::IsEnabled(mapping.chromium_feature); - switch (mapping.option) { - case kEnableOnly: - if (featureEnabled) - mapping.feature_enabler(true); - break; - case kDisableOnly: - if (!featureEnabled) - mapping.feature_enabler(false); - break; - case kUseFeatureState: - mapping.feature_enabler(featureEnabled); - } + SetRuntimeFeatureFromChromiumFeature( + mapping.chromium_feature, mapping.option, mapping.feature_enabler); } // TODO(crbug/832393): Cleanup the inconsistency between custom WRF enabler @@ -357,20 +377,10 @@ }; for (const auto& mapping : runtimeFeatureNameToChromiumFeatureMapping) { - const bool featureEnabled = - base::FeatureList::IsEnabled(mapping.chromium_feature); - switch (mapping.option) { - case kEnableOnly: - if (featureEnabled) - wf::EnableFeatureFromString(mapping.feature_enabler, true); - break; - case kDisableOnly: - if (!featureEnabled) - wf::EnableFeatureFromString(mapping.feature_enabler, false); - break; - case kUseFeatureState: - wf::EnableFeatureFromString(mapping.feature_enabler, featureEnabled); - } + SetRuntimeFeatureFromChromiumFeature( + mapping.chromium_feature, mapping.option, [&mapping](bool enabled) { + wf::EnableFeatureFromString(mapping.feature_enabler, enabled); + }); } }
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 3d82c65e..e61ce1a8 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -359,6 +359,12 @@ const base::Feature kNotificationTriggers{"NotificationTriggers", base::FEATURE_ENABLED_BY_DEFAULT}; +// Origin Isolation, via a header. See https://crbug.com/1042415 +// Note that the origin policy-based variant of origin isolation is controlled +// by kOriginPolicy, instead. +const base::Feature kOriginIsolationHeader{"OriginIsolationHeader", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Origin Policy. See https://crbug.com/751996 const base::Feature kOriginPolicy{"OriginPolicy", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 3199d4c..88c9d75 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -85,6 +85,7 @@ CONTENT_EXPORT extern const base::Feature kNeverSlowMode; CONTENT_EXPORT extern const base::Feature kNotificationContentImage; CONTENT_EXPORT extern const base::Feature kNotificationTriggers; +CONTENT_EXPORT extern const base::Feature kOriginIsolationHeader; CONTENT_EXPORT extern const base::Feature kOriginPolicy; CONTENT_EXPORT extern const base::Feature kOverscrollHistoryNavigation; CONTENT_EXPORT extern const base::Feature kPassiveDocumentEventListeners;
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc index 43a903a..c8877972 100644 --- a/content/public/common/content_switch_dependent_feature_overrides.cc +++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -44,6 +44,9 @@ {switches::kEnableExperimentalWebPlatformFeatures, std::cref(features::kOriginPolicy), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, + {switches::kEnableExperimentalWebPlatformFeatures, + std::cref(features::kOriginIsolationHeader), + base::FeatureList::OVERRIDE_ENABLE_FEATURE}, {switches::kUseLegacyFormControls, std::cref(features::kFormControlsRefresh), base::FeatureList::OVERRIDE_DISABLE_FEATURE},
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index aa20fa5f..d7f88a8 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc
@@ -1879,7 +1879,7 @@ // Allow access to SameSite cookies in tests. net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->GetCookieList( url, options, base::BindOnce(
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h index b3d448b..8c2e90446 100644 --- a/content/public/test/browser_test_utils.h +++ b/content/public/test/browser_test_utils.h
@@ -840,28 +840,28 @@ bool ExecuteWebUIResourceTest(WebContents* web_contents, const std::vector<int>& js_resource_ids); -// Returns the serialized cookie string for the given url. Uses a strictly -// same-site SameSiteCookieContext by default, which gets cookies regardless of -// their SameSite attribute. +// Returns the serialized cookie string for the given url. Uses an inclusive +// SameSiteCookieContext by default, which gets cookies regardless of their +// SameSite attribute. std::string GetCookies( BrowserContext* browser_context, const GURL& url, net::CookieOptions::SameSiteCookieContext context = - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); // Returns the canonical cookies for the given url. std::vector<net::CanonicalCookie> GetCanonicalCookies( BrowserContext* browser_context, const GURL& url); -// Sets a cookie for the given url. Uses a strictly same-site -// SameSiteCookieContext by default, which gets cookies regardless of their -// SameSite attribute. Returns true on success. +// Sets a cookie for the given url. Uses an inclusive SameSiteCookieContext by +// default, which gets cookies regardless of their SameSite attribute. Returns +// true on success. bool SetCookie(BrowserContext* browser_context, const GURL& url, const std::string& value, net::CookieOptions::SameSiteCookieContext context = - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); // Fetch the histograms data from other processes. This should be called after // the test code has been executed but before performing assertions.
diff --git a/content/public/test/content_browser_test.cc b/content/public/test/content_browser_test.cc index d912fc4..58f7e17 100644 --- a/content/public/test/content_browser_test.cc +++ b/content/public/test/content_browser_test.cc
@@ -18,7 +18,6 @@ #include "content/shell/browser/shell_browser_context.h" #include "content/shell/browser/shell_content_browser_client.h" #include "content/shell/common/shell_switches.h" -#include "content/shell/renderer/web_test/web_test_content_renderer_client.h" #include "content/test/test_content_client.h" #include "ui/events/platform/platform_event_source.h" @@ -107,11 +106,9 @@ network_change_simulator.InitializeChromeosConnectionType(); #endif - if (!switches::IsRunWebTestsSwitchPresent()) { - CHECK_EQ(Shell::windows().size(), 1u); - shell_ = Shell::windows()[0]; - SetInitialWebContents(shell_->web_contents()); - } + CHECK_EQ(Shell::windows().size(), 1u); + shell_ = Shell::windows()[0]; + SetInitialWebContents(shell_->web_contents()); #if defined(OS_MACOSX) // On Mac, without the following autorelease pool, code which is directly
diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc index 819ecdf..f32c4e3 100644 --- a/content/public/test/test_renderer_host.cc +++ b/content/public/test/test_renderer_host.cc
@@ -246,7 +246,7 @@ aura_test_helper_.reset(new aura::test::AuraTestHelper()); aura_test_helper_->SetUp(context_factory); - new wm::DefaultActivationClient(aura_test_helper_->root_window()); + new wm::DefaultActivationClient(aura_test_helper_->GetContext()); #endif sanity_checker_.reset(new ContentBrowserSanityChecker());
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h index 136abb4..5517e89 100644 --- a/content/public/test/test_renderer_host.h +++ b/content/public/test/test_renderer_host.h
@@ -254,7 +254,7 @@ BrowserTaskEnvironment* task_environment() { return task_environment_.get(); } #if defined(USE_AURA) - aura::Window* root_window() { return aura_test_helper_->root_window(); } + aura::Window* root_window() { return aura_test_helper_->GetContext(); } #endif // Replaces the RPH being used.
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc index 0d39230..c6c80b3 100644 --- a/content/renderer/accessibility/blink_ax_tree_source.cc +++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -509,7 +509,6 @@ // Skip table headers and columns, they're only needed on Mac // and soon we'll get rid of this code entirely. if (child.Role() == ax::mojom::Role::kColumn || - child.Role() == ax::mojom::Role::kLayoutTableColumn || child.Role() == ax::mojom::Role::kTableHeaderContainer) continue;
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc index b7ddbc7..56cd1f3 100644 --- a/content/shell/app/shell_main_delegate.cc +++ b/content/shell/app/shell_main_delegate.cc
@@ -298,8 +298,6 @@ #endif } - if (switches::IsRunWebTestsSwitchPresent()) - content_client_->SetInWebTest(true); return false; }
diff --git a/content/shell/browser/web_test/web_test_client_impl.cc b/content/shell/browser/web_test/web_test_client_impl.cc index 40484ee..0f26dc5 100644 --- a/content/shell/browser/web_test/web_test_client_impl.cc +++ b/content/shell/browser/web_test/web_test_client_impl.cc
@@ -27,7 +27,7 @@ #include "content/shell/test_runner/web_test_delegate.h" #include "content/test/mock_platform_notification_service.h" #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "mojo/public/cpp/bindings/self_owned_associated_receiver.h" #include "services/network/public/mojom/network_service.mojom.h" #include "storage/browser/database/database_tracker.h" #include "storage/browser/file_system/isolated_context.h" @@ -83,8 +83,8 @@ storage::QuotaManager* quota_manager, storage::DatabaseTracker* database_tracker, network::mojom::NetworkContext* network_context, - mojo::PendingReceiver<mojom::WebTestClient> receiver) { - mojo::MakeSelfOwnedReceiver( + mojo::PendingAssociatedReceiver<mojom::WebTestClient> receiver) { + mojo::MakeSelfOwnedAssociatedReceiver( std::make_unique<WebTestClientImpl>(render_process_id, quota_manager, database_tracker, network_context), std::move(receiver));
diff --git a/content/shell/browser/web_test/web_test_client_impl.h b/content/shell/browser/web_test/web_test_client_impl.h index 4abc9978..9d5fd85 100644 --- a/content/shell/browser/web_test/web_test_client_impl.h +++ b/content/shell/browser/web_test/web_test_client_impl.h
@@ -9,7 +9,7 @@ #include "base/macros.h" #include "content/shell/common/web_test.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/cookie_manager.mojom.h" @@ -32,11 +32,12 @@ // initialized and is managed by the registry of the RenderProcessHost. class WebTestClientImpl : public mojom::WebTestClient { public: - static void Create(int render_process_id, - storage::QuotaManager* quota_manager, - storage::DatabaseTracker* database_tracker, - network::mojom::NetworkContext* network_context, - mojo::PendingReceiver<mojom::WebTestClient> receiver); + static void Create( + int render_process_id, + storage::QuotaManager* quota_manager, + storage::DatabaseTracker* database_tracker, + network::mojom::NetworkContext* network_context, + mojo::PendingAssociatedReceiver<mojom::WebTestClient> receiver); WebTestClientImpl(int render_process_id, storage::QuotaManager* quota_manager,
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc index 4cb52a0..21d8a74 100644 --- a/content/shell/browser/web_test/web_test_content_browser_client.cc +++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
@@ -157,14 +157,6 @@ registry->AddInterface( base::BindRepeating(&WebTestBluetoothFakeAdapterSetterImpl::Create), ui_task_runner); - StoragePartition* partition = - BrowserContext::GetDefaultStoragePartition(browser_context()); - registry->AddInterface(base::BindRepeating(&WebTestClientImpl::Create, - render_process_host->GetID(), - partition->GetQuotaManager(), - partition->GetDatabaseTracker(), - partition->GetNetworkContext()), - ui_task_runner); registry->AddInterface(base::BindRepeating(&bluetooth::FakeBluetooth::Create), ui_task_runner); // This class outlives |render_process_host|, which owns |registry|. Since @@ -192,6 +184,13 @@ associated_registry->AddInterface( base::BindRepeating(&WebTestContentBrowserClient::BindBlinkTestController, base::Unretained(this))); + StoragePartition* partition = + BrowserContext::GetDefaultStoragePartition(browser_context()); + associated_registry->AddInterface(base::BindRepeating( + &WebTestContentBrowserClient::BindWebTestController, + base::Unretained(this), render_process_host->GetID(), + partition->GetQuotaManager(), partition->GetDatabaseTracker(), + partition->GetNetworkContext())); } void WebTestContentBrowserClient::BindClientHintsControllerDelegate( @@ -412,4 +411,14 @@ BlinkTestController::Get()->AddBlinkTestClientReceiver(std::move(receiver)); } +void WebTestContentBrowserClient::BindWebTestController( + int render_process_id, + storage::QuotaManager* quota_manager, + storage::DatabaseTracker* database_tracker, + network::mojom::NetworkContext* network_context, + mojo::PendingAssociatedReceiver<mojom::WebTestClient> receiver) { + WebTestClientImpl::Create(render_process_id, quota_manager, database_tracker, + network_context, std::move(receiver)); +} + } // namespace content
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.h b/content/shell/browser/web_test/web_test_content_browser_client.h index e8b25e58..1f2c92d 100644 --- a/content/shell/browser/web_test/web_test_content_browser_client.h +++ b/content/shell/browser/web_test/web_test_content_browser_client.h
@@ -12,6 +12,7 @@ #include "content/public/common/client_hints.mojom.h" #include "content/shell/browser/shell_content_browser_client.h" #include "content/shell/common/blink_test.mojom-forward.h" +#include "content/shell/common/web_test.mojom-forward.h" #include "content/shell/common/web_test/fake_bluetooth_chooser.mojom-forward.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -20,6 +21,17 @@ #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h" #include "third_party/blink/public/mojom/permissions/permission_automation.mojom-forward.h" +namespace network { +namespace mojom { +class NetworkContext; +} // namespace mojom +} // namespace network + +namespace storage { +class DatabaseTracker; +class QuotaManager; +} // namespace storage + namespace content { class FakeBluetoothChooser; @@ -114,6 +126,13 @@ void BindBlinkTestController( mojo::PendingAssociatedReceiver<mojom::BlinkTestClient> receiver); + void BindWebTestController( + int render_process_id, + storage::QuotaManager* quota_manager, + storage::DatabaseTracker* database_tracker, + network::mojom::NetworkContext* network_context, + mojo::PendingAssociatedReceiver<mojom::WebTestClient> receiver); + std::unique_ptr<MockPlatformNotificationService> mock_platform_notification_service_; bool block_popups_ = false;
diff --git a/content/shell/common/shell_content_client.cc b/content/shell/common/shell_content_client.cc index 07714de..0c42f2e 100644 --- a/content/shell/common/shell_content_client.cc +++ b/content/shell/common/shell_content_client.cc
@@ -78,8 +78,4 @@ return &origin_trial_policy_; } -void ShellContentClient::SetInWebTest(bool in_web_test) { - in_web_test_ = in_web_test; -} - } // namespace content
diff --git a/content/shell/common/shell_content_client.h b/content/shell/common/shell_content_client.h index bf8b686..96cd5fb 100644 --- a/content/shell/common/shell_content_client.h +++ b/content/shell/common/shell_content_client.h
@@ -27,11 +27,8 @@ base::DictionaryValue GetNetLogConstants() override; blink::OriginTrialPolicy* GetOriginTrialPolicy() override; - void SetInWebTest(bool in_web_test); - private: ShellOriginTrialPolicy origin_trial_policy_; - bool in_web_test_ = false; }; } // namespace content
diff --git a/content/shell/renderer/web_test/blink_test_runner.cc b/content/shell/renderer/web_test/blink_test_runner.cc index c9078d2..e5b6ad6 100644 --- a/content/shell/renderer/web_test/blink_test_runner.cc +++ b/content/shell/renderer/web_test/blink_test_runner.cc
@@ -205,7 +205,7 @@ for (auto& filename : absolute_filenames) files.push_back(blink::WebStringToFilePath(filename)); std::string filesystem_id; - GetWebTestClientRemote().RegisterIsolatedFileSystem(files, &filesystem_id); + GetWebTestClientRemote()->RegisterIsolatedFileSystem(files, &filesystem_id); return WebString::FromUTF8(filesystem_id); } @@ -276,32 +276,32 @@ } void BlinkTestRunner::InspectSecondaryWindow() { - GetWebTestClientRemote().InspectSecondaryWindow(); + GetWebTestClientRemote()->InspectSecondaryWindow(); } void BlinkTestRunner::ClearAllDatabases() { - GetWebTestClientRemote().ClearAllDatabases(); + GetWebTestClientRemote()->ClearAllDatabases(); } void BlinkTestRunner::SetDatabaseQuota(int quota) { - GetWebTestClientRemote().SetDatabaseQuota(quota); + GetWebTestClientRemote()->SetDatabaseQuota(quota); } void BlinkTestRunner::SimulateWebNotificationClick( const std::string& title, const base::Optional<int>& action_index, const base::Optional<base::string16>& reply) { - GetWebTestClientRemote().SimulateWebNotificationClick( + GetWebTestClientRemote()->SimulateWebNotificationClick( title, action_index.value_or(std::numeric_limits<int32_t>::min()), reply); } void BlinkTestRunner::SimulateWebNotificationClose(const std::string& title, bool by_user) { - GetWebTestClientRemote().SimulateWebNotificationClose(title, by_user); + GetWebTestClientRemote()->SimulateWebNotificationClose(title, by_user); } void BlinkTestRunner::SimulateWebContentIndexDelete(const std::string& id) { - GetWebTestClientRemote().SimulateWebContentIndexDelete(id); + GetWebTestClientRemote()->SimulateWebContentIndexDelete(id); } void BlinkTestRunner::SetDeviceScaleFactor(float factor) { @@ -362,7 +362,7 @@ } void BlinkTestRunner::SetBlockThirdPartyCookies(bool block) { - GetWebTestClientRemote().BlockThirdPartyCookies(block); + GetWebTestClientRemote()->BlockThirdPartyCookies(block); } std::string BlinkTestRunner::PathToLocalResource(const std::string& resource) { @@ -394,12 +394,12 @@ base::FilePath BlinkTestRunner::GetWritableDirectory() { base::FilePath result; - GetWebTestClientRemote().GetWritableDirectory(&result); + GetWebTestClientRemote()->GetWritableDirectory(&result); return result; } void BlinkTestRunner::SetFilePathForMockFileDialog(const base::FilePath& path) { - GetWebTestClientRemote().SetFilePathForMockFileDialog(path); + GetWebTestClientRemote()->SetFilePathForMockFileDialog(path); } void BlinkTestRunner::OnWebTestRuntimeFlagsChanged( @@ -412,7 +412,7 @@ if (!interfaces->TestIsRunning()) return; - GetWebTestClientRemote().WebTestRuntimeFlagsChanged(changed_values.Clone()); + GetWebTestClientRemote()->WebTestRuntimeFlagsChanged(changed_values.Clone()); } void BlinkTestRunner::TestFinished() { @@ -427,7 +427,7 @@ // If we're not in the main frame, then ask the browser to redirect the call // to the main frame instead. if (!is_main_window_ || !render_view()->GetMainRenderFrame()) { - GetWebTestClientRemote().TestFinishedInSecondaryRenderer(); + GetWebTestClientRemote()->TestFinishedInSecondaryRenderer(); return; } @@ -448,7 +448,7 @@ if (interfaces->TestRunner()->ShouldDumpAsAudio()) { CaptureLocalAudioDump(); - GetWebTestClientRemote().InitiateCaptureDump( + GetWebTestClientRemote()->InitiateCaptureDump( browser_should_dump_back_forward_list, /*browser_should_capture_pixels=*/false); return; @@ -461,7 +461,7 @@ CaptureLocalLayoutDump(); if (!interfaces->TestRunner()->ShouldGeneratePixelResults()) { - GetWebTestClientRemote().InitiateCaptureDump( + GetWebTestClientRemote()->InitiateCaptureDump( browser_should_dump_back_forward_list, /*browser_should_capture_pixels=*/false); return; @@ -481,7 +481,7 @@ web_frame->GetSelectionBoundsRectForTesting(); } } - GetWebTestClientRemote().InitiateCaptureDump( + GetWebTestClientRemote()->InitiateCaptureDump( browser_should_dump_back_forward_list, !interfaces->TestRunner()->CanDumpPixelsFromRenderer()); } @@ -573,7 +573,7 @@ } void BlinkTestRunner::DeleteAllCookies() { - GetWebTestClientRemote().DeleteAllCookies(); + GetWebTestClientRemote()->DeleteAllCookies(); } int BlinkTestRunner::NavigationEntryCount() { @@ -608,12 +608,12 @@ const std::string& value, const GURL& origin, const GURL& embedding_origin) { - GetWebTestClientRemote().SetPermission(name, blink::ToPermissionStatus(value), - origin, embedding_origin); + GetWebTestClientRemote()->SetPermission( + name, blink::ToPermissionStatus(value), origin, embedding_origin); } void BlinkTestRunner::ResetPermissions() { - GetWebTestClientRemote().ResetPermissions(); + GetWebTestClientRemote()->ResetPermissions(); } void BlinkTestRunner::DispatchBeforeInstallPromptEvent( @@ -747,12 +747,20 @@ blink_test_client_remote_.reset(); } -mojom::WebTestClient& BlinkTestRunner::GetWebTestClientRemote() { +mojo::AssociatedRemote<mojom::WebTestClient>& +BlinkTestRunner::GetWebTestClientRemote() { if (!web_test_client_remote_) { - RenderThread::Get()->BindHostReceiver( - web_test_client_remote_.BindNewPipeAndPassReceiver()); + RenderThread::Get()->GetChannel()->GetRemoteAssociatedInterface( + &web_test_client_remote_); + web_test_client_remote_.set_disconnect_handler( + base::BindOnce(&BlinkTestRunner::HandleWebTestClientDisconnected, + base::Unretained(this))); } - return *web_test_client_remote_; + return web_test_client_remote_; +} + +void BlinkTestRunner::HandleWebTestClientDisconnected() { + web_test_client_remote_.reset(); } void BlinkTestRunner::OnSetupSecondaryRenderer() {
diff --git a/content/shell/renderer/web_test/blink_test_runner.h b/content/shell/renderer/web_test/blink_test_runner.h index 20a530c..8c01df6d 100644 --- a/content/shell/renderer/web_test/blink_test_runner.h +++ b/content/shell/renderer/web_test/blink_test_runner.h
@@ -186,8 +186,9 @@ mojo::AssociatedRemote<mojom::BlinkTestClient>& GetBlinkTestClientRemote(); mojo::AssociatedRemote<mojom::BlinkTestClient> blink_test_client_remote_; - mojom::WebTestClient& GetWebTestClientRemote(); - mojo::Remote<mojom::WebTestClient> web_test_client_remote_; + void HandleWebTestClientDisconnected(); + mojo::AssociatedRemote<mojom::WebTestClient>& GetWebTestClientRemote(); + mojo::AssociatedRemote<mojom::WebTestClient> web_test_client_remote_; test_runner::TestPreferences prefs_;
diff --git a/content/shell/test_runner/web_ax_object_proxy.cc b/content/shell/test_runner/web_ax_object_proxy.cc index 203e5c7..52e83bc 100644 --- a/content/shell/test_runner/web_ax_object_proxy.cc +++ b/content/shell/test_runner/web_ax_object_proxy.cc
@@ -226,8 +226,6 @@ return result.append("LayoutTable"); case ax::mojom::Role::kLayoutTableCell: return result.append("LayoutTableCell"); - case ax::mojom::Role::kLayoutTableColumn: - return result.append("LayoutTableColumn"); case ax::mojom::Role::kLayoutTableRow: return result.append("LayoutTableRow"); case ax::mojom::Role::kLegend:
diff --git a/content/test/data/accessibility/aom/aom-busy-expected-blink.txt b/content/test/data/accessibility/aom/aom-busy-expected-blink.txt index dbc2bc6..b804b9d4 100644 --- a/content/test/data/accessibility/aom/aom-busy-expected-blink.txt +++ b/content/test/data/accessibility/aom/aom-busy-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++genericContainer busy=true -++++genericContainer busy=true +++++genericContainer ignored +++++++genericContainer +++++++genericContainer busy=true +++++++genericContainer busy=true
diff --git a/content/test/data/accessibility/aom/aom-checked-expected-blink.txt b/content/test/data/accessibility/aom/aom-checked-expected-blink.txt index 2e10ecb..9a2cbd1 100644 --- a/content/test/data/accessibility/aom/aom-checked-expected-blink.txt +++ b/content/test/data/accessibility/aom/aom-checked-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++checkBox checkedState=false -++++checkBox checkedState=false -++++checkBox checkedState=false -++++checkBox checkedState=false +++++genericContainer ignored +++++++checkBox checkedState=false +++++++checkBox checkedState=false +++++++checkBox checkedState=false +++++++checkBox checkedState=false
diff --git a/content/test/data/accessibility/aria/annotation-roles-expected-blink.txt b/content/test/data/accessibility/aria/annotation-roles-expected-blink.txt index 40126fbb..c1e65ba 100644 --- a/content/test/data/accessibility/aria/annotation-roles-expected-blink.txt +++ b/content/test/data/accessibility/aria/annotation-roles-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++comment name='comment' -++++suggestion name='suggestion' -++++paragraph -++++++staticText name='This is ' -++++++++inlineTextBox name='This is ' -++++++mark -++++++++staticText name='highlighted' -++++++++++inlineTextBox name='highlighted' -++++++staticText name='.' -++++++++inlineTextBox name='.' +++++genericContainer ignored +++++++comment name='comment' +++++++suggestion name='suggestion' +++++++paragraph +++++++++staticText name='This is ' +++++++++++inlineTextBox name='This is ' +++++++++mark +++++++++++staticText name='highlighted' +++++++++++++inlineTextBox name='highlighted' +++++++++staticText name='.' +++++++++++inlineTextBox name='.'
diff --git a/content/test/data/accessibility/aria/aria-alert-expected-blink.txt b/content/test/data/accessibility/aria/aria-alert-expected-blink.txt index ee3f576..f77aec3 100644 --- a/content/test/data/accessibility/aria/aria-alert-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-alert-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++alert liveStatus='assertive' containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for aria role="alert"' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for aria role="alert"' +++++genericContainer ignored +++++++alert liveStatus='assertive' containerLiveAtomic=true liveAtomic=true +++++++++staticText name='This test is for aria role="alert"' containerLiveAtomic=true +++++++++++inlineTextBox name='This test is for aria role="alert"'
diff --git a/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt b/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt index 8ec05de..9437cb3 100644 --- a/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-alertdialog-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++alertDialog +++++genericContainer ignored +++++++alertDialog
diff --git a/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt b/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt index b5a7908c..b0cc29b 100644 --- a/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-any-unignored-expected-blink.txt
@@ -1,13 +1,14 @@ rootWebArea ++genericContainer ignored -++++paragraph -++++++staticText name='Hi ' -++++++++inlineTextBox name='Hi ' -++++++staticText name='ignored span' -++++++++inlineTextBox name='ignored span' -++++paragraph -++++++staticText name='Hi ' -++++++++inlineTextBox name='Hi ' -++++++genericContainer -++++++++staticText name='unignored span' -++++++++++inlineTextBox name='unignored span' +++++genericContainer ignored +++++++paragraph +++++++++staticText name='Hi ' +++++++++++inlineTextBox name='Hi ' +++++++++staticText name='ignored span' +++++++++++inlineTextBox name='ignored span' +++++++paragraph +++++++++staticText name='Hi ' +++++++++++inlineTextBox name='Hi ' +++++++++genericContainer +++++++++++staticText name='unignored span' +++++++++++++inlineTextBox name='unignored span'
diff --git a/content/test/data/accessibility/aria/aria-application-expected-blink.txt b/content/test/data/accessibility/aria/aria-application-expected-blink.txt index d761c38..3ecd4c5 100644 --- a/content/test/data/accessibility/aria/aria-application-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-application-expected-blink.txt
@@ -1,2 +1,3 @@ rootWebArea -++application +++genericContainer ignored +++++application
diff --git a/content/test/data/accessibility/aria/aria-article-expected-blink.txt b/content/test/data/accessibility/aria/aria-article-expected-blink.txt index 65b1930..6889fcec 100644 --- a/content/test/data/accessibility/aria/aria-article-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-article-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++article -++++++staticText name='This is an ARIA article.' -++++++++inlineTextBox name='This is an ARIA article.' +++++genericContainer ignored +++++++article +++++++++staticText name='This is an ARIA article.' +++++++++++inlineTextBox name='This is an ARIA article.'
diff --git a/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt b/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt index 789b1d6..ba24985 100644 --- a/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-article-posinset-setsize-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++article setSize=0 posInSet=0 -++++++staticText name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' -++++++++inlineTextBox name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' -++++feed setSize=5 -++++++article setSize=5 posInSet=4 -++++++article setSize=5 posInSet=5 +++++genericContainer ignored +++++++article setSize=0 posInSet=0 +++++++++staticText name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' +++++++++++inlineTextBox name='ARIA Articles outside of feeds should have PosInSet and SetSize of 0.' +++++++feed setSize=5 +++++++++article setSize=5 posInSet=4 +++++++++article setSize=5 posInSet=5
diff --git a/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt b/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt index d817194..c668f2e 100644 --- a/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-atomic-expected-blink.txt
@@ -1,14 +1,15 @@ rootWebArea ++genericContainer ignored -++++log -++++++staticText name='This test is for aria-atomic="false"' -++++++++inlineTextBox name='This test is for aria-atomic="false"' -++++log containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for aria-atomic="true"' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for aria-atomic="true"' -++++alert containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for alert.' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for alert.' -++++status containerLiveAtomic=true liveAtomic=true -++++++staticText name='This test is for status.' containerLiveAtomic=true -++++++++inlineTextBox name='This test is for status.' +++++genericContainer ignored +++++++log +++++++++staticText name='This test is for aria-atomic="false"' +++++++++++inlineTextBox name='This test is for aria-atomic="false"' +++++++log containerLiveAtomic=true liveAtomic=true +++++++++staticText name='This test is for aria-atomic="true"' containerLiveAtomic=true +++++++++++inlineTextBox name='This test is for aria-atomic="true"' +++++++alert containerLiveAtomic=true liveAtomic=true +++++++++staticText name='This test is for alert.' containerLiveAtomic=true +++++++++++inlineTextBox name='This test is for alert.' +++++++status containerLiveAtomic=true liveAtomic=true +++++++++staticText name='This test is for status.' containerLiveAtomic=true +++++++++++inlineTextBox name='This test is for status.'
diff --git a/content/test/data/accessibility/aria/aria-autocomplete-expected-blink.txt b/content/test/data/accessibility/aria/aria-autocomplete-expected-blink.txt index 83b614c..7c706061 100644 --- a/content/test/data/accessibility/aria/aria-autocomplete-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-autocomplete-expected-blink.txt
@@ -1,22 +1,23 @@ rootWebArea -++genericContainer -++++textFieldWithComboBox autoComplete='inline' value='autocomplete=inline' haspopup=listbox -++++++genericContainer -++++++++staticText name='autocomplete=inline' -++++++++++inlineTextBox name='autocomplete=inline' -++++textFieldWithComboBox autoComplete='list' value='autocomplete=list' haspopup=listbox -++++++genericContainer -++++++++staticText name='autocomplete=list' -++++++++++inlineTextBox name='autocomplete=list' -++++textFieldWithComboBox autoComplete='both' value='autocomplete=both' haspopup=listbox -++++++genericContainer -++++++++staticText name='autocomplete=both' -++++++++++inlineTextBox name='autocomplete=both' -++++textFieldWithComboBox value='autocomplete=none' haspopup=listbox -++++++genericContainer -++++++++staticText name='autocomplete=none' -++++++++++inlineTextBox name='autocomplete=none' -++++textField autoComplete='inline' value='No role with autocomplete=inline' -++++++genericContainer -++++++++staticText name='No role with autocomplete=inline' -++++++++++inlineTextBox name='No role with autocomplete=inline' +++genericContainer ignored +++++genericContainer +++++++textFieldWithComboBox autoComplete='inline' value='autocomplete=inline' haspopup=listbox +++++++++genericContainer +++++++++++staticText name='autocomplete=inline' +++++++++++++inlineTextBox name='autocomplete=inline' +++++++textFieldWithComboBox autoComplete='list' value='autocomplete=list' haspopup=listbox +++++++++genericContainer +++++++++++staticText name='autocomplete=list' +++++++++++++inlineTextBox name='autocomplete=list' +++++++textFieldWithComboBox autoComplete='both' value='autocomplete=both' haspopup=listbox +++++++++genericContainer +++++++++++staticText name='autocomplete=both' +++++++++++++inlineTextBox name='autocomplete=both' +++++++textFieldWithComboBox value='autocomplete=none' haspopup=listbox +++++++++genericContainer +++++++++++staticText name='autocomplete=none' +++++++++++++inlineTextBox name='autocomplete=none' +++++++textField autoComplete='inline' value='No role with autocomplete=inline' +++++++++genericContainer +++++++++++staticText name='No role with autocomplete=inline' +++++++++++++inlineTextBox name='No role with autocomplete=inline'
diff --git a/content/test/data/accessibility/aria/aria-banner-expected-blink.txt b/content/test/data/accessibility/aria/aria-banner-expected-blink.txt index acaa5ef..133306d 100644 --- a/content/test/data/accessibility/aria/aria-banner-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-banner-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++banner -++++++staticText name='Chromium Browser' -++++++++inlineTextBox name='Chromium Browser' +++++genericContainer ignored +++++++banner +++++++++staticText name='Chromium Browser' +++++++++++inlineTextBox name='Chromium Browser'
diff --git a/content/test/data/accessibility/aria/aria-busy-expected-blink.txt b/content/test/data/accessibility/aria/aria-busy-expected-blink.txt index 9377d228..f6643da 100644 --- a/content/test/data/accessibility/aria/aria-busy-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-busy-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++log name='Busy log' busy=true containerLiveBusy=true -++++log name='Not-busy log' containerLiveBusy=false -++++genericContainer name='plain div' busy=true +++++genericContainer ignored +++++++log name='Busy log' busy=true containerLiveBusy=true +++++++log name='Not-busy log' containerLiveBusy=false +++++++genericContainer name='plain div' busy=true
diff --git a/content/test/data/accessibility/aria/aria-button-expected-blink.txt b/content/test/data/accessibility/aria/aria-button-expected-blink.txt index f3f4ced..a6b12af7 100644 --- a/content/test/data/accessibility/aria/aria-button-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-button-expected-blink.txt
@@ -1,26 +1,27 @@ rootWebArea ++genericContainer ignored -++++button name='Button1' -++++++staticText name='Button1' -++++++++inlineTextBox name='Button1' -++++toggleButton name='Button2' checkedState=true -++++toggleButton name='Button3' checkedState=false -++++popUpButton name='Button4' haspopup=menu -++++button name='Button5' -++++++staticText name='Button5' -++++++++inlineTextBox name='Button5' -++++button name='Complex button ' -++++++staticText name='Complex button ' -++++++++inlineTextBox name='Complex button ' -++++++textField -++++++++genericContainer -++++toggleButton name='Complex toggle button ' checkedState=true -++++++staticText name='Complex toggle button ' -++++++++inlineTextBox name='Complex toggle button ' -++++++textField -++++++++genericContainer -++++popUpButton name='Complex pop up button ' haspopup=menu -++++++staticText name='Complex pop up button ' -++++++++inlineTextBox name='Complex pop up button ' -++++++textField -++++++++genericContainer +++++genericContainer ignored +++++++button name='Button1' +++++++++staticText name='Button1' +++++++++++inlineTextBox name='Button1' +++++++toggleButton name='Button2' checkedState=true +++++++toggleButton name='Button3' checkedState=false +++++++popUpButton name='Button4' haspopup=menu +++++++button name='Button5' +++++++++staticText name='Button5' +++++++++++inlineTextBox name='Button5' +++++++button name='Complex button ' +++++++++staticText name='Complex button ' +++++++++++inlineTextBox name='Complex button ' +++++++++textField +++++++++++genericContainer +++++++toggleButton name='Complex toggle button ' checkedState=true +++++++++staticText name='Complex toggle button ' +++++++++++inlineTextBox name='Complex toggle button ' +++++++++textField +++++++++++genericContainer +++++++popUpButton name='Complex pop up button ' haspopup=menu +++++++++staticText name='Complex pop up button ' +++++++++++inlineTextBox name='Complex pop up button ' +++++++++textField +++++++++++genericContainer
diff --git a/content/test/data/accessibility/aria/aria-cell-expected-blink.txt b/content/test/data/accessibility/aria/aria-cell-expected-blink.txt index fb46664..c970851e 100644 --- a/content/test/data/accessibility/aria/aria-cell-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-cell-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++++genericContainer ignored +++++++table +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt index 0ad84d1..7faa569 100644 --- a/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-checkbox-expected-blink.txt
@@ -1,13 +1,14 @@ rootWebArea ++genericContainer ignored -++++checkBox name='CheckBox1' checkedState=true -++++checkBox name='CheckBox2' checkedState=false -++++checkBox name='CheckBox3' checkedState=mixed -++++checkBox name='CheckBox4' checkedState=false -++++checkBox name='Complex checkbox' checkedState=false -++++++staticText name='Complex ' -++++++++inlineTextBox name='Complex ' -++++++textField -++++++++genericContainer -++++++staticText name=' checkbox' -++++++++inlineTextBox name=' checkbox' +++++genericContainer ignored +++++++checkBox name='CheckBox1' checkedState=true +++++++checkBox name='CheckBox2' checkedState=false +++++++checkBox name='CheckBox3' checkedState=mixed +++++++checkBox name='CheckBox4' checkedState=false +++++++checkBox name='Complex checkbox' checkedState=false +++++++++staticText name='Complex ' +++++++++++inlineTextBox name='Complex ' +++++++++textField +++++++++++genericContainer +++++++++staticText name=' checkbox' +++++++++++inlineTextBox name=' checkbox'
diff --git a/content/test/data/accessibility/aria/aria-checked-expected-blink.txt b/content/test/data/accessibility/aria/aria-checked-expected-blink.txt index 88b737c..536b1d2 100644 --- a/content/test/data/accessibility/aria/aria-checked-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-checked-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++checkBox checkedState=true -++++checkBox checkedState=false -++++checkBox checkedState=mixed +++++genericContainer ignored +++++++checkBox checkedState=true +++++++checkBox checkedState=false +++++++checkBox checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-code-expected-blink.txt b/content/test/data/accessibility/aria/aria-code-expected-blink.txt index ee56216..749e06dc 100644 --- a/content/test/data/accessibility/aria/aria-code-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-code-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++code -++++++staticText name='role' -++++++++inlineTextBox name='role' -++++staticText name='element (no name)' -++++++inlineTextBox name='element (no name)' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++code name='include me' -++++++staticText name='element (with name)' -++++++++inlineTextBox name='element (with name)' +++++genericContainer ignored +++++++code +++++++++staticText name='role' +++++++++++inlineTextBox name='role' +++++++staticText name='element (no name)' +++++++++inlineTextBox name='element (no name)' +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++code name='include me' +++++++++staticText name='element (with name)' +++++++++++inlineTextBox name='element (with name)'
diff --git a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt index 7b7dec6c..382e3c15 100644 --- a/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-col-attr-expected-blink.txt
@@ -1,26 +1,27 @@ rootWebArea ++genericContainer ignored -++++grid ariaColumnCount=5 -++++++row -++++++++columnHeader name='cell 2' ariaCellColumnIndex=2 ariaCellColumnSpan=2 -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++columnHeader name='cell 4' ariaCellColumnIndex=4 -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++++columnHeader name='cell 5' ariaCellColumnIndex=5 -++++++++++staticText name='cell 5' -++++++++++++inlineTextBox name='cell 5' -++++++row ariaCellColumnIndex=2 -++++++++cell name='cell 2' ariaCellColumnIndex=2 -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++cell name='cell 3' ariaCellColumnIndex=3 -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' -++++++++cell name='cell 4' ariaCellColumnIndex=4 -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++++cell name='cell 5' ariaCellColumnIndex=5 -++++++++++staticText name='cell 5' -++++++++++++inlineTextBox name='cell 5' +++++genericContainer ignored +++++++grid ariaColumnCount=5 +++++++++row +++++++++++columnHeader name='cell 2' ariaCellColumnIndex=2 ariaCellColumnSpan=2 +++++++++++++staticText name='cell 2' +++++++++++++++inlineTextBox name='cell 2' +++++++++++columnHeader name='cell 4' ariaCellColumnIndex=4 +++++++++++++staticText name='cell 4' +++++++++++++++inlineTextBox name='cell 4' +++++++++++columnHeader name='cell 5' ariaCellColumnIndex=5 +++++++++++++staticText name='cell 5' +++++++++++++++inlineTextBox name='cell 5' +++++++++row ariaCellColumnIndex=2 +++++++++++cell name='cell 2' ariaCellColumnIndex=2 +++++++++++++staticText name='cell 2' +++++++++++++++inlineTextBox name='cell 2' +++++++++++cell name='cell 3' ariaCellColumnIndex=3 +++++++++++++staticText name='cell 3' +++++++++++++++inlineTextBox name='cell 3' +++++++++++cell name='cell 4' ariaCellColumnIndex=4 +++++++++++++staticText name='cell 4' +++++++++++++++inlineTextBox name='cell 4' +++++++++++cell name='cell 5' ariaCellColumnIndex=5 +++++++++++++staticText name='cell 5' +++++++++++++++inlineTextBox name='cell 5'
diff --git a/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt b/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt index 527f2ed5..44073ad 100644 --- a/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-columnheader-expected-blink.txt
@@ -1,24 +1,25 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++row -++++++++cell name='Safari' -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++++cell name='WebKit' -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink' +++++++++row +++++++++++cell name='Safari' +++++++++++++staticText name='Safari' +++++++++++++++inlineTextBox name='Safari' +++++++++++cell name='WebKit' +++++++++++++staticText name='WebKit' +++++++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt b/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt index 2455a9f..de03d35 100644 --- a/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-combobox-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++staticText name='State' -++++++++inlineTextBox name='State' -++++textFieldWithComboBox autoComplete='list' name='State' activedescendantId=listBoxOption restriction=readOnly haspopup=listbox +++++genericContainer ignored ++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=true +++++++++staticText name='State' +++++++++++inlineTextBox name='State' +++++++textFieldWithComboBox autoComplete='list' name='State' activedescendantId=listBoxOption restriction=readOnly haspopup=listbox +++++++++genericContainer +++++++listBox +++++++++listBoxOption name='Alabama' selected=false +++++++++listBoxOption name='Alaska' selected=true
diff --git a/content/test/data/accessibility/aria/aria-comment-expected-blink.txt b/content/test/data/accessibility/aria/aria-comment-expected-blink.txt index 78e84fd4..14b0e96 100644 --- a/content/test/data/accessibility/aria/aria-comment-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-comment-expected-blink.txt
@@ -1,16 +1,17 @@ rootWebArea ++genericContainer ignored -++++comment name='Top level (Element hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=1 +++++genericContainer ignored +++++++comment name='Top level (Element hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=1 +++++++++comment name='Reply 1' hierarchicalLevel=2 setSize=2 posInSet=1 +++++++++++group setSize=1 +++++++++++++comment name='Reply-to-reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 +++++++++comment name='Reply 2' hierarchicalLevel=2 setSize=2 posInSet=2 +++++++comment name='Top level (aria-owns hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=2 +++++++++comment name='Reply 1' hierarchicalLevel=2 setSize=2 posInSet=1 +++++++++++comment name='Reply to reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 +++++++++comment name='Reply 2' hierarchicalLevel=2 setSize=2 posInSet=2 +++++++comment name='Top level (aria-level hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=3 ++++++comment name='Reply 1' hierarchicalLevel=2 setSize=2 posInSet=1 -++++++++group setSize=1 -++++++++++comment name='Reply-to-reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 +++++++comment name='Reply to reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 ++++++comment name='Reply 2' hierarchicalLevel=2 setSize=2 posInSet=2 -++++comment name='Top level (aria-owns hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=2 -++++++comment name='Reply 1' hierarchicalLevel=2 setSize=2 posInSet=1 -++++++++comment name='Reply to reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 -++++++comment name='Reply 2' hierarchicalLevel=2 setSize=2 posInSet=2 -++++comment name='Top level (aria-level hierarchy)' hierarchicalLevel=1 setSize=3 posInSet=3 -++++comment name='Reply 1' hierarchicalLevel=2 setSize=2 posInSet=1 -++++comment name='Reply to reply 1' hierarchicalLevel=3 setSize=1 posInSet=1 -++++comment name='Reply 2' hierarchicalLevel=2 setSize=2 posInSet=2 -++++comment name='Out of place' hierarchicalLevel=5 setSize=10 posInSet=9 +++++++comment name='Out of place' hierarchicalLevel=5 setSize=10 posInSet=9
diff --git a/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt b/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt index 95cb14d..2de1ff9 100644 --- a/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-complementary-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++complementary -++++++staticText name='This is ARIA role complementary.' -++++++++inlineTextBox name='This is ARIA role complementary.' +++++genericContainer ignored +++++++complementary +++++++++staticText name='This is ARIA role complementary.' +++++++++++inlineTextBox name='This is ARIA role complementary.'
diff --git a/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt b/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt index 97cee42a..d791c16 100644 --- a/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-contentinfo-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++contentInfo -++++++staticText name='This is ARIA role contentinfo.' -++++++++inlineTextBox name='This is ARIA role contentinfo.' +++++genericContainer ignored +++++++contentInfo +++++++++staticText name='This is ARIA role contentinfo.' +++++++++++inlineTextBox name='This is ARIA role contentinfo.'
diff --git a/content/test/data/accessibility/aria/aria-controls-expected-blink.txt b/content/test/data/accessibility/aria/aria-controls-expected-blink.txt index 9230506..46ca209 100644 --- a/content/test/data/accessibility/aria/aria-controls-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-controls-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' controlsIds=menu -++++++menuItem name='Edit' -++++menu name='File' -++++++menuItem name='New' -++++++menuItem name='Open' +++++genericContainer ignored +++++++menuBar horizontal +++++++++menuItem name='File' controlsIds=menu +++++++++menuItem name='Edit' +++++++menu name='File' +++++++++menuItem name='New' +++++++++menuItem name='Open'
diff --git a/content/test/data/accessibility/aria/aria-current-expected-blink.txt b/content/test/data/accessibility/aria/aria-current-expected-blink.txt index 75c90b65..4c6856720 100644 --- a/content/test/data/accessibility/aria/aria-current-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-current-expected-blink.txt
@@ -1,40 +1,41 @@ rootWebArea ++genericContainer ignored -++++link name='Section one' -++++++staticText name='Section one' -++++++++inlineTextBox name='Section one' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Section two' -++++++staticText name='Section two' -++++++++inlineTextBox name='Section two' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link name='Section three' ariaCurrentState=location -++++++staticText name='Section three' -++++++++inlineTextBox name='Section three' -++++lineBreak name='<newline>' -++++++inlineTextBox name='<newline>' -++++heading name='Section one heading' hierarchicalLevel=1 -++++++staticText name='Section one heading' -++++++++inlineTextBox name='Section one heading' -++++heading name='Section two heading' hierarchicalLevel=1 -++++++staticText name='Section two heading' -++++++++inlineTextBox name='Section two heading' -++++heading name='Section three heading' hierarchicalLevel=1 -++++++staticText name='Section three heading' -++++++++inlineTextBox name='Section three heading' -++++lineBreak name='<newline>' -++++++inlineTextBox name='<newline>' -++++genericContainer -++++++staticText name='Span 1' -++++++++inlineTextBox name='Span 1' +++++genericContainer ignored +++++++link name='Section one' +++++++++staticText name='Section one' +++++++++++inlineTextBox name='Section one' ++++++staticText name=' ' ++++++++inlineTextBox name=' ' -++++++genericContainer ariaCurrentState=true -++++++++staticText name='Span 2' -++++++++++inlineTextBox name='Span 2' +++++++link name='Section two' +++++++++staticText name='Section two' +++++++++++inlineTextBox name='Section two' ++++++staticText name=' ' ++++++++inlineTextBox name=' ' -++++++staticText name='Span 3' -++++++++inlineTextBox name='Span 3' +++++++link name='Section three' ariaCurrentState=location +++++++++staticText name='Section three' +++++++++++inlineTextBox name='Section three' +++++++lineBreak name='<newline>' +++++++++inlineTextBox name='<newline>' +++++++heading name='Section one heading' hierarchicalLevel=1 +++++++++staticText name='Section one heading' +++++++++++inlineTextBox name='Section one heading' +++++++heading name='Section two heading' hierarchicalLevel=1 +++++++++staticText name='Section two heading' +++++++++++inlineTextBox name='Section two heading' +++++++heading name='Section three heading' hierarchicalLevel=1 +++++++++staticText name='Section three heading' +++++++++++inlineTextBox name='Section three heading' +++++++lineBreak name='<newline>' +++++++++inlineTextBox name='<newline>' +++++++genericContainer +++++++++staticText name='Span 1' +++++++++++inlineTextBox name='Span 1' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++genericContainer ariaCurrentState=true +++++++++++staticText name='Span 2' +++++++++++++inlineTextBox name='Span 2' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='Span 3' +++++++++++inlineTextBox name='Span 3'
diff --git a/content/test/data/accessibility/aria/aria-definition-expected-blink.txt b/content/test/data/accessibility/aria/aria-definition-expected-blink.txt index 0d514419..e462c65 100644 --- a/content/test/data/accessibility/aria/aria-definition-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-definition-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++definition +++++genericContainer ignored +++++++definition
diff --git a/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt b/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt index b6ada63..ffab23584 100644 --- a/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-describedby-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored -++++textField description='Your username should be your email id' descriptionFrom=relatedElement describedbyIds=tooltip -++++++genericContainer -++++tooltip name='Your username should be your email id' -++++++staticText name='Your username should be your email id' -++++++++inlineTextBox name='Your username should be your email id' -++++genericContainer ignored invisible name='mmddyy' -++++textField description='mmddyy' descriptionFrom=relatedElement describedbyIds=genericContainer -++++++genericContainer +++++genericContainer ignored +++++++textField description='Your username should be your email id' descriptionFrom=relatedElement describedbyIds=tooltip +++++++++genericContainer +++++++tooltip name='Your username should be your email id' +++++++++staticText name='Your username should be your email id' +++++++++++inlineTextBox name='Your username should be your email id' +++++++genericContainer ignored invisible name='mmddyy' +++++++textField description='mmddyy' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++genericContainer
diff --git a/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt b/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt index 7ec80a23..4a6baf94 100644 --- a/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-describedby-updates-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++main description='oranges' -++++++paragraph ignored invisible -++++++++staticText ignored invisible name='oranges' +++++genericContainer ignored +++++++main description='oranges' +++++++++paragraph ignored invisible +++++++++++staticText ignored invisible name='oranges'
diff --git a/content/test/data/accessibility/aria/aria-description-expected-blink.txt b/content/test/data/accessibility/aria/aria-description-expected-blink.txt index 5ff323a..0f08233 100644 --- a/content/test/data/accessibility/aria/aria-description-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-description-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++genericContainer description='Text description' name='description' descriptionFrom=attribute -++++genericContainer description='Description from describedby' name='both' descriptionFrom=relatedElement -++++tooltip name='Description from describedby' -++++++staticText name='Description from describedby' -++++++++inlineTextBox name='Description from describedby' +++++genericContainer ignored +++++++genericContainer description='Text description' name='description' descriptionFrom=attribute +++++++genericContainer description='Description from describedby' name='both' descriptionFrom=relatedElement +++++++tooltip name='Description from describedby' +++++++++staticText name='Description from describedby' +++++++++++inlineTextBox name='Description from describedby'
diff --git a/content/test/data/accessibility/aria/aria-details-expected-blink.txt b/content/test/data/accessibility/aria/aria-details-expected-blink.txt index 9913372..d976e04 100644 --- a/content/test/data/accessibility/aria/aria-details-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-details-expected-blink.txt
@@ -1,20 +1,21 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++textField detailsIds=paragraph -++++++++genericContainer -++++paragraph -++++++staticText name='Details' -++++++++inlineTextBox name='Details' -++++paragraph -++++++staticText name='This ' -++++++++inlineTextBox name='This ' -++++++genericContainer detailsIds=group,image -++++++++staticText name='text' -++++++++++inlineTextBox name='text' -++++++staticText name=' has details' -++++++++inlineTextBox name=' has details' -++++group -++++++staticText name='Text details' -++++++++inlineTextBox name='Text details' -++++image name='Image details' +++++genericContainer ignored +++++++genericContainer +++++++++textField detailsIds=paragraph +++++++++++genericContainer +++++++paragraph +++++++++staticText name='Details' +++++++++++inlineTextBox name='Details' +++++++paragraph +++++++++staticText name='This ' +++++++++++inlineTextBox name='This ' +++++++++genericContainer detailsIds=group,image +++++++++++staticText name='text' +++++++++++++inlineTextBox name='text' +++++++++staticText name=' has details' +++++++++++inlineTextBox name=' has details' +++++++group +++++++++staticText name='Text details' +++++++++++inlineTextBox name='Text details' +++++++image name='Image details'
diff --git a/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt b/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt index 4893bbe..8fcdf8b 100644 --- a/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-dialog-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++dialog -++++++staticText name='This is ARIA dialog.' -++++++++inlineTextBox name='This is ARIA dialog.' +++++genericContainer ignored +++++++dialog +++++++++staticText name='This is ARIA dialog.' +++++++++++inlineTextBox name='This is ARIA dialog.'
diff --git a/content/test/data/accessibility/aria/aria-directory-expected-blink.txt b/content/test/data/accessibility/aria/aria-directory-expected-blink.txt index 76a60bd..063e3ab 100644 --- a/content/test/data/accessibility/aria/aria-directory-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-directory-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++list +++++genericContainer ignored +++++++list
diff --git a/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt b/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt index 441022a8..320f6b6 100644 --- a/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-disabled-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++textField -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer -++++genericContainer restriction=disabled -++++++textField restriction=disabled -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer -++++genericContainer -++++++textField -++++++++genericContainer -++++++textField restriction=disabled -++++++++genericContainer -++++++textField -++++++++genericContainer +++++genericContainer ignored +++++++genericContainer +++++++++textField +++++++++++genericContainer +++++++++textField restriction=disabled +++++++++++genericContainer +++++++++textField +++++++++++genericContainer +++++++genericContainer restriction=disabled +++++++++textField restriction=disabled +++++++++++genericContainer +++++++++textField restriction=disabled +++++++++++genericContainer +++++++++textField +++++++++++genericContainer +++++++genericContainer +++++++++textField +++++++++++genericContainer +++++++++textField restriction=disabled +++++++++++genericContainer +++++++++textField +++++++++++genericContainer
diff --git a/content/test/data/accessibility/aria/aria-document-expected-blink.txt b/content/test/data/accessibility/aria/aria-document-expected-blink.txt index 96f165b..d9d6337 100644 --- a/content/test/data/accessibility/aria/aria-document-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-document-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++document -++++++staticText name='aria role document' -++++++++inlineTextBox name='aria role document' +++++genericContainer ignored +++++++document +++++++++staticText name='aria role document' +++++++++++inlineTextBox name='aria role document'
diff --git a/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt b/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt index 196c20d..a2d9025 100644 --- a/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-dropeffect-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++genericContainer dropeffect=copy -++++++staticText name='copy' -++++++++inlineTextBox name='copy' -++++genericContainer dropeffect=move -++++++staticText name='move' -++++++++inlineTextBox name='move' -++++genericContainer dropeffect=link -++++++staticText name='link' -++++++++inlineTextBox name='link' -++++genericContainer dropeffect=execute -++++++staticText name='execute' -++++++++inlineTextBox name='execute' -++++genericContainer dropeffect=popup -++++++staticText name='popup' -++++++++inlineTextBox name='popup' -++++genericContainer dropeffect=none -++++++staticText name='none(default)' -++++++++inlineTextBox name='none(default)' -++++genericContainer dropeffect=link popup -++++++staticText name='link popup' -++++++++inlineTextBox name='link popup' +++++genericContainer ignored +++++++genericContainer dropeffect=copy +++++++++staticText name='copy' +++++++++++inlineTextBox name='copy' +++++++genericContainer dropeffect=move +++++++++staticText name='move' +++++++++++inlineTextBox name='move' +++++++genericContainer dropeffect=link +++++++++staticText name='link' +++++++++++inlineTextBox name='link' +++++++genericContainer dropeffect=execute +++++++++staticText name='execute' +++++++++++inlineTextBox name='execute' +++++++genericContainer dropeffect=popup +++++++++staticText name='popup' +++++++++++inlineTextBox name='popup' +++++++genericContainer dropeffect=none +++++++++staticText name='none(default)' +++++++++++inlineTextBox name='none(default)' +++++++genericContainer dropeffect=link popup +++++++++staticText name='link popup' +++++++++++inlineTextBox name='link popup'
diff --git a/content/test/data/accessibility/aria/aria-emphasis-expected-blink.txt b/content/test/data/accessibility/aria/aria-emphasis-expected-blink.txt index 4dd874b..d9f410c 100644 --- a/content/test/data/accessibility/aria/aria-emphasis-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-emphasis-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++emphasis -++++++staticText name='role' -++++++++inlineTextBox name='role' -++++staticText name='element (no name)' -++++++inlineTextBox name='element (no name)' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++emphasis name='include me' -++++++staticText name='element (with name)' -++++++++inlineTextBox name='element (with name)' +++++genericContainer ignored +++++++emphasis +++++++++staticText name='role' +++++++++++inlineTextBox name='role' +++++++staticText name='element (no name)' +++++++++inlineTextBox name='element (no name)' +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++emphasis name='include me' +++++++++staticText name='element (with name)' +++++++++++inlineTextBox name='element (with name)'
diff --git a/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt b/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt index 2392e1f..c4d45a4 100644 --- a/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-empty-string-expected-blink.txt
@@ -1,27 +1,28 @@ rootWebArea ++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' dropeffect=none -++++treeItem name='Expanded undefined' -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' -++++grid -++++++columnHeader name='Sort undefined' -++++genericContainer name='Hidden undefined, display block' +++++genericContainer ignored +++++++genericContainer name='Atomic undefined' +++++++textField name='Autocomplete undefined' +++++++genericContainer name='Busy undefined' +++++++treeItem name='Checked undefined' +++++++genericContainer name='Current undefined' +++++++genericContainer name='Disabled undefined' +++++++genericContainer name='Dropeffect undefined' dropeffect=none +++++++treeItem name='Expanded undefined' +++++++genericContainer name='Grabbed undefined' +++++++button name='Haspopup undefined' +++++++genericContainer name='Invalid undefined' +++++++genericContainer name='Live undefined' +++++++dialog name='Modal undefined' modal=false +++++++textField name='Multiline undefined' +++++++grid name='Multiselectable undefined' +++++++scrollBar vertical name='Orientation undefined' +++++++button name='Pressed undefined' +++++++textField name='Readonly undefined' +++++++genericContainer name='Relevant undefined' +++++++textField name='Required undefined' +++++++tree multiselectable vertical +++++++++treeItem name='Selected undefined' +++++++grid +++++++++columnHeader name='Sort undefined' +++++++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt b/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt index 31e7c0c..da528b2 100644 --- a/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-errormessage-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++textField errormessageId=paragraph invalidState=true -++++++++genericContainer -++++paragraph -++++++staticText name='Error' -++++++++inlineTextBox name='Error' +++++genericContainer ignored +++++++genericContainer +++++++++textField errormessageId=paragraph invalidState=true +++++++++++genericContainer +++++++paragraph +++++++++staticText name='Error' +++++++++++inlineTextBox name='Error'
diff --git a/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt b/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt index 3ca67a13..f647bfe 100644 --- a/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-expanded-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored -++++menu -++++++menuItem collapsed name='New' haspopup=menu -++++++menuItem name='Open' haspopup=menu -++++++menuItem collapsed name='Save' -++++++menuItem name='Quit' -++++splitter horizontal -++++splitter horizontal -++++splitter horizontal +++++genericContainer ignored +++++++menu +++++++++menuItem collapsed name='New' haspopup=menu +++++++++menuItem name='Open' haspopup=menu +++++++++menuItem collapsed name='Save' +++++++++menuItem name='Quit' +++++++splitter horizontal +++++++splitter horizontal +++++++splitter horizontal
diff --git a/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt b/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt index d047bd94..f1974bc 100644 --- a/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-expanded-roles-supported-expected-blink.txt
@@ -1,85 +1,86 @@ rootWebArea ++genericContainer -++++alert -++++alertDialog -++++application expanded -++++article -++++banner -++++blockquote -++++button expanded -++++caption -++++checkBox expanded -++++comboBoxGrouping expanded -++++complementary -++++contentInfo -++++definition -++++contentDeletion -++++dialog -++++list -++++document -++++emphasis -++++feed -++++figure -++++form -++++grid -++++++columnHeader expanded -++++++cell expanded -++++++row expanded -++++++rowGroup -++++++rowHeader expanded -++++group -++++heading -++++image -++++contentInsertion ++++genericContainer -++++genericContainer -++++link expanded -++++list -++++listBox expanded -++++listItem -++++log -++++main -++++marquee -++++math -++++menu -++++menuBar -++++menuItem expanded -++++menuItemCheckBox expanded -++++menuItemRadio expanded -++++meter -++++navigation -++++none -++++note -++++listBoxOption -++++paragraph -++++presentational -++++progressIndicator -++++radioButton -++++radioGroup -++++region -++++scrollBar -++++search -++++searchBox -++++splitter -++++splitter -++++slider -++++spinButton -++++status -++++strong -++++genericContainer -++++genericContainer -++++switch expanded -++++tab expanded -++++table -++++++cell expanded -++++tabList -++++tabPanel -++++term -++++textField -++++time -++++timer -++++toolbar -++++tooltip -++++tree -++++treeGrid -++++treeItem expanded +++++++alert +++++++alertDialog +++++++application expanded +++++++article +++++++banner +++++++blockquote +++++++button expanded +++++++caption +++++++checkBox expanded +++++++comboBoxGrouping expanded +++++++complementary +++++++contentInfo +++++++definition +++++++contentDeletion +++++++dialog +++++++list +++++++document +++++++emphasis +++++++feed +++++++figure +++++++form +++++++grid +++++++++columnHeader expanded +++++++++cell expanded +++++++++row expanded +++++++++rowGroup +++++++++rowHeader expanded +++++++group +++++++heading +++++++image +++++++contentInsertion +++++++genericContainer +++++++genericContainer +++++++link expanded +++++++list +++++++listBox expanded +++++++listItem +++++++log +++++++main +++++++marquee +++++++math +++++++menu +++++++menuBar +++++++menuItem expanded +++++++menuItemCheckBox expanded +++++++menuItemRadio expanded +++++++meter +++++++navigation +++++++none +++++++note +++++++listBoxOption +++++++paragraph +++++++presentational +++++++progressIndicator +++++++radioButton +++++++radioGroup +++++++region +++++++scrollBar +++++++search +++++++searchBox +++++++splitter +++++++splitter +++++++slider +++++++spinButton +++++++status +++++++strong +++++++genericContainer +++++++genericContainer +++++++switch expanded +++++++tab expanded +++++++table +++++++++cell expanded +++++++tabList +++++++tabPanel +++++++term +++++++textField +++++++time +++++++timer +++++++toolbar +++++++tooltip +++++++tree +++++++treeGrid +++++++treeItem expanded
diff --git a/content/test/data/accessibility/aria/aria-figure-expected-blink.txt b/content/test/data/accessibility/aria/aria-figure-expected-blink.txt index 4775c32..eec4a66 100644 --- a/content/test/data/accessibility/aria/aria-figure-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-figure-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++figure -++++++staticText name='Figure' -++++++++inlineTextBox name='Figure' +++++genericContainer ignored +++++++figure +++++++++staticText name='Figure' +++++++++++inlineTextBox name='Figure'
diff --git a/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt b/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt index d721b76..4414b94 100644 --- a/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-flowto-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++section name='current' flowtoIds=footer -++++++staticText name='Lorem ipsum' -++++++++inlineTextBox name='Lorem ipsum' -++++footer name='next' -++++++staticText name='dolor sit amet' -++++++++inlineTextBox name='dolor sit amet' +++++genericContainer ignored +++++++section name='current' flowtoIds=footer +++++++++staticText name='Lorem ipsum' +++++++++++inlineTextBox name='Lorem ipsum' +++++++footer name='next' +++++++++staticText name='dolor sit amet' +++++++++++inlineTextBox name='dolor sit amet'
diff --git a/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt b/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt index 82100434..d8281502 100644 --- a/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-flowto-multiple-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++genericContainer name='a3' flowtoIds=genericContainer -++++++staticText name='a3' -++++++++inlineTextBox name='a3' -++++genericContainer name='b3' -++++++staticText name='b3' -++++++++inlineTextBox name='b3' -++++genericContainer name='c3' flowtoIds=genericContainer -++++++staticText name='c3' -++++++++inlineTextBox name='c3' +++++genericContainer ignored +++++++genericContainer name='a3' flowtoIds=genericContainer +++++++++staticText name='a3' +++++++++++inlineTextBox name='a3' +++++++genericContainer name='b3' +++++++++staticText name='b3' +++++++++++inlineTextBox name='b3' +++++++genericContainer name='c3' flowtoIds=genericContainer +++++++++staticText name='c3' +++++++++++inlineTextBox name='c3'
diff --git a/content/test/data/accessibility/aria/aria-form-expected-blink.txt b/content/test/data/accessibility/aria/aria-form-expected-blink.txt index 2e9c92e..9898f6c 100644 --- a/content/test/data/accessibility/aria/aria-form-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-form-expected-blink.txt
@@ -1,4 +1,5 @@ rootWebArea ++genericContainer ignored -++++form -++++++genericContainer ignored +++++genericContainer ignored +++++++form +++++++++genericContainer ignored
diff --git a/content/test/data/accessibility/aria/aria-generic-expected-blink.txt b/content/test/data/accessibility/aria/aria-generic-expected-blink.txt index 31110018..4df640c 100644 --- a/content/test/data/accessibility/aria/aria-generic-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-generic-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++staticText name='content' -++++++++inlineTextBox name='content' +++++genericContainer ignored +++++++genericContainer +++++++++staticText name='content' +++++++++++inlineTextBox name='content'
diff --git a/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt index 5961d20..d9a50d9 100644 --- a/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-dynamic-add-row-expected-blink.txt
@@ -1,19 +1,20 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Turtle' tableCellRowIndex=0 -++++++++columnHeader name='Weapon' tableCellRowIndex=0 -++++++rowGroup +++++genericContainer ignored +++++++grid ++++++++row -++++++++++cell name='Donatello' tableCellRowIndex=1 -++++++++++cell name='Bo' tableCellRowIndex=1 -++++++++row -++++++++++cell name='Leonardo' tableCellRowIndex=2 -++++++++++cell name='Twin Katana' tableCellRowIndex=2 -++++++++row -++++++++++cell name='Michelangelo' tableCellRowIndex=3 -++++++++++cell name='Nunchaku' tableCellRowIndex=3 -++++++++row -++++++++++cell name='Raphael' tableCellRowIndex=4 -++++++++++cell name='Sai' tableCellRowIndex=4 +++++++++++columnHeader name='Turtle' tableCellRowIndex=0 +++++++++++columnHeader name='Weapon' tableCellRowIndex=0 +++++++++rowGroup +++++++++++row +++++++++++++cell name='Donatello' tableCellRowIndex=1 +++++++++++++cell name='Bo' tableCellRowIndex=1 +++++++++++row +++++++++++++cell name='Leonardo' tableCellRowIndex=2 +++++++++++++cell name='Twin Katana' tableCellRowIndex=2 +++++++++++row +++++++++++++cell name='Michelangelo' tableCellRowIndex=3 +++++++++++++cell name='Nunchaku' tableCellRowIndex=3 +++++++++++row +++++++++++++cell name='Raphael' tableCellRowIndex=4 +++++++++++++cell name='Sai' tableCellRowIndex=4
diff --git a/content/test/data/accessibility/aria/aria-grid-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-expected-blink.txt index 1553121..a3f0af0 100644 --- a/content/test/data/accessibility/aria/aria-grid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt index 4d9a2f0..973a3e8 100644 --- a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt
@@ -1,92 +1,33 @@ rootWebArea ++genericContainer ignored -++++grid name='1: Individual rows get their own wrappers' tableRowCount=2 tableColumnCount=2 -++++++genericContainer name='r1-wrap' -++++++++row name='r1-real' tableRowIndex=0 -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++genericContainer name='r2-wrap' -++++++++genericContainer name='r2-vanilla' -++++++++++row name='r2-real' tableRowIndex=1 -++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 -++++++++++++++staticText name='B1' -++++++++++++++++inlineTextBox name='B1' -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='2: Single wrapper around all rows' tableRowCount=2 tableColumnCount=2 -++++++genericContainer -++++++++row tableRowIndex=0 -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++++row tableRowIndex=1 -++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 -++++++++++++staticText name='B1' -++++++++++++++inlineTextBox name='B1' -++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 -++++++++++++staticText name='B2' -++++++++++++++inlineTextBox name='B2' -++++grid name='3: Individual cells get their own wrappers' tableRowCount=2 tableColumnCount=2 -++++++row tableRowIndex=0 +++++genericContainer ignored +++++++grid name='1: Individual rows get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++++++genericContainer name='r1-wrap' +++++++++++row name='r1-real' tableRowIndex=0 +++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++staticText name='A1' +++++++++++++++++inlineTextBox name='A1' +++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' +++++++++genericContainer name='r2-wrap' +++++++++++genericContainer name='r2-vanilla' +++++++++++++row name='r2-real' tableRowIndex=1 +++++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 +++++++++++++++++staticText name='B1' +++++++++++++++++++inlineTextBox name='B1' +++++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 +++++++++++++++++staticText name='B2' +++++++++++++++++++inlineTextBox name='B2' +++++++grid name='2: Single wrapper around all rows' tableRowCount=2 tableColumnCount=2 ++++++++genericContainer -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++genericContainer -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++row tableRowIndex=1 -++++++++genericContainer -++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 -++++++++++++staticText name='B1' -++++++++++++++inlineTextBox name='B1' -++++++++genericContainer -++++++++++genericContainer -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='4: Single wrapper around all cells in a row' tableRowCount=2 tableColumnCount=2 -++++++row tableRowIndex=0 -++++++++genericContainer -++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++staticText name='A1' -++++++++++++++inlineTextBox name='A1' -++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++staticText name='A2' -++++++++++++++inlineTextBox name='A2' -++++++row tableRowIndex=1 -++++++++genericContainer -++++++++++genericContainer -++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 -++++++++++++++staticText name='B1' -++++++++++++++++inlineTextBox name='B1' -++++++++++genericContainer -++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 -++++++++++++++staticText name='B2' -++++++++++++++++inlineTextBox name='B2' -++++grid name='5: Wrapper insanity' tableRowCount=2 tableColumnCount=2 -++++++genericContainer -++++++++genericContainer -++++++++++genericContainer -++++++++++++row tableRowIndex=0 -++++++++++++++genericContainer -++++++++++++++++genericContainer -++++++++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++++++++++staticText name='A1' -++++++++++++++++++++++inlineTextBox name='A1' -++++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++++++staticText name='A2' -++++++++++++++++++inlineTextBox name='A2' -++++++++genericContainer +++++++++++row tableRowIndex=0 +++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++staticText name='A1' +++++++++++++++++inlineTextBox name='A1' +++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' ++++++++++row tableRowIndex=1 ++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 ++++++++++++++staticText name='B1' @@ -94,3 +35,63 @@ ++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 ++++++++++++++staticText name='B2' ++++++++++++++++inlineTextBox name='B2' +++++++grid name='3: Individual cells get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++++++row tableRowIndex=0 +++++++++++genericContainer +++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++staticText name='A1' +++++++++++++++++inlineTextBox name='A1' +++++++++++genericContainer +++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' +++++++++row tableRowIndex=1 +++++++++++genericContainer +++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 +++++++++++++++staticText name='B1' +++++++++++++++++inlineTextBox name='B1' +++++++++++genericContainer +++++++++++++genericContainer +++++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 +++++++++++++++++staticText name='B2' +++++++++++++++++++inlineTextBox name='B2' +++++++grid name='4: Single wrapper around all cells in a row' tableRowCount=2 tableColumnCount=2 +++++++++row tableRowIndex=0 +++++++++++genericContainer +++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++staticText name='A1' +++++++++++++++++inlineTextBox name='A1' +++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' +++++++++row tableRowIndex=1 +++++++++++genericContainer +++++++++++++genericContainer +++++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 +++++++++++++++++staticText name='B1' +++++++++++++++++++inlineTextBox name='B1' +++++++++++++genericContainer +++++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 +++++++++++++++++staticText name='B2' +++++++++++++++++++inlineTextBox name='B2' +++++++grid name='5: Wrapper insanity' tableRowCount=2 tableColumnCount=2 +++++++++genericContainer +++++++++++genericContainer +++++++++++++genericContainer +++++++++++++++row tableRowIndex=0 +++++++++++++++++genericContainer +++++++++++++++++++genericContainer +++++++++++++++++++++cell name='A1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++++++++++staticText name='A1' +++++++++++++++++++++++++inlineTextBox name='A1' +++++++++++++++++cell name='A2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++++++staticText name='A2' +++++++++++++++++++++inlineTextBox name='A2' +++++++++++genericContainer +++++++++++++row tableRowIndex=1 +++++++++++++++cell name='B1' tableCellColumnIndex=0 tableCellRowIndex=1 +++++++++++++++++staticText name='B1' +++++++++++++++++++inlineTextBox name='B1' +++++++++++++++cell name='B2' tableCellColumnIndex=1 tableCellRowIndex=1 +++++++++++++++++staticText name='B2' +++++++++++++++++++inlineTextBox name='B2'
diff --git a/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt b/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt index b960200..b25e208 100644 --- a/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-gridcell-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++grid multiselectable -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++++genericContainer ignored +++++++grid multiselectable +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-gridcell-focused-only-expected-blink.txt b/content/test/data/accessibility/aria/aria-gridcell-focused-only-expected-blink.txt index 030c2a6..9b28934 100644 --- a/content/test/data/accessibility/aria/aria-gridcell-focused-only-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-gridcell-focused-only-expected-blink.txt
@@ -1,19 +1,20 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++staticText name='Done' -++++++inlineTextBox name='Done' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink' +++++++staticText name='Done' +++++++++inlineTextBox name='Done'
diff --git a/content/test/data/accessibility/aria/aria-group-expected-blink.txt b/content/test/data/accessibility/aria/aria-group-expected-blink.txt index 3ce7ca9..dbb8362 100644 --- a/content/test/data/accessibility/aria/aria-group-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-group-expected-blink.txt
@@ -1,9 +1,10 @@ rootWebArea ++genericContainer ignored -++++group -++++++link name='Group Link1' -++++++++staticText name='Group Link1' -++++++++++inlineTextBox name='Group Link1' -++++++link name='Group Link2' -++++++++staticText name='Group Link2' -++++++++++inlineTextBox name='Group Link2' +++++genericContainer ignored +++++++group +++++++++link name='Group Link1' +++++++++++staticText name='Group Link1' +++++++++++++inlineTextBox name='Group Link1' +++++++++link name='Group Link2' +++++++++++staticText name='Group Link2' +++++++++++++inlineTextBox name='Group Link2'
diff --git a/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt b/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt index 0f612968..c76f602c 100644 --- a/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-haspopup-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton haspopup=listbox -++++comboBoxMenuButton haspopup=grid -++++comboBoxMenuButton haspopup=dialog -++++comboBoxMenuButton haspopup=menu -++++comboBoxMenuButton haspopup=listbox -++++comboBoxMenuButton haspopup=listbox +++++genericContainer ignored +++++++comboBoxMenuButton haspopup=menu +++++++comboBoxMenuButton +++++++comboBoxMenuButton haspopup=menu +++++++comboBoxMenuButton haspopup=listbox +++++++comboBoxMenuButton haspopup=grid +++++++comboBoxMenuButton haspopup=dialog +++++++comboBoxMenuButton haspopup=menu +++++++comboBoxMenuButton haspopup=listbox +++++++comboBoxMenuButton haspopup=listbox
diff --git a/content/test/data/accessibility/aria/aria-heading-expected-blink.txt b/content/test/data/accessibility/aria/aria-heading-expected-blink.txt index faad4a5..a6840b8 100644 --- a/content/test/data/accessibility/aria/aria-heading-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-heading-expected-blink.txt
@@ -1,24 +1,25 @@ rootWebArea ++genericContainer ignored -++++heading name='ARIA Heading 1' hierarchicalLevel=1 -++++++staticText name='ARIA Heading 1' -++++++++inlineTextBox name='ARIA Heading 1' -++++heading name='ARIA Heading 2' hierarchicalLevel=2 -++++++staticText name='ARIA Heading 2' -++++++++inlineTextBox name='ARIA Heading 2' -++++heading name='ARIA Heading 3' hierarchicalLevel=3 -++++++staticText name='ARIA Heading 3' -++++++++inlineTextBox name='ARIA Heading 3' -++++heading name='ARIA Heading 4' hierarchicalLevel=4 -++++++staticText name='ARIA Heading 4' -++++++++inlineTextBox name='ARIA Heading 4' -++++heading name='ARIA Heading 5' hierarchicalLevel=5 -++++++staticText name='ARIA Heading 5' -++++++++inlineTextBox name='ARIA Heading 5' -++++heading name='ARIA Heading 6' hierarchicalLevel=6 -++++++staticText name='ARIA Heading 6' -++++++++inlineTextBox name='ARIA Heading 6' -++++genericContainer -++++++heading name='Heading' hierarchicalLevel=2 -++++++++staticText name='Heading' -++++++++++inlineTextBox name='Heading' +++++genericContainer ignored +++++++heading name='ARIA Heading 1' hierarchicalLevel=1 +++++++++staticText name='ARIA Heading 1' +++++++++++inlineTextBox name='ARIA Heading 1' +++++++heading name='ARIA Heading 2' hierarchicalLevel=2 +++++++++staticText name='ARIA Heading 2' +++++++++++inlineTextBox name='ARIA Heading 2' +++++++heading name='ARIA Heading 3' hierarchicalLevel=3 +++++++++staticText name='ARIA Heading 3' +++++++++++inlineTextBox name='ARIA Heading 3' +++++++heading name='ARIA Heading 4' hierarchicalLevel=4 +++++++++staticText name='ARIA Heading 4' +++++++++++inlineTextBox name='ARIA Heading 4' +++++++heading name='ARIA Heading 5' hierarchicalLevel=5 +++++++++staticText name='ARIA Heading 5' +++++++++++inlineTextBox name='ARIA Heading 5' +++++++heading name='ARIA Heading 6' hierarchicalLevel=6 +++++++++staticText name='ARIA Heading 6' +++++++++++inlineTextBox name='ARIA Heading 6' +++++++genericContainer +++++++++heading name='Heading' hierarchicalLevel=2 +++++++++++staticText name='Heading' +++++++++++++inlineTextBox name='Heading'
diff --git a/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt index a7b63615..8ffb6a8 100644 --- a/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-descendant-tabindex-change-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++genericContainer ignored invisible -++++++group ignored invisible +++++genericContainer ignored +++++++genericContainer ignored invisible ++++++++group ignored invisible -++++++++++slider horizontal ignored invisible name='Slider#1 now unfocusable' -++++genericContainer ignored invisible -++++++group ignored invisible +++++++++++group ignored invisible +++++++++++++slider horizontal ignored invisible name='Slider#1 now unfocusable' +++++++genericContainer ignored invisible ++++++++group ignored invisible -++++++++++slider horizontal invisible name='Slider #2 now focusable' -++++group name='finished' +++++++++++group ignored invisible +++++++++++++slider horizontal invisible name='Slider #2 now focusable' +++++++group name='finished'
diff --git a/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt index bbdee5a3..a65d09a 100644 --- a/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-descendants-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++group ignored invisible name='Subtree starts visible ends hidden' -++++++group ignored invisible +++++genericContainer ignored +++++++group ignored invisible name='Subtree starts visible ends hidden' ++++++++group ignored invisible -++++++++++slider horizontal invisible name='Slider#1 now inside hidden subtree' -++++genericContainer name='Subtree starts hidden ends visible' -++++++group +++++++++++group ignored invisible +++++++++++++slider horizontal invisible name='Slider#1 now inside hidden subtree' +++++++genericContainer name='Subtree starts hidden ends visible' ++++++++group -++++++++++slider horizontal name='Slider #2 now inside visible subtree' -++++group name='finished' +++++++++++group +++++++++++++slider horizontal name='Slider #2 now inside visible subtree' +++++++group name='finished'
diff --git a/content/test/data/accessibility/aria/aria-hidden-described-by-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-described-by-expected-blink.txt index 20cbe4c5..8eb6cd846 100644 --- a/content/test/data/accessibility/aria/aria-hidden-described-by-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-described-by-expected-blink.txt
@@ -1,16 +1,17 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++genericContainer ignored invisible name='span-1' -++++++++staticText ignored invisible -++++++++genericContainer ignored invisible name='span-2' -++++++++staticText ignored invisible -++++++++genericContainer ignored invisible description='span-4' name='span-3' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++genericContainer ignored +++++++++genericContainer ignored invisible name='span-1' ++++++++++staticText ignored invisible -++++++++++genericContainer ignored invisible name='span-4' +++++++++++genericContainer ignored invisible name='span-2' ++++++++++staticText ignored invisible -++++++++staticText ignored invisible -++++++genericContainer description='span-1' name='span-A' descriptionFrom=relatedElement describedbyIds=genericContainer -++++++genericContainer description='span-2' name='span-B' descriptionFrom=relatedElement describedbyIds=genericContainer -++++++genericContainer description='span-3' name='span-C' descriptionFrom=relatedElement describedbyIds=genericContainer -++++++genericContainer description='span-4' name='span-D' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++++genericContainer ignored invisible description='span-4' name='span-3' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++++++staticText ignored invisible +++++++++++++genericContainer ignored invisible name='span-4' +++++++++++++staticText ignored invisible +++++++++++staticText ignored invisible +++++++++genericContainer description='span-1' name='span-A' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++genericContainer description='span-2' name='span-B' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++genericContainer description='span-3' name='span-C' descriptionFrom=relatedElement describedbyIds=genericContainer +++++++++genericContainer description='span-4' name='span-D' descriptionFrom=relatedElement describedbyIds=genericContainer
diff --git a/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt index c4b71786..0decad6 100644 --- a/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea isLineBreakingObject=true ++genericContainer ignored isLineBreakingObject=true -++++genericContainer isLineBreakingObject=true -++++++staticText name='blockDisplay' -++++++++inlineTextBox name='blockDisplay' -++++genericContainer ignored invisible name='noneDisplay' -++++genericContainer ignored invisible isLineBreakingObject=true -++++++staticText ignored invisible name='blockDisplay Hiddentrue' -++++genericContainer ignored invisible name='noneDisplay Hiddentrue' -++++genericContainer isLineBreakingObject=true -++++++staticText name='blockDisplay Hiddenfalse' -++++++++inlineTextBox name='blockDisplay Hiddenfalse' -++++genericContainer invisible -++++genericContainer invisible name='blockDisplay Hiddentruefocusable' isLineBreakingObject=true -++++++staticText ignored invisible name='blockDisplay Hiddentruefocusable' \ No newline at end of file +++++genericContainer ignored isLineBreakingObject=true +++++++genericContainer isLineBreakingObject=true +++++++++staticText name='blockDisplay' +++++++++++inlineTextBox name='blockDisplay' +++++++genericContainer ignored invisible name='noneDisplay' +++++++genericContainer ignored invisible isLineBreakingObject=true +++++++++staticText ignored invisible name='blockDisplay Hiddentrue' +++++++genericContainer ignored invisible name='noneDisplay Hiddentrue' +++++++genericContainer isLineBreakingObject=true +++++++++staticText name='blockDisplay Hiddenfalse' +++++++++++inlineTextBox name='blockDisplay Hiddenfalse' +++++++genericContainer invisible +++++++genericContainer invisible name='blockDisplay Hiddentruefocusable' isLineBreakingObject=true +++++++++staticText ignored invisible name='blockDisplay Hiddentruefocusable'
diff --git a/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt index 18fa2df..c0e9f5b 100644 --- a/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-iframe-body-expected-blink.txt
@@ -1,10 +1,13 @@ rootWebArea focusable -++genericContainer -++++iframe focusable -++++++rootWebArea focusable -++++++++genericContainer editable focusable invisible multiline richlyEditable value='1' -++++++++++staticText editable ignored invisible richlyEditable name='1' -++++iframe focusable -++++++rootWebArea focusable -++++++++genericContainer ignored invisible -++++++++++staticText ignored invisible name='2' +++genericContainer ignored +++++genericContainer +++++++iframe focusable +++++++++rootWebArea focusable +++++++++++genericContainer ignored +++++++++++++genericContainer editable focusable invisible multiline richlyEditable value='1' +++++++++++++++staticText editable ignored invisible richlyEditable name='1' +++++++iframe focusable +++++++++rootWebArea focusable +++++++++++genericContainer ignored +++++++++++++genericContainer ignored invisible +++++++++++++++staticText ignored invisible name='2'
diff --git a/content/test/data/accessibility/aria/aria-hidden-iframe-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-iframe-expected-blink.txt index 9c27c57b..26fa1aad8 100644 --- a/content/test/data/accessibility/aria/aria-hidden-iframe-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-iframe-expected-blink.txt
@@ -1,14 +1,16 @@ rootWebArea focusable -++genericContainer -++++button focusable name='Before' -++++++staticText name='Before' -++++++++inlineTextBox name='Before' -++++iframe focusable invisible -++++++rootWebArea focusable -++++++++genericContainer -++++++++++button focusable name='Inner' -++++++++++++staticText name='Inner' -++++++++++++++inlineTextBox name='Inner' -++++button focusable name='After' -++++++staticText name='After' -++++++++inlineTextBox name='After' \ No newline at end of file +++genericContainer ignored +++++genericContainer +++++++button focusable name='Before' +++++++++staticText name='Before' +++++++++++inlineTextBox name='Before' +++++++iframe focusable invisible +++++++++rootWebArea focusable +++++++++++genericContainer ignored +++++++++++++genericContainer +++++++++++++++button focusable name='Inner' +++++++++++++++++staticText name='Inner' +++++++++++++++++++inlineTextBox name='Inner' +++++++button focusable name='After' +++++++++staticText name='After' +++++++++++inlineTextBox name='After'
diff --git a/content/test/data/accessibility/aria/aria-hidden-labelled-by-expected-blink.txt b/content/test/data/accessibility/aria/aria-hidden-labelled-by-expected-blink.txt index 7068da61..e648c00 100644 --- a/content/test/data/accessibility/aria/aria-hidden-labelled-by-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-hidden-labelled-by-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++genericContainer ignored invisible name='span-1' -++++++genericContainer name='span-2' -++++++genericContainer name='span-4' labelledbyIds=genericContainer -++++++++genericContainer ignored invisible name='span-4' -++++++genericContainer name='span-1' labelledbyIds=genericContainer -++++++genericContainer name='span-2' labelledbyIds=genericContainer -++++++genericContainer name='span-3' labelledbyIds=genericContainer -++++++genericContainer name='span-4' labelledbyIds=genericContainer +++++++genericContainer ignored +++++++++genericContainer ignored invisible name='span-1' +++++++++genericContainer name='span-2' +++++++++genericContainer name='span-4' labelledbyIds=genericContainer +++++++++++genericContainer ignored invisible name='span-4' +++++++++genericContainer name='span-1' labelledbyIds=genericContainer +++++++++genericContainer name='span-2' labelledbyIds=genericContainer +++++++++genericContainer name='span-3' labelledbyIds=genericContainer +++++++++genericContainer name='span-4' labelledbyIds=genericContainer
diff --git a/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt b/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt index d04069e..c71053b 100644 --- a/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-illegal-val-expected-blink.txt
@@ -1,27 +1,28 @@ rootWebArea ++genericContainer ignored -++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Atomic illegal' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true -++++textField autoComplete='x-illegal' name='Autocomplete illegal' -++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Busy illegal' liveRelevant='additions text' liveStatus='polite' busy=true containerLiveAtomic=false containerLiveBusy=true liveAtomic=false -++++treeItem name='Checked illegal' checkedState=true -++++genericContainer name='Current illegal' ariaCurrentState=true -++++genericContainer name='Disabled illegal' restriction=disabled -++++genericContainer name='Dropeffect illegal' dropeffect=none -++++treeItem expanded name='Expanded illegal' -++++genericContainer name='Grabbed illegal' -++++popUpButton name='Haspopup illegal' haspopup=menu -++++genericContainer ariaInvalidValue='X-ILLEGAL' name='Invalid illegal' invalidState=other -++++log containerLiveRelevant='additions text' containerLiveStatus='X-ILLEGAL' name='Live illegal' liveRelevant='additions text' liveStatus='X-ILLEGAL' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++dialog name='Modal illegal' modal=true -++++textField multiline name='Multiline illegal' -++++grid multiselectable name='Multiselectable illegal' -++++slider horizontal name='Orientation illegal' -++++toggleButton name='Pressed illegal' checkedState=true -++++textField name='Readonly illegal' restriction=readOnly -++++log containerLiveRelevant='X-ILLEGAL' containerLiveStatus='polite' name='Relevant illegal' liveRelevant='X-ILLEGAL' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++textField required name='Required illegal' -++++tree multiselectable vertical -++++++treeItem name='Selected illegal' selected=true -++++grid -++++++columnHeader name='Sort illegal' sortDirection=other -++++genericContainer ignored invisible name='Hidden illegal' +++++genericContainer ignored +++++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Atomic illegal' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++++++textField autoComplete='x-illegal' name='Autocomplete illegal' +++++++log containerLiveRelevant='additions text' containerLiveStatus='polite' name='Busy illegal' liveRelevant='additions text' liveStatus='polite' busy=true containerLiveAtomic=false containerLiveBusy=true liveAtomic=false +++++++treeItem name='Checked illegal' checkedState=true +++++++genericContainer name='Current illegal' ariaCurrentState=true +++++++genericContainer name='Disabled illegal' restriction=disabled +++++++genericContainer name='Dropeffect illegal' dropeffect=none +++++++treeItem expanded name='Expanded illegal' +++++++genericContainer name='Grabbed illegal' +++++++popUpButton name='Haspopup illegal' haspopup=menu +++++++genericContainer ariaInvalidValue='X-ILLEGAL' name='Invalid illegal' invalidState=other +++++++log containerLiveRelevant='additions text' containerLiveStatus='X-ILLEGAL' name='Live illegal' liveRelevant='additions text' liveStatus='X-ILLEGAL' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++dialog name='Modal illegal' modal=true +++++++textField multiline name='Multiline illegal' +++++++grid multiselectable name='Multiselectable illegal' +++++++slider horizontal name='Orientation illegal' +++++++toggleButton name='Pressed illegal' checkedState=true +++++++textField name='Readonly illegal' restriction=readOnly +++++++log containerLiveRelevant='X-ILLEGAL' containerLiveStatus='polite' name='Relevant illegal' liveRelevant='X-ILLEGAL' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++textField required name='Required illegal' +++++++tree multiselectable vertical +++++++++treeItem name='Selected illegal' selected=true +++++++grid +++++++++columnHeader name='Sort illegal' sortDirection=other +++++++genericContainer ignored invisible name='Hidden illegal'
diff --git a/content/test/data/accessibility/aria/aria-img-expected-blink.txt b/content/test/data/accessibility/aria/aria-img-expected-blink.txt index 3fbe9e8..361ad03 100644 --- a/content/test/data/accessibility/aria/aria-img-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-img-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++image +++++genericContainer ignored +++++++image
diff --git a/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt index 296df33..73fe8bd3 100644 --- a/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-insertion-deletion-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea ++genericContainer ignored -++++paragraph -++++++staticText name='My favorite browser is ' -++++++++inlineTextBox name='My favorite browser is ' -++++++contentDeletion -++++++++staticText name='ABC' -++++++++++inlineTextBox name='ABC' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++contentInsertion -++++++++staticText name='Chrome' -++++++++++inlineTextBox name='Chrome' -++++++staticText name='!' -++++++++inlineTextBox name='!' +++++genericContainer ignored +++++++paragraph +++++++++staticText name='My favorite browser is ' +++++++++++inlineTextBox name='My favorite browser is ' +++++++++contentDeletion +++++++++++staticText name='ABC' +++++++++++++inlineTextBox name='ABC' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++contentInsertion +++++++++++staticText name='Chrome' +++++++++++++inlineTextBox name='Chrome' +++++++++staticText name='!' +++++++++++inlineTextBox name='!'
diff --git a/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt b/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt index b9ffb4084..d15f14b 100644 --- a/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-invalid-expected-blink.txt
@@ -1,38 +1,39 @@ rootWebArea ++genericContainer ignored -++++genericContainer invalidState=true -++++++staticText name='invalid=true' -++++++++inlineTextBox name='invalid=true' -++++textField value='An eror via invalid=spelling' -++++++staticText name='An ' -++++++++inlineTextBox name='An ' -++++++genericContainer ariaInvalidValue='spelling' invalidState=other -++++++++staticText name='eror' markerTypes=1 markerStarts=0 markerEnds=4 -++++++++++inlineTextBox name='eror' -++++++staticText name=' via invalid=spelling' -++++++++inlineTextBox name=' via invalid=spelling' -++++textField value='An errors via invalid=grammar' -++++++staticText name='An ' -++++++++inlineTextBox name='An ' -++++++genericContainer ariaInvalidValue='grammar' invalidState=other -++++++++staticText name='errors' markerTypes=2 markerStarts=0 markerEnds=6 -++++++++++inlineTextBox name='errors' -++++++staticText name=' via invalid=grammar' -++++++++inlineTextBox name=' via invalid=grammar' -++++genericContainer invalidState=false -++++++staticText name='invalid=false' -++++++++inlineTextBox name='invalid=false' -++++genericContainer -++++++staticText name='invalid=<empty>' -++++++++inlineTextBox name='invalid=<empty>' -++++genericContainer -++++++staticText name='invalid=<default>' -++++++++inlineTextBox name='invalid=<default>' -++++genericContainer ariaInvalidValue='unknown' invalidState=other -++++++staticText name='invalid=unknown' -++++++++inlineTextBox name='invalid=unknown' -++++form -++++++textField value='1234' invalidState=true -++++++++genericContainer -++++++++++staticText name='1234' -++++++++++++inlineTextBox name='1234' +++++genericContainer ignored +++++++genericContainer invalidState=true +++++++++staticText name='invalid=true' +++++++++++inlineTextBox name='invalid=true' +++++++textField value='An eror via invalid=spelling' +++++++++staticText name='An ' +++++++++++inlineTextBox name='An ' +++++++++genericContainer ariaInvalidValue='spelling' invalidState=other +++++++++++staticText name='eror' markerTypes=1 markerStarts=0 markerEnds=4 +++++++++++++inlineTextBox name='eror' +++++++++staticText name=' via invalid=spelling' +++++++++++inlineTextBox name=' via invalid=spelling' +++++++textField value='An errors via invalid=grammar' +++++++++staticText name='An ' +++++++++++inlineTextBox name='An ' +++++++++genericContainer ariaInvalidValue='grammar' invalidState=other +++++++++++staticText name='errors' markerTypes=2 markerStarts=0 markerEnds=6 +++++++++++++inlineTextBox name='errors' +++++++++staticText name=' via invalid=grammar' +++++++++++inlineTextBox name=' via invalid=grammar' +++++++genericContainer invalidState=false +++++++++staticText name='invalid=false' +++++++++++inlineTextBox name='invalid=false' +++++++genericContainer +++++++++staticText name='invalid=<empty>' +++++++++++inlineTextBox name='invalid=<empty>' +++++++genericContainer +++++++++staticText name='invalid=<default>' +++++++++++inlineTextBox name='invalid=<default>' +++++++genericContainer ariaInvalidValue='unknown' invalidState=other +++++++++staticText name='invalid=unknown' +++++++++++inlineTextBox name='invalid=unknown' +++++++form +++++++++textField value='1234' invalidState=true +++++++++++genericContainer +++++++++++++staticText name='1234' +++++++++++++++inlineTextBox name='1234'
diff --git a/content/test/data/accessibility/aria/aria-keyshortcuts-expected-blink.txt b/content/test/data/accessibility/aria/aria-keyshortcuts-expected-blink.txt index dfc8706..f4b457e 100644 --- a/content/test/data/accessibility/aria/aria-keyshortcuts-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-keyshortcuts-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea -++genericContainer -++++button keyShortcuts='Ctrl+X' name='Cut' -++++++staticText name='Cut' -++++++++inlineTextBox name='Cut' -++++button keyShortcuts='Ctrl+C' name='Copy' -++++++staticText name='Copy' -++++++++inlineTextBox name='Copy' -++++button keyShortcuts='Ctrl+V' name='Paste' -++++++staticText name='Paste' -++++++++inlineTextBox name='Paste' +++genericContainer ignored +++++genericContainer +++++++button keyShortcuts='Ctrl+X' name='Cut' +++++++++staticText name='Cut' +++++++++++inlineTextBox name='Cut' +++++++button keyShortcuts='Ctrl+C' name='Copy' +++++++++staticText name='Copy' +++++++++++inlineTextBox name='Copy' +++++++button keyShortcuts='Ctrl+V' name='Paste' +++++++++staticText name='Paste' +++++++++++inlineTextBox name='Paste'
diff --git a/content/test/data/accessibility/aria/aria-label-expected-blink.txt b/content/test/data/accessibility/aria/aria-label-expected-blink.txt index 8510570..6cbb349 100644 --- a/content/test/data/accessibility/aria/aria-label-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-label-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++checkBox name='aria label' checkedState=false +++++genericContainer ignored +++++++checkBox name='aria label' checkedState=false
diff --git a/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt b/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt index ddb8923..72baea8 100644 --- a/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-labelledby-heading-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++textField name='h2' -++++++genericContainer -++++heading name='h2' hierarchicalLevel=2 -++++++staticText name='h2' -++++++++inlineTextBox name='h2' +++++genericContainer ignored +++++++textField name='h2' +++++++++genericContainer +++++++heading name='h2' hierarchicalLevel=2 +++++++++staticText name='h2' +++++++++++inlineTextBox name='h2'
diff --git a/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt b/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt index b1a83b1..b1858437 100644 --- a/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-labelledby-updates-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++main name='oranges' -++++paragraph ignored invisible -++++++genericContainer ignored invisible +++++genericContainer ignored +++++++main name='oranges' +++++++paragraph ignored invisible ++++++++genericContainer ignored invisible -++++++++++staticText ignored invisible name='oranges' +++++++++++genericContainer ignored invisible +++++++++++++staticText ignored invisible name='oranges'
diff --git a/content/test/data/accessibility/aria/aria-level-expected-blink.txt b/content/test/data/accessibility/aria/aria-level-expected-blink.txt index 2824f9d..c055890d 100644 --- a/content/test/data/accessibility/aria/aria-level-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-level-expected-blink.txt
@@ -1,60 +1,61 @@ rootWebArea ++genericContainer ignored -++++heading name='Level 2' hierarchicalLevel=2 -++++++staticText name='Level 2' -++++++++inlineTextBox name='Level 2' -++++heading name='Level 9' hierarchicalLevel=9 -++++++staticText name='Level 9' -++++++++inlineTextBox name='Level 9' -++++heading name='Level 1' hierarchicalLevel=1 -++++++staticText name='Level 1' -++++++++inlineTextBox name='Level 1' -++++heading name='Level 3' hierarchicalLevel=3 -++++++staticText name='Level 3' -++++++++inlineTextBox name='Level 3' -++++heading name='Level 3' hierarchicalLevel=3 -++++++staticText name='Level 3' -++++++++inlineTextBox name='Level 3' -++++heading name='Level 4' hierarchicalLevel=4 -++++++staticText name='Level 4' -++++++++inlineTextBox name='Level 4' -++++heading name='Level 5' hierarchicalLevel=5 -++++++staticText name='Level 5' -++++++++inlineTextBox name='Level 5' -++++tree -++++++treeItem name='Tree item at level 1' hierarchicalLevel=1 -++++++++staticText name='Tree item at level 1' -++++++++++inlineTextBox name='Tree item at level 1' -++++++++group -++++++++++treeItem name='Tree item at level 2' hierarchicalLevel=2 -++++++++++++staticText name='Tree item at level 2' -++++++++++++++inlineTextBox name='Tree item at level 2' -++++++treeItem name='Tree item at level 3' hierarchicalLevel=3 -++++++++staticText name='Tree item at level 3' -++++++++++inlineTextBox name='Tree item at level 3' -++++treeGrid -++++++row hierarchicalLevel=1 -++++++++cell name='Cell at level 1' -++++++++++staticText name='Cell at level 1' -++++++++++++inlineTextBox name='Cell at level 1' -++++++row hierarchicalLevel=2 -++++++++cell name='Cell at level 2' -++++++++++staticText name='Cell at level 2' -++++++++++++inlineTextBox name='Cell at level 2' -++++listItem hierarchicalLevel=1 -++++++staticText name='List item at level 1' -++++++++inlineTextBox name='List item at level 1' -++++listItem hierarchicalLevel=3 -++++++staticText name='List item at level 3' -++++++++inlineTextBox name='List item at level 3' -++++list -++++++listItem hierarchicalLevel=2 -++++++++staticText name='List item at level 2' -++++++++++inlineTextBox name='List item at level 2' +++++genericContainer ignored +++++++heading name='Level 2' hierarchicalLevel=2 +++++++++staticText name='Level 2' +++++++++++inlineTextBox name='Level 2' +++++++heading name='Level 9' hierarchicalLevel=9 +++++++++staticText name='Level 9' +++++++++++inlineTextBox name='Level 9' +++++++heading name='Level 1' hierarchicalLevel=1 +++++++++staticText name='Level 1' +++++++++++inlineTextBox name='Level 1' +++++++heading name='Level 3' hierarchicalLevel=3 +++++++++staticText name='Level 3' +++++++++++inlineTextBox name='Level 3' +++++++heading name='Level 3' hierarchicalLevel=3 +++++++++staticText name='Level 3' +++++++++++inlineTextBox name='Level 3' +++++++heading name='Level 4' hierarchicalLevel=4 +++++++++staticText name='Level 4' +++++++++++inlineTextBox name='Level 4' +++++++heading name='Level 5' hierarchicalLevel=5 +++++++++staticText name='Level 5' +++++++++++inlineTextBox name='Level 5' +++++++tree +++++++++treeItem name='Tree item at level 1' hierarchicalLevel=1 +++++++++++staticText name='Tree item at level 1' +++++++++++++inlineTextBox name='Tree item at level 1' +++++++++++group +++++++++++++treeItem name='Tree item at level 2' hierarchicalLevel=2 +++++++++++++++staticText name='Tree item at level 2' +++++++++++++++++inlineTextBox name='Tree item at level 2' +++++++++treeItem name='Tree item at level 3' hierarchicalLevel=3 +++++++++++staticText name='Tree item at level 3' +++++++++++++inlineTextBox name='Tree item at level 3' +++++++treeGrid +++++++++row hierarchicalLevel=1 +++++++++++cell name='Cell at level 1' +++++++++++++staticText name='Cell at level 1' +++++++++++++++inlineTextBox name='Cell at level 1' +++++++++row hierarchicalLevel=2 +++++++++++cell name='Cell at level 2' +++++++++++++staticText name='Cell at level 2' +++++++++++++++inlineTextBox name='Cell at level 2' +++++++listItem hierarchicalLevel=1 +++++++++staticText name='List item at level 1' +++++++++++inlineTextBox name='List item at level 1' +++++++listItem hierarchicalLevel=3 +++++++++staticText name='List item at level 3' +++++++++++inlineTextBox name='List item at level 3' ++++++list ++++++++listItem hierarchicalLevel=2 ++++++++++staticText name='List item at level 2' ++++++++++++inlineTextBox name='List item at level 2' -++++++++listItem hierarchicalLevel=7 -++++++++++staticText name='List item at level 7' -++++++++++++inlineTextBox name='List item at level 7' +++++++++list +++++++++++listItem hierarchicalLevel=2 +++++++++++++staticText name='List item at level 2' +++++++++++++++inlineTextBox name='List item at level 2' +++++++++++listItem hierarchicalLevel=7 +++++++++++++staticText name='List item at level 7' +++++++++++++++inlineTextBox name='List item at level 7'
diff --git a/content/test/data/accessibility/aria/aria-list-expected-blink.txt b/content/test/data/accessibility/aria/aria-list-expected-blink.txt index baf0064..1aa50fc7 100644 --- a/content/test/data/accessibility/aria/aria-list-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-list-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++list -++++++listItem name='1' -++++++++staticText name='Item 1' -++++++++++inlineTextBox name='Item 1' -++++++listItem name='2' -++++++++staticText name='Item 2' -++++++++++inlineTextBox name='Item 2' -++++++listItem name='3' -++++++++staticText name='Item 3' -++++++++++inlineTextBox name='Item 3' +++++genericContainer ignored +++++++list +++++++++listItem name='1' +++++++++++staticText name='Item 1' +++++++++++++inlineTextBox name='Item 1' +++++++++listItem name='2' +++++++++++staticText name='Item 2' +++++++++++++inlineTextBox name='Item 2' +++++++++listItem name='3' +++++++++++staticText name='Item 3' +++++++++++++inlineTextBox name='Item 3'
diff --git a/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt index db16ef389..df0f830a 100644 --- a/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-aria-selected-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++listBox multiselectable activedescendantId=listBoxOption -++++++listBoxOption name='Item 1' selected=false -++++++listBoxOption name='Item 2' selected=false -++++++listBoxOption name='Item 3' selected=false -++++++listBoxOption name='Item 4' selected=true -++++++listBoxOption name='Item 5' selected=true +++++genericContainer ignored +++++++listBox multiselectable activedescendantId=listBoxOption +++++++++listBoxOption name='Item 1' selected=false +++++++++listBoxOption name='Item 2' selected=false +++++++++listBoxOption name='Item 3' selected=false +++++++++listBoxOption name='Item 4' selected=true +++++++++listBoxOption name='Item 5' selected=true
diff --git a/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt index 7654939..2fe1661 100644 --- a/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-childfocus-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++listBox -++++++listBoxOption name='1' selected=false -++++++listBoxOption name='2' selected=true -++++++listBoxOption name='3' selected=false +++++genericContainer ignored +++++++listBox +++++++++listBoxOption name='1' selected=false +++++++++listBoxOption name='2' selected=true +++++++++listBoxOption name='3' selected=false
diff --git a/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt index 69652b3..34bf209 100644 --- a/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listbox-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++splitter horizontal -++++++listBoxOption name='Second group item 1' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Second group item 2' setSize=4 posInSet=4 selected=false +++++genericContainer ignored +++++++listBox setSize=4 +++++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++++++splitter horizontal +++++++++listBoxOption name='Second group item 1' setSize=4 posInSet=3 selected=false +++++++++listBoxOption name='Second group item 2' setSize=4 posInSet=4 selected=false
diff --git a/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt b/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt index a1208aa..a910b63b 100644 --- a/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-listitem-expected-blink.txt
@@ -1,9 +1,10 @@ rootWebArea ++genericContainer ignored -++++list -++++++listItem name='1' hierarchicalLevel=1 -++++++++staticText name='Item 1' -++++++++++inlineTextBox name='Item 1' -++++++listItem name='2' hierarchicalLevel=1 -++++++++staticText name='Item 2' -++++++++++inlineTextBox name='Item 2' +++++genericContainer ignored +++++++list +++++++++listItem name='1' hierarchicalLevel=1 +++++++++++staticText name='Item 1' +++++++++++++inlineTextBox name='Item 1' +++++++++listItem name='2' hierarchicalLevel=1 +++++++++++staticText name='Item 2' +++++++++++++inlineTextBox name='Item 2'
diff --git a/content/test/data/accessibility/aria/aria-live-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-expected-blink.txt index 861d23e973..fb18a84 100644 --- a/content/test/data/accessibility/aria/aria-live-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++alert containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++++genericContainer ignored +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++alert containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true
diff --git a/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt index 3d5f5c0..dd4f3c4 100644 --- a/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-nested-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea ++genericContainer ignored -++++group containerLiveStatus='polite' liveStatus='polite' -++++++group containerLiveStatus='off' liveStatus='off' -++++++++staticText containerLiveStatus='off' name='Nested - off' -++++++++++inlineTextBox name='Nested - off' -++++group containerLiveStatus='off' liveStatus='off' +++++genericContainer ignored ++++++group containerLiveStatus='polite' liveStatus='polite' -++++++++staticText containerLiveStatus='polite' name='Nested - polite' -++++++++++inlineTextBox name='Nested - polite' -++++group containerLiveStatus='polite' liveStatus='polite' -++++++genericContainer ignored containerLiveStatus='polite' -++++++++group containerLiveStatus='assertive' liveStatus='assertive' -++++++++++staticText containerLiveStatus='assertive' name='Nested - assertive' -++++++++++++inlineTextBox name='Nested - assertive' +++++++++group containerLiveStatus='off' liveStatus='off' +++++++++++staticText containerLiveStatus='off' name='Nested - off' +++++++++++++inlineTextBox name='Nested - off' +++++++group containerLiveStatus='off' liveStatus='off' +++++++++group containerLiveStatus='polite' liveStatus='polite' +++++++++++staticText containerLiveStatus='polite' name='Nested - polite' +++++++++++++inlineTextBox name='Nested - polite' +++++++group containerLiveStatus='polite' liveStatus='polite' +++++++++genericContainer ignored containerLiveStatus='polite' +++++++++++group containerLiveStatus='assertive' liveStatus='assertive' +++++++++++++staticText containerLiveStatus='assertive' name='Nested - assertive' +++++++++++++++inlineTextBox name='Nested - assertive'
diff --git a/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt b/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt index 5d8cb80f..9c30d134 100644 --- a/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-live-with-content-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='off' name='Off' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Off' -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='polite' name='Polite' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Polite' -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++staticText containerLiveRelevant='additions text' containerLiveStatus='assertive' name='Assertive' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++++++inlineTextBox name='Assertive' +++++genericContainer ignored +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++staticText containerLiveRelevant='additions text' containerLiveStatus='off' name='Off' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++++inlineTextBox name='Off' +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++staticText containerLiveRelevant='additions text' containerLiveStatus='polite' name='Polite' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++++inlineTextBox name='Polite' +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++staticText containerLiveRelevant='additions text' containerLiveStatus='assertive' name='Assertive' liveRelevant='additions text' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++++++inlineTextBox name='Assertive'
diff --git a/content/test/data/accessibility/aria/aria-log-expected-blink.txt b/content/test/data/accessibility/aria/aria-log-expected-blink.txt index 56f12e4..19709e2 100644 --- a/content/test/data/accessibility/aria/aria-log-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-log-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++log +++++genericContainer ignored +++++++log
diff --git a/content/test/data/accessibility/aria/aria-main-expected-blink.txt b/content/test/data/accessibility/aria/aria-main-expected-blink.txt index 816e7c5..261c01df 100644 --- a/content/test/data/accessibility/aria/aria-main-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-main-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++main +++++genericContainer ignored +++++++main
diff --git a/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt b/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt index 50b3875..019baa03 100644 --- a/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-marquee-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false -++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++genericContainer ignored +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='off' liveRelevant='additions text' liveStatus='off' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++++marquee containerLiveRelevant='additions text' containerLiveStatus='assertive' liveRelevant='additions text' liveStatus='assertive' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false
diff --git a/content/test/data/accessibility/aria/aria-math-expected-blink.txt b/content/test/data/accessibility/aria/aria-math-expected-blink.txt index b75d17b9..a4bc19a 100644 --- a/content/test/data/accessibility/aria/aria-math-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-math-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++math +++++genericContainer ignored +++++++math
diff --git a/content/test/data/accessibility/aria/aria-menu-expected-blink.txt b/content/test/data/accessibility/aria/aria-menu-expected-blink.txt index 47c0c6a..e9f0729 100644 --- a/content/test/data/accessibility/aria/aria-menu-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menu-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' controlsIds=menu -++++++menuItem name='Edit' -++++++menuItem name='View' -++++menu name='File' -++++++menuItem name='New' -++++++menuItem name='Open' -++++++menuItem name='Save' -++++++menuItem name='Quit' +++++genericContainer ignored +++++++menuBar horizontal +++++++++menuItem name='File' controlsIds=menu +++++++++menuItem name='Edit' +++++++++menuItem name='View' +++++++menu name='File' +++++++++menuItem name='New' +++++++++menuItem name='Open' +++++++++menuItem name='Save' +++++++++menuItem name='Quit'
diff --git a/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt b/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt index d483f40..ae5c8e9 100644 --- a/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menubar-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++menuBar horizontal -++++++menuItem name='File' -++++++menuItem name='Edit' -++++++menuItem name='View' +++++genericContainer ignored +++++++menuBar horizontal +++++++++menuItem name='File' +++++++++menuItem name='Edit' +++++++++menuItem name='View'
diff --git a/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt index af43935e..a89d10d 100644 --- a/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitem-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++menu -++++++menuItem name='File' -++++++menuItem name='Edit' -++++++menuItem name='Complex menuitem' -++++++++staticText name='Complex ' -++++++++++inlineTextBox name='Complex ' -++++++++textField -++++++++++genericContainer -++++++++staticText name=' menuitem' -++++++++++inlineTextBox name=' menuitem' +++++genericContainer ignored +++++++menu +++++++++menuItem name='File' +++++++++menuItem name='Edit' +++++++++menuItem name='Complex menuitem' +++++++++++staticText name='Complex ' +++++++++++++inlineTextBox name='Complex ' +++++++++++textField +++++++++++++genericContainer +++++++++++staticText name=' menuitem' +++++++++++++inlineTextBox name=' menuitem'
diff --git a/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt index 6a589b2..c251cf62 100644 --- a/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitemcheckbox-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++menu -++++++menuItemCheckBox name='Menu item 1' checkedState=false -++++++menuItemCheckBox name='Menu item 2' checkedState=true -++++++menuItemCheckBox name='Menu item 3' checkedState=mixed +++++genericContainer ignored +++++++menu +++++++++menuItemCheckBox name='Menu item 1' checkedState=false +++++++++menuItemCheckBox name='Menu item 2' checkedState=true +++++++++menuItemCheckBox name='Menu item 3' checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt b/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt index e5d4c17..2b312de 100644 --- a/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-menuitemradio-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++menu -++++++menuItemRadio name='Menu item 1' checkedState=false -++++++menuItemRadio name='Menu item 2' checkedState=true -++++++menuItemRadio name='Menu item 3' checkedState=mixed +++++genericContainer ignored +++++++menu +++++++++menuItemRadio name='Menu item 1' checkedState=false +++++++++menuItemRadio name='Menu item 2' checkedState=true +++++++++menuItemRadio name='Menu item 3' checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-meter-expected-blink.txt b/content/test/data/accessibility/aria/aria-meter-expected-blink.txt index 46aee75d..57eedbf 100644 --- a/content/test/data/accessibility/aria/aria-meter-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-meter-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++meter name='funding' value='half-way' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++++staticText name='We're getting there!' -++++++++inlineTextBox name='We're getting there!' -++++meter name='funding' valueForRange=10.00 minValueForRange=0.00 maxValueForRange=100.00 -++++++staticText name='Not so great.' -++++++++inlineTextBox name='Not so great.' +++++genericContainer ignored +++++++meter name='funding' value='half-way' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++++staticText name='We're getting there!' +++++++++++inlineTextBox name='We're getting there!' +++++++meter name='funding' valueForRange=10.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++++staticText name='Not so great.' +++++++++++inlineTextBox name='Not so great.'
diff --git a/content/test/data/accessibility/aria/aria-modal-expected-blink.txt b/content/test/data/accessibility/aria/aria-modal-expected-blink.txt index 40993fcd..d8ca6c1 100644 --- a/content/test/data/accessibility/aria/aria-modal-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-modal-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++dialog modal=false -++++++staticText name='Nonmodal' -++++++++inlineTextBox name='Nonmodal' -++++dialog modal=true -++++++staticText name='Modal' -++++++++inlineTextBox name='Modal' +++++genericContainer ignored +++++++dialog modal=false +++++++++staticText name='Nonmodal' +++++++++++inlineTextBox name='Nonmodal' +++++++dialog modal=true +++++++++staticText name='Modal' +++++++++++inlineTextBox name='Modal'
diff --git a/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt b/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt index ba5071fc2..83c6882 100644 --- a/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-multiline-expected-blink.txt
@@ -1,4 +1,5 @@ rootWebArea ++genericContainer ignored -++++textField -++++textField multiline +++++genericContainer ignored +++++++textField +++++++textField multiline
diff --git a/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt b/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt index eb1bd3e..08afc25 100644 --- a/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-multiselectable-expected-blink.txt
@@ -1,4 +1,5 @@ rootWebArea ++genericContainer ignored -++++listBox multiselectable -++++listBox +++++genericContainer ignored +++++++listBox multiselectable +++++++listBox
diff --git a/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt b/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt index 0e3403b..97c62da 100644 --- a/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-navigation-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++navigation +++++genericContainer ignored +++++++navigation
diff --git a/content/test/data/accessibility/aria/aria-none-expected-blink.txt b/content/test/data/accessibility/aria/aria-none-expected-blink.txt index ee4ddd6b..78ef92c4 100644 --- a/content/test/data/accessibility/aria/aria-none-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-none-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++none ignored -++++++staticText name='With aria-role none' -++++++++inlineTextBox name='With aria-role none' +++++genericContainer ignored +++++++none ignored +++++++++staticText name='With aria-role none' +++++++++++inlineTextBox name='With aria-role none'
diff --git a/content/test/data/accessibility/aria/aria-note-expected-blink.txt b/content/test/data/accessibility/aria/aria-note-expected-blink.txt index 4e230d5..8617a6b 100644 --- a/content/test/data/accessibility/aria/aria-note-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-note-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++note +++++genericContainer ignored +++++++note
diff --git a/content/test/data/accessibility/aria/aria-option-expected-blink.txt b/content/test/data/accessibility/aria/aria-option-expected-blink.txt index 6ae7986..796f955 100644 --- a/content/test/data/accessibility/aria/aria-option-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-option-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea focusable ++genericContainer ignored -++++listBox -++++++listBoxOption focusable name='option 1' selected=false -++++++listBoxOption focusable name='label 2' selected=false -++++++listBoxOption focusable name='caterpillar' selected=false -++++++++staticText name='cat' -++++++++++inlineTextBox name='cat' -++++++++staticText name='erpillar' -++++++++++inlineTextBox name='erpillar' -++++++listBoxOption focusable name='catfish' selected=false -++++++++staticText name='cat' -++++++++++inlineTextBox name='cat' -++++++++staticText name='fish' -++++++++++inlineTextBox name='fish' +++++genericContainer ignored +++++++listBox +++++++++listBoxOption focusable name='option 1' selected=false +++++++++listBoxOption focusable name='label 2' selected=false +++++++++listBoxOption focusable name='caterpillar' selected=false +++++++++++staticText name='cat' +++++++++++++inlineTextBox name='cat' +++++++++++staticText name='erpillar' +++++++++++++inlineTextBox name='erpillar' +++++++++listBoxOption focusable name='catfish' selected=false +++++++++++staticText name='cat' +++++++++++++inlineTextBox name='cat' +++++++++++staticText name='fish' +++++++++++++inlineTextBox name='fish'
diff --git a/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt b/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt index 86567fc..7eac534 100644 --- a/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-orientation-expected-blink.txt
@@ -1,38 +1,39 @@ rootWebArea ++genericContainer ignored -++++comboBoxGrouping -++++comboBoxGrouping horizontal -++++comboBoxGrouping vertical -++++listBox vertical -++++listBox horizontal -++++listBox vertical -++++menu vertical -++++menu horizontal -++++menu vertical -++++menuBar horizontal -++++menuBar horizontal -++++menuBar vertical -++++radioGroup -++++radioGroup horizontal -++++radioGroup vertical -++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++slider vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 -++++splitter horizontal -++++splitter horizontal -++++splitter vertical -++++tabList horizontal -++++tabList horizontal -++++tabList vertical -++++toolbar horizontal -++++toolbar horizontal -++++toolbar vertical -++++tree vertical -++++tree horizontal -++++tree vertical -++++treeGrid -++++treeGrid horizontal -++++treeGrid vertical +++++genericContainer ignored +++++++comboBoxGrouping +++++++comboBoxGrouping horizontal +++++++comboBoxGrouping vertical +++++++listBox vertical +++++++listBox horizontal +++++++listBox vertical +++++++menu vertical +++++++menu horizontal +++++++menu vertical +++++++menuBar horizontal +++++++menuBar horizontal +++++++menuBar vertical +++++++radioGroup +++++++radioGroup horizontal +++++++radioGroup vertical +++++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++scrollBar horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++scrollBar vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++slider horizontal valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++slider vertical valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++splitter horizontal +++++++splitter horizontal +++++++splitter vertical +++++++tabList horizontal +++++++tabList horizontal +++++++tabList vertical +++++++toolbar horizontal +++++++toolbar horizontal +++++++toolbar vertical +++++++tree vertical +++++++tree horizontal +++++++tree vertical +++++++treeGrid +++++++treeGrid horizontal +++++++treeGrid vertical
diff --git a/content/test/data/accessibility/aria/aria-owns-expected-blink.txt b/content/test/data/accessibility/aria/aria-owns-expected-blink.txt index 5a9c4ce0..3cc65334 100644 --- a/content/test/data/accessibility/aria/aria-owns-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-owns-expected-blink.txt
@@ -1,26 +1,27 @@ rootWebArea ++genericContainer ignored -++++list -++++++listItem -++++++++listMarker name='• ' -++++++++++staticText name='• ' -++++++++++++inlineTextBox name='• ' -++++++++genericContainer -++++++++++staticText name='One' -++++++++++++inlineTextBox name='One' -++++++listItem -++++++++listMarker name='• ' -++++++++++staticText name='• ' -++++++++++++inlineTextBox name='•' -++++++++genericContainer -++++++++++staticText name='Two' -++++++++++++inlineTextBox name='Two' ++++genericContainer ignored -++++genericContainer ignored -++++++listItem -++++++++listMarker name='• ' -++++++++++staticText name='• ' -++++++++++++inlineTextBox name='•' -++++++++genericContainer -++++++++++staticText name='Three' -++++++++++++inlineTextBox name='Three' +++++++list +++++++++listItem +++++++++++listMarker name='• ' +++++++++++++staticText name='• ' +++++++++++++++inlineTextBox name='• ' +++++++++++genericContainer +++++++++++++staticText name='One' +++++++++++++++inlineTextBox name='One' +++++++++listItem +++++++++++listMarker name='• ' +++++++++++++staticText name='• ' +++++++++++++++inlineTextBox name='•' +++++++++++genericContainer +++++++++++++staticText name='Two' +++++++++++++++inlineTextBox name='Two' +++++++genericContainer ignored +++++++genericContainer ignored +++++++++listItem +++++++++++listMarker name='• ' +++++++++++++staticText name='• ' +++++++++++++++inlineTextBox name='•' +++++++++++genericContainer +++++++++++++staticText name='Three' +++++++++++++++inlineTextBox name='Three'
diff --git a/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt b/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt index b77562b..35346f6 100644 --- a/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-owns-list-expected-blink.txt
@@ -1,9 +1,10 @@ rootWebArea ++genericContainer ignored -++++list pageSize=(400, 400) -++++++listItem pageSize=(400, 200) -++++++++staticText name='One' -++++++++++inlineTextBox name='One' -++++++listItem pageSize=(400, 200) -++++++++staticText name='Two' -++++++++++inlineTextBox name='Two' +++++genericContainer ignored +++++++list pageSize=(400, 400) +++++++++listItem pageSize=(400, 200) +++++++++++staticText name='One' +++++++++++++inlineTextBox name='One' +++++++++listItem pageSize=(400, 200) +++++++++++staticText name='Two' +++++++++++++inlineTextBox name='Two'
diff --git a/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt b/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt index bd4fef6..48397fb 100644 --- a/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-posinset-expected-blink.txt
@@ -1,52 +1,53 @@ rootWebArea ++genericContainer ignored -++++article setSize=0 posInSet=0 -++++++staticText name='This is an ARIA article 1.' -++++++++inlineTextBox name='This is an ARIA article 1.' -++++article setSize=0 posInSet=0 -++++++staticText name='This is an ARIA article 2.' -++++++++inlineTextBox name='This is an ARIA article 2.' -++++listBox setSize=2 -++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false -++++listBox setSize=2 -++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false -++++form -++++++radioButton setSize=4 posInSet=3 checkedState=false -++++++staticText name='1' -++++++++inlineTextBox name='1' -++++++lineBreak name='<newline>' -++++++++inlineTextBox name='<newline>' -++++++radioButton setSize=4 posInSet=4 checkedState=false -++++++staticText name='2' -++++++++inlineTextBox name='2' -++++radioButton setSize=2 posInSet=1 checkedState=false -++++staticText name='Apple' -++++++inlineTextBox name='Apple' -++++lineBreak name='<newline>' -++++++inlineTextBox name='<newline>' -++++radioButton setSize=2 posInSet=2 checkedState=false -++++staticText name='Banana' -++++++inlineTextBox name='Banana' -++++group name='Cake' setSize=0 -++++++legend -++++++++staticText name='Cake' -++++++++++inlineTextBox name='Cake' -++++++radioButton name='Chiffon cakes' setSize=2 posInSet=1 checkedState=true -++++++lineBreak name='<newline>' -++++++++inlineTextBox name='<newline>' -++++++radioButton name='Chocolate cakes' setSize=2 posInSet=2 checkedState=false -++++form -++++++paragraph -++++++++button name='changedFromRadio' -++++++++++staticText name='changedFromRadio' -++++++++++++inlineTextBox name='changedFromRadio' -++++++++labelText -++++++++++staticText name='red' -++++++++++++inlineTextBox name='red' +++++genericContainer ignored +++++++article setSize=0 posInSet=0 +++++++++staticText name='This is an ARIA article 1.' +++++++++++inlineTextBox name='This is an ARIA article 1.' +++++++article setSize=0 posInSet=0 +++++++++staticText name='This is an ARIA article 2.' +++++++++++inlineTextBox name='This is an ARIA article 2.' +++++++listBox setSize=2 +++++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false +++++++listBox setSize=2 +++++++++listBoxOption name='Item 1' setSize=2 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=2 posInSet=2 selected=false +++++++form +++++++++radioButton setSize=4 posInSet=3 checkedState=false +++++++++staticText name='1' +++++++++++inlineTextBox name='1' ++++++++lineBreak name='<newline>' ++++++++++inlineTextBox name='<newline>' -++++++++radioButton name='blue' setSize=1 posInSet=1 checkedState=false -++++staticText name='Done' -++++++inlineTextBox name='Done' +++++++++radioButton setSize=4 posInSet=4 checkedState=false +++++++++staticText name='2' +++++++++++inlineTextBox name='2' +++++++radioButton setSize=2 posInSet=1 checkedState=false +++++++staticText name='Apple' +++++++++inlineTextBox name='Apple' +++++++lineBreak name='<newline>' +++++++++inlineTextBox name='<newline>' +++++++radioButton setSize=2 posInSet=2 checkedState=false +++++++staticText name='Banana' +++++++++inlineTextBox name='Banana' +++++++group name='Cake' setSize=0 +++++++++legend +++++++++++staticText name='Cake' +++++++++++++inlineTextBox name='Cake' +++++++++radioButton name='Chiffon cakes' setSize=2 posInSet=1 checkedState=true +++++++++lineBreak name='<newline>' +++++++++++inlineTextBox name='<newline>' +++++++++radioButton name='Chocolate cakes' setSize=2 posInSet=2 checkedState=false +++++++form +++++++++paragraph +++++++++++button name='changedFromRadio' +++++++++++++staticText name='changedFromRadio' +++++++++++++++inlineTextBox name='changedFromRadio' +++++++++++labelText +++++++++++++staticText name='red' +++++++++++++++inlineTextBox name='red' +++++++++++lineBreak name='<newline>' +++++++++++++inlineTextBox name='<newline>' +++++++++++radioButton name='blue' setSize=1 posInSet=1 checkedState=false +++++++staticText name='Done' +++++++++inlineTextBox name='Done'
diff --git a/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt b/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt index feffaa5..2d7dcb3 100644 --- a/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-presentation-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++presentational ignored -++++++staticText name='aria-role presentation' -++++++++inlineTextBox name='aria-role presentation' +++++genericContainer ignored +++++++presentational ignored +++++++++staticText name='aria-role presentation' +++++++++++inlineTextBox name='aria-role presentation'
diff --git a/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt b/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt index d1ae6057..fe4aeb81 100644 --- a/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-pressed-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++button name='Regular button' -++++++staticText name='Regular button' -++++++++inlineTextBox name='Regular button' -++++toggleButton name='Toggle button unpressed' checkedState=false -++++toggleButton name='Toggle button pressed' checkedState=true -++++toggleButton name='Toggle button mixed' checkedState=mixed +++++genericContainer ignored +++++++button name='Regular button' +++++++++staticText name='Regular button' +++++++++++inlineTextBox name='Regular button' +++++++toggleButton name='Toggle button unpressed' checkedState=false +++++++toggleButton name='Toggle button pressed' checkedState=true +++++++toggleButton name='Toggle button mixed' checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-radio-expected-blink.txt b/content/test/data/accessibility/aria/aria-radio-expected-blink.txt index c413cb9..1ce9749a 100644 --- a/content/test/data/accessibility/aria/aria-radio-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-radio-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++radioButton name='Radio1' checkedState=false +++++genericContainer ignored +++++++radioButton name='Radio1' checkedState=false
diff --git a/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt b/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt index 58753ac..106afd67 100644 --- a/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-radiogroup-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++radioGroup name='My group' -++++++radioButton name='Radio 1' checkedState=false radioGroupIds=radioButton,radioButton -++++++radioButton name='Radio 2' checkedState=false radioGroupIds=radioButton,radioButton +++++genericContainer ignored +++++++radioGroup name='My group' +++++++++radioButton name='Radio 1' checkedState=false radioGroupIds=radioButton,radioButton +++++++++radioButton name='Radio 2' checkedState=false radioGroupIds=radioButton,radioButton
diff --git a/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt b/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt index 4ad5d40..6ca9ef5 100644 --- a/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-readonly-expected-blink.txt
@@ -1,31 +1,32 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++textField value='Readonly-false input' -++++++++genericContainer -++++++++++staticText name='Readonly-false input' -++++++++++++inlineTextBox name='Readonly-false input' -++++genericContainer -++++++textField value='Readonly-true input' restriction=readOnly -++++++++genericContainer -++++++++++staticText name='Readonly-true input' -++++++++++++inlineTextBox name='Readonly-true input' -++++genericContainer name='Readonly-false plain div' -++++genericContainer name='Readonly-true plain div' -++++genericContainer multiline name='Readonly-false contenteditable div' -++++genericContainer multiline name='Readonly-true contenteditable div' -++++textField name='Readonly-false role unimplemented textbox' -++++textField name='Readonly-true role unimplemented textbox' restriction=readOnly -++++textField name='Readonly-false contenteditable textbox' -++++textField name='Readonly-true contenteditable textbox' restriction=readOnly -++++checkBox name='Readonly checkbox' restriction=readOnly -++++textFieldWithComboBox name='Readonly combobox' restriction=readOnly haspopup=listbox +++++genericContainer ignored ++++++genericContainer -++++listBox name='Readonly listbox' restriction=readOnly -++++radioGroup name='Readonly radiogroup' restriction=readOnly -++++slider horizontal name='Readonly slider' restriction=readOnly -++++spinButton name='Readonly spinbutton' restriction=readOnly -++++menuItemCheckBox name='Readonly menuitemcheckbox' restriction=readOnly -++++menuItemRadio name='Readonly menuitemradio' restriction=readOnly -++++searchBox name='Readonly searchbox' restriction=readOnly -++++switch name='Readonly switch' restriction=readOnly +++++++++textField value='Readonly-false input' +++++++++++genericContainer +++++++++++++staticText name='Readonly-false input' +++++++++++++++inlineTextBox name='Readonly-false input' +++++++genericContainer +++++++++textField value='Readonly-true input' restriction=readOnly +++++++++++genericContainer +++++++++++++staticText name='Readonly-true input' +++++++++++++++inlineTextBox name='Readonly-true input' +++++++genericContainer name='Readonly-false plain div' +++++++genericContainer name='Readonly-true plain div' +++++++genericContainer multiline name='Readonly-false contenteditable div' +++++++genericContainer multiline name='Readonly-true contenteditable div' +++++++textField name='Readonly-false role unimplemented textbox' +++++++textField name='Readonly-true role unimplemented textbox' restriction=readOnly +++++++textField name='Readonly-false contenteditable textbox' +++++++textField name='Readonly-true contenteditable textbox' restriction=readOnly +++++++checkBox name='Readonly checkbox' restriction=readOnly +++++++textFieldWithComboBox name='Readonly combobox' restriction=readOnly haspopup=listbox +++++++++genericContainer +++++++listBox name='Readonly listbox' restriction=readOnly +++++++radioGroup name='Readonly radiogroup' restriction=readOnly +++++++slider horizontal name='Readonly slider' restriction=readOnly +++++++spinButton name='Readonly spinbutton' restriction=readOnly +++++++menuItemCheckBox name='Readonly menuitemcheckbox' restriction=readOnly +++++++menuItemRadio name='Readonly menuitemradio' restriction=readOnly +++++++searchBox name='Readonly searchbox' restriction=readOnly +++++++switch name='Readonly switch' restriction=readOnly
diff --git a/content/test/data/accessibility/aria/aria-region-expected-blink.txt b/content/test/data/accessibility/aria/aria-region-expected-blink.txt index 0738ec3..87eb2aa 100644 --- a/content/test/data/accessibility/aria/aria-region-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-region-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++region -++++++staticText name='This is an ARIA region.' -++++++++inlineTextBox name='This is an ARIA region.' +++++genericContainer ignored +++++++region +++++++++staticText name='This is an ARIA region.' +++++++++++inlineTextBox name='This is an ARIA region.'
diff --git a/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt b/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt index c74ab31..0c16b74a8 100644 --- a/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-relevant-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++log containerLiveRelevant='additions' liveRelevant='additions' -++++log containerLiveRelevant='removals' liveRelevant='removals' -++++log containerLiveRelevant='text' liveRelevant='text' -++++log containerLiveRelevant='all' liveRelevant='all' -++++log containerLiveRelevant='additions text' liveRelevant='additions text' +++++genericContainer ignored +++++++log containerLiveRelevant='additions' liveRelevant='additions' +++++++log containerLiveRelevant='removals' liveRelevant='removals' +++++++log containerLiveRelevant='text' liveRelevant='text' +++++++log containerLiveRelevant='all' liveRelevant='all' +++++++log containerLiveRelevant='additions text' liveRelevant='additions text'
diff --git a/content/test/data/accessibility/aria/aria-required-expected-blink.txt b/content/test/data/accessibility/aria/aria-required-expected-blink.txt index 432a8b66..fc614086 100644 --- a/content/test/data/accessibility/aria/aria-required-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-required-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++radioGroup required -++++++radioButton checkedState=false -++++++radioButton checkedState=false +++++genericContainer ignored +++++++radioGroup required +++++++++radioButton checkedState=false +++++++++radioButton checkedState=false
diff --git a/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt b/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt index 86fa5343..bb40533 100644 --- a/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-roledescription-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++button name='Native button' -++++++staticText name='Native button' -++++++++inlineTextBox name='Native button' -++++button name='ARIA button' -++++++staticText name='ARIA button' -++++++++inlineTextBox name='ARIA button' -++++button name='Clicky button' roleDescription='Clicky' -++++++staticText name='Clicky button' -++++++++inlineTextBox name='Clicky button' +++++genericContainer ignored +++++++button name='Native button' +++++++++staticText name='Native button' +++++++++++inlineTextBox name='Native button' +++++++button name='ARIA button' +++++++++staticText name='ARIA button' +++++++++++inlineTextBox name='ARIA button' +++++++button name='Clicky button' roleDescription='Clicky' +++++++++staticText name='Clicky button' +++++++++++inlineTextBox name='Clicky button'
diff --git a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt index bca17b7..962080d 100644 --- a/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-row-attr-expected-blink.txt
@@ -1,20 +1,21 @@ rootWebArea ++genericContainer ignored -++++grid ariaRowCount=5 -++++++row -++++++++columnHeader name='cell 2' ariaCellRowIndex=3 -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++columnHeader name='cell 3' ariaCellRowIndex=3 -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' -++++++++columnHeader name='cell 4' ariaCellRowIndex=3 ariaCellRowSpan=2 -++++++++++staticText name='cell 4' -++++++++++++inlineTextBox name='cell 4' -++++++row ariaCellRowIndex=4 -++++++++cell name='cell 2' ariaCellRowIndex=4 -++++++++++staticText name='cell 2' -++++++++++++inlineTextBox name='cell 2' -++++++++cell name='cell 3' ariaCellRowIndex=4 -++++++++++staticText name='cell 3' -++++++++++++inlineTextBox name='cell 3' +++++genericContainer ignored +++++++grid ariaRowCount=5 +++++++++row +++++++++++columnHeader name='cell 2' ariaCellRowIndex=3 +++++++++++++staticText name='cell 2' +++++++++++++++inlineTextBox name='cell 2' +++++++++++columnHeader name='cell 3' ariaCellRowIndex=3 +++++++++++++staticText name='cell 3' +++++++++++++++inlineTextBox name='cell 3' +++++++++++columnHeader name='cell 4' ariaCellRowIndex=3 ariaCellRowSpan=2 +++++++++++++staticText name='cell 4' +++++++++++++++inlineTextBox name='cell 4' +++++++++row ariaCellRowIndex=4 +++++++++++cell name='cell 2' ariaCellRowIndex=4 +++++++++++++staticText name='cell 2' +++++++++++++++inlineTextBox name='cell 2' +++++++++++cell name='cell 3' ariaCellRowIndex=4 +++++++++++++staticText name='cell 3' +++++++++++++++inlineTextBox name='cell 3'
diff --git a/content/test/data/accessibility/aria/aria-row-expected-blink.txt b/content/test/data/accessibility/aria/aria-row-expected-blink.txt index 527f2ed5..44073ad 100644 --- a/content/test/data/accessibility/aria/aria-row-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-row-expected-blink.txt
@@ -1,24 +1,25 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++row -++++++++cell name='Safari' -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++++cell name='WebKit' -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink' +++++++++row +++++++++++cell name='Safari' +++++++++++++staticText name='Safari' +++++++++++++++inlineTextBox name='Safari' +++++++++++cell name='WebKit' +++++++++++++staticText name='WebKit' +++++++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt b/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt index 29bb2053..f10832d 100644 --- a/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-rowgroup-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++grid -++++++rowGroup -++++++++row -++++++++row +++++genericContainer ignored +++++++grid +++++++++rowGroup +++++++++++row +++++++++++row
diff --git a/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt b/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt index 518a866..0d44647 100644 --- a/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-rowheader-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++rowHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Safari' -++++++++++staticText name='Safari' -++++++++++++inlineTextBox name='Safari' -++++++row -++++++++rowHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' -++++++++cell name='WebKit' -++++++++++staticText name='WebKit' -++++++++++++inlineTextBox name='WebKit' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++rowHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Safari' +++++++++++++staticText name='Safari' +++++++++++++++inlineTextBox name='Safari' +++++++++row +++++++++++rowHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink' +++++++++++cell name='WebKit' +++++++++++++staticText name='WebKit' +++++++++++++++inlineTextBox name='WebKit'
diff --git a/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt b/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt index cbfb0e1..c2f1721 100644 --- a/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-scrollbar-expected-blink.txt
@@ -1,4 +1,5 @@ rootWebArea ++genericContainer ignored -++++scrollBar vertical valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 -++++scrollBar horizontal valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 +++++genericContainer ignored +++++++scrollBar vertical valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00 +++++++scrollBar horizontal valueForRange=55.00 minValueForRange=0.00 maxValueForRange=100.00
diff --git a/content/test/data/accessibility/aria/aria-search-expected-blink.txt b/content/test/data/accessibility/aria/aria-search-expected-blink.txt index d4bb577..b9e0548 100644 --- a/content/test/data/accessibility/aria/aria-search-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-search-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++search -++++++staticText name='ARIA role search.' -++++++++inlineTextBox name='ARIA role search.' +++++genericContainer ignored +++++++search +++++++++staticText name='ARIA role search.' +++++++++++inlineTextBox name='ARIA role search.'
diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt index 9919ac41..4954f62 100644 --- a/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-searchbox-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++searchBox value='ARIA role searchbox.' -++++++staticText name='ARIA role searchbox.' -++++++++inlineTextBox name='ARIA role searchbox.' +++++genericContainer ignored +++++++searchBox value='ARIA role searchbox.' +++++++++staticText name='ARIA role searchbox.' +++++++++++inlineTextBox name='ARIA role searchbox.'
diff --git a/content/test/data/accessibility/aria/aria-selected-expected-blink.txt b/content/test/data/accessibility/aria/aria-selected-expected-blink.txt index bf5832b..c12ab76 100644 --- a/content/test/data/accessibility/aria/aria-selected-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-selected-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++listBox -++++++listBoxOption name='1' selected=true -++++++listBoxOption name='2' selected=false +++++genericContainer ignored +++++++listBox +++++++++listBoxOption name='1' selected=true +++++++++listBoxOption name='2' selected=false
diff --git a/content/test/data/accessibility/aria/aria-separator-expected-blink.txt b/content/test/data/accessibility/aria/aria-separator-expected-blink.txt index 7112681..7d1df2f4 100644 --- a/content/test/data/accessibility/aria/aria-separator-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-separator-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++staticText name='Before' -++++++inlineTextBox name='Before' -++++splitter horizontal -++++splitter horizontal valueForRange=1.00 minValueForRange=1.00 maxValueForRange=3.00 -++++staticText name='After' -++++++inlineTextBox name='After' +++++genericContainer ignored +++++++staticText name='Before' +++++++++inlineTextBox name='Before' +++++++splitter horizontal +++++++splitter horizontal valueForRange=1.00 minValueForRange=1.00 maxValueForRange=3.00 +++++++staticText name='After' +++++++++inlineTextBox name='After'
diff --git a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt index b717448..bdf61ef 100644 --- a/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-set-counts-with-hidden-items-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea ++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++listBoxOption invisible name='Hidden' selected=false -++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false -++++listBox setSize=5 -++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false -++++++listBoxOption invisible name='Hidden' selected=false -++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false -++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false +++++genericContainer ignored +++++++listBox setSize=4 +++++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++++++listBoxOption invisible name='Hidden' selected=false +++++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false +++++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false +++++++listBox setSize=5 +++++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false +++++++++listBoxOption invisible name='Hidden' selected=false +++++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false +++++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false +++++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false
diff --git a/content/test/data/accessibility/aria/aria-set-counts-with-tree-levels-expected-blink.txt b/content/test/data/accessibility/aria/aria-set-counts-with-tree-levels-expected-blink.txt index 2f36c1b71..640348e 100644 --- a/content/test/data/accessibility/aria/aria-set-counts-with-tree-levels-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-set-counts-with-tree-levels-expected-blink.txt
@@ -1,27 +1,28 @@ rootWebArea ++genericContainer ignored -++++tree setSize=2 -++++++treeItem name='Item A' hierarchicalLevel=1 setSize=2 posInSet=1 -++++++++staticText name='Item A' -++++++++++inlineTextBox name='Item A' -++++++treeItem name='Item A1' hierarchicalLevel=2 setSize=2 posInSet=1 -++++++++staticText name='Item A1' -++++++++++inlineTextBox name='Item A1' -++++++treeItem name='Item A1x' hierarchicalLevel=3 setSize=3 posInSet=1 -++++++++staticText name='Item A1x' -++++++++++inlineTextBox name='Item A1x' -++++++treeItem name='Item A1y' hierarchicalLevel=3 setSize=3 posInSet=2 -++++++++staticText name='Item A1y' -++++++++++inlineTextBox name='Item A1y' -++++++treeItem name='Item A1z' hierarchicalLevel=3 setSize=3 posInSet=3 -++++++++staticText name='Item A1z' -++++++++++inlineTextBox name='Item A1z' -++++++treeItem name='Item A2' hierarchicalLevel=2 setSize=2 posInSet=2 -++++++++staticText name='Item A2' -++++++++++inlineTextBox name='Item A2' -++++++treeItem name='Item B' hierarchicalLevel=1 setSize=2 posInSet=2 -++++++++staticText name='Item B' -++++++++++inlineTextBox name='Item B' -++++++treeItem name='Item B1' hierarchicalLevel=2 setSize=1 posInSet=1 -++++++++staticText name='Item B1' -++++++++++inlineTextBox name='Item B1' +++++genericContainer ignored +++++++tree setSize=2 +++++++++treeItem name='Item A' hierarchicalLevel=1 setSize=2 posInSet=1 +++++++++++staticText name='Item A' +++++++++++++inlineTextBox name='Item A' +++++++++treeItem name='Item A1' hierarchicalLevel=2 setSize=2 posInSet=1 +++++++++++staticText name='Item A1' +++++++++++++inlineTextBox name='Item A1' +++++++++treeItem name='Item A1x' hierarchicalLevel=3 setSize=3 posInSet=1 +++++++++++staticText name='Item A1x' +++++++++++++inlineTextBox name='Item A1x' +++++++++treeItem name='Item A1y' hierarchicalLevel=3 setSize=3 posInSet=2 +++++++++++staticText name='Item A1y' +++++++++++++inlineTextBox name='Item A1y' +++++++++treeItem name='Item A1z' hierarchicalLevel=3 setSize=3 posInSet=3 +++++++++++staticText name='Item A1z' +++++++++++++inlineTextBox name='Item A1z' +++++++++treeItem name='Item A2' hierarchicalLevel=2 setSize=2 posInSet=2 +++++++++++staticText name='Item A2' +++++++++++++inlineTextBox name='Item A2' +++++++++treeItem name='Item B' hierarchicalLevel=1 setSize=2 posInSet=2 +++++++++++staticText name='Item B' +++++++++++++inlineTextBox name='Item B' +++++++++treeItem name='Item B1' hierarchicalLevel=2 setSize=1 posInSet=1 +++++++++++staticText name='Item B1' +++++++++++++inlineTextBox name='Item B1'
diff --git a/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt b/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt index 6268477..5c9676f2 100644 --- a/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-setsize-expected-blink.txt
@@ -1,13 +1,14 @@ rootWebArea ++genericContainer ignored -++++listBox setSize=4 -++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false -++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false -++++listBox setSize=5 -++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false -++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false -++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false -++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false -++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false +++++genericContainer ignored +++++++listBox setSize=4 +++++++++listBoxOption name='Item 1' setSize=4 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=4 posInSet=2 selected=false +++++++++listBoxOption name='Item 3' setSize=4 posInSet=3 selected=false +++++++++listBoxOption name='Item 4' setSize=4 posInSet=4 selected=false +++++++listBox setSize=5 +++++++++listBoxOption name='Item 1' setSize=5 posInSet=1 selected=false +++++++++listBoxOption name='Item 2' setSize=5 posInSet=2 selected=false +++++++++listBoxOption name='Item 3' setSize=5 posInSet=3 selected=false +++++++++listBoxOption name='Item 4' setSize=5 posInSet=4 selected=false +++++++++listBoxOption name='Item 5' setSize=5 posInSet=5 selected=false
diff --git a/content/test/data/accessibility/aria/aria-slider-expected-blink.txt b/content/test/data/accessibility/aria/aria-slider-expected-blink.txt index ab0e361e..91df02f 100644 --- a/content/test/data/accessibility/aria/aria-slider-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-slider-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++slider horizontal valueForRange=5.00 minValueForRange=1.00 maxValueForRange=10.00 +++++genericContainer ignored +++++++slider horizontal valueForRange=5.00 minValueForRange=1.00 maxValueForRange=10.00
diff --git a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt index a7d0309e..589ad369 100644 --- a/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-sort-aria-grid-expected-blink.txt
@@ -1,122 +1,123 @@ rootWebArea ++genericContainer ignored -++++grid -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++grid -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++grid -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' +++++genericContainer ignored +++++++grid +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++grid +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++grid +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++grid +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++grid +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A'
diff --git a/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt b/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt index 9c7a14a3..45d0c28a 100644 --- a/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-sort-html-table-expected-blink.txt
@@ -1,139 +1,140 @@ rootWebArea ++genericContainer ignored -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' +++++genericContainer ignored +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++table name='Data table' +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++table name='Data table' +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++table name='Data table' +++++++++row +++++++++++rowHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++table name='Data table' +++++++++row +++++++++++columnHeader name='Alphabet' +++++++++++++staticText name='Alphabet' +++++++++++++++inlineTextBox name='Alphabet' +++++++++row +++++++++++cell name='A' +++++++++++++staticText name='A' +++++++++++++++inlineTextBox name='A' +++++++++row +++++++++++cell name='B' +++++++++++++staticText name='B' +++++++++++++++inlineTextBox name='B' +++++++none ignored +++++++++genericContainer ++++++++++staticText name='Alphabet' ++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++rowHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++table name='Data table' -++++++row -++++++++columnHeader name='Alphabet' -++++++++++staticText name='Alphabet' -++++++++++++inlineTextBox name='Alphabet' -++++++row -++++++++cell name='A' -++++++++++staticText name='A' -++++++++++++inlineTextBox name='A' -++++++row -++++++++cell name='B' -++++++++++staticText name='B' -++++++++++++inlineTextBox name='B' -++++none ignored -++++++genericContainer -++++++++staticText name='Alphabet' -++++++++++inlineTextBox name='Alphabet'
diff --git a/content/test/data/accessibility/aria/aria-status-expected-blink.txt b/content/test/data/accessibility/aria/aria-status-expected-blink.txt index dd2477aa..25ba0653 100644 --- a/content/test/data/accessibility/aria/aria-status-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-status-expected-blink.txt
@@ -1,4 +1,5 @@ rootWebArea ++genericContainer ignored -++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true -++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false +++++genericContainer ignored +++++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=true containerLiveBusy=false liveAtomic=true +++++++status containerLiveRelevant='additions text' containerLiveStatus='polite' liveRelevant='additions text' liveStatus='polite' containerLiveAtomic=false containerLiveBusy=false liveAtomic=false
diff --git a/content/test/data/accessibility/aria/aria-strong-expected-blink.txt b/content/test/data/accessibility/aria/aria-strong-expected-blink.txt index ea52203..5a07e03 100644 --- a/content/test/data/accessibility/aria/aria-strong-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-strong-expected-blink.txt
@@ -1,12 +1,13 @@ rootWebArea ++genericContainer ignored -++++strong -++++++staticText name='role' -++++++++inlineTextBox name='role' -++++staticText name='element (no name)' -++++++inlineTextBox name='element (no name)' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++strong name='include me' -++++++staticText name='element (with name)' -++++++++inlineTextBox name='element (with name)' +++++genericContainer ignored +++++++strong +++++++++staticText name='role' +++++++++++inlineTextBox name='role' +++++++staticText name='element (no name)' +++++++++inlineTextBox name='element (no name)' +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++strong name='include me' +++++++++staticText name='element (with name)' +++++++++++inlineTextBox name='element (with name)'
diff --git a/content/test/data/accessibility/aria/aria-switch-expected-blink.txt b/content/test/data/accessibility/aria/aria-switch-expected-blink.txt index 80524b8..a8a32b9 100644 --- a/content/test/data/accessibility/aria/aria-switch-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-switch-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea ++genericContainer ignored -++++switch name='Switch1' checkedState=false -++++switch name='Switch2' checkedState=false -++++switch name='Switch3' checkedState=true -++++switch name='Switch4' checkedState=true +++++genericContainer ignored +++++++switch name='Switch1' checkedState=false +++++++switch name='Switch2' checkedState=false +++++++switch name='Switch3' checkedState=true +++++++switch name='Switch4' checkedState=true
diff --git a/content/test/data/accessibility/aria/aria-tab-expected-blink.txt b/content/test/data/accessibility/aria/aria-tab-expected-blink.txt index 905b285..26385399 100644 --- a/content/test/data/accessibility/aria/aria-tab-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tab-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++tabList horizontal hierarchicalLevel=1 setSize=2 -++++++tab name='Tab 1' setSize=2 posInSet=1 selected=false -++++++tab name='Tab 2' setSize=2 posInSet=2 selected=false +++++genericContainer ignored +++++++tabList horizontal hierarchicalLevel=1 setSize=2 +++++++++tab name='Tab 1' setSize=2 posInSet=1 selected=false +++++++++tab name='Tab 2' setSize=2 posInSet=2 selected=false
diff --git a/content/test/data/accessibility/aria/aria-tab-nested-in-lists-expected-blink.txt b/content/test/data/accessibility/aria/aria-tab-nested-in-lists-expected-blink.txt index fd69e57..af49f7a2 100644 --- a/content/test/data/accessibility/aria/aria-tab-nested-in-lists-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tab-nested-in-lists-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++tabList horizontal hierarchicalLevel=1 -++++++listItem hierarchicalLevel=1 -++++++++tab name='tab1' setSize=5 posInSet=2 selected=false -++++++listItem hierarchicalLevel=1 -++++++++tab name='tab2' setSize=5 posInSet=3 selected=false -++++++listItem hierarchicalLevel=1 -++++++++tab name='tab3' setSize=5 posInSet=4 selected=false -++++++listItem hierarchicalLevel=1 -++++++++tab name='tab4' setSize=5 posInSet=5 selected=false +++++genericContainer ignored +++++++tabList horizontal hierarchicalLevel=1 +++++++++listItem hierarchicalLevel=1 +++++++++++tab name='tab1' setSize=5 posInSet=2 selected=false +++++++++listItem hierarchicalLevel=1 +++++++++++tab name='tab2' setSize=5 posInSet=3 selected=false +++++++++listItem hierarchicalLevel=1 +++++++++++tab name='tab3' setSize=5 posInSet=4 selected=false +++++++++listItem hierarchicalLevel=1 +++++++++++tab name='tab4' setSize=5 posInSet=5 selected=false
diff --git a/content/test/data/accessibility/aria/aria-table-expected-blink.txt b/content/test/data/accessibility/aria/aria-table-expected-blink.txt index fb46664..c970851e 100644 --- a/content/test/data/accessibility/aria/aria-table-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-table-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++table -++++++row -++++++++columnHeader name='Browser' -++++++++++staticText name='Browser' -++++++++++++inlineTextBox name='Browser' -++++++++columnHeader name='Rendering Engine' -++++++++++staticText name='Rendering Engine' -++++++++++++inlineTextBox name='Rendering Engine' -++++++row -++++++++cell name='Chrome' -++++++++++staticText name='Chrome' -++++++++++++inlineTextBox name='Chrome' -++++++++cell name='Blink' -++++++++++staticText name='Blink' -++++++++++++inlineTextBox name='Blink' +++++genericContainer ignored +++++++table +++++++++row +++++++++++columnHeader name='Browser' +++++++++++++staticText name='Browser' +++++++++++++++inlineTextBox name='Browser' +++++++++++columnHeader name='Rendering Engine' +++++++++++++staticText name='Rendering Engine' +++++++++++++++inlineTextBox name='Rendering Engine' +++++++++row +++++++++++cell name='Chrome' +++++++++++++staticText name='Chrome' +++++++++++++++inlineTextBox name='Chrome' +++++++++++cell name='Blink' +++++++++++++staticText name='Blink' +++++++++++++++inlineTextBox name='Blink'
diff --git a/content/test/data/accessibility/aria/aria-table-illegal-roles-expected-blink.txt b/content/test/data/accessibility/aria/aria-table-illegal-roles-expected-blink.txt index b2cfc90..9ced58f5 100644 --- a/content/test/data/accessibility/aria/aria-table-illegal-roles-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-table-illegal-roles-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++staticText name='illegal row' -++++++++inlineTextBox name='illegal row' -++++genericContainer -++++++staticText name='illegal cell' -++++++++inlineTextBox name='illegal cell' -++++genericContainer -++++++staticText name='illegal rowheader' -++++++++inlineTextBox name='illegal rowheader' -++++genericContainer -++++++staticText name='illegal columnheader' -++++++++inlineTextBox name='illegal columnheader' -++++genericContainer -++++++staticText name='illegal rowgroup' -++++++++inlineTextBox name='illegal rowgroup' -++++table -++++++row -++++++++cell name='legal cell' -++++++++++genericContainer -++++++++++++staticText name='illegal cell inside another cell' -++++++++++++++inlineTextBox name='illegal cell inside another cell' +++++genericContainer ignored +++++++genericContainer +++++++++staticText name='illegal row' +++++++++++inlineTextBox name='illegal row' +++++++genericContainer +++++++++staticText name='illegal cell' +++++++++++inlineTextBox name='illegal cell' +++++++genericContainer +++++++++staticText name='illegal rowheader' +++++++++++inlineTextBox name='illegal rowheader' +++++++genericContainer +++++++++staticText name='illegal columnheader' +++++++++++inlineTextBox name='illegal columnheader' +++++++genericContainer +++++++++staticText name='illegal rowgroup' +++++++++++inlineTextBox name='illegal rowgroup' +++++++table +++++++++row +++++++++++cell name='legal cell' +++++++++++++genericContainer +++++++++++++++staticText name='illegal cell inside another cell' +++++++++++++++++inlineTextBox name='illegal cell inside another cell'
diff --git a/content/test/data/accessibility/aria/aria-tablist-aria-level-expected-blink.txt b/content/test/data/accessibility/aria/aria-tablist-aria-level-expected-blink.txt index 546afd0..53432ed 100644 --- a/content/test/data/accessibility/aria/aria-tablist-aria-level-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tablist-aria-level-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea ++genericContainer ignored -++++tabList horizontal hierarchicalLevel=1 setSize=2 -++++++tab name='Tab 1 of 2, level 1' setSize=2 posInSet=1 selected=false -++++++tab name='Tab 2 of 2, level 1' setSize=2 posInSet=2 selected=false -++++tabList horizontal hierarchicalLevel=2 setSize=3 -++++++tab name='Tab 1 of 3, level 2' setSize=3 posInSet=1 selected=false -++++++tab name='Tab 2 of 3, level 2' setSize=3 posInSet=2 selected=false -++++++tabList horizontal hierarchicalLevel=3 setSize=1 -++++++++tab name='Tab 1 of 1, level 3' setSize=1 posInSet=1 selected=false -++++++tab name='Tab 3 of 3, level 2' setSize=3 posInSet=3 selected=false -++++tabList horizontal hierarchicalLevel=2 setSize=1 -++++++tab name='Tab 1 of 1, level 2' setSize=1 posInSet=1 selected=false -++++tabList horizontal hierarchicalLevel=1 setSize=1 -++++++tab name='Tab 1 of 1, level 1' setSize=1 posInSet=1 selected=false +++++genericContainer ignored +++++++tabList horizontal hierarchicalLevel=1 setSize=2 +++++++++tab name='Tab 1 of 2, level 1' setSize=2 posInSet=1 selected=false +++++++++tab name='Tab 2 of 2, level 1' setSize=2 posInSet=2 selected=false +++++++tabList horizontal hierarchicalLevel=2 setSize=3 +++++++++tab name='Tab 1 of 3, level 2' setSize=3 posInSet=1 selected=false +++++++++tab name='Tab 2 of 3, level 2' setSize=3 posInSet=2 selected=false +++++++++tabList horizontal hierarchicalLevel=3 setSize=1 +++++++++++tab name='Tab 1 of 1, level 3' setSize=1 posInSet=1 selected=false +++++++++tab name='Tab 3 of 3, level 2' setSize=3 posInSet=3 selected=false +++++++tabList horizontal hierarchicalLevel=2 setSize=1 +++++++++tab name='Tab 1 of 1, level 2' setSize=1 posInSet=1 selected=false +++++++tabList horizontal hierarchicalLevel=1 setSize=1 +++++++++tab name='Tab 1 of 1, level 1' setSize=1 posInSet=1 selected=false
diff --git a/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt b/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt index 2dc129f..ac62259 100644 --- a/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tablist-expected-blink.txt
@@ -1,13 +1,14 @@ rootWebArea ++genericContainer ignored -++++tabList horizontal hierarchicalLevel=1 setSize=3 -++++++tab name='Tab 1, level 1' setSize=3 posInSet=1 selected=false -++++++tab name='Tab 2, level 1' setSize=3 posInSet=2 selected=false -++++++tabList horizontal hierarchicalLevel=2 setSize=2 -++++++++tab name='Tab 1, level 2' setSize=2 posInSet=1 selected=false -++++++++tab name='Tab 2, level 2' setSize=2 posInSet=2 selected=false -++++++++++staticText name='Tab 2, level 2' -++++++++++++inlineTextBox name='Tab 2, level 2' -++++++++++tabList horizontal hierarchicalLevel=3 setSize=1 -++++++++++++tab name='Tab 1, level 3' setSize=1 posInSet=1 selected=false -++++++tab name='Tab 3, level 1' setSize=3 posInSet=3 selected=false +++++genericContainer ignored +++++++tabList horizontal hierarchicalLevel=1 setSize=3 +++++++++tab name='Tab 1, level 1' setSize=3 posInSet=1 selected=false +++++++++tab name='Tab 2, level 1' setSize=3 posInSet=2 selected=false +++++++++tabList horizontal hierarchicalLevel=2 setSize=2 +++++++++++tab name='Tab 1, level 2' setSize=2 posInSet=1 selected=false +++++++++++tab name='Tab 2, level 2' setSize=2 posInSet=2 selected=false +++++++++++++staticText name='Tab 2, level 2' +++++++++++++++inlineTextBox name='Tab 2, level 2' +++++++++++++tabList horizontal hierarchicalLevel=3 setSize=1 +++++++++++++++tab name='Tab 1, level 3' setSize=1 posInSet=1 selected=false +++++++++tab name='Tab 3, level 1' setSize=3 posInSet=3 selected=false
diff --git a/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt b/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt index e0046b1d..e7c4e7d1 100644 --- a/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tabpanel-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++tabPanel -++++++tab name='Item' selected=false -++++++++heading name='Item' hierarchicalLevel=3 -++++++++++staticText name='Item' -++++++++++++inlineTextBox name='Item' -++++++tab name='Prices' selected=false -++++++++heading name='Prices' hierarchicalLevel=3 -++++++++++staticText name='Prices' -++++++++++++inlineTextBox name='Prices' +++++genericContainer ignored +++++++tabPanel +++++++++tab name='Item' selected=false +++++++++++heading name='Item' hierarchicalLevel=3 +++++++++++++staticText name='Item' +++++++++++++++inlineTextBox name='Item' +++++++++tab name='Prices' selected=false +++++++++++heading name='Prices' hierarchicalLevel=3 +++++++++++++staticText name='Prices' +++++++++++++++inlineTextBox name='Prices'
diff --git a/content/test/data/accessibility/aria/aria-term-expected-blink.txt b/content/test/data/accessibility/aria/aria-term-expected-blink.txt index d4c2d302..fe42249 100644 --- a/content/test/data/accessibility/aria/aria-term-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-term-expected-blink.txt
@@ -1,15 +1,16 @@ rootWebArea ++genericContainer ignored -++++list -++++++term -++++++++staticText name='Term1' -++++++++++inlineTextBox name='Term1' -++++++definition -++++++++staticText name='Definition1' -++++++++++inlineTextBox name='Definition1' -++++++term -++++++++staticText name='Term2' -++++++++++inlineTextBox name='Term2' -++++++definition -++++++++staticText name='Definition2' -++++++++++inlineTextBox name='Definition2' +++++genericContainer ignored +++++++list +++++++++term +++++++++++staticText name='Term1' +++++++++++++inlineTextBox name='Term1' +++++++++definition +++++++++++staticText name='Definition1' +++++++++++++inlineTextBox name='Definition1' +++++++++term +++++++++++staticText name='Term2' +++++++++++++inlineTextBox name='Term2' +++++++++definition +++++++++++staticText name='Definition2' +++++++++++++inlineTextBox name='Definition2'
diff --git a/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt b/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt index eabc414..b2cd8dd 100644 --- a/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-textbox-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++textField value='TextBox1' -++++++staticText name='TextBox1' -++++++++inlineTextBox name='TextBox1' -++++textField multiline value='TextBox2' -++++++staticText name='TextBox2' -++++++++inlineTextBox name='TextBox2' +++++genericContainer ignored +++++++textField value='TextBox1' +++++++++staticText name='TextBox1' +++++++++++inlineTextBox name='TextBox1' +++++++textField multiline value='TextBox2' +++++++++staticText name='TextBox2' +++++++++++inlineTextBox name='TextBox2'
diff --git a/content/test/data/accessibility/aria/aria-time-expected-blink.txt b/content/test/data/accessibility/aria/aria-time-expected-blink.txt index fc961921..c80bbd8 100644 --- a/content/test/data/accessibility/aria/aria-time-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-time-expected-blink.txt
@@ -1,13 +1,14 @@ rootWebArea ++genericContainer ignored -++++time -++++++staticText name='role' -++++++++inlineTextBox name='role' -++++time -++++++staticText name='element (no name)' -++++++++inlineTextBox name='element (no name)' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++time name='include me' -++++++staticText name='element (with name)' -++++++++inlineTextBox name='element (with name)' +++++genericContainer ignored +++++++time +++++++++staticText name='role' +++++++++++inlineTextBox name='role' +++++++time +++++++++staticText name='element (no name)' +++++++++++inlineTextBox name='element (no name)' +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++time name='include me' +++++++++staticText name='element (with name)' +++++++++++inlineTextBox name='element (with name)'
diff --git a/content/test/data/accessibility/aria/aria-timer-expected-blink.txt b/content/test/data/accessibility/aria/aria-timer-expected-blink.txt index 82f043fe..14fa0ac 100644 --- a/content/test/data/accessibility/aria/aria-timer-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-timer-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++timer -++++++staticText name='This test is for aria-role = timer' -++++++++inlineTextBox name='This test is for aria-role = timer' +++++genericContainer ignored +++++++timer +++++++++staticText name='This test is for aria-role = timer' +++++++++++inlineTextBox name='This test is for aria-role = timer'
diff --git a/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt b/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt index 630729f..4b8a6aca 100644 --- a/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-togglebutton-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++button name='Regular button' -++++++staticText name='Regular button' -++++++++inlineTextBox name='Regular button' -++++toggleButton name='Toggle button' checkedState=false -++++toggleButton name='Toggle button' checkedState=true -++++toggleButton name='Toggle button' checkedState=mixed +++++genericContainer ignored +++++++button name='Regular button' +++++++++staticText name='Regular button' +++++++++++inlineTextBox name='Regular button' +++++++toggleButton name='Toggle button' checkedState=false +++++++toggleButton name='Toggle button' checkedState=true +++++++toggleButton name='Toggle button' checkedState=mixed
diff --git a/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt b/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt index 98387db..943c6bee 100644 --- a/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-toolbar-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++toolbar horizontal -++++++staticText name='A toolbar' -++++++++inlineTextBox name='A toolbar' +++++genericContainer ignored +++++++toolbar horizontal +++++++++staticText name='A toolbar' +++++++++++inlineTextBox name='A toolbar'
diff --git a/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt b/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt index f539e1f..0b068858 100644 --- a/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tooltip-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++textField description='Your username should be your email id' descriptionFrom=relatedElement -++++++genericContainer -++++tooltip name='Your username should be your email id' -++++++staticText name='Your username should be your email id' -++++++++inlineTextBox name='Your username should be your email id' +++++genericContainer ignored +++++++textField description='Your username should be your email id' descriptionFrom=relatedElement +++++++++genericContainer +++++++tooltip name='Your username should be your email id' +++++++++staticText name='Your username should be your email id' +++++++++++inlineTextBox name='Your username should be your email id'
diff --git a/content/test/data/accessibility/aria/aria-tree-discontinuous-expected-blink.txt b/content/test/data/accessibility/aria/aria-tree-discontinuous-expected-blink.txt index 393f976..b02f7554 100644 --- a/content/test/data/accessibility/aria/aria-tree-discontinuous-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tree-discontinuous-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored -++++tree setSize=2 -++++++treeItem name='card content' hierarchicalLevel=1 setSize=2 posInSet=1 -++++++++staticText name='card content' -++++++++++inlineTextBox name='card content' -++++++genericContainer -++++++treeItem name='card content' hierarchicalLevel=1 setSize=2 posInSet=2 -++++++++staticText name='card content' -++++++++++inlineTextBox name='card content' +++++genericContainer ignored +++++++tree setSize=2 +++++++++treeItem name='card content' hierarchicalLevel=1 setSize=2 posInSet=1 +++++++++++staticText name='card content' +++++++++++++inlineTextBox name='card content' +++++++++genericContainer +++++++++treeItem name='card content' hierarchicalLevel=1 setSize=2 posInSet=2 +++++++++++staticText name='card content' +++++++++++++inlineTextBox name='card content'
diff --git a/content/test/data/accessibility/aria/aria-tree-expected-blink.txt b/content/test/data/accessibility/aria/aria-tree-expected-blink.txt index a94bf91..62c11d18 100644 --- a/content/test/data/accessibility/aria/aria-tree-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-tree-expected-blink.txt
@@ -1,29 +1,30 @@ rootWebArea ++genericContainer ignored -++++tree setSize=2 -++++++treeItem name='Animals' hierarchicalLevel=1 setSize=2 posInSet=1 checkedState=mixed -++++++++link name='Animals' -++++++++++staticText name='Animals' -++++++++++++inlineTextBox name='Animals' -++++++++group setSize=2 -++++++++++treeItem name='Domesticated' hierarchicalLevel=2 setSize=2 posInSet=1 -++++++++++++link name='Domesticated' -++++++++++++++staticText name='Domesticated' -++++++++++++++++inlineTextBox name='Domesticated' -++++++++++++group setSize=2 -++++++++++++++treeItem name='Dog' hierarchicalLevel=3 setSize=2 posInSet=1 checkedState=true -++++++++++++++++link name='Dog' -++++++++++++++++++staticText name='Dog' -++++++++++++++++++++inlineTextBox name='Dog' -++++++++++++++treeItem name='Cat' hierarchicalLevel=3 setSize=2 posInSet=2 checkedState=false -++++++++++++++++link name='Cat' -++++++++++++++++++staticText name='Cat' -++++++++++++++++++++inlineTextBox name='Cat' -++++++++++treeItem name='Wild' hierarchicalLevel=2 setSize=2 posInSet=2 -++++++++++++link name='Wild' -++++++++++++++staticText name='Wild' -++++++++++++++++inlineTextBox name='Wild' -++++++treeItem name='Plants' hierarchicalLevel=1 setSize=2 posInSet=2 -++++++++link name='Plants' -++++++++++staticText name='Plants' -++++++++++++inlineTextBox name='Plants' +++++genericContainer ignored +++++++tree setSize=2 +++++++++treeItem name='Animals' hierarchicalLevel=1 setSize=2 posInSet=1 checkedState=mixed +++++++++++link name='Animals' +++++++++++++staticText name='Animals' +++++++++++++++inlineTextBox name='Animals' +++++++++++group setSize=2 +++++++++++++treeItem name='Domesticated' hierarchicalLevel=2 setSize=2 posInSet=1 +++++++++++++++link name='Domesticated' +++++++++++++++++staticText name='Domesticated' +++++++++++++++++++inlineTextBox name='Domesticated' +++++++++++++++group setSize=2 +++++++++++++++++treeItem name='Dog' hierarchicalLevel=3 setSize=2 posInSet=1 checkedState=true +++++++++++++++++++link name='Dog' +++++++++++++++++++++staticText name='Dog' +++++++++++++++++++++++inlineTextBox name='Dog' +++++++++++++++++treeItem name='Cat' hierarchicalLevel=3 setSize=2 posInSet=2 checkedState=false +++++++++++++++++++link name='Cat' +++++++++++++++++++++staticText name='Cat' +++++++++++++++++++++++inlineTextBox name='Cat' +++++++++++++treeItem name='Wild' hierarchicalLevel=2 setSize=2 posInSet=2 +++++++++++++++link name='Wild' +++++++++++++++++staticText name='Wild' +++++++++++++++++++inlineTextBox name='Wild' +++++++++treeItem name='Plants' hierarchicalLevel=1 setSize=2 posInSet=2 +++++++++++link name='Plants' +++++++++++++staticText name='Plants' +++++++++++++++inlineTextBox name='Plants'
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt index 52b0b677..b3bd846 100644 --- a/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-treegrid-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++treeGrid -++++++row hierarchicalLevel=1 -++++++++cell name='Cell at level 1' -++++++++++staticText name='Cell at level 1' -++++++++++++inlineTextBox name='Cell at level 1' -++++++row hierarchicalLevel=2 -++++++++cell name='Cell at level 2' -++++++++++staticText name='Cell at level 2' -++++++++++++inlineTextBox name='Cell at level 2' -++++treeGrid -++++++rowGroup +++++genericContainer ignored +++++++treeGrid ++++++++row hierarchicalLevel=1 ++++++++++cell name='Cell at level 1' ++++++++++++staticText name='Cell at level 1' ++++++++++++++inlineTextBox name='Cell at level 1' +++++++++row hierarchicalLevel=2 +++++++++++cell name='Cell at level 2' +++++++++++++staticText name='Cell at level 2' +++++++++++++++inlineTextBox name='Cell at level 2' +++++++treeGrid +++++++++rowGroup +++++++++++row hierarchicalLevel=1 +++++++++++++cell name='Cell at level 1' +++++++++++++++staticText name='Cell at level 1' +++++++++++++++++inlineTextBox name='Cell at level 1'
diff --git a/content/test/data/accessibility/aria/aria-treeitem-nested-in-lists-expected-blink.txt b/content/test/data/accessibility/aria/aria-treeitem-nested-in-lists-expected-blink.txt index 7ecff11..fff36a71 100644 --- a/content/test/data/accessibility/aria/aria-treeitem-nested-in-lists-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-treeitem-nested-in-lists-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++tree setSize=5 -++++++listItem hierarchicalLevel=1 -++++++++treeItem name='treeitem 2 of 5, level 1' hierarchicalLevel=1 setSize=5 posInSet=2 -++++++++++staticText name='treeitem 2 of 5, level 1' -++++++++++++inlineTextBox name='treeitem 2 of 5, level 1' -++++++listItem hierarchicalLevel=1 -++++++++treeItem name='treeitem 3 of 5, level 1' hierarchicalLevel=1 setSize=5 posInSet=3 -++++++++++staticText name='treeitem 3 of 5, level 1' -++++++++++++inlineTextBox name='treeitem 3 of 5, level 1' -++++++listItem hierarchicalLevel=1 -++++++++treeItem name='treeitem 1 of 2, level 2' hierarchicalLevel=2 setSize=2 posInSet=1 -++++++++++staticText name='treeitem 1 of 2, level 2' -++++++++++++inlineTextBox name='treeitem 1 of 2, level 2' -++++++listItem hierarchicalLevel=1 -++++++++treeItem name='treeitem 1 of 1, level 3' hierarchicalLevel=3 setSize=1 posInSet=1 -++++++++++staticText name='treeitem 1 of 1, level 3' -++++++++++++inlineTextBox name='treeitem 1 of 1, level 3' -++++++listItem hierarchicalLevel=1 -++++++++treeItem name='treeitem 2 of 2, level 2' hierarchicalLevel=2 setSize=2 posInSet=2 -++++++++++staticText name='treeitem 2 of 2, level 2' -++++++++++++inlineTextBox name='treeitem 2 of 2, level 2' +++++genericContainer ignored +++++++tree setSize=5 +++++++++listItem hierarchicalLevel=1 +++++++++++treeItem name='treeitem 2 of 5, level 1' hierarchicalLevel=1 setSize=5 posInSet=2 +++++++++++++staticText name='treeitem 2 of 5, level 1' +++++++++++++++inlineTextBox name='treeitem 2 of 5, level 1' +++++++++listItem hierarchicalLevel=1 +++++++++++treeItem name='treeitem 3 of 5, level 1' hierarchicalLevel=1 setSize=5 posInSet=3 +++++++++++++staticText name='treeitem 3 of 5, level 1' +++++++++++++++inlineTextBox name='treeitem 3 of 5, level 1' +++++++++listItem hierarchicalLevel=1 +++++++++++treeItem name='treeitem 1 of 2, level 2' hierarchicalLevel=2 setSize=2 posInSet=1 +++++++++++++staticText name='treeitem 1 of 2, level 2' +++++++++++++++inlineTextBox name='treeitem 1 of 2, level 2' +++++++++listItem hierarchicalLevel=1 +++++++++++treeItem name='treeitem 1 of 1, level 3' hierarchicalLevel=3 setSize=1 posInSet=1 +++++++++++++staticText name='treeitem 1 of 1, level 3' +++++++++++++++inlineTextBox name='treeitem 1 of 1, level 3' +++++++++listItem hierarchicalLevel=1 +++++++++++treeItem name='treeitem 2 of 2, level 2' hierarchicalLevel=2 setSize=2 posInSet=2 +++++++++++++staticText name='treeitem 2 of 2, level 2' +++++++++++++++inlineTextBox name='treeitem 2 of 2, level 2'
diff --git a/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt b/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt index 5e6504e..4319a525 100644 --- a/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-undefined-expected-blink.txt
@@ -1,27 +1,28 @@ rootWebArea ++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' -++++treeItem name='Expanded undefined' -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' -++++grid -++++++columnHeader name='Sort undefined' -++++genericContainer name='Hidden undefined, display block' +++++genericContainer ignored +++++++genericContainer name='Atomic undefined' +++++++textField name='Autocomplete undefined' +++++++genericContainer name='Busy undefined' +++++++treeItem name='Checked undefined' +++++++genericContainer name='Current undefined' +++++++genericContainer name='Disabled undefined' +++++++genericContainer name='Dropeffect undefined' +++++++treeItem name='Expanded undefined' +++++++genericContainer name='Grabbed undefined' +++++++button name='Haspopup undefined' +++++++genericContainer name='Invalid undefined' +++++++genericContainer name='Live undefined' +++++++dialog name='Modal undefined' modal=false +++++++textField name='Multiline undefined' +++++++grid name='Multiselectable undefined' +++++++scrollBar vertical name='Orientation undefined' +++++++button name='Pressed undefined' +++++++textField name='Readonly undefined' +++++++genericContainer name='Relevant undefined' +++++++textField name='Required undefined' +++++++tree multiselectable vertical +++++++++treeItem name='Selected undefined' +++++++grid +++++++++columnHeader name='Sort undefined' +++++++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt b/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt index 2392e1f..c4d45a4 100644 --- a/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-undefined-literal-expected-blink.txt
@@ -1,27 +1,28 @@ rootWebArea ++genericContainer ignored -++++genericContainer name='Atomic undefined' -++++textField name='Autocomplete undefined' -++++genericContainer name='Busy undefined' -++++treeItem name='Checked undefined' -++++genericContainer name='Current undefined' -++++genericContainer name='Disabled undefined' -++++genericContainer name='Dropeffect undefined' dropeffect=none -++++treeItem name='Expanded undefined' -++++genericContainer name='Grabbed undefined' -++++button name='Haspopup undefined' -++++genericContainer name='Invalid undefined' -++++genericContainer name='Live undefined' -++++dialog name='Modal undefined' modal=false -++++textField name='Multiline undefined' -++++grid name='Multiselectable undefined' -++++scrollBar vertical name='Orientation undefined' -++++button name='Pressed undefined' -++++textField name='Readonly undefined' -++++genericContainer name='Relevant undefined' -++++textField name='Required undefined' -++++tree multiselectable vertical -++++++treeItem name='Selected undefined' -++++grid -++++++columnHeader name='Sort undefined' -++++genericContainer name='Hidden undefined, display block' +++++genericContainer ignored +++++++genericContainer name='Atomic undefined' +++++++textField name='Autocomplete undefined' +++++++genericContainer name='Busy undefined' +++++++treeItem name='Checked undefined' +++++++genericContainer name='Current undefined' +++++++genericContainer name='Disabled undefined' +++++++genericContainer name='Dropeffect undefined' dropeffect=none +++++++treeItem name='Expanded undefined' +++++++genericContainer name='Grabbed undefined' +++++++button name='Haspopup undefined' +++++++genericContainer name='Invalid undefined' +++++++genericContainer name='Live undefined' +++++++dialog name='Modal undefined' modal=false +++++++textField name='Multiline undefined' +++++++grid name='Multiselectable undefined' +++++++scrollBar vertical name='Orientation undefined' +++++++button name='Pressed undefined' +++++++textField name='Readonly undefined' +++++++genericContainer name='Relevant undefined' +++++++textField name='Required undefined' +++++++tree multiselectable vertical +++++++++treeItem name='Selected undefined' +++++++grid +++++++++columnHeader name='Sort undefined' +++++++genericContainer name='Hidden undefined, display block'
diff --git a/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt b/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt index 0449dff..a94e81c 100644 --- a/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-valuenow-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++progressIndicator valueForRange=3.00 +++++genericContainer ignored +++++++progressIndicator valueForRange=3.00
diff --git a/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt b/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt index 0410238..661fd7d 100644 --- a/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-valuetext-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea ++genericContainer ignored -++++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00 +++++genericContainer ignored +++++++progressIndicator value='three' valueForRange=3.00 minValueForRange=1.00 maxValueForRange=96.00
diff --git a/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt b/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt index 3e55204..1c51733 100644 --- a/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria1.1-combobox-expected-blink.txt
@@ -1,17 +1,18 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++staticText name='State' -++++++++inlineTextBox name='State' -++++comboBoxGrouping name='State' haspopup=listbox -++++++textField activedescendantId=listBoxOption controlsIds=listBox -++++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=true -++++comboBoxGrouping name='State' haspopup=listbox -++++++textField activedescendantId=listBoxOption controlsIds=listBox -++++++++genericContainer -++++listBox -++++++listBoxOption name='Alabama' selected=false -++++++listBoxOption name='Alaska' selected=false +++++genericContainer ignored +++++++genericContainer +++++++++staticText name='State' +++++++++++inlineTextBox name='State' +++++++comboBoxGrouping name='State' haspopup=listbox +++++++++textField activedescendantId=listBoxOption controlsIds=listBox +++++++++++genericContainer +++++++listBox +++++++++listBoxOption name='Alabama' selected=false +++++++++listBoxOption name='Alaska' selected=true +++++++comboBoxGrouping name='State' haspopup=listbox +++++++++textField activedescendantId=listBoxOption controlsIds=listBox +++++++++++genericContainer +++++++listBox +++++++++listBoxOption name='Alabama' selected=false +++++++++listBoxOption name='Alaska' selected=false
diff --git a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt index 5a171e8..d3904ec 100644 --- a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt +++ b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++textField name='aria-placeholder1' +++++genericContainer ignored +++++++textField name='aria-placeholder1' +++++++++genericContainer +++++++textField name='placeholder2' +++++++++staticText name='placeholder2' +++++++++++inlineTextBox name='placeholder2' +++++++++genericContainer +++++++textField name='aria-label3' placeholder='placeholder3' +++++++++staticText name='placeholder3' +++++++++++inlineTextBox name='placeholder3' +++++++++genericContainer +++++++textField name='aria-label4' placeholder='aria-placeholder4' +++++++++genericContainer +++++++textField description='aria-description5' name='aria-label5' placeholder='placeholder5' descriptionFrom=relatedElement +++++++++staticText name='placeholder5' +++++++++++inlineTextBox name='placeholder5' +++++++++genericContainer ++++++genericContainer -++++textField name='placeholder2' -++++++staticText name='placeholder2' -++++++++inlineTextBox name='placeholder2' -++++++genericContainer -++++textField name='aria-label3' placeholder='placeholder3' -++++++staticText name='placeholder3' -++++++++inlineTextBox name='placeholder3' -++++++genericContainer -++++textField name='aria-label4' placeholder='aria-placeholder4' -++++++genericContainer -++++textField description='aria-description5' name='aria-label5' placeholder='placeholder5' descriptionFrom=relatedElement -++++++staticText name='placeholder5' -++++++++inlineTextBox name='placeholder5' -++++++genericContainer -++++genericContainer -++++++staticText name='aria-description5' -++++++++inlineTextBox name='aria-description5' -++++textField description='title6' name='aria-placeholder6' descriptionFrom=title -++++++genericContainer +++++++++staticText name='aria-description5' +++++++++++inlineTextBox name='aria-description5' +++++++textField description='title6' name='aria-placeholder6' descriptionFrom=title +++++++++genericContainer
diff --git a/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt b/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt index 46789bcb..19e2a0545 100644 --- a/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt +++ b/content/test/data/accessibility/aria/label-with-selected-option-expected-blink.txt
@@ -1,37 +1,38 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false -++++++listBox ignored -++++++++listBoxOption ignored name='1' selected=false -++++++++listBoxOption ignored name='2' selected=true -++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false -++++++comboBoxGrouping ignored -++++++++textField +++++++genericContainer ignored +++++++++checkBox name='Test 1: Flash the screen 2 times.' checkedState=false ++++++++listBox ignored ++++++++++listBoxOption ignored name='1' selected=false ++++++++++listBoxOption ignored name='2' selected=true ++++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 3: Flash the screen two times.' checkedState=false -++++++listBox ignored -++++++++listBoxOption ignored name='1' selected=false -++++++++listBoxOption ignored name='two' selected=true -++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 4: Flash the screen two times.' checkedState=false -++++++comboBoxGrouping ignored -++++++++textField +++++++genericContainer ignored +++++++++checkBox name='Test 2: Flash the screen 2 times.' checkedState=false +++++++++comboBoxGrouping ignored +++++++++++textField +++++++++++listBox ignored +++++++++++++listBoxOption ignored name='1' selected=false +++++++++++++listBoxOption ignored name='2' selected=true +++++++++++++listBoxOption ignored name='3' selected=false +++++++genericContainer ignored +++++++++checkBox name='Test 3: Flash the screen two times.' checkedState=false ++++++++listBox ignored ++++++++++listBoxOption ignored name='1' selected=false ++++++++++listBoxOption ignored name='two' selected=true ++++++++++listBoxOption ignored name='3' selected=false -++++genericContainer ignored -++++++checkBox name='Test 5: Flash the screen two times.' checkedState=false -++++++comboBoxMenuButton name='two' -++++++++listBox ignored -++++++++++listBoxOption ignored name='1' selected=false -++++++++++listBoxOption ignored name='two' selected=true -++++++++++listBoxOption ignored name='3' selected=false +++++++genericContainer ignored +++++++++checkBox name='Test 4: Flash the screen two times.' checkedState=false +++++++++comboBoxGrouping ignored +++++++++++textField +++++++++++listBox ignored +++++++++++++listBoxOption ignored name='1' selected=false +++++++++++++listBoxOption ignored name='two' selected=true +++++++++++++listBoxOption ignored name='3' selected=false +++++++genericContainer ignored +++++++++checkBox name='Test 5: Flash the screen two times.' checkedState=false +++++++++comboBoxMenuButton name='two' +++++++++++listBox ignored +++++++++++++listBoxOption ignored name='1' selected=false +++++++++++++listBoxOption ignored name='two' selected=true +++++++++++++listBoxOption ignored name='3' selected=false
diff --git a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt index 33eedf9..c5e5841 100644 --- a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt +++ b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt
@@ -1,36 +1,37 @@ rootWebArea ++genericContainer ignored -++++grid ariaColumnCount=5 ariaRowCount=4 tableRowCount=3 tableColumnCount=3 -++++++row -++++++++columnHeader name='Month' ariaCellColumnIndex=2 ariaCellRowIndex=2 -++++++++++staticText name='Month' -++++++++++++inlineTextBox name='Month' -++++++++columnHeader name='Day' ariaCellColumnIndex=3 ariaCellRowIndex=2 -++++++++++staticText name='Day' -++++++++++++inlineTextBox name='Day' -++++++++columnHeader name='Weather' ariaCellColumnIndex=5 ariaCellRowIndex=2 -++++++++++staticText name='Weather' -++++++++++++inlineTextBox name='Weather' -++++++row -++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=3 -++++++++++staticText name='January' -++++++++++++inlineTextBox name='January' -++++++++cell name='01' ariaCellColumnIndex=3 ariaCellRowIndex=3 -++++++++++staticText name='01' -++++++++++++inlineTextBox name='01' -++++++++cell name='Sunny' ariaCellColumnIndex=5 ariaCellRowIndex=3 -++++++++++staticText name='Sunny' -++++++++++++inlineTextBox name='Sunny' -++++++row -++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=4 -++++++++++staticText name='January' -++++++++++++inlineTextBox name='January' -++++++++cell name='02' ariaCellColumnIndex=3 ariaCellRowIndex=4 -++++++++++staticText name='02' -++++++++++++inlineTextBox name='02' -++++++++cell name='Rainy' ariaCellColumnIndex=5 ariaCellRowIndex=4 -++++++++++staticText name='Rainy' -++++++++++++inlineTextBox name='Rainy' -++++paragraph -++++++staticText name='done' -++++++++inlineTextBox name='done' +++++genericContainer ignored +++++++grid ariaColumnCount=5 ariaRowCount=4 tableRowCount=3 tableColumnCount=3 +++++++++row +++++++++++columnHeader name='Month' ariaCellColumnIndex=2 ariaCellRowIndex=2 +++++++++++++staticText name='Month' +++++++++++++++inlineTextBox name='Month' +++++++++++columnHeader name='Day' ariaCellColumnIndex=3 ariaCellRowIndex=2 +++++++++++++staticText name='Day' +++++++++++++++inlineTextBox name='Day' +++++++++++columnHeader name='Weather' ariaCellColumnIndex=5 ariaCellRowIndex=2 +++++++++++++staticText name='Weather' +++++++++++++++inlineTextBox name='Weather' +++++++++row +++++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=3 +++++++++++++staticText name='January' +++++++++++++++inlineTextBox name='January' +++++++++++cell name='01' ariaCellColumnIndex=3 ariaCellRowIndex=3 +++++++++++++staticText name='01' +++++++++++++++inlineTextBox name='01' +++++++++++cell name='Sunny' ariaCellColumnIndex=5 ariaCellRowIndex=3 +++++++++++++staticText name='Sunny' +++++++++++++++inlineTextBox name='Sunny' +++++++++row +++++++++++cell name='January' ariaCellColumnIndex=2 ariaCellRowIndex=4 +++++++++++++staticText name='January' +++++++++++++++inlineTextBox name='January' +++++++++++cell name='02' ariaCellColumnIndex=3 ariaCellRowIndex=4 +++++++++++++staticText name='02' +++++++++++++++inlineTextBox name='02' +++++++++++cell name='Rainy' ariaCellColumnIndex=5 ariaCellRowIndex=4 +++++++++++++staticText name='Rainy' +++++++++++++++inlineTextBox name='Rainy' +++++++paragraph +++++++++staticText name='done' +++++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/css/color-expected-blink.txt b/content/test/data/accessibility/css/color-expected-blink.txt index 4ec571f..32df0ae 100644 --- a/content/test/data/accessibility/css/color-expected-blink.txt +++ b/content/test/data/accessibility/css/color-expected-blink.txt
@@ -1,16 +1,17 @@ rootWebArea backgroundColor=-1 color=-16777216 ++genericContainer ignored backgroundColor=-1 color=-16777216 -++++paragraph backgroundColor=-16776961 color=-65536 -++++++staticText name='Red on blue.' backgroundColor=-16776961 color=-65536 -++++++++inlineTextBox name='Red on blue.' color=-16777216 -++++genericContainer multiline value='Default. Blue background. Green text.' backgroundColor=-1 color=-16777216 -++++++staticText name='Default.' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name='Default.' color=-16777216 -++++++staticText name=' ' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name=' ' color=-16777216 -++++++staticText name='Blue background.' backgroundColor=-16776961 color=-16777216 -++++++++inlineTextBox name='Blue background.' color=-16777216 -++++++staticText name=' ' backgroundColor=-1 color=-16777216 -++++++++inlineTextBox name=' ' color=-16777216 -++++++staticText name='Green text.' backgroundColor=-1 color=-16711936 -++++++++inlineTextBox name='Green text.' color=-16777216 +++++genericContainer ignored backgroundColor=-1 color=-16777216 +++++++paragraph backgroundColor=-16776961 color=-65536 +++++++++staticText name='Red on blue.' backgroundColor=-16776961 color=-65536 +++++++++++inlineTextBox name='Red on blue.' color=-16777216 +++++++genericContainer multiline value='Default. Blue background. Green text.' backgroundColor=-1 color=-16777216 +++++++++staticText name='Default.' backgroundColor=-1 color=-16777216 +++++++++++inlineTextBox name='Default.' color=-16777216 +++++++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++++++inlineTextBox name=' ' color=-16777216 +++++++++staticText name='Blue background.' backgroundColor=-16776961 color=-16777216 +++++++++++inlineTextBox name='Blue background.' color=-16777216 +++++++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++++++inlineTextBox name=' ' color=-16777216 +++++++++staticText name='Green text.' backgroundColor=-1 color=-16711936 +++++++++++inlineTextBox name='Green text.' color=-16777216
diff --git a/content/test/data/accessibility/css/display-to-block-expected-blink.txt b/content/test/data/accessibility/css/display-to-block-expected-blink.txt index dc31ebb..1ceff34 100644 --- a/content/test/data/accessibility/css/display-to-block-expected-blink.txt +++ b/content/test/data/accessibility/css/display-to-block-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored display='block' ++++genericContainer ignored display='block' -++++++genericContainer display='block' -++++++++staticText display='block' name='Cats' -++++++++++inlineTextBox display='block' name='Cats' -++++++genericContainer display='block' -++++++++checkBox display='inline-block' name='checkbox' checkedState=false -++++++genericContainer display='block' -++++++++staticText display='inline' name='done' -++++++++++inlineTextBox display='inline' name='done' +++++++genericContainer ignored display='block' +++++++++genericContainer display='block' +++++++++++staticText display='block' name='Cats' +++++++++++++inlineTextBox display='block' name='Cats' +++++++++genericContainer display='block' +++++++++++checkBox display='inline-block' name='checkbox' checkedState=false +++++++++genericContainer display='block' +++++++++++staticText display='inline' name='done' +++++++++++++inlineTextBox display='inline' name='done'
diff --git a/content/test/data/accessibility/css/display-to-inline-expected-blink.txt b/content/test/data/accessibility/css/display-to-inline-expected-blink.txt index fc9d39b8..2e462d2 100644 --- a/content/test/data/accessibility/css/display-to-inline-expected-blink.txt +++ b/content/test/data/accessibility/css/display-to-inline-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored display='block' ++++genericContainer ignored display='block' -++++++staticText display='block' name='Cats ' -++++++++inlineTextBox display='block' name='Cats ' -++++++genericContainer display='inline' -++++++++checkBox display='inline-block' name='checkbox' checkedState=false -++++++genericContainer display='block' -++++++++staticText display='inline' name='done' -++++++++++inlineTextBox display='inline' name='done' +++++++genericContainer ignored display='block' +++++++++staticText display='block' name='Cats ' +++++++++++inlineTextBox display='block' name='Cats ' +++++++++genericContainer display='inline' +++++++++++checkBox display='inline-block' name='checkbox' checkedState=false +++++++++genericContainer display='block' +++++++++++staticText display='inline' name='done' +++++++++++++inlineTextBox display='inline' name='done'
diff --git a/content/test/data/accessibility/css/display-to-none-expected-blink.txt b/content/test/data/accessibility/css/display-to-none-expected-blink.txt index cdbecee8..0aeec4e 100644 --- a/content/test/data/accessibility/css/display-to-none-expected-blink.txt +++ b/content/test/data/accessibility/css/display-to-none-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored display='block' ++++genericContainer ignored display='block' -++++++genericContainer display='block' -++++++++staticText display='block' name='Cats' -++++++++++inlineTextBox display='block' name='Cats' -++++++genericContainer ignored invisible display='none' name='checkbox' -++++++++checkBox ignored invisible display='inline-block' name='checkbox' checkedState=false -++++++genericContainer display='block' -++++++++staticText display='inline' name='done' -++++++++++inlineTextBox display='inline' name='done' +++++++genericContainer ignored display='block' +++++++++genericContainer display='block' +++++++++++staticText display='block' name='Cats' +++++++++++++inlineTextBox display='block' name='Cats' +++++++++genericContainer ignored invisible display='none' name='checkbox' +++++++++++checkBox ignored invisible display='inline-block' name='checkbox' checkedState=false +++++++++genericContainer display='block' +++++++++++staticText display='inline' name='done' +++++++++++++inlineTextBox display='inline' name='done'
diff --git a/content/test/data/accessibility/css/dom-element-css-alternative-text-expected-blink.txt b/content/test/data/accessibility/css/dom-element-css-alternative-text-expected-blink.txt index ff1a61a..c1e4fc7 100644 --- a/content/test/data/accessibility/css/dom-element-css-alternative-text-expected-blink.txt +++ b/content/test/data/accessibility/css/dom-element-css-alternative-text-expected-blink.txt
@@ -1,3 +1,4 @@ rootWebArea -++genericContainer -++++image name='alternative text' +++genericContainer ignored +++++genericContainer +++++++image name='alternative text'
diff --git a/content/test/data/accessibility/css/font-size-expected-blink.txt b/content/test/data/accessibility/css/font-size-expected-blink.txt index dff887a7..0acc87a 100644 --- a/content/test/data/accessibility/css/font-size-expected-blink.txt +++ b/content/test/data/accessibility/css/font-size-expected-blink.txt
@@ -1,68 +1,69 @@ rootWebArea fontSize=16.00 ++genericContainer ignored fontSize=16.00 -++++paragraph fontSize=10.23 -++++++staticText name='10.2340920823px' fontSize=10.23 -++++++++inlineTextBox name='10.2340920823px' -++++paragraph fontSize=10.00 -++++++staticText name='10px' fontSize=10.00 -++++++++inlineTextBox name='10px' -++++paragraph fontSize=11.00 -++++++staticText name='11px' fontSize=11.00 -++++++++inlineTextBox name='11px' -++++paragraph fontSize=12.00 -++++++staticText name='12px' fontSize=12.00 -++++++++inlineTextBox name='12px' -++++paragraph fontSize=13.00 -++++++staticText name='13px' fontSize=13.00 -++++++++inlineTextBox name='13px' -++++paragraph fontSize=14.00 -++++++staticText name='14px' fontSize=14.00 -++++++++inlineTextBox name='14px' -++++paragraph fontSize=15.00 -++++++staticText name='15px' fontSize=15.00 -++++++++inlineTextBox name='15px' -++++paragraph fontSize=20.00 -++++++staticText name='20px' fontSize=20.00 -++++++++inlineTextBox name='20px' -++++paragraph fontSize=40.00 -++++++staticText name='40px' fontSize=40.00 -++++++++inlineTextBox name='40px' -++++paragraph fontSize=50.00 -++++++staticText name='50px' fontSize=50.00 -++++++++inlineTextBox name='50px' -++++paragraph fontSize=100.00 -++++++staticText name='100px' fontSize=100.00 -++++++++inlineTextBox name='100px' -++++paragraph fontSize=13.65 -++++++staticText name='10.2340920823pt' fontSize=13.65 -++++++++inlineTextBox name='10.2340920823pt' -++++paragraph fontSize=13.33 -++++++staticText name='10pt' fontSize=13.33 -++++++++inlineTextBox name='10pt' -++++paragraph fontSize=14.67 -++++++staticText name='11pt' fontSize=14.67 -++++++++inlineTextBox name='11pt' -++++paragraph fontSize=16.00 -++++++staticText name='12pt' fontSize=16.00 -++++++++inlineTextBox name='12pt' -++++paragraph fontSize=17.33 -++++++staticText name='13pt' fontSize=17.33 -++++++++inlineTextBox name='13pt' -++++paragraph fontSize=18.67 -++++++staticText name='14pt' fontSize=18.67 -++++++++inlineTextBox name='14pt' -++++paragraph fontSize=20.00 -++++++staticText name='15pt' fontSize=20.00 -++++++++inlineTextBox name='15pt' -++++paragraph fontSize=26.67 -++++++staticText name='20pt' fontSize=26.67 -++++++++inlineTextBox name='20pt' -++++paragraph fontSize=53.33 -++++++staticText name='40pt' fontSize=53.33 -++++++++inlineTextBox name='40pt' -++++paragraph fontSize=66.67 -++++++staticText name='50pt' fontSize=66.67 -++++++++inlineTextBox name='50pt' -++++paragraph fontSize=133.33 -++++++staticText name='100pt' fontSize=133.33 -++++++++inlineTextBox name='100pt' +++++genericContainer ignored fontSize=16.00 +++++++paragraph fontSize=10.23 +++++++++staticText name='10.2340920823px' fontSize=10.23 +++++++++++inlineTextBox name='10.2340920823px' +++++++paragraph fontSize=10.00 +++++++++staticText name='10px' fontSize=10.00 +++++++++++inlineTextBox name='10px' +++++++paragraph fontSize=11.00 +++++++++staticText name='11px' fontSize=11.00 +++++++++++inlineTextBox name='11px' +++++++paragraph fontSize=12.00 +++++++++staticText name='12px' fontSize=12.00 +++++++++++inlineTextBox name='12px' +++++++paragraph fontSize=13.00 +++++++++staticText name='13px' fontSize=13.00 +++++++++++inlineTextBox name='13px' +++++++paragraph fontSize=14.00 +++++++++staticText name='14px' fontSize=14.00 +++++++++++inlineTextBox name='14px' +++++++paragraph fontSize=15.00 +++++++++staticText name='15px' fontSize=15.00 +++++++++++inlineTextBox name='15px' +++++++paragraph fontSize=20.00 +++++++++staticText name='20px' fontSize=20.00 +++++++++++inlineTextBox name='20px' +++++++paragraph fontSize=40.00 +++++++++staticText name='40px' fontSize=40.00 +++++++++++inlineTextBox name='40px' +++++++paragraph fontSize=50.00 +++++++++staticText name='50px' fontSize=50.00 +++++++++++inlineTextBox name='50px' +++++++paragraph fontSize=100.00 +++++++++staticText name='100px' fontSize=100.00 +++++++++++inlineTextBox name='100px' +++++++paragraph fontSize=13.65 +++++++++staticText name='10.2340920823pt' fontSize=13.65 +++++++++++inlineTextBox name='10.2340920823pt' +++++++paragraph fontSize=13.33 +++++++++staticText name='10pt' fontSize=13.33 +++++++++++inlineTextBox name='10pt' +++++++paragraph fontSize=14.67 +++++++++staticText name='11pt' fontSize=14.67 +++++++++++inlineTextBox name='11pt' +++++++paragraph fontSize=16.00 +++++++++staticText name='12pt' fontSize=16.00 +++++++++++inlineTextBox name='12pt' +++++++paragraph fontSize=17.33 +++++++++staticText name='13pt' fontSize=17.33 +++++++++++inlineTextBox name='13pt' +++++++paragraph fontSize=18.67 +++++++++staticText name='14pt' fontSize=18.67 +++++++++++inlineTextBox name='14pt' +++++++paragraph fontSize=20.00 +++++++++staticText name='15pt' fontSize=20.00 +++++++++++inlineTextBox name='15pt' +++++++paragraph fontSize=26.67 +++++++++staticText name='20pt' fontSize=26.67 +++++++++++inlineTextBox name='20pt' +++++++paragraph fontSize=53.33 +++++++++staticText name='40pt' fontSize=53.33 +++++++++++inlineTextBox name='40pt' +++++++paragraph fontSize=66.67 +++++++++staticText name='50pt' fontSize=66.67 +++++++++++inlineTextBox name='50pt' +++++++paragraph fontSize=133.33 +++++++++staticText name='100pt' fontSize=133.33 +++++++++++inlineTextBox name='100pt'
diff --git a/content/test/data/accessibility/css/font-style-expected-blink.txt b/content/test/data/accessibility/css/font-style-expected-blink.txt index f9f266d..42b35aec 100644 --- a/content/test/data/accessibility/css/font-style-expected-blink.txt +++ b/content/test/data/accessibility/css/font-style-expected-blink.txt
@@ -1,54 +1,55 @@ rootWebArea ++genericContainer ignored -++++paragraph -++++++staticText name='The ' -++++++++inlineTextBox name='The ' -++++++staticText name='quick' textStyle=1 -++++++++inlineTextBox name='quick' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='brown' textStyle=2 -++++++++inlineTextBox name='brown' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='fox' textStyle=4 -++++++++inlineTextBox name='fox' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='jumped' textStyle=3 -++++++++inlineTextBox name='jumped' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='over' textStyle=6 -++++++++inlineTextBox name='over' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='dog' textStyle=7 -++++++++inlineTextBox name='dog' -++++genericContainer multiline value='Normal bold italic underline line-through subscript superscript' -++++++staticText name='Normal' -++++++++inlineTextBox name='Normal' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='bold' textStyle=1 -++++++++inlineTextBox name='bold' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='italic' textStyle=2 -++++++++inlineTextBox name='italic' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='underline' textStyle=4 -++++++++inlineTextBox name='underline' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='line-through' textStyle=8 -++++++++inlineTextBox name='line-through' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='subscript' textPosition=subscript -++++++++inlineTextBox name='subscript' -++++++staticText name=' ' -++++++++inlineTextBox name=' ' -++++++staticText name='superscript' textPosition=superscript -++++++++inlineTextBox name='superscript' +++++genericContainer ignored +++++++paragraph +++++++++staticText name='The ' +++++++++++inlineTextBox name='The ' +++++++++staticText name='quick' textStyle=1 +++++++++++inlineTextBox name='quick' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='brown' textStyle=2 +++++++++++inlineTextBox name='brown' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='fox' textStyle=4 +++++++++++inlineTextBox name='fox' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='jumped' textStyle=3 +++++++++++inlineTextBox name='jumped' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='over' textStyle=6 +++++++++++inlineTextBox name='over' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='dog' textStyle=7 +++++++++++inlineTextBox name='dog' +++++++genericContainer multiline value='Normal bold italic underline line-through subscript superscript' +++++++++staticText name='Normal' +++++++++++inlineTextBox name='Normal' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='bold' textStyle=1 +++++++++++inlineTextBox name='bold' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='italic' textStyle=2 +++++++++++inlineTextBox name='italic' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='underline' textStyle=4 +++++++++++inlineTextBox name='underline' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='line-through' textStyle=8 +++++++++++inlineTextBox name='line-through' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='subscript' textPosition=subscript +++++++++++inlineTextBox name='subscript' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' +++++++++staticText name='superscript' textPosition=superscript +++++++++++inlineTextBox name='superscript'
diff --git a/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt b/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt index 65bfd04..1e569b5 100644 --- a/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt +++ b/content/test/data/accessibility/css/inline-position-relative-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea pageLocation=(0, 0) ++genericContainer ignored -++++genericContainer pageLocation=(0, 0) -++++++genericContainer ignored -++++++++staticText pageLocation=(0, 0) name='Before' -++++++++++inlineTextBox pageLocation=(0, 0) name='Before' -++++++staticText pageLocation=(100, 0) name='After' -++++++++inlineTextBox pageLocation=(100, 0) name='After' +++++genericContainer ignored +++++++genericContainer pageLocation=(0, 0) +++++++++genericContainer ignored +++++++++++staticText pageLocation=(0, 0) name='Before' +++++++++++++inlineTextBox pageLocation=(0, 0) name='Before' +++++++++staticText pageLocation=(100, 0) name='After' +++++++++++inlineTextBox pageLocation=(100, 0) name='After'
diff --git a/content/test/data/accessibility/css/language-expected-blink.txt b/content/test/data/accessibility/css/language-expected-blink.txt index 3c844ff..839464b8 100644 --- a/content/test/data/accessibility/css/language-expected-blink.txt +++ b/content/test/data/accessibility/css/language-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea language='en-US' ++genericContainer ignored language='en-US' -++++paragraph language='es-ES' -++++++staticText language='es-ES' name='Espanyol' -++++++++inlineTextBox language='es-ES' name='Espanyol' -++++presentational ignored language='fr-FR' -++++++staticText language='fr-FR' name='Comment allez-vous?' -++++++++inlineTextBox language='fr-FR' name='Comment allez-vous?' +++++genericContainer ignored language='en-US' +++++++paragraph language='es-ES' +++++++++staticText language='es-ES' name='Espanyol' +++++++++++inlineTextBox language='es-ES' name='Espanyol' +++++++presentational ignored language='fr-FR' +++++++++staticText language='fr-FR' name='Comment allez-vous?' +++++++++++inlineTextBox language='fr-FR' name='Comment allez-vous?'
diff --git a/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt b/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt index 0d8e4d8f..086ff87 100644 --- a/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt +++ b/content/test/data/accessibility/css/pseudo-element-alternative-text-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++image name='alternative text' -++++++staticText name='DOM text' -++++++++inlineTextBox name='DOM text' -++++++image +++++genericContainer ignored +++++++genericContainer +++++++++image name='alternative text' +++++++++staticText name='DOM text' +++++++++++inlineTextBox name='DOM text' +++++++++image
diff --git a/content/test/data/accessibility/css/table-data-display-other-expected-blink.txt b/content/test/data/accessibility/css/table-data-display-other-expected-blink.txt index a6bd31b..1ae6b18 100644 --- a/content/test/data/accessibility/css/table-data-display-other-expected-blink.txt +++ b/content/test/data/accessibility/css/table-data-display-other-expected-blink.txt
@@ -1,25 +1,26 @@ rootWebArea ++genericContainer ignored -++++table tableRowCount=2 tableColumnCount=3 -++++++rowGroup ignored -++++++++row tableRowIndex=0 -++++++++++columnHeader name='1' tableCellColumnIndex=0 tableCellRowIndex=0 -++++++++++++staticText name='1' -++++++++++++++inlineTextBox name='1' -++++++++++columnHeader name='2' tableCellColumnIndex=1 tableCellRowIndex=0 -++++++++++++staticText name='2' -++++++++++++++inlineTextBox name='2' -++++++++++columnHeader name='3' tableCellColumnIndex=2 tableCellRowIndex=0 -++++++++++++staticText name='3' -++++++++++++++inlineTextBox name='3' -++++++rowGroup ignored -++++++++row tableRowIndex=1 -++++++++++cell name='a' tableCellColumnIndex=0 tableCellRowIndex=1 -++++++++++++staticText name='a' -++++++++++++++inlineTextBox name='a' -++++++++++cell name='b' tableCellColumnIndex=1 tableCellRowIndex=1 -++++++++++++staticText name='b' -++++++++++++++inlineTextBox name='b' -++++++++++cell name='c' tableCellColumnIndex=2 tableCellRowIndex=1 -++++++++++++staticText name='c' -++++++++++++++inlineTextBox name='c' +++++genericContainer ignored +++++++table tableRowCount=2 tableColumnCount=3 +++++++++rowGroup ignored +++++++++++row tableRowIndex=0 +++++++++++++columnHeader name='1' tableCellColumnIndex=0 tableCellRowIndex=0 +++++++++++++++staticText name='1' +++++++++++++++++inlineTextBox name='1' +++++++++++++columnHeader name='2' tableCellColumnIndex=1 tableCellRowIndex=0 +++++++++++++++staticText name='2' +++++++++++++++++inlineTextBox name='2' +++++++++++++columnHeader name='3' tableCellColumnIndex=2 tableCellRowIndex=0 +++++++++++++++staticText name='3' +++++++++++++++++inlineTextBox name='3' +++++++++rowGroup ignored +++++++++++row tableRowIndex=1 +++++++++++++cell name='a' tableCellColumnIndex=0 tableCellRowIndex=1 +++++++++++++++staticText name='a' +++++++++++++++++inlineTextBox name='a' +++++++++++++cell name='b' tableCellColumnIndex=1 tableCellRowIndex=1 +++++++++++++++staticText name='b' +++++++++++++++++inlineTextBox name='b' +++++++++++++cell name='c' tableCellColumnIndex=2 tableCellRowIndex=1 +++++++++++++++staticText name='c' +++++++++++++++++inlineTextBox name='c'
diff --git a/content/test/data/accessibility/css/table-display-expected-blink.txt b/content/test/data/accessibility/css/table-display-expected-blink.txt index 69b794a..7e735bb 100644 --- a/content/test/data/accessibility/css/table-display-expected-blink.txt +++ b/content/test/data/accessibility/css/table-display-expected-blink.txt
@@ -1,16 +1,17 @@ rootWebArea ++genericContainer ignored -++++layoutTable -++++++layoutTableRow -++++++++layoutTableCell name='Cats' -++++++++++staticText name='Cats' -++++++++++++inlineTextBox name='Cats' -++++++++layoutTableCell name='Dogs' -++++++++++staticText name='Dogs' -++++++++++++inlineTextBox name='Dogs' -++++++++layoutTableCell name='Iguanas' -++++++++++staticText name='Iguanas' -++++++++++++inlineTextBox name='Iguanas' -++++++++layoutTableCell name='Fish' -++++++++++staticText name='Fish' -++++++++++++inlineTextBox name='Fish' +++++genericContainer ignored +++++++layoutTable +++++++++layoutTableRow +++++++++++layoutTableCell name='Cats' +++++++++++++staticText name='Cats' +++++++++++++++inlineTextBox name='Cats' +++++++++++layoutTableCell name='Dogs' +++++++++++++staticText name='Dogs' +++++++++++++++inlineTextBox name='Dogs' +++++++++++layoutTableCell name='Iguanas' +++++++++++++staticText name='Iguanas' +++++++++++++++inlineTextBox name='Iguanas' +++++++++++layoutTableCell name='Fish' +++++++++++++staticText name='Fish' +++++++++++++++inlineTextBox name='Fish'
diff --git a/content/test/data/accessibility/css/table-display-other-expected-blink.txt b/content/test/data/accessibility/css/table-display-other-expected-blink.txt index 96bbe0d..05a4fcf 100644 --- a/content/test/data/accessibility/css/table-display-other-expected-blink.txt +++ b/content/test/data/accessibility/css/table-display-other-expected-blink.txt
@@ -1,7 +1,8 @@ rootWebArea ++genericContainer ignored -++++layoutTable -++++++layoutTableRow -++++++++layoutTableCell name='cat' -++++++++++staticText name='cat' -++++++++++++inlineTextBox name='cat' +++++genericContainer ignored +++++++layoutTable +++++++++layoutTableRow +++++++++++layoutTableCell name='cat' +++++++++++++staticText name='cat' +++++++++++++++inlineTextBox name='cat'
diff --git a/content/test/data/accessibility/css/table-incomplete-expected-blink.txt b/content/test/data/accessibility/css/table-incomplete-expected-blink.txt index 8023598..66a5d62 100644 --- a/content/test/data/accessibility/css/table-incomplete-expected-blink.txt +++ b/content/test/data/accessibility/css/table-incomplete-expected-blink.txt
@@ -1,11 +1,12 @@ rootWebArea ++genericContainer ignored -++++table -++++++rowGroup -++++++++row -++++++++++cell name='Fred' -++++++++++++staticText name='Fred' -++++++++++++++inlineTextBox name='Fred' -++++++++++cell name='Jackson' -++++++++++++staticText name='Jackson' -++++++++++++++inlineTextBox name='Jackson' +++++genericContainer ignored +++++++table +++++++++rowGroup +++++++++++row +++++++++++++cell name='Fred' +++++++++++++++staticText name='Fred' +++++++++++++++++inlineTextBox name='Fred' +++++++++++++cell name='Jackson' +++++++++++++++staticText name='Jackson' +++++++++++++++++inlineTextBox name='Jackson'
diff --git a/content/test/data/accessibility/css/transform-expected-blink.txt b/content/test/data/accessibility/css/transform-expected-blink.txt index 1d926a1..6a0ad03 100644 --- a/content/test/data/accessibility/css/transform-expected-blink.txt +++ b/content/test/data/accessibility/css/transform-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea pageLocation=(0, 0) ++genericContainer ignored -++++genericContainer pageLocation=(0, 50) -++++++paragraph pageLocation=(0, 50) -++++++++staticText pageLocation=(0, 50) name='content' -++++++++++inlineTextBox pageLocation=(0, 50) name='content' +++++genericContainer ignored +++++++genericContainer pageLocation=(0, 50) +++++++++paragraph pageLocation=(0, 50) +++++++++++staticText pageLocation=(0, 50) name='content' +++++++++++++inlineTextBox pageLocation=(0, 50) name='content'
diff --git a/content/test/data/accessibility/css/visibility-expected-blink.txt b/content/test/data/accessibility/css/visibility-expected-blink.txt index 9718df6..391c3340 100644 --- a/content/test/data/accessibility/css/visibility-expected-blink.txt +++ b/content/test/data/accessibility/css/visibility-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++paragraph ignored invisible name=' Hidden paragraph with visible link' -++++++staticText name='visible link' -++++++++inlineTextBox name='visible link' -++++paragraph ignored invisible name=' Collapsed paragraph with visible link' -++++++staticText name='visible link' -++++++++inlineTextBox name='visible link' +++++genericContainer ignored +++++++paragraph ignored invisible name=' Hidden paragraph with visible link' +++++++++staticText name='visible link' +++++++++++inlineTextBox name='visible link' +++++++paragraph ignored invisible name=' Collapsed paragraph with visible link' +++++++++staticText name='visible link' +++++++++++inlineTextBox name='visible link'
diff --git a/content/test/data/accessibility/css/visibility-to-collapsed-expected-blink.txt b/content/test/data/accessibility/css/visibility-to-collapsed-expected-blink.txt index 868de71a..a9d16d8 100644 --- a/content/test/data/accessibility/css/visibility-to-collapsed-expected-blink.txt +++ b/content/test/data/accessibility/css/visibility-to-collapsed-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++staticText name='Cats ' -++++++++inlineTextBox name='Cats ' -++++++genericContainer -++++++++checkBox name='checkbox' checkedState=false -++++++genericContainer -++++++++staticText name='done' -++++++++++inlineTextBox name='done' +++++++genericContainer ignored +++++++++staticText name='Cats ' +++++++++++inlineTextBox name='Cats ' +++++++++genericContainer +++++++++++checkBox name='checkbox' checkedState=false +++++++++genericContainer +++++++++++staticText name='done' +++++++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/css/visibility-to-hidden-expected-blink.txt b/content/test/data/accessibility/css/visibility-to-hidden-expected-blink.txt index ec7e34e..c27e4797 100644 --- a/content/test/data/accessibility/css/visibility-to-hidden-expected-blink.txt +++ b/content/test/data/accessibility/css/visibility-to-hidden-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++staticText name='Cats ' -++++++++inlineTextBox name='Cats ' -++++++genericContainer ignored invisible -++++++++checkBox ignored invisible name='checkbox' checkedState=false -++++++genericContainer -++++++++staticText name='done' -++++++++++inlineTextBox name='done' +++++++genericContainer ignored +++++++++staticText name='Cats ' +++++++++++inlineTextBox name='Cats ' +++++++++genericContainer ignored invisible +++++++++++checkBox ignored invisible name='checkbox' checkedState=false +++++++++genericContainer +++++++++++staticText name='done' +++++++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/css/visibility-to-visible-expected-blink.txt b/content/test/data/accessibility/css/visibility-to-visible-expected-blink.txt index 868de71a..a9d16d8 100644 --- a/content/test/data/accessibility/css/visibility-to-visible-expected-blink.txt +++ b/content/test/data/accessibility/css/visibility-to-visible-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored ++++genericContainer ignored -++++++staticText name='Cats ' -++++++++inlineTextBox name='Cats ' -++++++genericContainer -++++++++checkBox name='checkbox' checkedState=false -++++++genericContainer -++++++++staticText name='done' -++++++++++inlineTextBox name='done' +++++++genericContainer ignored +++++++++staticText name='Cats ' +++++++++++inlineTextBox name='Cats ' +++++++++genericContainer +++++++++++checkBox name='checkbox' checkedState=false +++++++++genericContainer +++++++++++staticText name='done' +++++++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/html/a-expected-blink.txt b/content/test/data/accessibility/html/a-expected-blink.txt index f79ced8..fcd4272a 100644 --- a/content/test/data/accessibility/html/a-expected-blink.txt +++ b/content/test/data/accessibility/html/a-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea -++genericContainer -++++link linked name='normal link' -++++++staticText linked name='normal link' -++++++++inlineTextBox name='normal link' +++genericContainer ignored +++++genericContainer +++++++link linked name='normal link' +++++++++staticText linked name='normal link' +++++++++++inlineTextBox name='normal link'
diff --git a/content/test/data/accessibility/html/a-name-calc-expected-blink.txt b/content/test/data/accessibility/html/a-name-calc-expected-blink.txt index eceb5bb34..8730656 100644 --- a/content/test/data/accessibility/html/a-name-calc-expected-blink.txt +++ b/content/test/data/accessibility/html/a-name-calc-expected-blink.txt
@@ -1,23 +1,24 @@ rootWebArea ++genericContainer ignored -++++link name='InnerText0' nameFrom=contents -++++++staticText name='InnerText0' nameFrom=contents -++++++++inlineTextBox name='InnerText0' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link description='Title1' name='InnerText1' nameFrom=contents descriptionFrom=title -++++++staticText name='InnerText1' nameFrom=contents -++++++++inlineTextBox name='InnerText1' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link name='Title2' nameFrom=attribute -++++++staticText name='InnerText2' nameFrom=contents -++++++++inlineTextBox name='InnerText2' nameFrom=contents -++++staticText name=' ' nameFrom=contents -++++++inlineTextBox name=' ' nameFrom=contents -++++link name='LabelledBy3' nameFrom=relatedElement -++++++staticText name='InnerText3' nameFrom=contents -++++++++inlineTextBox name='InnerText3' nameFrom=contents -++++link name='Title4' nameFrom=title -++++link name='Label5' nameFrom=attribute -++++link name='LabelledBy6' nameFrom=relatedElement +++++genericContainer ignored +++++++link name='InnerText0' nameFrom=contents +++++++++staticText name='InnerText0' nameFrom=contents +++++++++++inlineTextBox name='InnerText0' nameFrom=contents +++++++staticText name=' ' nameFrom=contents +++++++++inlineTextBox name=' ' nameFrom=contents +++++++link description='Title1' name='InnerText1' nameFrom=contents descriptionFrom=title +++++++++staticText name='InnerText1' nameFrom=contents +++++++++++inlineTextBox name='InnerText1' nameFrom=contents +++++++staticText name=' ' nameFrom=contents +++++++++inlineTextBox name=' ' nameFrom=contents +++++++link name='Title2' nameFrom=attribute +++++++++staticText name='InnerText2' nameFrom=contents +++++++++++inlineTextBox name='InnerText2' nameFrom=contents +++++++staticText name=' ' nameFrom=contents +++++++++inlineTextBox name=' ' nameFrom=contents +++++++link name='LabelledBy3' nameFrom=relatedElement +++++++++staticText name='InnerText3' nameFrom=contents +++++++++++inlineTextBox name='InnerText3' nameFrom=contents +++++++link name='Title4' nameFrom=title +++++++link name='Label5' nameFrom=attribute +++++++link name='LabelledBy6' nameFrom=relatedElement
diff --git a/content/test/data/accessibility/html/a-name-expected-blink.txt b/content/test/data/accessibility/html/a-name-expected-blink.txt index c01e14e..a1f23e93 100644 --- a/content/test/data/accessibility/html/a-name-expected-blink.txt +++ b/content/test/data/accessibility/html/a-name-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++anchor name='named anchor' -++++++staticText name='named anchor' -++++++++inlineTextBox name='named anchor' -++++link name='both a named anchor and a link' -++++++staticText name='both a named anchor and a link' -++++++++inlineTextBox name='both a named anchor and a link' +++++genericContainer ignored +++++++anchor name='named anchor' +++++++++staticText name='named anchor' +++++++++++inlineTextBox name='named anchor' +++++++link name='both a named anchor and a link' +++++++++staticText name='both a named anchor and a link' +++++++++++inlineTextBox name='both a named anchor and a link'
diff --git a/content/test/data/accessibility/html/a-nested-structure-expected-blink.txt b/content/test/data/accessibility/html/a-nested-structure-expected-blink.txt index 5bcc23e..6fd843b 100644 --- a/content/test/data/accessibility/html/a-nested-structure-expected-blink.txt +++ b/content/test/data/accessibility/html/a-nested-structure-expected-blink.txt
@@ -1,25 +1,26 @@ rootWebArea ++genericContainer ignored -++++link name='Header 1 List element 1 List element 2 List element 3' -++++++heading name='Header 1' hierarchicalLevel=1 -++++++++staticText name='Header 1' -++++++++++inlineTextBox name='Header 1' -++++++list -++++++++listItem hierarchicalLevel=1 -++++++++++listMarker name='• ' -++++++++++++staticText name='• ' -++++++++++++++inlineTextBox name='• ' -++++++++++staticText name='List element 1' -++++++++++++inlineTextBox name='List element 1' -++++++++listItem hierarchicalLevel=1 -++++++++++listMarker name='• ' -++++++++++++staticText name='• ' -++++++++++++++inlineTextBox name='• ' -++++++++++staticText name='List element 2' -++++++++++++inlineTextBox name='List element 2' -++++++++listItem hierarchicalLevel=1 -++++++++++listMarker name='• ' -++++++++++++staticText name='• ' -++++++++++++++inlineTextBox name='• ' -++++++++++staticText name='List element 3' -++++++++++++inlineTextBox name='List element 3' +++++genericContainer ignored +++++++link name='Header 1 List element 1 List element 2 List element 3' +++++++++heading name='Header 1' hierarchicalLevel=1 +++++++++++staticText name='Header 1' +++++++++++++inlineTextBox name='Header 1' +++++++++list +++++++++++listItem hierarchicalLevel=1 +++++++++++++listMarker name='• ' +++++++++++++++staticText name='• ' +++++++++++++++++inlineTextBox name='• ' +++++++++++++staticText name='List element 1' +++++++++++++++inlineTextBox name='List element 1' +++++++++++listItem hierarchicalLevel=1 +++++++++++++listMarker name='• ' +++++++++++++++staticText name='• ' +++++++++++++++++inlineTextBox name='• ' +++++++++++++staticText name='List element 2' +++++++++++++++inlineTextBox name='List element 2' +++++++++++listItem hierarchicalLevel=1 +++++++++++++listMarker name='• ' +++++++++++++++staticText name='• ' +++++++++++++++++inlineTextBox name='• ' +++++++++++++staticText name='List element 3' +++++++++++++++inlineTextBox name='List element 3'
diff --git a/content/test/data/accessibility/html/a-no-text-expected-blink.txt b/content/test/data/accessibility/html/a-no-text-expected-blink.txt index 89259a9..0b0100d 100644 --- a/content/test/data/accessibility/html/a-no-text-expected-blink.txt +++ b/content/test/data/accessibility/html/a-no-text-expected-blink.txt
@@ -1,24 +1,25 @@ rootWebArea -++genericContainer -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++link -++++++image -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++link -++++++image +++genericContainer ignored +++++genericContainer +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++link +++++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++link +++++++++image
diff --git a/content/test/data/accessibility/html/a-onclick-expected-blink.txt b/content/test/data/accessibility/html/a-onclick-expected-blink.txt index 9b45cd7..de3bb6f 100644 --- a/content/test/data/accessibility/html/a-onclick-expected-blink.txt +++ b/content/test/data/accessibility/html/a-onclick-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea ++genericContainer ignored -++++link name='link with no href but onclick' defaultActionVerb=jump -++++++staticText name='link with no href but onclick' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='link with no href but onclick' -++++link name='link with no href and click handler added via script' defaultActionVerb=jump -++++++staticText name='link with no href and click handler added via script' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='link with no href and click handler added via script' +++++genericContainer ignored +++++++link name='link with no href but onclick' defaultActionVerb=jump +++++++++staticText name='link with no href but onclick' defaultActionVerb=clickAncestor +++++++++++inlineTextBox name='link with no href but onclick' +++++++link name='link with no href and click handler added via script' defaultActionVerb=jump +++++++++staticText name='link with no href and click handler added via script' defaultActionVerb=clickAncestor +++++++++++inlineTextBox name='link with no href and click handler added via script'
diff --git a/content/test/data/accessibility/html/abbr-expected-blink.txt b/content/test/data/accessibility/html/abbr-expected-blink.txt index 2171ead8..1602a8e 100644 --- a/content/test/data/accessibility/html/abbr-expected-blink.txt +++ b/content/test/data/accessibility/html/abbr-expected-blink.txt
@@ -1,10 +1,11 @@ rootWebArea ++genericContainer ignored -++++paragraph -++++++staticText name='The ' -++++++++inlineTextBox name='The ' -++++++abbr name='World Health Organization' -++++++++staticText name='WHO' -++++++++++inlineTextBox name='WHO' -++++++staticText name=' was founded in 1948.' -++++++++inlineTextBox name=' was founded in 1948.' +++++genericContainer ignored +++++++paragraph +++++++++staticText name='The ' +++++++++++inlineTextBox name='The ' +++++++++abbr name='World Health Organization' +++++++++++staticText name='WHO' +++++++++++++inlineTextBox name='WHO' +++++++++staticText name=' was founded in 1948.' +++++++++++inlineTextBox name=' was founded in 1948.'
diff --git a/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt b/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt index bd9cb4d..1623e2d 100644 --- a/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt +++ b/content/test/data/accessibility/html/absolute-offscreen-expected-blink.txt
@@ -1,14 +1,15 @@ rootWebArea clipsChildren=true ++genericContainer ignored -++++genericContainer size=(0, 0) pageSize=(50, 20) unclippedSize=(50, 20) -++++++genericContainer pageSize=(50, 20) unclippedSize=(50, 20) -++++++++staticText name='Visible' -++++++++++inlineTextBox name='Visible' -++++genericContainer size=(0, 0) pageSize=(1, 1) unclippedSize=(50, 20) clipsChildren=true -++++++genericContainer offscreen pageSize=(1, 1) unclippedSize=(50, 20) -++++++++staticText offscreen pageSize=(1, 1) name='Invisible' -++++++++++inlineTextBox offscreen pageSize=(1, 1) name='Invisible' -++++genericContainer clipsChildren=true -++++++genericContainer offscreen pageSize=(50, 1) unclippedSize=(50, 20) -++++++++staticText offscreen name='Invisible' -++++++++++inlineTextBox offscreen name='Invisible' +++++genericContainer ignored +++++++genericContainer size=(0, 0) pageSize=(50, 20) unclippedSize=(50, 20) +++++++++genericContainer pageSize=(50, 20) unclippedSize=(50, 20) +++++++++++staticText name='Visible' +++++++++++++inlineTextBox name='Visible' +++++++genericContainer size=(0, 0) pageSize=(1, 1) unclippedSize=(50, 20) clipsChildren=true +++++++++genericContainer offscreen pageSize=(1, 1) unclippedSize=(50, 20) +++++++++++staticText offscreen pageSize=(1, 1) name='Invisible' +++++++++++++inlineTextBox offscreen pageSize=(1, 1) name='Invisible' +++++++genericContainer clipsChildren=true +++++++++genericContainer offscreen pageSize=(50, 1) unclippedSize=(50, 20) +++++++++++staticText offscreen name='Invisible' +++++++++++++inlineTextBox offscreen name='Invisible'
diff --git a/content/test/data/accessibility/html/action-verbs-expected-blink.txt b/content/test/data/accessibility/html/action-verbs-expected-blink.txt index 96b2e8b..5690407 100644 --- a/content/test/data/accessibility/html/action-verbs-expected-blink.txt +++ b/content/test/data/accessibility/html/action-verbs-expected-blink.txt
@@ -1,56 +1,57 @@ rootWebArea name='Action verbs' ++genericContainer ignored -++++genericContainer -++++++staticText name='Generic div' -++++++++inlineTextBox name='Generic div' -++++heading name='Heading' hierarchicalLevel=1 -++++++staticText name='Heading' -++++++++inlineTextBox name='Heading' -++++button name='Button' defaultActionVerb=press -++++++staticText name='Button' -++++++++inlineTextBox name='Button' -++++link name='Link' defaultActionVerb=jump -++++++staticText name='Link' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='Link' -++++textField defaultActionVerb=activate +++++genericContainer ignored ++++++genericContainer -++++searchBox defaultActionVerb=activate -++++++genericContainer -++++textField multiline defaultActionVerb=activate -++++++genericContainer -++++textField defaultActionVerb=activate -++++checkBox defaultActionVerb=check checkedState=false -++++checkBox defaultActionVerb=uncheck checkedState=true -++++radioButton defaultActionVerb=check checkedState=false -++++switch name='ARIA Switch' defaultActionVerb=check checkedState=false -++++details -++++++disclosureTriangle collapsed name='Summary' defaultActionVerb=press -++++++++staticText name='Summary' -++++++++++inlineTextBox name='Summary' -++++popUpButton collapsed value='Pop-up button' defaultActionVerb=open haspopup=menu -++++++menuListPopup invisible -++++++++menuListOption name='Pop-up button' defaultActionVerb=select selected=true -++++genericContainer defaultActionVerb=click -++++++staticText name='Div with click handler' defaultActionVerb=clickAncestor -++++++++inlineTextBox name='Div with click handler' -++++group defaultActionVerb=click -++++++paragraph defaultActionVerb=clickAncestor -++++++++staticText name='Paragraph with click handler on parent' defaultActionVerb=clickAncestor -++++++++++inlineTextBox name='Paragraph with click handler on parent' -++++menu -++++++menuItem name='Menu item 1' defaultActionVerb=select -++++++menuItemCheckBox name='Menu item 2' defaultActionVerb=uncheck checkedState=true -++++++menuItemRadio name='Menu item 3' defaultActionVerb=check checkedState=false -++++button name='ARIA Button' defaultActionVerb=click -++++++staticText name='ARIA Button' -++++++++inlineTextBox name='ARIA Button' -++++button name='ARIA button with tab index' defaultActionVerb=press -++++++staticText name='ARIA button with tab index' -++++++++inlineTextBox name='ARIA button with tab index' -++++button name='ARIA button with negative tab index' defaultActionVerb=press -++++++staticText name='ARIA button with negative tab index' -++++++++inlineTextBox name='ARIA button with negative tab index' -++++genericContainer activedescendantId=button -++++++button name='ARIA button that is an active descendant' defaultActionVerb=press -++++++++staticText name='ARIA button that is an active descendant' -++++++++++inlineTextBox name='ARIA button that is an active descendant' +++++++++staticText name='Generic div' +++++++++++inlineTextBox name='Generic div' +++++++heading name='Heading' hierarchicalLevel=1 +++++++++staticText name='Heading' +++++++++++inlineTextBox name='Heading' +++++++button name='Button' defaultActionVerb=press +++++++++staticText name='Button' +++++++++++inlineTextBox name='Button' +++++++link name='Link' defaultActionVerb=jump +++++++++staticText name='Link' defaultActionVerb=clickAncestor +++++++++++inlineTextBox name='Link' +++++++textField defaultActionVerb=activate +++++++++genericContainer +++++++searchBox defaultActionVerb=activate +++++++++genericContainer +++++++textField multiline defaultActionVerb=activate +++++++++genericContainer +++++++textField defaultActionVerb=activate +++++++checkBox defaultActionVerb=check checkedState=false +++++++checkBox defaultActionVerb=uncheck checkedState=true +++++++radioButton defaultActionVerb=check checkedState=false +++++++switch name='ARIA Switch' defaultActionVerb=check checkedState=false +++++++details +++++++++disclosureTriangle collapsed name='Summary' defaultActionVerb=press +++++++++++staticText name='Summary' +++++++++++++inlineTextBox name='Summary' +++++++popUpButton collapsed value='Pop-up button' defaultActionVerb=open haspopup=menu +++++++++menuListPopup invisible +++++++++++menuListOption name='Pop-up button' defaultActionVerb=select selected=true +++++++genericContainer defaultActionVerb=click +++++++++staticText name='Div with click handler' defaultActionVerb=clickAncestor +++++++++++inlineTextBox name='Div with click handler' +++++++group defaultActionVerb=click +++++++++paragraph defaultActionVerb=clickAncestor +++++++++++staticText name='Paragraph with click handler on parent' defaultActionVerb=clickAncestor +++++++++++++inlineTextBox name='Paragraph with click handler on parent' +++++++menu +++++++++menuItem name='Menu item 1' defaultActionVerb=select +++++++++menuItemCheckBox name='Menu item 2' defaultActionVerb=uncheck checkedState=true +++++++++menuItemRadio name='Menu item 3' defaultActionVerb=check checkedState=false +++++++button name='ARIA Button' defaultActionVerb=click +++++++++staticText name='ARIA Button' +++++++++++inlineTextBox name='ARIA Button' +++++++button name='ARIA button with tab index' defaultActionVerb=press +++++++++staticText name='ARIA button with tab index' +++++++++++inlineTextBox name='ARIA button with tab index' +++++++button name='ARIA button with negative tab index' defaultActionVerb=press +++++++++staticText name='ARIA button with negative tab index' +++++++++++inlineTextBox name='ARIA button with negative tab index' +++++++genericContainer activedescendantId=button +++++++++button name='ARIA button that is an active descendant' defaultActionVerb=press +++++++++++staticText name='ARIA button that is an active descendant' +++++++++++++inlineTextBox name='ARIA button that is an active descendant'
diff --git a/content/test/data/accessibility/html/actions-expected-blink.txt b/content/test/data/accessibility/html/actions-expected-blink.txt index bdbff8a..9ee74d6 100644 --- a/content/test/data/accessibility/html/actions-expected-blink.txt +++ b/content/test/data/accessibility/html/actions-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea name='Actions' -++genericContainer -++++slider horizontal value='50' valueForRange=50.00 minValueForRange=1.00 maxValueForRange=100.00 actions=setValue -++++++sliderThumb -++++textField name='Test textfield' actions=setValue -++++++staticText name='Test textfield' -++++++++inlineTextBox name='Test textfield' -++++++genericContainer +++genericContainer ignored +++++genericContainer +++++++slider horizontal value='50' valueForRange=50.00 minValueForRange=1.00 maxValueForRange=100.00 actions=setValue +++++++++sliderThumb +++++++textField name='Test textfield' actions=setValue +++++++++staticText name='Test textfield' +++++++++++inlineTextBox name='Test textfield' +++++++++genericContainer
diff --git a/content/test/data/accessibility/html/add-click-listener-expected-blink.txt b/content/test/data/accessibility/html/add-click-listener-expected-blink.txt index 0f752fc..dd02511 100644 --- a/content/test/data/accessibility/html/add-click-listener-expected-blink.txt +++ b/content/test/data/accessibility/html/add-click-listener-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea name='Done' -++genericContainer +++genericContainer ignored name='Done' ++++genericContainer -++++++button name='This should be accessible' -++++++++staticText name='This should be accessible' -++++++++++inlineTextBox name='This should be accessible' +++++++genericContainer +++++++++button name='This should be accessible' +++++++++++staticText name='This should be accessible' +++++++++++++inlineTextBox name='This should be accessible'
diff --git a/content/test/data/accessibility/html/address-expected-blink.txt b/content/test/data/accessibility/html/address-expected-blink.txt index 28da951..221e133c 100644 --- a/content/test/data/accessibility/html/address-expected-blink.txt +++ b/content/test/data/accessibility/html/address-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea ++genericContainer ignored -++++genericContainer -++++++staticText name='Please contact John Citizen for more information.' -++++++++inlineTextBox name='Please contact John Citizen for more information.' +++++genericContainer ignored +++++++genericContainer +++++++++staticText name='Please contact John Citizen for more information.' +++++++++++inlineTextBox name='Please contact John Citizen for more information.'
diff --git a/content/test/data/accessibility/html/area-crash-expected-blink.txt b/content/test/data/accessibility/html/area-crash-expected-blink.txt index 3e4ba7f2..d7285c7 100644 --- a/content/test/data/accessibility/html/area-crash-expected-blink.txt +++ b/content/test/data/accessibility/html/area-crash-expected-blink.txt
@@ -1,9 +1,10 @@ rootWebArea -++genericContainer -++++staticText name='foo' +++genericContainer ignored +++++genericContainer ++++++staticText name='foo' -++++++++inlineTextBox name='foo' -++++staticText name=' ' -++++++inlineTextBox name=' ' -++++staticText name='done' -++++++inlineTextBox name='done' +++++++++staticText name='foo' +++++++++++inlineTextBox name='foo' +++++++staticText name=' ' +++++++++inlineTextBox name=' ' +++++++staticText name='done' +++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/html/area-expected-blink.txt b/content/test/data/accessibility/html/area-expected-blink.txt index 7f05c0a9..1ebad37 100644 --- a/content/test/data/accessibility/html/area-expected-blink.txt +++ b/content/test/data/accessibility/html/area-expected-blink.txt
@@ -1,5 +1,6 @@ rootWebArea -++genericContainer -++++imageMap name='pipe' -++++++link name='pipe1' -++++++staticText name='pipe2' +++genericContainer ignored +++++genericContainer +++++++imageMap name='pipe' +++++++++link name='pipe1' +++++++++staticText name='pipe2'
diff --git a/content/test/data/accessibility/html/area-serialization-crash-expected-blink.txt b/content/test/data/accessibility/html/area-serialization-crash-expected-blink.txt index 42b66faf..61d77cd 100644 --- a/content/test/data/accessibility/html/area-serialization-crash-expected-blink.txt +++ b/content/test/data/accessibility/html/area-serialization-crash-expected-blink.txt
@@ -1,6 +1,7 @@ rootWebArea -++genericContainer -++++staticText -++++++genericContainer invisible -++++staticText name='done' -++++++inlineTextBox name='done' +++genericContainer ignored +++++genericContainer +++++++staticText +++++++++genericContainer invisible +++++++staticText name='done' +++++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/html/combobox-optgroup-expected-blink.txt b/content/test/data/accessibility/html/combobox-optgroup-expected-blink.txt index 3842075..71ca16ab 100644 --- a/content/test/data/accessibility/html/combobox-optgroup-expected-blink.txt +++ b/content/test/data/accessibility/html/combobox-optgroup-expected-blink.txt
@@ -1,8 +1,9 @@ rootWebArea -++genericContainer -++++popUpButton collapsed value='Mercedes Label' setSize=4 -++++++menuListPopup invisible setSize=4 -++++++++menuListOption invisible name='Volvo Label' setSize=4 posInSet=1 selected=false -++++++++menuListOption invisible name='Saab Label' setSize=4 posInSet=2 selected=false -++++++++menuListOption name='Mercedes Label' setSize=4 posInSet=3 selected=true -++++++++menuListOption invisible name='Audi Label' setSize=4 posInSet=4 selected=false +++genericContainer ignored +++++genericContainer +++++++popUpButton collapsed value='Mercedes Label' setSize=4 +++++++++menuListPopup invisible setSize=4 +++++++++++menuListOption invisible name='Volvo Label' setSize=4 posInSet=1 selected=false +++++++++++menuListOption invisible name='Saab Label' setSize=4 posInSet=2 selected=false +++++++++++menuListOption name='Mercedes Label' setSize=4 posInSet=3 selected=true +++++++++++menuListOption invisible name='Audi Label' setSize=4 posInSet=4 selected=false
diff --git a/content/test/data/accessibility/html/element-class-id-src-attr-expected-blink.txt b/content/test/data/accessibility/html/element-class-id-src-attr-expected-blink.txt index 1d99cae9..c388f7a 100644 --- a/content/test/data/accessibility/html/element-class-id-src-attr-expected-blink.txt +++ b/content/test/data/accessibility/html/element-class-id-src-attr-expected-blink.txt
@@ -3,4 +3,4 @@ ++++heading className='headerClass' htmlTag='h1' name='Image' ++++++staticText name='Image' ++++++++inlineTextBox name='Image' -++++image className='imageClass' htmlTag='img' name='ImageAlt' \ No newline at end of file +++++image className='imageClass' htmlTag='img' name='ImageAlt'
diff --git a/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt b/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt index 479e5e5e..d777ba2 100644 --- a/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt +++ b/content/test/data/accessibility/html/modal-dialog-opened-expected-blink.txt
@@ -9,4 +9,4 @@ ++++++++++++inlineTextBox name='Link inside the dialog.' ++++++popUpButton collapsed ignored invisible value='This should be pruned out of the tree.' ++++button ignored invisible name='Choose File' value='No file chosen' -++++dialog ignored invisible \ No newline at end of file +++++dialog ignored invisible
diff --git a/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt b/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt index 163b9953..6da1e4d 100644 --- a/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt +++ b/content/test/data/accessibility/html/modal-dialog-stack-expected-blink.txt
@@ -11,4 +11,4 @@ ++++++button name='This is in the active dialog and should be in the tree.' ++++++++staticText name='This is in the active dialog and should be in the tree.' ++++++++++inlineTextBox name='This is in the active dialog and should be in the tree.' -++++dialog ignored invisible \ No newline at end of file +++++dialog ignored invisible
diff --git a/content/test/gpu/OWNERS b/content/test/gpu/OWNERS index 59d5ac0c..93eae78 100644 --- a/content/test/gpu/OWNERS +++ b/content/test/gpu/OWNERS
@@ -5,9 +5,6 @@ ynovikov@chromium.org zmo@chromium.org -# For Telemetry refactorings. -crouleau@chromium.org - # Emeritus: # dtu@chromium.org
diff --git a/content/utility/soda/soda_sandbox_hook_linux.cc b/content/utility/soda/soda_sandbox_hook_linux.cc index ac662e62..b94592d 100644 --- a/content/utility/soda/soda_sandbox_hook_linux.cc +++ b/content/utility/soda/soda_sandbox_hook_linux.cc
@@ -26,6 +26,8 @@ if (!latest_version_dir.empty()) { permissions.push_back(BrokerFilePermission::ReadOnlyRecursive( latest_version_dir.AsEndingWithSeparator().value())); + permissions.push_back( + BrokerFilePermission::ReadOnly(latest_version_dir.value())); } return permissions;
diff --git a/docs/speed/adding_tests_bots.md b/docs/speed/adding_tests_bots.md index a198f09..827b9f9 100644 --- a/docs/speed/adding_tests_bots.md +++ b/docs/speed/adding_tests_bots.md
@@ -11,4 +11,4 @@ [go/chrome-speed-devices](http://go/chrome-speed-devices). If you need other hardware not listed there, please reach out to -benchmarking-dev@google.com or crouleau@chromium.org. +benchmarking-dev@google.com or johnchen@chromium.org.
diff --git a/docs/speed/chrome_speed_operations.md b/docs/speed/chrome_speed_operations.md index 6d8a1ac..66c36a7f 100644 --- a/docs/speed/chrome_speed_operations.md +++ b/docs/speed/chrome_speed_operations.md
@@ -15,7 +15,7 @@ * A [perf waterfall](perf_waterfall.md) to run these benchmarks on our continuous build on a dozen real device types, on Windows, Mac, Linux, and Android. -TL: crouleau@chromium.org +TL: johnchen@chromium.org ## Speed Tooling The [Speed Tooling](chrome_speed_tooling.md) team provides:
diff --git a/docs/speed/perf_trybots.md b/docs/speed/perf_trybots.md index 137a87f..01532dc 100644 --- a/docs/speed/perf_trybots.md +++ b/docs/speed/perf_trybots.md
@@ -21,7 +21,11 @@ ## Starting a perf try job -Visit [Pinpoint](https://pinpoint-dot-chromeperf.appspot.com) and click the perf try button in the bottom right corner of the screen. +* Visit [Pinpoint](https://pinpoint-dot-chromeperf.appspot.com). +* Check the upper-right corner of the page. If you see a "Sign in" link, + click it and sign in with an account that has trybot access. + (If the link shows "Sign out", then you are already signed in.) +* Click the perf try button in the bottom right corner of the screen. 
diff --git a/docs/vscode.md b/docs/vscode.md index 27c3c06..21d1917a 100644 --- a/docs/vscode.md +++ b/docs/vscode.md
@@ -4,7 +4,7 @@ Mac and Linux, based on Electron/Chromium. It has built-in support for JavaScript, TypeScript and Node.js and a rich extension ecosystem that adds intellisense, debugging, syntax highlighting etc. for many languages (C++, -Python, Go). It works without too much setup. Get started +Python, Go, Java). It works without too much setup. Get started [here](https://code.visualstudio.com/docs). It is NOT a full-fledged IDE like Visual Studio. The two are completely @@ -201,6 +201,34 @@ * `Ctrl+X` without anything selected cuts the current line. `Ctrl+V` pastes the line. +### Java/Android Support +To get Java support in VS Code, you'll need to install the +'Java Extension Pack' extension, but you'll want to immediately uninstall or +disable the Maven for Java extension so it stops nagging you as we won't need +it. + +#### Setting up code completion/reference finding/etc. +You'll need to locate the .classpath file redhat generates for you. Its +location will depend on whether you're doing local or remote development. +Local path on linux will look something like: + +`~/.vscode/data/User/workspaceStorage/<hash>/redhat.java/jdt_ws/<project>/.classpath` + +If doing remote development, the file will be under `~/.vscode-server/` on your +remote machine. + +You'll need to replace the contents of that file with the contents of +<chromium-root>/.classpath (generated by gclient runhooks), and then replace +some paths as vscode interprets some paths differently from eclipse. +* Replace: `kind="src" path="` with `kind="src" path="_/` +* Replace: `kind="lib" path="../src` with `kind="lib" path="_` +* Remove all nested paths (or exclude them from their parents). At time of +writing: + * `third_party/android_protobuf/src/java/src/main/java` + * `third_party/junit/src/src/main/java` + +Then restart vscode, open a Java file, and wait for a bit. + ## Setup For Chromium VS Code is configured via JSON files. This paragraph contains JSON configuration
diff --git a/extensions/browser/api/networking_config/OWNERS b/extensions/browser/api/networking_config/OWNERS index e7295133..87bd7ef 100644 --- a/extensions/browser/api/networking_config/OWNERS +++ b/extensions/browser/api/networking_config/OWNERS
@@ -1,4 +1,4 @@ stevenjb@chromium.org emaxx@chromium.org -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl index ef148b9..f380faf 100644 --- a/extensions/common/api/automation.idl +++ b/extensions/common/api/automation.idl
@@ -194,7 +194,6 @@ labelText, layoutTable, layoutTableCell, - layoutTableColumn, layoutTableRow, legend, lineBreak,
diff --git a/fuchsia/engine/browser/cookie_manager_impl.cc b/fuchsia/engine/browser/cookie_manager_impl.cc index 937cf06..e7362ae5 100644 --- a/fuchsia/engine/browser/cookie_manager_impl.cc +++ b/fuchsia/engine/browser/cookie_manager_impl.cc
@@ -211,7 +211,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager_->GetCookieList( GURL(*url), options,
diff --git a/gpu/command_buffer/client/webgpu_implementation.cc b/gpu/command_buffer/client/webgpu_implementation.cc index b43f4fa1..7db6a3c 100644 --- a/gpu/command_buffer/client/webgpu_implementation.cc +++ b/gpu/command_buffer/client/webgpu_implementation.cc
@@ -51,6 +51,8 @@ // This function can only be called once for each WebGPUCommandSerializer // object (before any call of GetCmdSpace()). +// TODO(jiawei.shao@intel.com): early return and directly call the callback +// function when the connection to the GPU process has been lost. void WebGPUCommandSerializer::RequestDeviceCreation( uint32_t requested_adapter_id, const WGPUDeviceProperties& requested_device_properties) { @@ -343,19 +345,11 @@ } // GpuControlClient implementation. -// TODO(jiawei.shao@intel.com): do other clean-ups when the context is lost. void WebGPUImplementation::OnGpuControlLostContext() { - OnGpuControlLostContextMaybeReentrant(); - - // This should never occur more than once. - DCHECK(!lost_context_callback_run_); - lost_context_callback_run_ = true; - if (!lost_context_callback_.is_null()) { - std::move(lost_context_callback_).Run(); - } + NOTIMPLEMENTED(); } void WebGPUImplementation::OnGpuControlLostContextMaybeReentrant() { - lost_ = true; + NOTIMPLEMENTED(); } void WebGPUImplementation::OnGpuControlErrorMessage(const char* message, int32_t id) { @@ -559,10 +553,6 @@ PowerPreference power_preference, base::OnceCallback<void(uint32_t, const WGPUDeviceProperties&)> request_adapter_callback) { - if (lost_) { - return false; - } - // Now that we declare request_adapter_serial as an uint64, it can't overflow // because we just increment an uint64 by one. DawnRequestAdapterSerial request_adapter_serial = NextRequestAdapterSerial(); @@ -589,10 +579,6 @@ base::OnceCallback<void(bool, DawnDeviceClientID)> request_device_callback) { #if BUILDFLAG(USE_DAWN) - if (lost_) { - return false; - } - // Now that we declare device_client_id as an uint64, it can't overflow // because we just increment an uint64 by one. DawnDeviceClientID device_client_id = NextDeviceClientID();
diff --git a/gpu/command_buffer/client/webgpu_implementation.h b/gpu/command_buffer/client/webgpu_implementation.h index 6dfd3c5..9a97ed4 100644 --- a/gpu/command_buffer/client/webgpu_implementation.h +++ b/gpu/command_buffer/client/webgpu_implementation.h
@@ -193,8 +193,6 @@ request_device_callback_map_; DawnDeviceClientID device_client_id_ = 0; - std::atomic_bool lost_{false}; - DISALLOW_COPY_AND_ASSIGN(WebGPUImplementation); };
diff --git a/gpu/command_buffer/tests/webgpu_test.cc b/gpu/command_buffer/tests/webgpu_test.cc index 712e7057..1bafc87 100644 --- a/gpu/command_buffer/tests/webgpu_test.cc +++ b/gpu/command_buffer/tests/webgpu_test.cc
@@ -25,10 +25,6 @@ void OnRequestAdapterCallback(uint32_t adapter_service_id, const WGPUDeviceProperties& properties) {} -void CountCallback(int* count) { - (*count)++; -} - } // anonymous namespace WebGPUTest::Options::Options() = default; @@ -107,7 +103,7 @@ dawnProcSetProcs(&procs); } -webgpu::WebGPUImplementation* WebGPUTest::webgpu() const { +webgpu::WebGPUInterface* WebGPUTest::webgpu() const { return context_->GetImplementation(); } @@ -168,53 +164,4 @@ webgpu()->FlushCommands(); } -// Referred from GLES2ImplementationTest/ReportLoss -TEST_F(WebGPUTest, ReportLoss) { - Initialize(WebGPUTest::Options()); - - GpuControlClient* webgpu_as_client = webgpu(); - int lost_count = 0; - webgpu()->SetLostContextCallback(base::BindOnce(&CountCallback, &lost_count)); - EXPECT_EQ(0, lost_count); - - webgpu_as_client->OnGpuControlLostContext(); - // The lost context callback should be run when WebGPUImplementation is - // notified of the loss. - EXPECT_EQ(1, lost_count); -} - -// Referred from GLES2ImplementationTest/ReportLossReentrant -TEST_F(WebGPUTest, ReportLossReentrant) { - Initialize(WebGPUTest::Options()); - - GpuControlClient* webgpu_as_client = webgpu(); - int lost_count = 0; - webgpu()->SetLostContextCallback(base::BindOnce(&CountCallback, &lost_count)); - EXPECT_EQ(0, lost_count); - - webgpu_as_client->OnGpuControlLostContextMaybeReentrant(); - // The lost context callback should not be run yet to avoid calling back into - // clients re-entrantly, and having them re-enter WebGPUImplementation. - EXPECT_EQ(0, lost_count); -} - -TEST_F(WebGPUTest, RequestAdapterAfterContextLost) { - Initialize(WebGPUTest::Options()); - - webgpu()->OnGpuControlLostContext(); - ASSERT_FALSE( - webgpu()->RequestAdapterAsync(webgpu::PowerPreference::kDefault, - base::BindOnce(&OnRequestAdapterCallback))); -} - -TEST_F(WebGPUTest, RequestDeviceAfterContextLost) { - Initialize(WebGPUTest::Options()); - - webgpu()->OnGpuControlLostContext(); - ASSERT_FALSE(webgpu()->RequestDeviceAsync( - kAdapterServiceID, {}, - base::BindOnce( - [](bool success, webgpu::DawnDeviceClientID assigned_client_id) {}))); -} - } // namespace gpu
diff --git a/gpu/command_buffer/tests/webgpu_test.h b/gpu/command_buffer/tests/webgpu_test.h index 38697bc3..fa6a512 100644 --- a/gpu/command_buffer/tests/webgpu_test.h +++ b/gpu/command_buffer/tests/webgpu_test.h
@@ -27,7 +27,7 @@ namespace webgpu { -class WebGPUImplementation; +class WebGPUInterface; } // namespace webgpu @@ -51,7 +51,7 @@ void Initialize(const Options& options); - webgpu::WebGPUImplementation* webgpu() const; + webgpu::WebGPUInterface* webgpu() const; SharedImageInterface* GetSharedImageInterface() const; void RunPendingTasks(); @@ -63,14 +63,13 @@ }; DeviceAndClientID GetNewDeviceAndClientID(); - const uint32_t kAdapterServiceID = 0u; - private: std::unique_ptr<viz::TestGpuServiceHolder> gpu_service_holder_; std::unique_ptr<WebGPUInProcessContext> context_; bool is_initialized_ = false; webgpu::DawnDeviceClientID next_device_client_id_ = 1; + const uint32_t kAdapterServiceID = 0u; }; } // namespace gpu
diff --git a/gpu/ipc/webgpu_in_process_context.cc b/gpu/ipc/webgpu_in_process_context.cc index 1ee9974..a5cecb7 100644 --- a/gpu/ipc/webgpu_in_process_context.cc +++ b/gpu/ipc/webgpu_in_process_context.cc
@@ -95,7 +95,7 @@ return command_buffer_->GetGpuFeatureInfo(); } -webgpu::WebGPUImplementation* WebGPUInProcessContext::GetImplementation() { +webgpu::WebGPUInterface* WebGPUInProcessContext::GetImplementation() { return webgpu_implementation_.get(); }
diff --git a/gpu/ipc/webgpu_in_process_context.h b/gpu/ipc/webgpu_in_process_context.h index b2097200..da208b87 100644 --- a/gpu/ipc/webgpu_in_process_context.h +++ b/gpu/ipc/webgpu_in_process_context.h
@@ -25,6 +25,7 @@ struct SharedMemoryLimits; namespace webgpu { +class WebGPUInterface; class WebGPUImplementation; } // namespace webgpu @@ -51,7 +52,7 @@ // Allows direct access to the WebGPUImplementation so a // WebGPUInProcessContext can be used without making it current. - gpu::webgpu::WebGPUImplementation* GetImplementation(); + gpu::webgpu::WebGPUInterface* GetImplementation(); base::TestSimpleTaskRunner* GetTaskRunner(); // Test only functions.
diff --git a/infra/config/buckets/ci.star b/infra/config/buckets/ci.star index 617e9bf..80638ac5 100644 --- a/infra/config/buckets/ci.star +++ b/infra/config/buckets/ci.star
@@ -1027,6 +1027,7 @@ ci.fyi_ios_builder( name = 'ios13-beta-simulator', executable = 'recipe:chromium', + goma_backend = goma.backend.RBE_PROD, properties = { 'xcode_build_version': '11c29', }, @@ -1034,10 +1035,19 @@ ci.fyi_ios_builder( name = 'ios13-sdk-device', + executable = 'recipe:chromium', + properties = { + 'xcode_build_version': '11c29', + }, ) ci.fyi_ios_builder( name = 'ios13-sdk-simulator', + executable = 'recipe:chromium', + goma_backend = goma.backend.RBE_PROD, + properties = { + 'xcode_build_version': '11c29' + } )
diff --git a/infra/config/consoles/chromium.goma.migration.star b/infra/config/consoles/chromium.goma.migration.star index a4f40a4..e597b3b 100644 --- a/infra/config/consoles/chromium.goma.migration.star +++ b/infra/config/consoles/chromium.goma.migration.star
@@ -1155,5 +1155,44 @@ category = 'ios|week1a', short_name = 'sim', ), + luci.console_view_entry( + builder = 'ci/ios-device', + category = 'ios|week1b', + short_name = 'dev', + ), + luci.console_view_entry( + builder = 'ci/ios-simulator', + category = 'ios|week1b|sim', + ), + luci.console_view_entry( + builder = 'ci/ios-simulator-full-configs', + category = 'ios|week1b|sim', + short_name = 'fullconf', + ), + luci.console_view_entry( + builder = 'ci/ios-simulator-noncq', + category = 'ios|week1b|sim', + short_name = 'noncq', + ), + luci.console_view_entry( + builder = 'ci/ios13-beta-simulator', + category = 'ios|week1b|ios13|beta', + short_name = 'sim', + ), + luci.console_view_entry( + builder = 'ci/ios13-sdk-simulator', + category = 'ios|week1b|ios13|sdk', + short_name = 'sim', + ), + luci.console_view_entry( + builder = 'ci-m80/ios-simulator', + category = 'ios|week1b|m80', + short_name = 'sim', + ), + luci.console_view_entry( + builder = 'ci-m81/ios-simulator', + category = 'ios|week1b|m81', + short_name = 'sim', + ), ], )
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 32dfea7..abd99d0 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -6850,6 +6850,7 @@ name: "ios/unified_builder_tester" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -6873,6 +6874,7 @@ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" properties_j: "$build/chromium_tests:{\"bucketed_triggers\":true}" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -6966,6 +6968,7 @@ name: "ios/unified_builder_tester" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -6988,6 +6991,7 @@ name: "ios/unified_builder_tester" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -7033,6 +7037,7 @@ name: "chromium" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.fyi\"" properties_j: "xcode_build_version:\"11c29\"" @@ -7053,11 +7058,12 @@ dimensions: "cpu:x86-64" dimensions: "os:Mac" recipe: < - name: "ios/unified_builder_tester" + name: "chromium" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.fyi\"" + properties_j: "xcode_build_version:\"11c29\"" > execution_timeout_secs: 36000 caches: < @@ -7075,11 +7081,13 @@ dimensions: "cpu:x86-64" dimensions: "os:Mac" recipe: < - name: "ios/unified_builder_tester" + name: "chromium" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.fyi\"" + properties_j: "xcode_build_version:\"11c29\"" > execution_timeout_secs: 36000 caches: < @@ -8767,6 +8775,7 @@ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" properties_j: "$build/chromium_tests:{\"bucketed_triggers\":true}" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -9814,6 +9823,7 @@ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" properties_j: "$build/chromium_tests:{\"bucketed_triggers\":true}" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"chromium.mac\"" > @@ -15348,6 +15358,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15378,6 +15389,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15409,6 +15421,7 @@ cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" properties_j: "$build/code_coverage:{\"use_clang_coverage\":true}" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" properties_j: "xcode_build_version:\"11c29\"" @@ -15440,6 +15453,7 @@ name: "chromium_trybot" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" properties_j: "xcode_build_version:\"11a1027\"" @@ -15471,6 +15485,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15501,6 +15516,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15531,6 +15547,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15561,6 +15578,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15591,6 +15609,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -15621,6 +15640,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -19117,6 +19137,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" > @@ -19664,6 +19685,7 @@ name: "ios/try" cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/master" + properties_j: "$build/goma:{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\"}" properties_j: "$kitchen:{\"devshell\":true,\"git_auth\":true}" properties_j: "mastername:\"tryserver.chromium.mac\"" >
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg index 19ba86d..1f26561c 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci-milo.cfg
@@ -5486,6 +5486,45 @@ category: "ios|week1a" short_name: "sim" > + builders: < + name: "buildbucket/luci.chromium.ci/ios-device" + category: "ios|week1b" + short_name: "dev" + > + builders: < + name: "buildbucket/luci.chromium.ci/ios-simulator" + category: "ios|week1b|sim" + > + builders: < + name: "buildbucket/luci.chromium.ci/ios-simulator-full-configs" + category: "ios|week1b|sim" + short_name: "fullconf" + > + builders: < + name: "buildbucket/luci.chromium.ci/ios-simulator-noncq" + category: "ios|week1b|sim" + short_name: "noncq" + > + builders: < + name: "buildbucket/luci.chromium.ci/ios13-beta-simulator" + category: "ios|week1b|ios13|beta" + short_name: "sim" + > + builders: < + name: "buildbucket/luci.chromium.ci/ios13-sdk-simulator" + category: "ios|week1b|ios13|sdk" + short_name: "sim" + > + builders: < + name: "buildbucket/luci.chromium.ci-m80/ios-simulator" + category: "ios|week1b|m80" + short_name: "sim" + > + builders: < + name: "buildbucket/luci.chromium.ci-m81/ios-simulator" + category: "ios|week1b|m81" + short_name: "sim" + > header: < oncalls: < name: "Chromium"
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star index 3e24c33..9c0c369 100644 --- a/infra/config/lib/ci.star +++ b/infra/config/lib/ci.star
@@ -200,6 +200,7 @@ name, caches = None, executable='recipe:ios/unified_builder_tester', + goma_backend = None, **kwargs): if not caches: @@ -210,7 +211,7 @@ caches = caches, cores = None, executable = executable, - goma_backend = None, + goma_backend = goma_backend, os = builders.os.MAC_ANY, **kwargs ) @@ -363,7 +364,6 @@ name = name, caches = [builders.xcode_cache.x11c29], executable = 'recipe:ios/unified_builder_tester', - goma_backend = None, os = builders.os.MAC_ANY, **kwargs )
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star index 35df8f69..efc1b13 100644 --- a/infra/config/lib/try.star +++ b/infra/config/lib/try.star
@@ -183,6 +183,7 @@ caches = [builders.xcode_cache.x11c29], cores = None, executable = executable, + goma_backend=builders.goma.backend.RBE_PROD, mastername = 'tryserver.chromium.mac', os = builders.os.MAC_ANY, **kwargs
diff --git a/ios/build/bots/chromium.fyi/ios-simulator.json b/ios/build/bots/chromium.fyi/ios-simulator.json index 7d26425..9883178 100644 --- a/ios/build/bots/chromium.fyi/ios-simulator.json +++ b/ios/build/bots/chromium.fyi/ios-simulator.json
@@ -5,6 +5,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.fyi/ios13-sdk-device.json b/ios/build/bots/chromium.fyi/ios13-sdk-device.json deleted file mode 100644 index a009902c..0000000 --- a/ios/build/bots/chromium.fyi/ios13-sdk-device.json +++ /dev/null
@@ -1,22 +0,0 @@ -{ - "comments": [ - "Builder for Xcode 11 iOS 13 SDK", - "Build is performed with gn+ninja." - ], - "xcode build version": "11c29", - "gn_args": [ - "goma_dir=\"$(goma_dir)\"", - "ios_enable_code_signing=false", - "is_component_build=false", - "is_debug=false", - "target_cpu=\"arm64\"", - "target_os=\"ios\"", - "use_goma=true" - ], - "additional_compile_targets": [ - "all" - ], - "configuration": "Release", - "tests": [ - ] -}
diff --git a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json index e7fd5cd..d24b5f0 100644 --- a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json +++ b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
@@ -5,6 +5,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.mac/ios-device.json b/ios/build/bots/chromium.mac/ios-device.json index 392a6b6..99586563 100644 --- a/ios/build/bots/chromium.mac/ios-device.json +++ b/ios/build/bots/chromium.mac/ios-device.json
@@ -8,6 +8,7 @@ "gn_args": [ "goma_dir=\"$(goma_dir)\"", "ios_enable_code_signing=false", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=false", "symbol_level=0",
diff --git a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json b/ios/build/bots/chromium.mac/ios-simulator-full-configs.json index fbecdfc..10fa7d4 100644 --- a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json +++ b/ios/build/bots/chromium.mac/ios-simulator-full-configs.json
@@ -6,6 +6,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.mac/ios-simulator-noncq.json b/ios/build/bots/chromium.mac/ios-simulator-noncq.json index 4adb2fa7..5acec3b 100644 --- a/ios/build/bots/chromium.mac/ios-simulator-noncq.json +++ b/ios/build/bots/chromium.mac/ios-simulator-noncq.json
@@ -6,6 +6,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.mac/ios-simulator.json b/ios/build/bots/chromium.mac/ios-simulator.json index 33c92ce..1f4e765 100644 --- a/ios/build/bots/chromium.mac/ios-simulator.json +++ b/ios/build/bots/chromium.mac/ios-simulator.json
@@ -7,6 +7,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.mac/ios13-beta-simulator.json b/ios/build/bots/chromium.mac/ios13-beta-simulator.json index 73ebf924..ebdf9e7d 100644 --- a/ios/build/bots/chromium.mac/ios13-beta-simulator.json +++ b/ios/build/bots/chromium.mac/ios13-beta-simulator.json
@@ -8,6 +8,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json index 1d0c962..705db30 100644 --- a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json +++ b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
@@ -8,6 +8,7 @@ "xcode build version": "11c29", "gn_args": [ "goma_dir=\"$(goma_dir)\"", + "ios_use_goma_rbe=true", "is_component_build=false", "is_debug=true", "symbol_level=1",
diff --git a/ios/build/bots/scripts/run.py b/ios/build/bots/scripts/run.py index 786187aa..a313cd42 100755 --- a/ios/build/bots/scripts/run.py +++ b/ios/build/bots/scripts/run.py
@@ -144,6 +144,7 @@ self.args.version, self.args.platform, out_dir=self.args.out_dir, + release=self.args.release, retries=self.args.retries, shards=self.args.shards, test_cases=self.args.test_cases, @@ -188,6 +189,7 @@ app_path=self.args.app, host_app_path=self.args.host_app, out_dir=self.args.out_dir, + release=self.args.release, retries=self.args.retries, test_cases=self.args.test_cases, test_args=self.test_args, @@ -313,6 +315,12 @@ help='Platform to simulate.', metavar='sim', ) + #TODO(crbug.com/1056887): Implement this arg in infra. + parser.add_argument( + '--release', + help='Indicates if this is a release build.', + action='store_true', + ) parser.add_argument( '--replay-path', help=('Path to a directory containing WPR replay and recipe files, for ' @@ -437,6 +445,9 @@ args, test_args = parser.parse_known_args(args) load_from_json(args) validate(args) + # TODO(crbug.com/1056820): |app| won't contain "Debug" or "Release" after + # recipe migrations. + args.release = args.release or (args.app and "Release" in args.app) self.args = args self.test_args = test_args
diff --git a/ios/build/bots/scripts/shard_util.py b/ios/build/bots/scripts/shard_util.py index 8c70c56..27b21b2e 100644 --- a/ios/build/bots/scripts/shard_util.py +++ b/ios/build/bots/scripts/shard_util.py
@@ -27,36 +27,38 @@ IGNORED_CLASSES = ['BaseEarlGreyTestCase', 'ChromeTestCase'] -def determine_app_path(app, host_app=None): +def determine_app_path(app, host_app=None, release=False): """String manipulate args.app and args.host to determine what path to use for otools Args: app: (string) args.app host_app: (string) args.host_app + release: (bool) whether it's a release app Returns: (string) path to app for otools to analyze """ # run.py invoked via ../../ios/build/bots/scripts/, so we reverse this dirname = os.path.dirname(os.path.abspath(__file__)) - # location of app: /b/s/w/ir/out/Debug/test.app - full_app_path = os.path.join(dirname, '../../../..', 'out/Debug', app) + + build_type = "Release" if release else "Debug" + # location of app: /b/s/w/ir/out/{build_type}/test.app + full_app_path = os.path.normpath( + os.path.join(dirname, '../../../..', 'out', build_type, app)) # ie/ if app_path = "../../some.app", app_name = some - start_idx = 0 - if '/' in app: - start_idx = app.rindex('/') - app_name = app[start_idx:app.rindex('.app')] + app_name = os.path.basename(app) + app_name = app_name[:app_name.rindex('.app')] - # Default app_path looks like /b/s/w/ir/out/Debug/test.app/test + # Default app_path looks like /b/s/w/ir/out/{build_type}/test.app/test app_path = os.path.join(full_app_path, app_name) if host_app and host_app != 'NO_PATH': LOGGER.debug("Detected EG2 test while building application path. " "Host app: {}".format(host_app)) # EG2 tests always end in -Runner, so we split that off - app_name = app[:app.rindex('-Runner')] + app_name = app_name[:app_name.rindex('-Runner')] app_path = os.path.join(full_app_path, 'PlugIns', '{}.xctest'.format(app_name), app_name) @@ -77,17 +79,18 @@ return stdout -def fetch_counts_for_release(stdout): - """Invoke otools to determine the number of test case methods +def fetch_test_names_for_release(stdout): + """Parse otool output to get all testMethods in all TestCases in the + format of (TestCase, testMethod), in release app. - WARNING: This logic is a duplicate of what's found in + WARNING: This logic is similar to what's found in //build/scripts/slave/recipe_modules/ios/api.py Args: stdout: (string) response of 'otool -ov' Returns: - (collections.Counter) dict of test case to number of test case methods + (list) a list of (TestCase, testMethod) """ # For Release builds `otool -ov` command generates output that is # different from Debug builds. @@ -99,47 +102,54 @@ res = re.split(TEST_CLASS_RELEASE_APP_PATTERN, stdout) # Ignore 1st element in split since it does not have any test class data test_classes_output = res[1:] + test_names = [] for test_class, class_output in zip(test_classes_output[0::2], test_classes_output[1::2]): if test_class in IGNORED_CLASSES: continue - names = TEST_NAME_RELEASE_APP_PATTERN.findall(class_output) - test_counts[test_class] = test_counts.get(test_class, 0) + len(set(names)) - - return collections.Counter(test_counts) + methods = TEST_NAME_RELEASE_APP_PATTERN.findall(class_output) + test_names.extend((test_class, test_method) for test_method in methods) + return test_names -def fetch_counts_for_debug(stdout): - """Invoke otools to determine the number of test case methods +def fetch_test_names_for_debug(stdout): + """Parse otool output to get all testMethods in all TestCases in the + format of (TestCase, testMethod), in debug app. Args: stdout: (string) response of 'otool -ov' Returns: - (collections.Counter) dict of test case to number of test case methods + (list) a list of (TestCase, testMethod) """ test_names = TEST_NAMES_DEBUG_APP_PATTERN.findall(stdout) - test_counts = collections.Counter(test_class for test_class, _ in test_names - if test_class not in IGNORED_CLASSES) - - return test_counts + return filter(lambda (test_case, _): test_case not in IGNORED_CLASSES, + test_names) -def fetch_test_counts(stdout, release=False): - """Determine the number of test case methods per test class. +def fetch_test_names(app, host_app, release=False): + """Determine the list of (TestCase, testMethod) for the app. Args: - app_path: (string) path to app + app: (string) path to app + host_app: (string) path to host app. None or "NO_PATH" for EG1. + release: (bool) whether this is a release build. Returns: - (collections.Counter) dict of test_case to number of test case methods + (list) a list of (TestCase, testMethod) """ + # Determine what path to use + app_path = determine_app_path(app, host_app, release) + + # Use otools to get the test counts + cmd = ['otool', '-ov', app_path] + stdout = _execute(cmd) LOGGER.info("Ignored test classes: {}".format(IGNORED_CLASSES)) if release: - LOGGER.info("Release build detected. Fetching count for release.") - return fetch_counts_for_release(stdout) + LOGGER.info("Release build detected. Fetching test names for release.") + return fetch_test_names_for_release(stdout) - return fetch_counts_for_debug(stdout) + return fetch_test_names_for_debug(stdout) def balance_into_sublists(test_counts, total_shards): @@ -188,21 +198,10 @@ dict_args = vars(args) app = dict_args['app'] host_app = dict_args.get('host_app', None) + release = dict_args.get('release', False) - # Determine what path to use - app_path = determine_app_path(app, host_app) - - # release argument is passed by MB only when is_debug=False. - # 'Release' can also be set in path for this file (out/Release), so we'll - # check for either. - release = ( - dict_args.get('release', False) or 'Release' in os.path.abspath(__file__)) - - # Use otools to get the test counts - cmd = ['otool', '-ov', app_path] - stdout = _execute(cmd) - - test_counts = fetch_test_counts(stdout, release) + test_counts = collections.Counter( + test_class for test_class, _ in fetch_test_names(app, host_app, release)) # Ensure shard and total shard is int shard_index = int(shard_index)
diff --git a/ios/build/bots/scripts/shard_util_test.py b/ios/build/bots/scripts/shard_util_test.py index 15f65d7..057aa78 100644 --- a/ios/build/bots/scripts/shard_util_test.py +++ b/ios/build/bots/scripts/shard_util_test.py
@@ -2,11 +2,13 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import collections from mock import patch import os -import shard_util import unittest +import shard_util + DEBUG_APP_OTOOL_OUTPUT = '\n'.join([ 'Meta Class', 'name 0x1064b8438 CacheTestCase', 'baseMethods 0x1068586d8 (struct method_list_t *)', @@ -50,9 +52,7 @@ app = 'some_ios_test.app' actual_path = shard_util.determine_app_path(app) - expected_path = os.path.join('/b/s/w/ir/ios/build/bots/scripts', - '../../../..', 'out/Debug', app, - 'some_ios_test') + expected_path = os.path.join('/b/s/w/ir', 'out/Debug', app, 'some_ios_test') self.assertEqual(actual_path, expected_path) @patch('shard_util.os.path.abspath') @@ -62,46 +62,71 @@ host = 'some_host.app' actual_path = shard_util.determine_app_path(app, host) - expected_path = os.path.join('/b/s/w/ir/ios/build/bots/scripts', - '../../../..', 'out/Debug', app, 'PlugIns', + expected_path = os.path.join('/b/s/w/ir', 'out/Debug', app, 'PlugIns', 'some_ios_test.xctest', 'some_ios_test') self.assertEqual(actual_path, expected_path) - def test_fetch_debug_ok(self): + @patch('shard_util.os.path.abspath') + def test_determine_path_eg2_release(self, mock_abspath): + mock_abspath.return_value = '/b/s/w/ir/ios/build/bots/scripts/share_util.py' + app = 'some_ios_test-Runner.app' + host = 'some_host.app' + + actual_path = shard_util.determine_app_path(app, host, True) + expected_path = os.path.join('/b/s/w/ir', 'out/Release', app, 'PlugIns', + 'some_ios_test.xctest', 'some_ios_test') + self.assertEqual(actual_path, expected_path) + + def test_fetch_test_names_debug(self): """Ensures that the debug output is formatted correctly""" - resp = shard_util.fetch_counts_for_debug(DEBUG_APP_OTOOL_OUTPUT) - self.assertEqual(len(resp), 5) + resp = shard_util.fetch_test_names_for_debug(DEBUG_APP_OTOOL_OUTPUT) + self.assertEqual(len(resp), 8) + expected_test_names = [('CacheTestCase', 'testA'), ('CacheTestCase', + 'testB'), + ('CacheTestCase', 'testc'), ('TabUITestCase', + 'testD'), + ('TabUITestCase', 'testE'), + ('KeyboardTestCase', 'testF'), + ('PasswordsTestCase', 'testG'), + ('ToolBarTestCase', 'testH')] + for test_name in expected_test_names: + self.assertTrue(test_name in resp) + + test_cases = map(lambda (test_case, test_method): test_case, resp) # ({'CacheTestCase': 3, 'TabUITestCase': 2, 'PasswordsTestCase': 1, # 'KeyboardTestCase': 1, 'ToolBarTestCase': 1}) - counts = resp.most_common() + counts = collections.Counter(test_cases).most_common() name, _ = counts[0] self.assertEqual(name, 'CacheTestCase') - def test_fetch_release_ok(self): + def test_fetch_test_counts_release(self): """Ensures that the release output is formatted correctly""" - resp = shard_util.fetch_counts_for_release(RELEASE_APP_OTOOL_OUTPUT) - self.assertEqual(len(resp), 4) + resp = shard_util.fetch_test_names_for_release(RELEASE_APP_OTOOL_OUTPUT) + self.assertEqual(len(resp), 8) + expected_test_names = [('CacheTestCase', 'testA'), ('CacheTestCase', + 'testB'), + ('CacheTestCase', 'testc'), ('KeyboardTest', + 'testD'), + ('KeyboardTest', 'testE'), ('KeyboardTest', 'testF'), + ('ToolBarTestCase', 'testG'), + ('ToolBarTestCase', 'testH')] + for test_name in expected_test_names: + self.assertTrue(test_name in resp) + + test_cases = map(lambda (test_case, test_method): test_case, resp) # ({'KeyboardTest': 3, 'CacheTestCase': 3, - # 'ToolBarTestCase': 2, 'TabUITestCase': 0}) - counts = resp.most_common() + # 'ToolBarTestCase': 2}) + counts = collections.Counter(test_cases).most_common() name, _ = counts[0] self.assertEqual(name, 'KeyboardTest') - def test_fetch_test_counts_debug(self): - """Ensure the coordinator functions as designed, for release""" - test_counts = shard_util.fetch_test_counts(DEBUG_APP_OTOOL_OUTPUT, False) - self.assertEqual(len(test_counts), 5) - - def test_fetch_test_counts_release(self): - """Ensure the coordinator functions as designed, for release""" - test_counts = shard_util.fetch_test_counts(RELEASE_APP_OTOOL_OUTPUT, True) - self.assertEqual(len(test_counts), 4) - def test_balance_into_sublists_debug(self): """Ensure the balancing algorithm works""" - test_counts = shard_util.fetch_test_counts(DEBUG_APP_OTOOL_OUTPUT, False) + resp = shard_util.fetch_test_names_for_debug(DEBUG_APP_OTOOL_OUTPUT) + test_cases = map(lambda (test_case, test_method): test_case, resp) + test_counts = collections.Counter(test_cases) sublists_1 = shard_util.balance_into_sublists(test_counts, 1) self.assertEqual(len(sublists_1), 1) @@ -118,16 +143,18 @@ def test_balance_into_sublists_release(self): """Ensure the balancing algorithm works""" - test_counts = shard_util.fetch_test_counts(RELEASE_APP_OTOOL_OUTPUT, True) + resp = shard_util.fetch_test_names_for_release(RELEASE_APP_OTOOL_OUTPUT) + test_cases = map(lambda (test_case, test_method): test_case, resp) + test_counts = collections.Counter(test_cases) sublists_3 = shard_util.balance_into_sublists(test_counts, 3) self.assertEqual(len(sublists_3), 3) # KeyboardTest has 3 # CacheTestCase has 3 - # ToolbarTest Case has 2, TabUITestCase has 0 + # ToolbarTest Case has 2 self.assertEqual(len(sublists_3[0]), 1) self.assertEqual(len(sublists_3[1]), 1) - self.assertEqual(len(sublists_3[2]), 2) + self.assertEqual(len(sublists_3[2]), 1) if __name__ == '__main__':
diff --git a/ios/build/bots/scripts/test_apps.py b/ios/build/bots/scripts/test_apps.py index 4f6d140..7e98ec8 100644 --- a/ios/build/bots/scripts/test_apps.py +++ b/ios/build/bots/scripts/test_apps.py
@@ -8,6 +8,7 @@ import subprocess import time +import shard_util import test_runner @@ -79,6 +80,7 @@ excluded_tests=None, test_args=None, env_vars=None, + release=False, host_app_path=None): """Initialize Egtests. @@ -93,6 +95,7 @@ test_args: List of strings to pass as arguments to the test when launching. env_vars: List of environment variables to pass to the test itself. + release: (bool) Whether the app is release build. Raises: AppNotFoundError: If the given app does not exist @@ -109,6 +112,7 @@ self.included_tests = included_tests or [] self.excluded_tests = excluded_tests or [] self.module_name = os.path.splitext(os.path.basename(test_app))[0] + self.release = release self.host_app_path = host_app_path def fill_xctest_run(self, out_dir): @@ -227,6 +231,22 @@ '-parallel-testing-worker-count', str(shards)] return cmd + def get_all_tests(self): + """Gets all tests to run in this object.""" + # Method names that starts with test* and also are in *TestCase classes + # but they are not test-methods. + # TODO(crbug.com/982435): Rename not test methods with test-suffix. + none_tests = ['ChromeTestCase/testServer', 'FindInPageTestCase/testURL'] + all_tests = [] + for test_class, test_method in shard_util.fetch_test_names( + self.test_app_path, self.host_app_path, self.release): + test_name = '%s/%s' % (test_class, test_method) + if (test_name not in none_tests and + # Filter by self.included_tests if specified + (test_class in self.included_tests if self.included_tests else True)): + all_tests.append(test_name) + return all_tests + class EgtestsApp(GTestsApp): """Egtests to run. @@ -245,6 +265,7 @@ excluded_tests=None, test_args=None, env_vars=None, + release=False, host_app_path=None): """Initialize Egtests. @@ -264,9 +285,9 @@ Raises: AppNotFoundError: If the given app does not exist """ - super(EgtestsApp, self).__init__(egtests_app, included_tests, - excluded_tests, test_args, env_vars, - host_app_path) + super(EgtestsApp, + self).__init__(egtests_app, included_tests, excluded_tests, test_args, + env_vars, release, host_app_path) def _xctest_path(self): """Gets xctest-file from egtests/PlugIns folder.
diff --git a/ios/build/bots/scripts/test_runner.py b/ios/build/bots/scripts/test_runner.py index 9d99aee..344693f 100644 --- a/ios/build/bots/scripts/test_runner.py +++ b/ios/build/bots/scripts/test_runner.py
@@ -314,23 +314,6 @@ return None -def get_test_names(app_path): - """Gets list of tests from test app. - - Args: - app_path: A path to test target bundle. - - Returns: - List of tests. - """ - cmd = ['otool', '-ov', app_path] - test_pattern = re.compile( - 'imp (?:0[xX][0-9a-fA-F]+ )?-\[' - '(?P<testSuite>[A-Za-z_][A-Za-z0-9_]*Test(?:Case)?)\s' - '(?P<testMethod>test[A-Za-z0-9_]*)\]') - return test_pattern.findall(subprocess.check_output(cmd)) - - class TestRunner(object): """Base class containing common functionality."""
diff --git a/ios/build/bots/scripts/test_runner_test.py b/ios/build/bots/scripts/test_runner_test.py index fef4902d..a54e1f1c 100755 --- a/ios/build/bots/scripts/test_runner_test.py +++ b/ios/build/bots/scripts/test_runner_test.py
@@ -395,37 +395,6 @@ ) self.tr.xctestrun_data = {'TestTargetName':{}} - @mock.patch('subprocess.check_output', autospec=True) - def test_get_test_names(self, mock_subprocess): - otool_output = ( - 'imp 0x102492020 -[BrowserViewControllerTestCase testJavaScript]' - 'name 0x105ee8b84 testFixForCrbug801165' - 'types 0x105f0c842 v16 @ 0:8' - 'name 0x105ee8b9a testOpenURLFromNTP' - 'types 0x105f0c842 v16 @ 0:8' - 'imp 0x102493b30 -[BrowserViewControllerTestCase testOpenURLFromNTP]' - 'name 0x105ee8bad testOpenURLFromTab' - 'types 0x105f0c842 v16 @ 0:8' - 'imp 0x102494180 -[BrowserViewControllerTestCase testOpenURLFromTab]' - 'name 0x105ee8bc0 testOpenURLFromTabSwitcher' - 'types 0x105f0c842 v16 @ 0:8' - 'imp 0x102494f70 -[BrowserViewControllerTestCase testTabSwitch]' - 'types 0x105f0c842 v16 @ 0:8' - 'imp 0x102494f70 -[BrowserViewControllerTestCase helper]' - 'imp 0x102494f70 -[BrowserViewControllerTestCCCCCCCCC testMethod]' - ) - mock_subprocess.return_value = otool_output - tests = test_runner.get_test_names('') - self.assertEqual( - [ - ('BrowserViewControllerTestCase', 'testJavaScript'), - ('BrowserViewControllerTestCase', 'testOpenURLFromNTP'), - ('BrowserViewControllerTestCase', 'testOpenURLFromTab'), - ('BrowserViewControllerTestCase', 'testTabSwitch') - ], - tests - ) - if __name__ == '__main__': logging.basicConfig(format='[%(asctime)s:%(levelname)s] %(message)s',
diff --git a/ios/build/bots/scripts/xcodebuild_runner.py b/ios/build/bots/scripts/xcodebuild_runner.py index fcc3be82..cff0f28f 100644 --- a/ios/build/bots/scripts/xcodebuild_runner.py +++ b/ios/build/bots/scripts/xcodebuild_runner.py
@@ -37,24 +37,6 @@ super(LaunchCommandPoolCreationError, self).__init__(message) -def get_all_tests(app_path, test_cases=None): - """Gets all tests from test bundle.""" - test_app_bundle = os.path.join(app_path, os.path.splitext( - os.path.basename(app_path))[0]) - # Method names that starts with test* and also are in *TestCase classes - # but they are not test-methods. - # TODO(crbug.com/982435): Rename not test methods with test-suffix. - not_tests = ['ChromeTestCase/testServer', 'FindInPageTestCase/testURL'] - all_tests = [] - for test_class, test_method in test_runner.get_test_names(test_app_bundle): - test_name = '%s/%s' % (test_class, test_method) - if (test_name not in not_tests and - # Filter by self.test_cases if specified - (test_class in test_cases if test_cases else True)): - all_tests.append(test_name) - return all_tests - - def erase_all_simulators(path=None): """Erases all simulator devices. @@ -190,9 +172,7 @@ self.test_results['attempts'] = [] cancelled_statuses = {'TESTS_DID_NOT_START', 'BUILD_INTERRUPTED'} shards = self.shards - running_tests = set( - get_all_tests(self.egtests_app.test_app_path, - self.egtests_app.included_tests)) + running_tests = set(self.egtests_app.get_all_tests()) # total number of attempts is self.retries+1 for attempt in range(self.retries + 1): # Erase all simulators per each attempt @@ -263,6 +243,7 @@ version, platform, out_dir, + release=False, retries=1, shards=1, test_cases=None, @@ -279,6 +260,7 @@ version: (str) iOS version to run simulator on. platform: (str) Name of device. out_dir: (str) A directory to emit test data into. + release: (bool) Whether this test runner is running for a release build. retries: (int) A number to retry test run, will re-run only failed tests. shards: (int) A number of shards. Default is 1. test_cases: (list) List of tests to be included in the test run. @@ -313,6 +295,7 @@ self.host_app_path = os.path.abspath(host_app_path) self._init_sharding_data() self.logs = collections.OrderedDict() + self.release = release self.test_results['path_delimiter'] = '/' # Do not enable parallel testing when code coverage is enabled, because raw # coverage data won't be produced with parallel testing. @@ -358,6 +341,7 @@ included_tests=params['test_cases'], env_vars=self.env_vars, test_args=self.test_args, + release=self.release, host_app_path=params['host']) launch_commands.append( LaunchCommand( @@ -404,7 +388,11 @@ all_failures - set(self.logs['failed tests'])) # Gets not-started/interrupted tests - all_tests_to_run = set(get_all_tests(self.app_path, self.test_cases)) + all_tests_to_run = set([ + test_name for launch_command in launch_commands + for test_name in launch_command.egtests_app.get_all_tests() + ]) + aborted_tests = list(all_tests_to_run - set(self.logs['failed tests']) - set(self.logs['passed tests'])) aborted_tests.sort() @@ -455,6 +443,7 @@ app_path, host_app_path, out_dir, + release=False, retries=1, test_cases=None, test_args=None, @@ -496,6 +485,7 @@ if host_app_path != 'NO_PATH': self.host_app_path = os.path.abspath(host_app_path) self.homedir = '' + self.release = release self.set_up() self._init_sharding_data() self.start_time = time.strftime('%Y-%m-%d-%H%M%S', time.localtime())
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 974a235..3717fdb 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1165,6 +1165,9 @@ <message name="IDS_IOS_PAGE_INFO_COOKIES_DESCRIPTION" desc="Description of the button opening the third-party cookies information (in page info)"> Bloking third-party cookies </message> + <message name="IDS_IOS_PAGE_INFO_COOKIES_SWITCH_LABEL" desc="Title of the switch item that can be toggled to enable or disable Third-Party Cookies (in page info)"> + Block Third-Party Cookies + </message> <message name="IDS_IOS_PAGE_INFO_COOKIES_TITLE" desc="Title of the button opening the third-party cookies information (in page info)"> Cookies </message>
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index c034b54..8582218 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Iets is fout. Probeer later weer.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Boodskap is gestuur.</translation> +<translation id="6447842834002726250">Webkoekies</translation> <translation id="6464071786529933911">Maak in nuwe incognito-oortjie oop</translation> <translation id="6476800141292307438">Vertaal tans die bladsy in <ph name="LANGUAGE" />. Opsies is naby die onderkant van die skerm beskikbaar.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> items uitgevee</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 0b37748b..69af6df 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">አንድ ስህተት አጋጥሟል። ቆይተው እንደገና ይሞክሩ።</translation> <translation id="6445051938772793705">አገር</translation> <translation id="6445981559479772097">መልዕክት ተልኳል።</translation> +<translation id="6447842834002726250">ኩኪዎች</translation> <translation id="6464071786529933911">በአዲስ ማንነት የማያሳውቅ ትር ውስጥ ክፈት</translation> <translation id="6476800141292307438">ገጹን ወደ <ph name="LANGUAGE" /> በመተርጎም ላይ። አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ።</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ንጥሎች ተሰርዘዋል</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 9292fc9..d411dba 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">حدث خطأ. يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="6445051938772793705">البلد</translation> <translation id="6445981559479772097">تم إرسال الرسالة.</translation> +<translation id="6447842834002726250">ملفّات تعريف الارتباط</translation> <translation id="6464071786529933911">فتح في علامة تبويب جديدة للتصفح المتخفي</translation> <translation id="6476800141292307438">ترجمة صفحة إلى <ph name="LANGUAGE" />. وتتوفّر الخيارات بالقرب من أسفل الشاشة.</translation> <translation id="6482629121755362506">تم حذف <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> من العناصر</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 1fa6cc55..c532b1e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">আসোঁৱাহ হৈছে। পিছত আকৌ চেষ্টা কৰক।</translation> <translation id="6445051938772793705">দেশ</translation> <translation id="6445981559479772097">বাৰ্তা পঠিওৱা হ’ল৷</translation> +<translation id="6447842834002726250">কুকীসমূহ</translation> <translation id="6464071786529933911">নতুন ইনক’গনিট’ টেবত খোলক</translation> <translation id="6476800141292307438">এই পৃষ্ঠাটো <ph name="LANGUAGE" />লৈ অনুবাদ কৰি থকা হৈছে। বিকল্পসমূহ স্ক্রীণখনৰ একেবাৰে তলৰ কাষত আছে।</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> টা সমল মচা হ’ল</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index b2005cd..60e3797 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Xəta baş verdi. Yenidən cəhd edin.</translation> <translation id="6445051938772793705">Ölkə</translation> <translation id="6445981559479772097">Mesaj göndərildi.</translation> +<translation id="6447842834002726250">Kukilər</translation> <translation id="6464071786529933911">Yeni Gizli Paneldə açın</translation> <translation id="6476800141292307438">Səhifə <ph name="LANGUAGE" /> dilinə tərcümə edilir. Seçimlər ekranın aşağı hissəsində əlçatandır.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> element silindi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index 3d0affc..fa39a77 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Адбылася памылка. Паўтарыце спробу пазней.</translation> <translation id="6445051938772793705">Краіна</translation> <translation id="6445981559479772097">Паведамленне адпраўлена.</translation> +<translation id="6447842834002726250">Файлы cookie</translation> <translation id="6464071786529933911">Адкрыць у новай укладцы інкогніта</translation> <translation id="6476800141292307438">Старонка перакладаецца на мову "<ph name="LANGUAGE" />". Параметры знаходзяцца ў ніжняй частцы экрана.</translation> <translation id="6482629121755362506">Выдалена элементаў: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index cc7ddf8..bf27ad8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Възникна грешка. Опитайте отново по-късно.</translation> <translation id="6445051938772793705">Държава</translation> <translation id="6445981559479772097">Съобщ. е изпратено.</translation> +<translation id="6447842834002726250">„Бисквитки“</translation> <translation id="6464071786529933911">Отв. в нов раздел „инкогнито“</translation> <translation id="6476800141292307438">Страницата се превежда на <ph name="LANGUAGE" />. Опциите са достъпни в долната част на екрана.</translation> <translation id="6482629121755362506">Изтрихте <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> елемента</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index baea447..679e5f4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -419,6 +419,7 @@ <translation id="6434591244308415567">কোনও সমস্যা হয়েছে। পরে আবার চেষ্টা করুন।</translation> <translation id="6445051938772793705">দেশ</translation> <translation id="6445981559479772097">বার্তা পাঠানো হয়েছে৷</translation> +<translation id="6447842834002726250">কুকিজ</translation> <translation id="6464071786529933911">নতুন ছদ্মবেশী ট্যাবে খুলুন</translation> <translation id="6476800141292307438">পৃষ্ঠাটি <ph name="LANGUAGE" /> ভাষাতে অনুবাদ হচ্ছে। স্ক্রিনের নিচের দিকে বিকল্পগুলি দেওয়া আছে।</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" />টি আইটেম মোছা হয়েছে</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index f25fd5d..38d314cf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Došlo je do greške. Pokušajte ponovo kasnije.</translation> <translation id="6445051938772793705">Država</translation> <translation id="6445981559479772097">Poruka je poslana.</translation> +<translation id="6447842834002726250">Kolačići</translation> <translation id="6464071786529933911">Otvori u novoj anonimnoj kartici</translation> <translation id="6476800141292307438">Prevođenje stranice na <ph name="LANGUAGE" /> jezik. Opcije su dostupne pri dnu ekrana.</translation> <translation id="6482629121755362506">Broj izbrisanih stavki je <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 326128d..461e4bd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">S'ha produït un error. Torna-ho a provar més tard.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Missatge enviat.</translation> +<translation id="6447842834002726250">Galetes</translation> <translation id="6464071786529933911">Obre en una pestanya d'incògnit</translation> <translation id="6476800141292307438">La pàgina s'està traduint a <ph name="LANGUAGE" />. Tens opcions disponibles a la part inferior de la pantalla.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elements suprimits</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 5075b71..b36452c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Došlo k chybě, zkuste to později.</translation> <translation id="6445051938772793705">Země</translation> <translation id="6445981559479772097">Zpráva odeslána</translation> +<translation id="6447842834002726250">Soubory cookie</translation> <translation id="6464071786529933911">Otevřít v nové anonymní kartě</translation> <translation id="6476800141292307438">Stránka se překládá do jazyka <ph name="LANGUAGE" />. Možnosti jsou k dispozici u dolního okraje obrazovky.</translation> <translation id="6482629121755362506">Počet smazaných položek: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index f5b3a7d..d11ea29e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Der opstod en fejl. Prøv igen senere.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Beskeden er sendt.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Åbn på ny inkognitofane</translation> <translation id="6476800141292307438">Siden oversættes til <ph name="LANGUAGE" />. Valgmulighederne findes nederst på skærmen.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> bogmærker blev slettet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 13296b1..2f58930 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Nachricht gesendet</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">In neuem Inkognito-Tab öffnen</translation> <translation id="6476800141292307438">Die Seite wird in die Sprache <ph name="LANGUAGE" /> übersetzt. Optionen sind unten auf dem Bildschirm verfügbar.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> Lesezeichen gelöscht</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 8cad2ac..fba55bbc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -419,6 +419,7 @@ <translation id="6445051938772793705">Χώρα </translation> <translation id="6445981559479772097">Το μήνυμα εστάλη.</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">Άνοιγ. σε καρτ. αν. περ.</translation> <translation id="6476800141292307438">Μετάφραση της σελίδας σε <ph name="LANGUAGE" />. Οι επιλογές είναι διαθέσιμες κοντά στο κάτω μέρος της οθόνης.</translation> <translation id="6482629121755362506">Διαγράφηκαν <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> στοιχεία</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index 2b9161e..a2df383 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">An error occurred. Try again later.</translation> <translation id="6445051938772793705">Country</translation> <translation id="6445981559479772097">Message sent.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Open in New Incognito Tab</translation> <translation id="6476800141292307438">Translating the page to <ph name="LANGUAGE" />. Options available near bottom of the screen.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> items deleted</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index b9248a3..678b2994 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Se produjo un error. Vuelve a intentarlo más tarde.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Mensaje enviado</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Abrir en una pestaña de incógnito nueva</translation> <translation id="6476800141292307438">Se está traduciendo la página al <ph name="LANGUAGE" />. Las opciones disponibles se encuentran cerca de la parte inferior de la pantalla.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementos eliminados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 7efa909..9664c68 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Se ha producido un error. Vuelve a intentarlo más tarde.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Mensaje enviado</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Abrir en pestaña incógnito</translation> <translation id="6476800141292307438">La página se está traduciendo al <ph name="LANGUAGE" />. Encontrarás opciones disponibles cerca de la parte inferior de la pantalla.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementos eliminados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index b72944d..647e8dc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ilmnes viga. Proovige hiljem uuesti.</translation> <translation id="6445051938772793705">Riik</translation> <translation id="6445981559479772097">Sõnum on saadetud.</translation> +<translation id="6447842834002726250">Küpsised</translation> <translation id="6464071786529933911">Ava uuel inkognito lehel</translation> <translation id="6476800141292307438">Leht tõlgitakse <ph name="LANGUAGE" /> keelde. Valikud leiate ekraanikuva allosast.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> üksust on kustutatud</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index 640bce7f..875c20de2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Errore bat gertatu da. Saiatu berriro geroago.</translation> <translation id="6445051938772793705">Herrialdea</translation> <translation id="6445981559479772097">Mezua bidali da.</translation> +<translation id="6447842834002726250">Cookieak</translation> <translation id="6464071786529933911">Ireki ezkut. fitxa berrian</translation> <translation id="6476800141292307438">Orria itzultzen ari gara. <ph name="LANGUAGE" /> erabiliko da orria bistaratzeko. Pantailaren behealdean agertzen dira dauden aukerak.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementu ezabatu dira</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index ef7cf4b..01a38886 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">خطایی روی داد. بعداً دوباره امتحان کنید.</translation> <translation id="6445051938772793705">کشور</translation> <translation id="6445981559479772097">پیام ارسال شد.</translation> +<translation id="6447842834002726250">کوکیها</translation> <translation id="6464071786529933911">در برگه ناشناس جدید</translation> <translation id="6476800141292307438">ترجمه صفحه به <ph name="LANGUAGE" />. گزینهها در نزدیک پایین صفحه نمایش در دسترس هستند.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> مورد حذف شد</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 8c5adee1..827a9bfe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Tapahtui virhe, yritä myöhemmin uudelleen.</translation> <translation id="6445051938772793705">Maa</translation> <translation id="6445981559479772097">Viesti lähetetty.</translation> +<translation id="6447842834002726250">Evästeet</translation> <translation id="6464071786529933911">Avaa incognito-tilassa</translation> <translation id="6476800141292307438">Käännetään sivua kielelle <ph name="LANGUAGE" />. Vaihtoehdot näkyvät näytön alareunan lähellä.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> kohdetta poistettu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 9a78ffe..ce13d60 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Nagkaroon ng error. Subukang muli sa ibang pagkakataon.</translation> <translation id="6445051938772793705">Bansa</translation> <translation id="6445981559479772097">Napadala na ang mensahe.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Buksan sa Bagong Tab na Incognito</translation> <translation id="6476800141292307438">Isinasalin ang page sa <ph name="LANGUAGE" />. May mga opsyon malapit sa ibaba ng screen.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> (na) item ang na-delete</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index efe06b65..0b051736 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Une erreur s'est produite. Réessayez plus tard.</translation> <translation id="6445051938772793705">Pays</translation> <translation id="6445981559479772097">Message envoyé</translation> +<translation id="6447842834002726250">Témoins</translation> <translation id="6464071786529933911">Ouvrir ds nv ong nav priv</translation> <translation id="6476800141292307438">Traduction de la page en <ph name="LANGUAGE" /> en cours… Les options sont affichées dans le bas de l'écran.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> éléments supprimés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 163a7ac..2d167ead 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Une erreur s'est produite. Réessayez plus tard.</translation> <translation id="6445051938772793705">Pays</translation> <translation id="6445981559479772097">Message envoyé.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Ouvrir nouvel onglet navigation privée</translation> <translation id="6476800141292307438">Traduction de la page en <ph name="LANGUAGE" />. Options disponibles au bas de l'écran.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> éléments supprimés.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 9bf85c61..8ad7113 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Produciuse un erro. Téntao de novo máis tarde.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Mensaxe enviada.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Abrir en pestana incógn.</translation> <translation id="6476800141292307438">Traducindo a páxina ao <ph name="LANGUAGE" />. Hai opcións dispoñibles na parte inferior da pantalla.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementos eliminados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 400d364..a3510de 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">એક ભૂલ આવી છે. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation> <translation id="6445051938772793705">દેશ</translation> <translation id="6445981559479772097">સંદેશ મોકલ્યો.</translation> +<translation id="6447842834002726250">કૂકીઝ</translation> <translation id="6464071786529933911">નવા છુપા ટૅબમાં ખોલો</translation> <translation id="6476800141292307438">પેજનો અનુવાદ <ph name="LANGUAGE" />માં કરી રહ્યા છે. વિકલ્પો સ્ક્રીનની નીચેની બાજુએ ઉપલબ્ધ રહે છે.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> આઇટમ કાઢી નાખી</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index 919f767..936f6b1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">कोई गड़बड़ी हुई. बाद में फिर कोशिश करें.</translation> <translation id="6445051938772793705">देश</translation> <translation id="6445981559479772097">संदेश भेज दिया गया.</translation> +<translation id="6447842834002726250">कुकी</translation> <translation id="6464071786529933911">नए गुप्त टैब में खोलें</translation> <translation id="6476800141292307438">पेज <ph name="LANGUAGE" /> में अनुवाद किया जा रहा है. विकल्प, स्क्रीन के निचले हिस्से में मौजूद हैं.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> आइटम हटाए गए</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 5d02b97..a1cae33e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Došlo je do pogreške. Pokušajte ponovo kasnije.</translation> <translation id="6445051938772793705">Država</translation> <translation id="6445981559479772097">Poruka je poslana.</translation> +<translation id="6447842834002726250">Kolačići</translation> <translation id="6464071786529933911">Otvori na novoj anonimnoj kartici</translation> <translation id="6476800141292307438">Stranica se prevodi na <ph name="LANGUAGE" />. Opcije su dostupne pri dnu zaslona.</translation> <translation id="6482629121755362506">Broj izbrisanih stavki: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index ad04942..d7f2f53 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Hiba történt, próbálja újra később.</translation> <translation id="6445051938772793705">Ország</translation> <translation id="6445981559479772097">Üzenet elküldve.</translation> +<translation id="6447842834002726250">Cookie-k</translation> <translation id="6464071786529933911">Megnyitás új inkognitólapon</translation> <translation id="6476800141292307438">Az oldal lefordítása <ph name="LANGUAGE" /> nyelvre. A képernyő alján láthatók a rendelkezésre álló lehetőségek.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elem törölve</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 199038e..37dc027 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Սխալ առաջացավ։ Փորձեք ավելի ուշ։</translation> <translation id="6445051938772793705">Երկիր</translation> <translation id="6445981559479772097">Հաղորդագրությունն ուղարկվեց:</translation> +<translation id="6447842834002726250">Cookie ֆայլեր</translation> <translation id="6464071786529933911">Բացել նոր ինկոգնիտո ներդիրում</translation> <translation id="6476800141292307438">Էջը թարգմանվում է <ph name="LANGUAGE" />: Կարգավորումները էկրանի ներքևի հատվածում են:</translation> <translation id="6482629121755362506">Ջնջվեց <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> տարր</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 3133ed7..e804039 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Terjadi error. Harap coba lagi nanti.</translation> <translation id="6445051938772793705">Negara</translation> <translation id="6445981559479772097">Pesan terkirim.</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">Buka di Tab Samaran Baru</translation> <translation id="6476800141292307438">Menerjemahkan halaman ke dalam bahasa <ph name="LANGUAGE" />. Opsi tersedia di dekat bagian bawah layar.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> item dihapus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index 47bcbd0..1f5f85a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Villa kom upp. Reyndu aftur síðar.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Skilaboð send.</translation> +<translation id="6447842834002726250">Fótspor</translation> <translation id="6464071786529933911">Opna í nýjum huliðsflipa</translation> <translation id="6476800141292307438">Þýðir síðuna á <ph name="LANGUAGE" />. Valkostir eru í boði neðarlega á skjánum.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> atriðum eytt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 5edcef74..f233355c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Si è verificato un errore. Riprova più tardi.</translation> <translation id="6445051938772793705">Paese</translation> <translation id="6445981559479772097">Messaggio inviato.</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">Apri in nuova scheda in incognito</translation> <translation id="6476800141292307438">Traduzione della pagina in <ph name="LANGUAGE" />. Opzioni disponibili nella parte inferiore dello schermo.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementi eliminati</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index bad817000e..5f2f8b1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">אירעה שגיאה. יש לנסות שוב מאוחר יותר.</translation> <translation id="6445051938772793705">ארץ</translation> <translation id="6445981559479772097">ההודעה נשלחה.</translation> +<translation id="6447842834002726250">קובצי Cookie</translation> <translation id="6464071786529933911">פתיחה בכרטיסיית גלישה בסתר חדשה</translation> <translation id="6476800141292307438">הדפדפן מתרגם את הדף ל<ph name="LANGUAGE" />. האפשרויות מוצגות בחלק התחתון של המסך.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> פריטים נמחקו</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 800be14a..6f05568 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">エラーが発生しました。しばらくしてからもう一度お試しください。</translation> <translation id="6445051938772793705">国名</translation> <translation id="6445981559479772097">メッセージ送信完了。</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">新しいシークレット タブで開く</translation> <translation id="6476800141292307438">ページを<ph name="LANGUAGE" />に翻訳しています。画面の下の方にオプションがあります。</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" />件の項目を削除しました</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 1d56152b..0191b2a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">წარმოიქმნა შეცდომა. ცადეთ მოგვიანებით.</translation> <translation id="6445051938772793705">ქვეყანა</translation> <translation id="6445981559479772097">შეტყობინება გაიგზავნა.</translation> +<translation id="6447842834002726250">ქუქი ფაილები</translation> <translation id="6464071786529933911">ახალ ინკოგნიტო ჩანართში გახსნა</translation> <translation id="6476800141292307438">მიმდინარეობს გვერდის <ph name="LANGUAGE" /> ვერსიის მომზადება. ვარიანტებს იპოვით ეკრანის ქვედა ნაწილთან.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ელემენტი წაშლილია</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 182dfa4..f964e78 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Қате шықты. Әрекетті кейінірек қайталаңыз.</translation> <translation id="6445051938772793705">Ел</translation> <translation id="6445981559479772097">Хабар жіберілді.</translation> +<translation id="6447842834002726250">Cookie файлдары</translation> <translation id="6464071786529933911">Жаңа инкогнито қой. ашу</translation> <translation id="6476800141292307438">Бет <ph name="LANGUAGE" /> тіліне аударылуда. Опцияларды беттің төменгі жағынан таба аласыз.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> элемент жойылды</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index 6b492d5..38be22e6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">មានបញ្ហាកើតឡើង។ ព្យាយាមម្តងទៀតនៅពេលក្រោយ។</translation> <translation id="6445051938772793705">ប្រទេស</translation> <translation id="6445981559479772097">បានផ្ញើសារ។</translation> +<translation id="6447842834002726250">ខុកឃី</translation> <translation id="6464071786529933911">បើកនៅក្នុងផ្ទាំងអនាមិកថ្មី</translation> <translation id="6476800141292307438">កំពុងបកប្រែទំព័រទៅភាសា<ph name="LANGUAGE" />។ ជម្រើសមាននៅជិតផ្នែកខាងក្រោមបំផុតរបស់អេក្រង់។</translation> <translation id="6482629121755362506">ធាតុ <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ត្រូវបានលុប</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 4fe1098..64f86d6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ. ಆನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="6445051938772793705">ರಾಜ್ಯ</translation> <translation id="6445981559479772097">ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿದೆ.</translation> +<translation id="6447842834002726250">ಕುಕೀಸ್</translation> <translation id="6464071786529933911">ಹೊಸ ಅದೃಶ್ಯ ಟ್ಯಾಬ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="6476800141292307438">ಪುಟವನ್ನು <ph name="LANGUAGE" /> ಭಾಷೆಗೆ ಅನುವಾದಿಸಲಾಗುತ್ತಿದೆ. ಪರದೆಯ ಕೆಳಭಾಗದ ಸಮೀಪದಲ್ಲಿ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ಐಟಂಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 6d1a0a4..8aa3594 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">오류가 발생했습니다. 나중에 다시 시도해 보세요.</translation> <translation id="6445051938772793705">국가</translation> <translation id="6445981559479772097">메시지가 전송되었습니다.</translation> +<translation id="6447842834002726250">쿠키</translation> <translation id="6464071786529933911">새 시크릿 탭에서 열기</translation> <translation id="6476800141292307438">페이지를 <ph name="LANGUAGE" />로 번역합니다. 화면 하단에 옵션이 있습니다.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" />개 항목 삭제함</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 6997d9c..f158762 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ката кетти. Бир аздан кийин кайталап көрүңүз.</translation> <translation id="6445051938772793705">Өлкө</translation> <translation id="6445981559479772097">Билдирүү жөнөтүлдү.</translation> +<translation id="6447842834002726250">Кукилер</translation> <translation id="6464071786529933911">Жаңы жашруун өтмктө ачуу</translation> <translation id="6476800141292307438">Барак <ph name="LANGUAGE" /> тилине которулууда. Параметрлер экрандын төмөн жагында жеткиликтүү.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> нерсе өчүрүлдү</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 4b84b54..b5d9543 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ເກີດຄວາມຜິດພາດຂຶ້ນ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ.</translation> <translation id="6445051938772793705">ປະເທດ</translation> <translation id="6445981559479772097">ສົ່ງຂໍ້ຄວາມແລ້ວ.</translation> +<translation id="6447842834002726250">ຄຸກກີ້</translation> <translation id="6464071786529933911">ເປີດຢູ່ໃນແຖບທີ່ບໍ່ເຜີຍຕົວຕົນໃໝ່</translation> <translation id="6476800141292307438">ກຳລັງແປໜ້າເວັບເປັນ <ph name="LANGUAGE" />. ມີຕົວເລືອກໃຫ້ນຳໃຊ້ຢູ່ໃກ້ລຸ່ມສຸດຂອງໜ້າຈໍ.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ລາຍການຖືກລຶບແລ້ວ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index ca4c8d0..98cc648b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Įvyko klaida. Vėliau bandykite dar kartą.</translation> <translation id="6445051938772793705">Šalis</translation> <translation id="6445981559479772097">Pran. išsiųstas.</translation> +<translation id="6447842834002726250">Slapukai</translation> <translation id="6464071786529933911">Atid. nauj. ink. skirtuk.</translation> <translation id="6476800141292307438">Puslapis verčiamas į <ph name="LANGUAGE" />. Parinktys pasiekiamos netoli ekrano apačios.</translation> <translation id="6482629121755362506">Ištrinta elementų: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index 125a644..aa8c9ee 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Radās kļūda. Vēlāk mēģiniet vēlreiz.</translation> <translation id="6445051938772793705">Valsts</translation> <translation id="6445981559479772097">Īsziņa ir nosūtīta.</translation> +<translation id="6447842834002726250">Sīkfaili</translation> <translation id="6464071786529933911">Atvērt jaunā inkogn. cilnē</translation> <translation id="6476800141292307438">Lapa tiek tulkota <ph name="LANGUAGE" /> valodā. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation> <translation id="6482629121755362506">Dzēsti vienumi: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index a64e436..b8c4091c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Грешка. Обидете се повторно подоцна.</translation> <translation id="6445051938772793705">Земја</translation> <translation id="6445981559479772097">Пораката е испратена.</translation> +<translation id="6447842834002726250">Колачиња</translation> <translation id="6464071786529933911">Отв. во нова инког. карт.</translation> <translation id="6476800141292307438">Страницата се преведува на <ph name="LANGUAGE" />. Достапни се опции на дното на екранот.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ставки се избришани</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index f37a6f7..5c1ac9bb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ഒരു പിശകുണ്ടായി. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="6445051938772793705">രാജ്യം</translation> <translation id="6445981559479772097">സന്ദേശം അയച്ചു.</translation> +<translation id="6447842834002726250">കുക്കികള്</translation> <translation id="6464071786529933911">പുതിയ അദൃശ്യ ടാബിൽ തുറക്കുക</translation> <translation id="6476800141292307438">പേജ് <ph name="LANGUAGE" /> എന്ന ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യുന്നു. സ്ക്രീനിൻ്റെ ചുവടെ ഓപ്ഷനുകൾ ലഭ്യമാണ്.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ഇനങ്ങൾ ഇല്ലാതാക്കി</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb index 2ed0161..685b916 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -327,7 +327,7 @@ <translation id="5388358297987318779">Зургийг нээх</translation> <translation id="5407969256130905701">Өөрчлөлтийг болих</translation> <translation id="5409365236829784218">Энэ файлыг нээж чадах ямар ч аппликейшн суулгаагүй байна.</translation> -<translation id="5416022985862681400">Өнгөрсөн 7 өдөр</translation> +<translation id="5416022985862681400">Сүүлийн 7 хоног</translation> <translation id="5433691172869980887">Хэрэглэгчийн нэрийг хуулсан</translation> <translation id="54401264925851789">Хуудасны аюулгүй байдалтай холбоотой мэдээлэл</translation> <translation id="5443952882982198570">Кредит картууд</translation> @@ -417,6 +417,7 @@ <translation id="6434591244308415567">Алдаа гарлаа. Дараа дахин оролдоно уу.</translation> <translation id="6445051938772793705">Улс</translation> <translation id="6445981559479772097">Зурвас илгээгдсэн.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Нууцлалын шинэ чихтэй хуудсанд нээх</translation> <translation id="6476800141292307438">Хуудсыг <ph name="LANGUAGE" /> руу орчуулж байна. Дэлгэцийн доод хэсгийн ойролцоо сонголт хийх боломжтой.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> зүйлс сонгогдсон байна</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index dcd5a34..5577321 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -419,6 +419,7 @@ <translation id="6434591244308415567">एरर आली. नंतर पुन्हा प्रयत्न करा.</translation> <translation id="6445051938772793705">देश</translation> <translation id="6445981559479772097">संदेश पाठविला.</translation> +<translation id="6447842834002726250">कुकीज</translation> <translation id="6464071786529933911">नवीन गुप्त टॅबमध्ये उघडा</translation> <translation id="6476800141292307438">पेजचे <ph name="LANGUAGE" /> मध्ये भाषांतर करत आहे. पर्याय स्क्रीनच्या खाली उपलब्ध आहेत.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> आयटम हटविले</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 04f1133..575d5083 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ralat telah berlaku. Cuba sebentar lagi.</translation> <translation id="6445051938772793705">Negara</translation> <translation id="6445981559479772097">Mesej dihantar.</translation> +<translation id="6447842834002726250">Kuki</translation> <translation id="6464071786529933911">Buka dalam Tab Inkognito Baharu</translation> <translation id="6476800141292307438">Menterjemah halaman ini kepada <ph name="LANGUAGE" />. Pilihan tersedia berhampiran bahagian bawah skrin.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> item dipadamkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 4af03b25..96a4b6f5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -417,6 +417,7 @@ <translation id="6434591244308415567">အမှားအယွင်း ရှိနေသည်။ နောက်မှ ထပ်လုပ်ကြည့်ပါ။</translation> <translation id="6445051938772793705">နိုင်ငံ</translation> <translation id="6445981559479772097">စာတို ပေးပို့ပြီးပါပြီ။</translation> +<translation id="6447842834002726250">ကူကီးများ</translation> <translation id="6464071786529933911">ရုပ်ဖျက်တဘ်အသစ်တွင် ဖွင့်ပါ</translation> <translation id="6476800141292307438">စာမျက်နှာကို <ph name="LANGUAGE" /> ဘာသာသို့ ပြန်ဆိုနေသည်။ မျက်နှာပြင်အောက်ခြေအနီးတွင် ရွေးစရာများ ရှိသည်။</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> အကြောင်းအရာ ဖျက်ပြီးပါပြီ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index d7b92bb..600f336cf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">कुनै त्रुटि भयो। पछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="6445051938772793705">देश</translation> <translation id="6445981559479772097">सन्देश पठाइयो।</translation> +<translation id="6447842834002726250">कुकीहरू</translation> <translation id="6464071786529933911">नयाँ इन्कोग्निटो ट्याबमा खोल्नुहोस्</translation> <translation id="6476800141292307438">पृष्ठलाई <ph name="LANGUAGE" /> भाषामा अनुवाद गर्दै। विकल्पहरू स्क्रिनका पुछारमा उपलब्ध छन्।</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> वस्तुहरू मेटाइयो</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 43dc00f..6ba06f1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Er is een fout opgetreden. Probeer het later opnieuw.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Bericht verzonden.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Openen op nieuw incognitotabblad</translation> <translation id="6476800141292307438">De pagina vertalen naar het <ph name="LANGUAGE" />. Opties beschikbaar onderaan het scherm.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> items verwijderd</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 55c81086..6dd82c79 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Det oppsto en feil. Prøv på nytt senere.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">Melding sendt.</translation> +<translation id="6447842834002726250">Informasjonskapsler</translation> <translation id="6464071786529933911">Åpne i en ny inkognitofane</translation> <translation id="6476800141292307438">Oversetter siden til <ph name="LANGUAGE" />. Du finner alternativer på nedre del av skjermen.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementer slettet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index 6951dc9b..7d4251a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -416,6 +416,7 @@ <translation id="6434591244308415567">ଏକ ତ୍ରୁଟି ଦେଖାଦେଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="6445051938772793705">ଦେଶ</translation> <translation id="6445981559479772097">ମେସେଜ୍ ପଠାଗଲା।</translation> +<translation id="6447842834002726250">କୁକୀଗୁଡିକ</translation> <translation id="6464071786529933911">ନୂଆ ଇନ୍କଗ୍ନିଟୋ ଟାବ୍ରେ ଖୋଲନ୍ତୁ</translation> <translation id="6476800141292307438"><ph name="LANGUAGE" />କୁ ପୃଷ୍ଠା ଅନୁବାଦ କରୁଛି। ସ୍କ୍ରିନ୍ର ତଳପାର୍ଶ୍ୱରେ ବିକଳ୍ପଗୁଡ଼ିକ ଉପଲବ୍ଧ ଅଛି।</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" />ଟି ଆଇଟମ୍ ଡିଲିଟ୍ ହୋଇଛି</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index c5fd863..0500faf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ਇੱਕ ਗੜਬੜ ਹੋ ਗਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="6445051938772793705">ਦੇਸ਼</translation> <translation id="6445981559479772097">ਸੁਨੇਹਾ ਭੇਜਿਆ ਗਿਆ।</translation> +<translation id="6447842834002726250">ਕੁਕੀਜ਼</translation> <translation id="6464071786529933911">ਨਵੀਂ ਇਨਕੋਗਨਿਟੋ ਟੈਬ ਵਿੱਚ ਖੋਲ੍ਹੋ</translation> <translation id="6476800141292307438">ਪੰਨੇ ਦਾ <ph name="LANGUAGE" /> ਵਿੱਚ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਪਾਸੇ ਉਪਲਬਧ ਹਨ।</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ਆਈਟਮਾਂ ਮਿਟਾਈਆਂ ਗਈਆਂ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 9fa4eb0..80fe58c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Wystąpił błąd. Spróbuj ponownie później.</translation> <translation id="6445051938772793705">Kraj</translation> <translation id="6445981559479772097">Wiadomość została wysłana.</translation> +<translation id="6447842834002726250">Pliki cookie</translation> <translation id="6464071786529933911">Otwórz w karcie incognito</translation> <translation id="6476800141292307438">Tłumaczę stronę na <ph name="LANGUAGE" />. Opcje znajdują się na dole ekranu.</translation> <translation id="6482629121755362506">Usunięte elementy: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index b67b8ba..9b99ee91 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ocorreu um erro. Tente novamente mais tarde.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Mensagem enviada.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Abrir em nova guia anônima</translation> <translation id="6476800141292307438">Tradução da página para <ph name="LANGUAGE" />. Opções disponíveis na parte inferior da tela.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> itens excluídos</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 37ca851..34c330f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ocorreu um erro. Tente novamente mais tarde.</translation> <translation id="6445051938772793705">País</translation> <translation id="6445981559479772097">Mensagem enviada.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Abrir num novo separador de navegação anónima</translation> <translation id="6476800141292307438">A traduzir a página para <ph name="LANGUAGE" />. Estão disponíveis opções junto à parte inferior do ecrã.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> itens eliminados</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 20ddb74d..f130552 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">A apărut o eroare, încearcă mai târziu.</translation> <translation id="6445051938772793705">Țară</translation> <translation id="6445981559479772097">Mesaj trimis.</translation> +<translation id="6447842834002726250">Cookie-uri</translation> <translation id="6464071786529933911">Deschide în Filă incognito nouă</translation> <translation id="6476800141292307438">Se traduce această pagină în <ph name="LANGUAGE" />. Sunt disponibile opțiuni în partea de jos a ecranului.</translation> <translation id="6482629121755362506">Elemente șterse: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index a6ed136..22fef34 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Произошла ошибка. Повторите попытку позже.</translation> <translation id="6445051938772793705">Страна</translation> <translation id="6445981559479772097">Сообщение отправлено</translation> +<translation id="6447842834002726250">Файлы сookie</translation> <translation id="6464071786529933911">Откр. в режиме инкогнито</translation> <translation id="6476800141292307438">Перевод страницы на <ph name="LANGUAGE" />. Параметры указаны в нижней части экрана.</translation> <translation id="6482629121755362506">Удалено закладок: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index dffd824..676ceef 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">දෝෂයක් සිදු විය. පසුව නැවත උත්සාහ කරන්න.</translation> <translation id="6445051938772793705">රට</translation> <translation id="6445981559479772097">පණිවිඩය යැවිණි.</translation> +<translation id="6447842834002726250">කුකීස්</translation> <translation id="6464071786529933911">නව අප්රසිද්ධ පටිත්තක විවෘත කරන්න</translation> <translation id="6476800141292307438">පිටුව <ph name="LANGUAGE" />ට පරිවර්තන කෙරේ. තිරයේ පහළ කොටස ළඟ විකල්ප ලැබේ.</translation> <translation id="6482629121755362506">අයිතම <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ක් මකන ලදි</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index f54866e..656d04f9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Vyskytla sa chyba. Skúste to znova neskôr.</translation> <translation id="6445051938772793705">Krajina</translation> <translation id="6445981559479772097">Správa sa odoslala.</translation> +<translation id="6447842834002726250">Súbory cookie</translation> <translation id="6464071786529933911">Otvoriť na novej karte inkognito</translation> <translation id="6476800141292307438">Stránka sa prekladá do jazyka <ph name="LANGUAGE" />. Možnosti nájdete v dolnej časti obrazovky.</translation> <translation id="6482629121755362506">Počet odstránených položiek: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 12dc57a..903ae27 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Prišlo je do napake. Poskusite znova pozneje.</translation> <translation id="6445051938772793705">Država</translation> <translation id="6445981559479772097">Sporočilo poslano.</translation> +<translation id="6447842834002726250">Piškotki</translation> <translation id="6464071786529933911">Open in New Incognito Tab</translation> <translation id="6476800141292307438">Prevajanje strani v ta jezik: <ph name="LANGUAGE" />. Možnosti so na voljo blizu dna zaslona.</translation> <translation id="6482629121755362506">Št. izbrisanih elementov: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index dff3d46..854df0f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ndodhi një gabim. Provo përsëri më vonë.</translation> <translation id="6445051938772793705">Shteti</translation> <translation id="6445981559479772097">Mesazhi u dërgua.</translation> +<translation id="6447842834002726250">Kukit</translation> <translation id="6464071786529933911">Hape në një skedë të re "të fshehtë"</translation> <translation id="6476800141292307438">Po përkthen faqen në <ph name="LANGUAGE" />. Opsionet që ofrohen janë pranë fundit të ekranit.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> elementë u fshinë</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 02acb4b..3667bc2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Дошло је до грешке. Пробајте поново касније.</translation> <translation id="6445051938772793705">Земља</translation> <translation id="6445981559479772097">Порука је послата.</translation> +<translation id="6447842834002726250">Колачићи</translation> <translation id="6464071786529933911">Отвори на новој картици без архивирања</translation> <translation id="6476800141292307438">Страница се преводи на: <ph name="LANGUAGE" />. Опције су доступне у дну екрана.</translation> <translation id="6482629121755362506">Број избрисаних ставки је <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index cc0769bc..9ef2617c7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Ett fel uppstod. Försök igen senare.</translation> <translation id="6445051938772793705">Land</translation> <translation id="6445981559479772097">SMS skickat.</translation> +<translation id="6447842834002726250">Cookies</translation> <translation id="6464071786529933911">Öppna i ny inkognitoflik</translation> <translation id="6476800141292307438">Översätter sidan till <ph name="LANGUAGE" />. Alternativ finns längst ned på skärmen.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> objekt har tagits bort</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 7ba82e0a..e012bf0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Hitilafu imetokea. Tafadhali jaribu tena baadaye.</translation> <translation id="6445051938772793705">Nchi</translation> <translation id="6445981559479772097">Ujumbe umetumwa.</translation> +<translation id="6447842834002726250">Vidakuzi</translation> <translation id="6464071786529933911">Fungua katika Kichupo Fiche Kipya</translation> <translation id="6476800141292307438">Inatafsiri ukurasa katika <ph name="LANGUAGE" />. Chaguo zinapatikana karibu na sehemu ya chini ya skrini.</translation> <translation id="6482629121755362506">Vifaa <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> vimefutwa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 3d28c30..cc585f9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">பிழை ஏற்பட்டது. பிறகு முயலவும்.</translation> <translation id="6445051938772793705">நாடு</translation> <translation id="6445981559479772097">செய்தி அனுப்பப்பட்டது.</translation> +<translation id="6447842834002726250">குக்கீகள்</translation> <translation id="6464071786529933911">புதிய மறைநிலைத் தாவலில் திற</translation> <translation id="6476800141292307438">பக்கத்தை <ph name="LANGUAGE" /> மொழியில் மொழிபெயர்க்கிறது. திரையின் கீழ்ப்பகுதிக்கு அருகில் விருப்பத்தேர்வுகள் உள்ளன.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> உருப்படிகள் நீக்கப்பட்டன</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 85b06d6..e3b8414 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ఎర్రర్ ఏర్పడింది. తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="6445051938772793705">దేశం</translation> <translation id="6445981559479772097">సందేశం పంపబడింది.</translation> +<translation id="6447842834002726250">కుక్కీలు</translation> <translation id="6464071786529933911">కొత్త అజ్ఞాత ట్యాబ్లో తెరువు</translation> <translation id="6476800141292307438">పేజీని <ph name="LANGUAGE" />లోకి అనువదిస్తోంది. స్క్రీన్ దిగువ భాగానికి దగ్గర్లో ఎంపికలు అందుబాటులో ఉంటాయి.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> అంశాలు తొలగించబడ్డాయి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 898bf7c..1eb3f27 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">เกิดข้อผิดพลาด โปรดลองอีกครั้งในภายหลัง</translation> <translation id="6445051938772793705">ประเทศ</translation> <translation id="6445981559479772097">ส่งข้อความแล้ว</translation> +<translation id="6447842834002726250">คุกกี้</translation> <translation id="6464071786529933911">เปิดในแท็บที่ไม่ระบุตัวตนใหม่</translation> <translation id="6476800141292307438">กำลังแปลหน้าเว็บเป็นภาษา<ph name="LANGUAGE" /> ตัวเลือกจะอยู่ทางด้านล่างของหน้าจอ</translation> <translation id="6482629121755362506">ลบแล้ว <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> รายการ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 434e5534..ccf50f6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Bir hata oluştu. Daha sonra tekrar deneyin.</translation> <translation id="6445051938772793705">Ülke</translation> <translation id="6445981559479772097">Mesaj gönderildi.</translation> +<translation id="6447842834002726250">Çerezler</translation> <translation id="6464071786529933911">Yeni Gizli Sekmede Aç</translation> <translation id="6476800141292307438">Sayfa <ph name="LANGUAGE" /> diline çevriliyor. Seçenekler ekranın alt kısmına yakın bir yerde bulunur.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> öğe silindi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 95068f9..d5d2c13 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Сталася помилка. Спробуйте пізніше.</translation> <translation id="6445051938772793705">Країна</translation> <translation id="6445981559479772097">Повідомлення надіслано.</translation> +<translation id="6447842834002726250">Cookie-файли</translation> <translation id="6464071786529933911">Відкрити в анонімній вкладці</translation> <translation id="6476800141292307438">Сторінка перекладається такою мовою: <ph name="LANGUAGE" />. Параметри розташовано внизу екрана.</translation> <translation id="6482629121755362506">Видалено елементів: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 24205f7..cb0763c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">ایک خرابی پیش آ گئی۔ بعد میں دوبارہ کوشش کریں۔</translation> <translation id="6445051938772793705">ملک</translation> <translation id="6445981559479772097">پیغام بھیج دیا گیا۔</translation> +<translation id="6447842834002726250">کوکیز</translation> <translation id="6464071786529933911">نئے پوشیدگی ٹیب میں کھولیں</translation> <translation id="6476800141292307438">صفحہ کا <ph name="LANGUAGE" /> میں ترجمہ کیا جا رہا ہے۔ اسکرین کے نچلے حصے کے قریب اختیارات دستیاب ہیں۔</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> آئٹم کو حذف کر دیا گیا</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index c9f49c84..cfc40261 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Xatolik yuz berdi. Keyinroq urining.</translation> <translation id="6445051938772793705">Mamlakat</translation> <translation id="6445981559479772097">Xabar yuborildi.</translation> +<translation id="6447842834002726250">Cookie fayllari</translation> <translation id="6464071786529933911">Yangi inkognito sahifada ochish</translation> <translation id="6476800141292307438">Sahifa <ph name="LANGUAGE" /> tiliga tarjima qilinmoqda. Parametrlar ekranning pastiga yaqin joyda joylashgan.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ta xatcho‘p o‘chirildi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 6babe91a..ae9a09d1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Đã xảy ra lỗi. Hãy thử lại sau.</translation> <translation id="6445051938772793705">Quốc gia</translation> <translation id="6445981559479772097">Đã gửi tin nhắn.</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">Mở trong tab ẩn danh mới</translation> <translation id="6476800141292307438">Đang dịch trang sang <ph name="LANGUAGE" />. Các tùy chọn nằm ở gần cuối màn hình.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> dấu trang đã bị xóa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index bf01c64..ae81c5a8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">发生错误,请稍后重试。</translation> <translation id="6445051938772793705">国家/地区</translation> <translation id="6445981559479772097">短信已发送。</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">在新的无痕式标签页中打开</translation> <translation id="6476800141292307438">将页面翻译成<ph name="LANGUAGE" />。选项位于屏幕底部附近。</translation> <translation id="6482629121755362506">删除了<ph name="NUMBER_OF_SELECTED_BOOKMARKS" />项</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index bd9d7d21..a084c14 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation> <translation id="6445051938772793705">國家/地區</translation> <translation id="6445981559479772097">訊息已送出。</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">在新無痕式分頁中開啟</translation> <translation id="6476800141292307438">將網頁翻譯成<ph name="LANGUAGE" />。翻譯選項喺喺接近畫面底部附近。</translation> <translation id="6482629121755362506">已刪除 <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> 個項目</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 748afcc..7ac48ac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation> <translation id="6445051938772793705">國家/地區</translation> <translation id="6445981559479772097">訊息已送出。</translation> +<translation id="6447842834002726250">Cookie</translation> <translation id="6464071786529933911">在新無痕式分頁中開啟</translation> <translation id="6476800141292307438">將網頁翻譯成<ph name="LANGUAGE" />。翻譯選項位於靠近畫面底部的位置。</translation> <translation id="6482629121755362506">已刪除 <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> 個項目</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index 0a6ac785..27c3459 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -418,6 +418,7 @@ <translation id="6434591244308415567">Kuvele iphutha. Zama futhi ngemuva kwesikhathi.</translation> <translation id="6445051938772793705">Izwe</translation> <translation id="6445981559479772097">Umyalezo uthunyelwe.</translation> +<translation id="6447842834002726250">Amakhukhi</translation> <translation id="6464071786529933911">Vula kuthebhu elisha le-Incognito</translation> <translation id="6476800141292307438">Ukuhumushela ikhasi kusi-<ph name="LANGUAGE" />. Izinketho ziyatholakala eduzane naphansi kwesikrini.</translation> <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> izinto zisusiwe</translation>
diff --git a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc index 7b7f9c6..c4beae3 100644 --- a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc +++ b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
@@ -28,7 +28,7 @@ return std::make_unique<AutocompleteClassifier>( base::WrapUnique(new AutocompleteController( base::WrapUnique(new AutocompleteProviderClientImpl(browser_state)), - nullptr, AutocompleteClassifier::DefaultOmniboxProviders())), + AutocompleteClassifier::DefaultOmniboxProviders())), base::WrapUnique(new AutocompleteSchemeClassifierImpl)); }
diff --git a/ios/chrome/browser/device_sharing/BUILD.gn b/ios/chrome/browser/device_sharing/BUILD.gn index 6842e4bf..888fad2 100644 --- a/ios/chrome/browser/device_sharing/BUILD.gn +++ b/ios/chrome/browser/device_sharing/BUILD.gn
@@ -5,6 +5,8 @@ source_set("device_sharing") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ + "device_sharing_browser_agent.h", + "device_sharing_browser_agent.mm", "device_sharing_manager.h", "device_sharing_manager_factory.h", "device_sharing_manager_factory.mm", @@ -19,6 +21,8 @@ "//components/prefs", "//components/prefs/ios", "//ios/chrome/browser/browser_state", + "//ios/chrome/browser/main:public", + "//ios/chrome/browser/web_state_list", "//net", "//url", ] @@ -27,13 +31,18 @@ source_set("unit_tests") { configs += [ "//build/config/compiler:enable_arc" ] testonly = true - sources = [ "device_sharing_manager_impl_unittest.mm" ] + sources = [ + "device_sharing_browser_agent_unittest.mm", + "device_sharing_manager_impl_unittest.mm", + ] deps = [ ":device_sharing", "//base", "//components/handoff", "//components/sync_preferences:test_support", "//ios/chrome/browser/browser_state:test_support", + "//ios/chrome/browser/main:test_support", + "//ios/chrome/browser/web_state_list", "//ios/web/public/test", "//testing/gtest", "//third_party/ocmock",
diff --git a/ios/chrome/browser/device_sharing/device_sharing_browser_agent.h b/ios/chrome/browser/device_sharing/device_sharing_browser_agent.h new file mode 100644 index 0000000..2fe44d1 --- /dev/null +++ b/ios/chrome/browser/device_sharing/device_sharing_browser_agent.h
@@ -0,0 +1,66 @@ +// Copyright 2020 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 IOS_CHROME_BROWSER_DEVICE_SHARING_DEVICE_SHARING_BROWSER_AGENT_H_ +#define IOS_CHROME_BROWSER_DEVICE_SHARING_DEVICE_SHARING_BROWSER_AGENT_H_ + +#import "ios/chrome/browser/main/browser_observer.h" +#import "ios/chrome/browser/main/browser_user_data.h" +#import "ios/chrome/browser/web_state_list/web_state_list_observer.h" +#import "ios/web/public/web_state_observer.h" + +class ActiveWebStateObservationForwarder; +class Browser; + +// A browser agent (Brower-scoped model extension) that monitors the browser's +// web states for activations and navigations and updates the assoicated +// DeviceSharingService as the active URL changes. For browsers with incognito +// browser states, all updates clear the shared URL. +class DeviceSharingBrowserAgent + : public BrowserUserData<DeviceSharingBrowserAgent>, + WebStateListObserver, + BrowserObserver, + public web::WebStateObserver { + public: + // Not copyable or moveable + DeviceSharingBrowserAgent(const DeviceSharingBrowserAgent&) = delete; + DeviceSharingBrowserAgent& operator=(const DeviceSharingBrowserAgent&) = + delete; + ~DeviceSharingBrowserAgent() override; + + // Tell the device sharing manager that this is the active browser. + void UpdateForActiveBrowser(); + + private: + explicit DeviceSharingBrowserAgent(Browser* browser); + friend class BrowserUserData<DeviceSharingBrowserAgent>; + BROWSER_USER_DATA_KEY_DECL(); + + // Update the active URL for the current web state of the browser. + void UpdateForActiveWebState(); + + // WebStateListObserver + void WebStateActivatedAt(WebStateList* web_state_list, + web::WebState* old_web_state, + web::WebState* new_web_state, + int active_index, + ActiveWebStateChangeReason reason) override; + + // BrowserObserver + void BrowserDestroyed(Browser* browser) override; + + // web::WebStateObserver + void DidFinishNavigation(web::WebState* web_state, + web::NavigationContext* navigation_context) override; + + // The Browser this agent is associated with. + Browser* browser_; + // Whether the browser state assoicated with |browser_| is inocgnito or not. + const bool is_incognito_ = true; + // Observer for the active web state in |browser_|'s browser list. + std::unique_ptr<ActiveWebStateObservationForwarder> + active_web_state_observer_; +}; + +#endif // IOS_CHROME_BROWSER_DEVICE_SHARING_DEVICE_SHARING_BROWSER_AGENT_H_
diff --git a/ios/chrome/browser/device_sharing/device_sharing_browser_agent.mm b/ios/chrome/browser/device_sharing/device_sharing_browser_agent.mm new file mode 100644 index 0000000..d45ae7e --- /dev/null +++ b/ios/chrome/browser/device_sharing/device_sharing_browser_agent.mm
@@ -0,0 +1,90 @@ +// Copyright 2020 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 "ios/chrome/browser/device_sharing/device_sharing_browser_agent.h" +#import "ios/chrome/browser/browser_state/chrome_browser_state.h" +#import "ios/chrome/browser/device_sharing/device_sharing_manager.h" +#import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h" +#import "ios/chrome/browser/main/browser.h" +#import "ios/chrome/browser/web_state_list/active_web_state_observation_forwarder.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +BROWSER_USER_DATA_KEY_IMPL(DeviceSharingBrowserAgent) + +DeviceSharingBrowserAgent::DeviceSharingBrowserAgent(Browser* browser) + : browser_(browser), + is_incognito_(browser->GetBrowserState()->IsOffTheRecord()), + active_web_state_observer_( + std::make_unique<ActiveWebStateObservationForwarder>( + browser_->GetWebStateList(), + this)) { + browser_->AddObserver(this); + browser_->GetWebStateList()->AddObserver(this); +} + +DeviceSharingBrowserAgent::~DeviceSharingBrowserAgent() {} + +void DeviceSharingBrowserAgent::UpdateForActiveBrowser() { + // Tell the manager that this is now the active browser, and update. + DeviceSharingManagerFactory::GetForBrowserState(browser_->GetBrowserState()) + ->SetActiveBrowser(browser_); + UpdateForActiveWebState(); +} + +void DeviceSharingBrowserAgent::UpdateForActiveWebState() { + DeviceSharingManager* manager = + DeviceSharingManagerFactory::GetForBrowserState( + browser_->GetBrowserState()); + if (is_incognito_) { + // For all events on an incognito browser, clear the active URL, ensuring + // that no URL is shared. + manager->ClearActiveUrl(browser_); + return; + } + + web::WebState* active_web_state = + browser_->GetWebStateList()->GetActiveWebState(); + if (active_web_state) { + manager->UpdateActiveUrl(browser_, active_web_state->GetVisibleURL()); + return; + } + + // Clear the the ative URL if no web state is active -- for example if the + // web state list is empty. + manager->ClearActiveUrl(browser_); +} + +#pragma mark - WebStateListObserver +void DeviceSharingBrowserAgent::WebStateActivatedAt( + WebStateList* web_state_list, + web::WebState* old_web_state, + web::WebState* new_web_state, + int active_index, + ActiveWebStateChangeReason reason) { + UpdateForActiveWebState(); +} + +#pragma mark - BrowserObserver +void DeviceSharingBrowserAgent::BrowserDestroyed(Browser* browser) { + DCHECK_EQ(browser, browser_); + // Signal no active URL. If this is the active browser in the manager, then + // no further updates will be sent, so until another browser becomes active, + // there will be no active URL. + DeviceSharingManagerFactory::GetForBrowserState(browser_->GetBrowserState()) + ->ClearActiveUrl(browser); + // Unhook all observers. + active_web_state_observer_.reset(); + browser->RemoveObserver(this); + browser_->GetWebStateList()->RemoveObserver(this); +} + +#pragma mark - WebStateObserver +void DeviceSharingBrowserAgent::DidFinishNavigation( + web::WebState* web_state, + web::NavigationContext* navigation_context) { + UpdateForActiveWebState(); +}
diff --git a/ios/chrome/browser/device_sharing/device_sharing_browser_agent_unittest.mm b/ios/chrome/browser/device_sharing/device_sharing_browser_agent_unittest.mm new file mode 100644 index 0000000..8a1df0ee --- /dev/null +++ b/ios/chrome/browser/device_sharing/device_sharing_browser_agent_unittest.mm
@@ -0,0 +1,341 @@ +// Copyright 2020 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 "ios/chrome/browser/device_sharing/device_sharing_browser_agent.h" + +#include <memory> + +#import "components/handoff/handoff_manager.h" +#import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#import "ios/chrome/browser/device_sharing/device_sharing_manager.h" +#import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h" +#import "ios/chrome/browser/device_sharing/device_sharing_manager_impl.h" +#import "ios/chrome/browser/main/test_browser.h" +#import "ios/chrome/browser/web_state_list/web_state_list.h" +#import "ios/chrome/browser/web_state_list/web_state_opener.h" +#import "ios/web/public/test/fakes/test_web_state.h" +#import "ios/web/public/test/web_task_environment.h" +#import "net/base/mac/url_conversions.h" +#import "testing/gtest_mac.h" +#import "testing/platform_test.h" +#import "url/gurl.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +class DeviceSharingBrowserAgentTest : public PlatformTest { + public: + DeviceSharingBrowserAgentTest() + : url_1_("http://www.test.com/1.html"), + url_2_("http://www.test.com/2.html"), + url_3_("http://www.test.com/3.html"), + url_4_("http://www.test.com/4.html") { + TestChromeBrowserState::Builder test_browser_state_builder; + test_browser_state_builder.AddTestingFactory( + DeviceSharingManagerFactory::GetInstance(), + DeviceSharingManagerFactory::GetDefaultFactory()); + + chrome_browser_state_ = test_browser_state_builder.Build(); + browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get()); + + other_browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get()); + incognito_browser_ = std::make_unique<TestBrowser>( + chrome_browser_state_->GetOffTheRecordChromeBrowserState()); + } + + NSURL* ActiveHandoffUrl() { + DeviceSharingManagerImpl* sharing_manager = + static_cast<DeviceSharingManagerImpl*>( + DeviceSharingManagerFactory::GetForBrowserState( + chrome_browser_state_.get())); + return [sharing_manager->handoff_manager_ userActivityWebpageURL]; + } + + web::TestWebState* AppendNewWebState(Browser* browser, const GURL url) { + return AppendNewWebState(browser, url, WebStateList::INSERT_ACTIVATE); + } + + web::TestWebState* AppendNewWebState(Browser* browser, + const GURL url, + WebStateList::InsertionFlags flags) { + auto test_web_state = std::make_unique<web::TestWebState>(); + test_web_state->SetCurrentURL(url); + web::TestWebState* inserted_web_state = test_web_state.get(); + browser->GetWebStateList()->InsertWebState(WebStateList::kInvalidIndex, + std::move(test_web_state), flags, + WebStateOpener()); + return inserted_web_state; + } + + const GURL url_1_; + const GURL url_2_; + const GURL url_3_; + const GURL url_4_; + + web::WebTaskEnvironment task_environment_; + std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; + std::unique_ptr<Browser> browser_; + std::unique_ptr<Browser> other_browser_; + std::unique_ptr<Browser> incognito_browser_; +}; + +TEST_F(DeviceSharingBrowserAgentTest, UpdateEmptyBrowser) { + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdatePopulatedBrowser) { + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + // |browser_| isn't the active browser in the device manager yet, so expect + // the active URL hasn't yet changed. + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, ActivateInBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + // As the active browser, newly actiated web states will change the active + // URL. + AppendNewWebState(browser_.get(), url_1_); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + // Appending a web state without activating will not change the active URL. + AppendNewWebState(browser_.get(), url_2_, WebStateList::INSERT_NO_FLAGS); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, NavigateInBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + web::TestWebState* web_state = AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + + web_state->SetVisibleURL(url_2_); + web_state->OnNavigationFinished(nullptr); + // Navigating the active web state should update the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, NavigateInactiveInBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + web::TestWebState* web_state = + AppendNewWebState(browser_.get(), url_1_, WebStateList::INSERT_NO_FLAGS); + AppendNewWebState(browser_.get(), url_2_); + + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); + + web_state->SetVisibleURL(url_3_); + web_state->OnNavigationFinished(nullptr); + // Navigating the non-active web state should not update the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, DestroyBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + AppendNewWebState(browser_.get(), url_1_); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + browser_.reset(); + // Destroying the active browser should clear the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdatePopulatedIncognitoBrowser) { + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + AppendNewWebState(incognito_browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(incognito_browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(incognito_browser_.get()) + ->UpdateForActiveBrowser(); + // The incognito browser, when active, should never update the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +} + +TEST_F(DeviceSharingBrowserAgentTest, ActivateInIncognitoBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(incognito_browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(incognito_browser_.get()) + ->UpdateForActiveBrowser(); + AppendNewWebState(incognito_browser_.get(), url_1_); + // The incognito browser, when active, should never update the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +} + +TEST_F(DeviceSharingBrowserAgentTest, NavigateInIncognitoBrowser) { + DeviceSharingBrowserAgent::CreateForBrowser(incognito_browser_.get()); + web::TestWebState* incognito_web_state = + AppendNewWebState(incognito_browser_.get(), url_1_); + + incognito_web_state->SetVisibleURL(url_2_); + incognito_web_state->OnNavigationFinished(nullptr); + // Navigating the non-active web state should not update the active URL. + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdateTwoBrowsersOneEmpty) { + AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + // Activate an empty browser. + DeviceSharingBrowserAgent::CreateForBrowser(other_browser_.get()); + DeviceSharingBrowserAgent::FromBrowser(other_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + // Switch back. + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdateTwoPopulatedBrowsers) { + AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + AppendNewWebState(other_browser_.get(), url_2_); + DeviceSharingBrowserAgent::CreateForBrowser(other_browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + + DeviceSharingBrowserAgent::FromBrowser(other_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); + + // Append to |browser_|, but expect no change in active URL as |browser_| + // isn't active. + AppendNewWebState(browser_.get(), url_3_); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); + + // Now make |browser_| active and its URL should be the active one. + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); + + // Destroy |browser_| and the ative browser should be cleared. + browser_.reset(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + // Activate |other_browser_| and its URL should become active again. + DeviceSharingBrowserAgent::FromBrowser(other_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdateAndNavigateTwoBrowsers) { + web::TestWebState* web_state = AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + web::TestWebState* other_web_state = + AppendNewWebState(other_browser_.get(), url_2_); + DeviceSharingBrowserAgent::CreateForBrowser(other_browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + + DeviceSharingBrowserAgent::FromBrowser(other_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); + + // Navigate in |browser_|, but expect no change in active URL as |browser_| + // isn't active. + web_state->SetVisibleURL(url_3_); + web_state->OnNavigationFinished(nullptr); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_2_)); + + // Now make |browser_| active and its URL should be the active one. + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); + + // Navigate in |other_browser_|, but again expect no change because it isn't + // active. + other_web_state->SetVisibleURL(url_4_); + other_web_state->OnNavigationFinished(nullptr); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); + + // Activate |other_browser| and observe the navigated URL + DeviceSharingBrowserAgent::FromBrowser(other_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_4_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, UpdateRegularAndIncognitoBrowsers) { + AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + AppendNewWebState(other_browser_.get(), url_2_); + DeviceSharingBrowserAgent::CreateForBrowser(incognito_browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + + DeviceSharingBrowserAgent::FromBrowser(incognito_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + // Append to |browser_|, but expect no change in active URL as |browser_| + // isn't active. + AppendNewWebState(browser_.get(), url_3_); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + // Now make |browser_| active and its URL should be the active one. + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); +} + +TEST_F(DeviceSharingBrowserAgentTest, NavigateInRegularAndIncognitoBrowsers) { + web::TestWebState* web_state = AppendNewWebState(browser_.get(), url_1_); + DeviceSharingBrowserAgent::CreateForBrowser(browser_.get()); + web::TestWebState* incognito_web_state = + AppendNewWebState(incognito_browser_.get(), url_2_); + DeviceSharingBrowserAgent::CreateForBrowser(incognito_browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_1_)); + + DeviceSharingBrowserAgent::FromBrowser(incognito_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + // Navigate in |browser_|, but expect no change in active URL as |browser_| + // isn't active. + web_state->SetVisibleURL(url_3_); + web_state->OnNavigationFinished(nullptr); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); + + // Now make |browser_| active and its URL should be the active one. + DeviceSharingBrowserAgent::FromBrowser(browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); + + // Navigate in |incognito_browser_|, but again expect no change because it + // isn't active. + incognito_web_state->SetVisibleURL(url_4_); + incognito_web_state->OnNavigationFinished(nullptr); + EXPECT_NSEQ(ActiveHandoffUrl(), net::NSURLWithGURL(url_3_)); + + // Activate |incognito_browser_| and observe no URL. + DeviceSharingBrowserAgent::FromBrowser(incognito_browser_.get()) + ->UpdateForActiveBrowser(); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +}
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager.h b/ios/chrome/browser/device_sharing/device_sharing_manager.h index c5ddb42..3b24ede8 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager.h +++ b/ios/chrome/browser/device_sharing/device_sharing_manager.h
@@ -7,6 +7,7 @@ #include "components/keyed_service/core/keyed_service.h" +class Browser; class GURL; // This manager maintains all state related to sharing the active URL to other @@ -16,8 +17,17 @@ public: DeviceSharingManager() = default; - virtual void UpdateActiveUrl(const GURL& active_url) = 0; - virtual void ClearActiveUrl() = 0; + // Set |browser| as the active browser. It will remain the active browser + // until another active browser is set. + virtual void SetActiveBrowser(Browser* browser) = 0; + + // If |browser| is the active browser, set |active_url| as the active URL. + // If |browser| is not the active browser, do nothing. + virtual void UpdateActiveUrl(Browser* browser, const GURL& active_url) = 0; + + // If |browser| is the active browser, clear the active URL. + // If |browser| is not the active browser, do nothing. + virtual void ClearActiveUrl(Browser* browser) = 0; }; #endif // IOS_CHROME_BROWSER_DEVICE_SHARING_DEVICE_SHARING_MANAGER_H_
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager_factory.h b/ios/chrome/browser/device_sharing/device_sharing_manager_factory.h index d17fd5a..c2ea0f6 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager_factory.h +++ b/ios/chrome/browser/device_sharing/device_sharing_manager_factory.h
@@ -22,6 +22,10 @@ // Getter for singleton instance. static DeviceSharingManagerFactory* GetInstance(); + // Returns the default factory used to build DeviceSharingManagers. Can be + // registered with SetTestingFactory to use real instances during testing. + static TestingFactory GetDefaultFactory(); + // Not copyable or moveable. DeviceSharingManagerFactory(const DeviceSharingManagerFactory&) = delete; DeviceSharingManagerFactory& operator=(const DeviceSharingManagerFactory&) =
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager_factory.mm b/ios/chrome/browser/device_sharing/device_sharing_manager_factory.mm index 7e92413..e894c85 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager_factory.mm +++ b/ios/chrome/browser/device_sharing/device_sharing_manager_factory.mm
@@ -14,6 +14,15 @@ #error "This file requires ARC support." #endif +namespace { +std::unique_ptr<KeyedService> BuildDeviceSharingManager( + web::BrowserState* context) { + ChromeBrowserState* browser_state = + ChromeBrowserState::FromBrowserState(context); + return std::make_unique<DeviceSharingManagerImpl>(browser_state); +} +} + // static DeviceSharingManager* DeviceSharingManagerFactory::GetForBrowserState( ChromeBrowserState* browser_state) { @@ -27,6 +36,12 @@ return instance.get(); } +// static +BrowserStateKeyedServiceFactory::TestingFactory +DeviceSharingManagerFactory::GetDefaultFactory() { + return base::BindRepeating(&BuildDeviceSharingManager); +} + DeviceSharingManagerFactory::DeviceSharingManagerFactory() : BrowserStateKeyedServiceFactory( "DeviceSharingManager", @@ -35,9 +50,7 @@ std::unique_ptr<KeyedService> DeviceSharingManagerFactory::BuildServiceInstanceFor( web::BrowserState* context) const { - ChromeBrowserState* browser_state = - ChromeBrowserState::FromBrowserState(context); - return std::make_unique<DeviceSharingManagerImpl>(browser_state); + return BuildDeviceSharingManager(context); } web::BrowserState* DeviceSharingManagerFactory::GetBrowserStateToUse(
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager_impl.h b/ios/chrome/browser/device_sharing/device_sharing_manager_impl.h index 86f27bc..f244074c 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager_impl.h +++ b/ios/chrome/browser/device_sharing/device_sharing_manager_impl.h
@@ -10,6 +10,7 @@ #include "base/gtest_prod_util.h" #import "ios/chrome/browser/device_sharing/device_sharing_manager.h" +class Browser; class ChromeBrowserState; class PrefChangeRegistrar; @class HandoffManager; @@ -23,12 +24,14 @@ DeviceSharingManagerImpl& operator=(const DeviceSharingManagerImpl&) = delete; ~DeviceSharingManagerImpl() override; - void UpdateActiveUrl(const GURL& active_url) override; - void ClearActiveUrl() override; + void SetActiveBrowser(Browser* browser) override; + void UpdateActiveUrl(Browser* browser, const GURL& active_url) override; + void ClearActiveUrl(Browser* browser) override; private: // Allow tests to inspect the handoff manager. friend class DeviceSharingManagerImplTest; + friend class DeviceSharingBrowserAgentTest; friend class DeviceSharingAppInterfaceWrapper; void UpdateHandoffManager(); @@ -40,6 +43,9 @@ // Responsible for maintaining all state related to the Handoff feature. __strong HandoffManager* handoff_manager_; + + // The current active browser. + Browser* active_browser_ = nullptr; }; #endif // IOS_CHROME_BROWSER_DEVICE_SHARING_DEVICE_SHARING_MANAGER_IMPL_H_
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager_impl.mm b/ios/chrome/browser/device_sharing/device_sharing_manager_impl.mm index 458fb0b..83a6d3a 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager_impl.mm +++ b/ios/chrome/browser/device_sharing/device_sharing_manager_impl.mm
@@ -4,7 +4,7 @@ #import "ios/chrome/browser/device_sharing/device_sharing_manager_impl.h" -#include "components/handoff/handoff_manager.h" +#import "components/handoff/handoff_manager.h" #import "components/handoff/pref_names_ios.h" #import "components/prefs/pref_change_registrar.h" #import "components/prefs/pref_service.h" @@ -25,21 +25,32 @@ base::Bind(&DeviceSharingManagerImpl::UpdateHandoffManager, base::Unretained(this))); UpdateHandoffManager(); - ClearActiveUrl(); + [handoff_manager_ updateActiveURL:GURL()]; } DeviceSharingManagerImpl::~DeviceSharingManagerImpl() {} -void DeviceSharingManagerImpl::UpdateActiveUrl(const GURL& active_url) { +void DeviceSharingManagerImpl::SetActiveBrowser(Browser* browser) { + active_browser_ = browser; +} + +void DeviceSharingManagerImpl::UpdateActiveUrl(Browser* browser, + const GURL& active_url) { + if (browser != active_browser_) + return; + if (active_url.is_empty()) { - ClearActiveUrl(); + ClearActiveUrl(browser); return; } [handoff_manager_ updateActiveURL:active_url]; } -void DeviceSharingManagerImpl::ClearActiveUrl() { +void DeviceSharingManagerImpl::ClearActiveUrl(Browser* browser) { + if (browser != active_browser_) + return; + [handoff_manager_ updateActiveURL:GURL()]; }
diff --git a/ios/chrome/browser/device_sharing/device_sharing_manager_impl_unittest.mm b/ios/chrome/browser/device_sharing/device_sharing_manager_impl_unittest.mm index 5c7ae30cb..f872b44 100644 --- a/ios/chrome/browser/device_sharing/device_sharing_manager_impl_unittest.mm +++ b/ios/chrome/browser/device_sharing/device_sharing_manager_impl_unittest.mm
@@ -6,13 +6,13 @@ #include <memory> -// #include "base/mac/foundation_util.h" #import "components/handoff/handoff_manager.h" #import "components/handoff/pref_names_ios.h" #import "components/sync_preferences/testing_pref_service_syncable.h" #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h" #import "ios/chrome/browser/device_sharing/device_sharing_manager_impl.h" +#import "ios/chrome/browser/main/test_browser.h" #import "ios/web/public/test/web_task_environment.h" #import "net/base/mac/url_conversions.h" #import "testing/gtest_mac.h" @@ -36,6 +36,8 @@ sharing_manager_ = static_cast<DeviceSharingManagerImpl*>( DeviceSharingManagerFactory::GetForBrowserState( chrome_browser_state_.get())); + browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get()); + sharing_manager_->SetActiveBrowser(browser_.get()); } NSURL* ActiveHandoffUrl() { @@ -49,34 +51,41 @@ web::WebTaskEnvironment task_environment_; std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; DeviceSharingManagerImpl* sharing_manager_; + std::unique_ptr<TestBrowser> browser_; }; +TEST_F(DeviceSharingManagerImplTest, SameServiceForIncognito) { + EXPECT_EQ(DeviceSharingManagerFactory::GetForBrowserState( + chrome_browser_state_->GetOffTheRecordChromeBrowserState()), + sharing_manager_); +} + TEST_F(DeviceSharingManagerImplTest, ShareOneUrl) { // Expect that initially no URL is shared. EXPECT_NSEQ(ActiveHandoffUrl(), nil); // Share one URL, expect it's shared by the handoff manager. - sharing_manager_->UpdateActiveUrl(test_url_1_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); } TEST_F(DeviceSharingManagerImplTest, ShareTwoUrls) { // Share one URL, expect it's shared by the handoff manager. - sharing_manager_->UpdateActiveUrl(test_url_1_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); // Share a second URL, expect it replaces the prior one. - sharing_manager_->UpdateActiveUrl(test_url_2_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_2_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); } TEST_F(DeviceSharingManagerImplTest, ShareThenClear) { // Share one URL, expect it's shared by the handoff manager. - sharing_manager_->UpdateActiveUrl(test_url_1_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); // Clear the shared URL, expect that the handoff manager shares nothing. - sharing_manager_->ClearActiveUrl(); + sharing_manager_->ClearActiveUrl(browser_.get()); EXPECT_NSEQ(ActiveHandoffUrl(), nil); // Share another URL, expect it's shared by the handoff manager. - sharing_manager_->UpdateActiveUrl(test_url_2_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_2_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); } @@ -85,13 +94,13 @@ sync_preferences::TestingPrefServiceSyncable* prefs = chrome_browser_state_->GetTestingPrefService(); prefs->SetBoolean(prefs::kIosHandoffToOtherDevices, false); - sharing_manager_->UpdateActiveUrl(test_url_1_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); EXPECT_NSEQ(ActiveHandoffUrl(), nil); } TEST_F(DeviceSharingManagerImplTest, SharingThenDisabled) { // Share one URL, expect it's shared by the handoff manager. - sharing_manager_->UpdateActiveUrl(test_url_1_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); // Disable, expaect URL is no longer shared. @@ -103,6 +112,38 @@ // Re-enable. Expect URL is still not shared, but a new URL is sharable. prefs->SetBoolean(prefs::kIosHandoffToOtherDevices, true); EXPECT_NSEQ(ActiveHandoffUrl(), nil); - sharing_manager_->UpdateActiveUrl(test_url_2_); + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_2_); EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); } + +TEST_F(DeviceSharingManagerImplTest, SwitchActiveBrowser) { + auto browser_2 = std::make_unique<TestBrowser>(chrome_browser_state_.get()); + // Share one URL, expect it's shared by the handoff manager. + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_1_); + EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); + // Set a new active browser. + sharing_manager_->SetActiveBrowser(browser_2.get()); + // Share a second URL from the original browser, expect it does not replace + // the prior one. + sharing_manager_->UpdateActiveUrl(browser_.get(), test_url_2_); + EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_1_); + + // Share a second URL from the now-active browser, expect it does replace + // the prior one. + sharing_manager_->UpdateActiveUrl(browser_2.get(), test_url_2_); + EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); + + // Clear the URL from the original active browser, expect it doesn't clear + // the active URL. + sharing_manager_->ClearActiveUrl(browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); + + // Switch back to the original active browser. The active URL should not + // change. + sharing_manager_->SetActiveBrowser(browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), test_nsurl_2_); + + // Now clear the URL for the original browser; it should clear. + sharing_manager_->ClearActiveUrl(browser_.get()); + EXPECT_NSEQ(ActiveHandoffUrl(), nil); +}
diff --git a/ios/chrome/browser/main/BUILD.gn b/ios/chrome/browser/main/BUILD.gn index 5947d05..d32b7368 100644 --- a/ios/chrome/browser/main/BUILD.gn +++ b/ios/chrome/browser/main/BUILD.gn
@@ -44,6 +44,7 @@ "//ios/chrome/browser/browser_state", "//ios/chrome/browser/crash_report/breadcrumbs", "//ios/chrome/browser/crash_report/breadcrumbs:feature_flags", + "//ios/chrome/browser/device_sharing", "//ios/chrome/browser/infobars/overlays/browser_agent:browser_agent_util", "//ios/chrome/browser/metrics:metrics_browser_agent", "//ios/chrome/browser/sessions",
diff --git a/ios/chrome/browser/main/browser_agent_util.mm b/ios/chrome/browser/main/browser_agent_util.mm index 13a3910d..7ef0585 100644 --- a/ios/chrome/browser/main/browser_agent_util.mm +++ b/ios/chrome/browser/main/browser_agent_util.mm
@@ -8,6 +8,7 @@ #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager_browser_agent.h" #include "ios/chrome/browser/crash_report/breadcrumbs/features.h" +#import "ios/chrome/browser/device_sharing/device_sharing_browser_agent.h" #include "ios/chrome/browser/infobars/overlays/browser_agent/infobar_overlay_browser_agent_util.h" #import "ios/chrome/browser/metrics/tab_usage_recorder_browser_agent.h" #import "ios/chrome/browser/sessions/live_tab_context_browser_agent.h" @@ -33,6 +34,7 @@ AttachInfobarOverlayBrowserAgent(browser); SyncedWindowDelegateBrowserAgent::CreateForBrowser(browser); WebUsageEnablerBrowserAgent::CreateForBrowser(browser); + DeviceSharingBrowserAgent::CreateForBrowser(browser); UrlLoadingNotifierBrowserAgent::CreateForBrowser(browser); // UrlLoadingBrowserAgent requires UrlLoadingNotifierBrowserAgent.
diff --git a/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper.mm b/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper.mm index 6a9490b..a87d343b 100644 --- a/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper.mm +++ b/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper.mm
@@ -98,7 +98,7 @@ int has_committed = navigation_context->HasCommitted() ? 1 : 0; ukm::SourceId source_id = ukm::GetSourceIdForWebStateDocument(web_state_); if (source_id != ukm::kInvalidSourceId) { - ukm::builders::PageLoad(source_id) + ukm::builders::MainFrameNavigation(source_id) .SetDidCommit(has_committed) .Record(ukm::UkmRecorder::Get()); }
diff --git a/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper_unittest.mm b/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper_unittest.mm index b489d25..7915b73 100644 --- a/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper_unittest.mm +++ b/ios/chrome/browser/metrics/pageload_foreground_duration_tab_helper_unittest.mm
@@ -17,7 +17,7 @@ #endif namespace { -const char kPageNavigationUkmEvent[] = "PageLoad"; +const char kPageNavigationUkmEvent[] = "MainFrameNavigation"; const char kPageNavigationUkmMetric[] = "DidCommit"; const char kPageForegroundSessionUkmSearchMatchesEvent[] = "PageForegroundSession"; @@ -62,7 +62,7 @@ // A successful navigation should be recorded const auto& post_navigation_entry = test_ukm_recorder_.GetEntriesByName(kPageNavigationUkmEvent); - EXPECT_EQ(1u, post_navigation_entry.size()); + ASSERT_EQ(1u, post_navigation_entry.size()); const ukm::mojom::UkmEntry* entry = post_navigation_entry[0]; ASSERT_TRUE(entry); EXPECT_NE(ukm::kInvalidSourceId, entry->source_id);
diff --git a/ios/chrome/browser/policy/BUILD.gn b/ios/chrome/browser/policy/BUILD.gn index 914ff53..7974c18a 100644 --- a/ios/chrome/browser/policy/BUILD.gn +++ b/ios/chrome/browser/policy/BUILD.gn
@@ -56,11 +56,34 @@ deps = [ "//base" ] - public_deps = [ "//components/policy/core/common:test_support" ] + public_deps = [ + "//components/policy/core/common:test_support", + "//testing/gmock", + ] configs += [ "//build/config/compiler:enable_arc" ] } +source_set("unit_tests") { + configs += [ "//build/config/compiler:enable_arc" ] + testonly = true + sources = [ "policy_unittest.mm" ] + deps = [ + ":policy", + ":test_support", + "//base", + "//base/test:test_support", + "//components/pref_registry", + "//components/prefs", + "//components/sync_preferences", + "//ios/chrome/browser:pref_names", + "//ios/chrome/browser:utils", + "//ios/chrome/browser/prefs", + "//ios/chrome/browser/prefs:browser_prefs", + "//testing/gtest", + ] +} + source_set("eg2_tests") { defines = [ "CHROME_EARL_GREY_2" ] configs += [
diff --git a/ios/chrome/browser/policy/browser_state_policy_connector.mm b/ios/chrome/browser/policy/browser_state_policy_connector.mm index 23be84a..b81dd2829 100644 --- a/ios/chrome/browser/policy/browser_state_policy_connector.mm +++ b/ios/chrome/browser/policy/browser_state_policy_connector.mm
@@ -19,7 +19,24 @@ policy::SchemaRegistry* schema_registry, BrowserPolicyConnectorIOS* browser_policy_connector) { schema_registry_ = schema_registry; - policy_providers_ = browser_policy_connector->GetPolicyProviders(); + + // The object returned by GetPlatformConnector() may or may not be in the list + // returned by GetPolicyProviders(). Explicitly add it to |policy_providers_| + // here in case it will not be added by the loop below (for example, this + // could happen if the platform provider is overridden for testing).. + policy::ConfigurationPolicyProvider* platform_provider = + browser_policy_connector->GetPlatformProvider(); + policy_providers_.push_back(platform_provider); + + for (auto* provider : browser_policy_connector->GetPolicyProviders()) { + // Skip the platform provider since it was already handled above. Do not + // reorder any of the remaining providers because the ordering in this list + // determines the precedence of the providers. + if (provider != platform_provider) { + policy_providers_.push_back(provider); + } + } + policy_service_ = std::make_unique<policy::PolicyServiceImpl>(policy_providers_); }
diff --git a/ios/chrome/browser/policy/policy_unittest.mm b/ios/chrome/browser/policy/policy_unittest.mm new file mode 100644 index 0000000..bb5c0d9 --- /dev/null +++ b/ios/chrome/browser/policy/policy_unittest.mm
@@ -0,0 +1,117 @@ +// Copyright 2020 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 <memory> + +#include "base/bind.h" +#include "base/command_line.h" +#include "base/files/scoped_temp_dir.h" +#include "base/run_loop.h" +#include "base/test/task_environment.h" +#include "base/threading/thread_task_runner_handle.h" +#include "components/policy/core/common/mock_configuration_policy_provider.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/core/common/policy_types.h" +#include "components/policy/policy_constants.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_registry.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "components/sync_preferences/pref_service_syncable.h" +#include "ios/chrome/browser/chrome_switches.h" +#include "ios/chrome/browser/policy/browser_policy_connector_ios.h" +#include "ios/chrome/browser/policy/browser_state_policy_connector.h" +#include "ios/chrome/browser/policy/configuration_policy_handler_list_factory.h" +#include "ios/chrome/browser/pref_names.h" +#include "ios/chrome/browser/prefs/browser_prefs.h" +#include "ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gtest_mac.h" +#include "testing/platform_test.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +class PolicyTest : public PlatformTest { + public: + PolicyTest() { + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableEnterprisePolicy); + } + + void SetUp() override { + PlatformTest::SetUp(); + ASSERT_TRUE(state_directory_.CreateUniqueTempDir()); + + // Create a BrowserPolicyConnectorIOS, install the mock policy + // provider, and hook up Local State. + browser_policy_connector_ = std::make_unique<BrowserPolicyConnectorIOS>( + base::Bind(&BuildPolicyHandlerList)); + browser_policy_connector_->SetPolicyProviderForTesting(&policy_provider_); + EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_)) + .WillRepeatedly(testing::Return(true)); + + scoped_refptr<PrefRegistrySimple> local_state_registry( + new PrefRegistrySimple); + RegisterLocalStatePrefs(local_state_registry.get()); + local_state_ = CreateLocalState( + state_directory_.GetPath().Append("TestLocalState"), + base::ThreadTaskRunnerHandle::Get().get(), local_state_registry, + browser_policy_connector_->GetPolicyService(), + browser_policy_connector_.get()); + browser_policy_connector_->Init(local_state_.get(), nullptr); + + // Create a BrowserStatePolicyConnector and hook it up to prefs. + browser_state_policy_connector_ = + std::make_unique<BrowserStatePolicyConnector>(); + browser_state_policy_connector_->Init( + browser_policy_connector_->GetSchemaRegistry(), + browser_policy_connector_.get()); + scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry( + new user_prefs::PrefRegistrySyncable); + RegisterBrowserStatePrefs(pref_registry.get()); + pref_service_ = CreateBrowserStatePrefs( + state_directory_.GetPath(), base::ThreadTaskRunnerHandle::Get().get(), + pref_registry, browser_state_policy_connector_->GetPolicyService(), + browser_policy_connector_.get()); + } + + protected: + // Temporary directory to hold preference files. + base::ScopedTempDir state_directory_; + + // The task environment for this test. + base::test::TaskEnvironment task_environment_; + + // Provides mock platform policy and can be modified during tests. Must + // outlive |browser_policy_connector_|. + policy::MockConfigurationPolicyProvider policy_provider_; + + // The application-level policy connector. Must outlive |local_state_|. + std::unique_ptr<BrowserPolicyConnectorIOS> browser_policy_connector_; + + // The local state PrefService managed by policy. + std::unique_ptr<PrefService> local_state_; + + // The BrowserState-level policy connector. Must outlive |pref_service_|. + std::unique_ptr<BrowserStatePolicyConnector> browser_state_policy_connector_; + + // The PrefService managed by policy. + std::unique_ptr<PrefService> pref_service_; +}; + +} // namespace + +// Tests that the SearchSuggestEnabled preference is correctly managed by +// policy. +TEST_F(PolicyTest, TestSearchSuggestEnabled) { + // This preference is currently not managed. + EXPECT_FALSE( + pref_service_->IsManagedPreference(prefs::kSearchSuggestEnabled)); +}
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm index 7f7b83a0..4c5b7e65 100644 --- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm +++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge.mm
@@ -94,7 +94,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->GetCookieList( GetRequest().url, options, base::BindOnce( @@ -119,7 +119,7 @@ options.set_include_httponly(); // Permit it to set a SameSite cookie if it wants to. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( net::CanonicalCookieFromSystemCookie(cookie, base::Time::Now()), base::SysNSStringToUTF8(response.URL.scheme), options,
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm index 83fdcc1..d9341ed 100644 --- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm +++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm
@@ -262,7 +262,7 @@ net::CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookie_manager->SetCanonicalCookie( net::CanonicalCookieFromSystemCookie(cookie, base::Time::Now()), "https", options, base::DoNothing());
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn index 2ca6ba8..6740a642 100644 --- a/ios/chrome/browser/tabs/BUILD.gn +++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -48,14 +48,13 @@ "//components/favicon/ios", "//components/history/core/browser", "//components/history/ios/browser", + "//components/keyed_service/core", "//components/language/ios/browser", "//components/navigation_metrics", "//components/profile_metrics", "//components/safe_browsing/core:features", "//components/security_state/ios", - "//components/sessions", "//components/strings", - "//ios/chrome/app/strings", "//ios/chrome/browser", "//ios/chrome/browser/autofill", "//ios/chrome/browser/autofill:autofill_internal", @@ -78,7 +77,6 @@ "//ios/chrome/browser/main", "//ios/chrome/browser/metrics", "//ios/chrome/browser/metrics:metrics_browser_agent", - "//ios/chrome/browser/metrics:metrics_internal", "//ios/chrome/browser/network_activity:tab_helper", "//ios/chrome/browser/open_in", "//ios/chrome/browser/overscroll_actions", @@ -100,10 +98,10 @@ "//ios/chrome/browser/u2f", "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/infobars:feature_flags", - "//ios/chrome/browser/ui/open_in", "//ios/chrome/browser/voice", "//ios/chrome/browser/web", "//ios/chrome/browser/web:feature_flags", + "//ios/chrome/browser/web:java_script_console", "//ios/chrome/browser/web:page_placeholder", "//ios/chrome/browser/web:web_internal", "//ios/chrome/browser/web_state_list", @@ -132,49 +130,26 @@ ":tabs_internal", "//base", "//base/test:test_support", - "//components/bookmarks/test", - "//components/history/core/browser", - "//components/keyed_service/core", - "//components/search_engines", "//components/strings:components_strings_grit", "//ios/chrome/browser", - "//ios/chrome/browser/bookmarks", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/download", - "//ios/chrome/browser/history", - "//ios/chrome/browser/history:tab_helper", - "//ios/chrome/browser/infobars", - "//ios/chrome/browser/main", "//ios/chrome/browser/main", "//ios/chrome/browser/main:test_support", - "//ios/chrome/browser/ntp", "//ios/chrome/browser/sessions", "//ios/chrome/browser/sessions:restoration_agent", "//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:test_support", - "//ios/chrome/browser/snapshots", "//ios/chrome/browser/ui/open_in", "//ios/chrome/browser/web", - "//ios/chrome/browser/web:web_internal", "//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list:agents", - "//ios/chrome/browser/web_state_list:test_support", "//ios/chrome/browser/web_state_list/web_usage_enabler", "//ios/chrome/test:test_support", - "//ios/chrome/test/fakes", - "//ios/public/provider/chrome/browser", - "//ios/public/provider/chrome/browser:test_support", - "//ios/testing:ocmock_support", - "//ios/web/common", - "//ios/web/navigation:core", - "//ios/web/public/session", "//ios/web/public/test", "//ios/web/public/test/fakes", "//ios/web/test/fakes:fakes", - "//net", - "//testing/gmock", "//testing/gtest", - "//third_party/ocmock", "//ui/base", ] configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/chrome/browser/tabs/tab_model_unittest.mm b/ios/chrome/browser/tabs/tab_model_unittest.mm index 187889e..98a54a1f 100644 --- a/ios/chrome/browser/tabs/tab_model_unittest.mm +++ b/ios/chrome/browser/tabs/tab_model_unittest.mm
@@ -2,49 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import <objc/runtime.h> +#import "ios/chrome/browser/tabs/tab_model.h" -#include "base/files/file_path.h" -#include "base/run_loop.h" -#include "base/strings/sys_string_conversions.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state_manager.h" -#include "ios/chrome/browser/chrome_url_constants.h" -#include "ios/chrome/browser/infobars/infobar_manager_impl.h" #import "ios/chrome/browser/main/browser_web_state_list_delegate.h" #import "ios/chrome/browser/main/test_browser.h" -#import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h" -#import "ios/chrome/browser/ntp/new_tab_page_tab_helper_delegate.h" -#include "ios/chrome/browser/sessions/ios_chrome_session_tab_helper.h" -#import "ios/chrome/browser/sessions/session_ios.h" #include "ios/chrome/browser/sessions/session_restoration_browser_agent.h" #import "ios/chrome/browser/sessions/session_window_ios.h" #import "ios/chrome/browser/sessions/test_session_service.h" -#import "ios/chrome/browser/tabs/tab_helper_util.h" -#import "ios/chrome/browser/tabs/tab_model.h" -#import "ios/chrome/browser/web/chrome_web_client.h" #import "ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" -#import "ios/chrome/browser/web_state_list/web_state_list_delegate.h" -#import "ios/chrome/browser/web_state_list/web_state_opener.h" #import "ios/chrome/browser/web_state_list/web_usage_enabler/web_usage_enabler_browser_agent.h" -#import "ios/chrome/test/fakes/fake_web_state_list_observing_delegate.h" #include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_state_manager.h" -#include "ios/web/common/features.h" -#import "ios/web/navigation/navigation_manager_impl.h" -#import "ios/web/public/navigation/navigation_manager.h" -#include "ios/web/public/navigation/referrer.h" -#import "ios/web/public/session/crw_session_storage.h" -#import "ios/web/public/session/serializable_user_data_manager.h" -#include "ios/web/public/test/scoped_testing_web_client.h" #include "ios/web/public/test/web_task_environment.h" #include "ios/web/public/thread/web_thread.h" -#import "ios/web/web_state/web_state_impl.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/gtest_mac.h" #include "testing/platform_test.h" -#import "third_party/ocmock/OCMock/OCMock.h" -#include "third_party/ocmock/gtest_support.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -60,7 +33,6 @@ TabModelTest() : scoped_browser_state_manager_( std::make_unique<TestChromeBrowserStateManager>(base::FilePath())), - web_client_(std::make_unique<ChromeWebClient>()), web_state_list_delegate_( std::make_unique<BrowserWebStateListDelegate>()), web_state_list_( @@ -132,7 +104,6 @@ protected: web::WebTaskEnvironment task_environment_; IOSChromeScopedTestingChromeBrowserStateManager scoped_browser_state_manager_; - web::ScopedTestingWebClient web_client_; std::unique_ptr<WebStateListDelegate> web_state_list_delegate_; std::unique_ptr<WebStateList> web_state_list_; std::unique_ptr<Browser> browser_;
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/BUILD.gn index 0039048..cc9c176 100644 --- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/BUILD.gn
@@ -39,3 +39,31 @@ "advanced_settings_signin_constants.mm", ] } + +source_set("unit_tests") { + configs += [ "//build/config/compiler:enable_arc" ] + testonly = true + sources = [ "advanced_settings_signin_mediator_unittest.mm" ] + deps = [ + ":advanced_settings_signin", + "//base/test:test_support", + "//components/autofill/core/common", + "//components/prefs", + "//components/prefs:test_support", + "//components/sync/driver:test_support", + "//components/sync_preferences", + "//components/sync_preferences:test_support", + "//ios/chrome/app/strings", + "//ios/chrome/browser/browser_state:test_support", + "//ios/chrome/browser/main:test_support", + "//ios/chrome/browser/prefs:browser_prefs", + "//ios/chrome/browser/signin", + "//ios/chrome/browser/signin:test_support", + "//ios/chrome/browser/sync", + "//ios/chrome/browser/sync:test_support", + "//ios/chrome/browser/ui/authentication", + "//ios/public/provider/chrome/browser/signin:fake_chrome_identity", + "//ios/public/provider/chrome/browser/signin:test_support", + "//ios/web/public/test", + ] +}
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm new file mode 100644 index 0000000..49d37b0 --- /dev/null +++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
@@ -0,0 +1,180 @@ +// Copyright 2020 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 "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator.h" + +#import <UIKit/UIKit.h> + +#import "base/test/task_environment.h" +#import "components/autofill/core/common/autofill_prefs.h" +#import "components/prefs/pref_registry_simple.h" +#import "components/prefs/testing_pref_service.h" +#import "components/signin/public/base/signin_pref_names.h" +#import "components/sync/driver/mock_sync_service.h" +#import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#import "ios/chrome/browser/signin/authentication_service_factory.h" +#import "ios/chrome/browser/signin/authentication_service_fake.h" +#import "ios/chrome/browser/sync/profile_sync_service_factory.h" +#import "ios/chrome/browser/sync/sync_setup_service_factory.h" +#import "ios/chrome/browser/sync/sync_setup_service_mock.h" +#import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h" +#import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h" +#import "testing/platform_test.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +using syncer::MockSyncService; +using syncer::SyncService; +using testing::Return; + +namespace { +// Constants for configuring a FakeChromeIdentity. +const char kTestGaiaID[] = "fooID"; +const char kTestEmail[] = "foo@gmail.com"; + +std::unique_ptr<KeyedService> CreateMockSyncService( + web::BrowserState* context) { + return std::make_unique<MockSyncService>(); +} + +std::unique_ptr<KeyedService> CreateMockSyncSetupService( + web::BrowserState* context) { + ChromeBrowserState* browser_state = + ChromeBrowserState::FromBrowserState(context); + return std::make_unique<SyncSetupServiceMock>( + ProfileSyncServiceFactory::GetForBrowserState(browser_state)); +} +} // namespace + +class AdvancedSettingsSigninMediatorTest : public PlatformTest { + public: + AdvancedSettingsSigninMediatorTest() + : browser_state_(TestChromeBrowserState::Builder().Build()) {} + + void SetUp() override { + PlatformTest::SetUp(); + + identity_ = [FakeChromeIdentity identityWithEmail:@"foo1@gmail.com" + gaiaID:@"foo1ID" + name:@"Fake Foo 1"]; + identity_service()->AddIdentity(identity_); + + TestChromeBrowserState::Builder builder; + builder.AddTestingFactory( + AuthenticationServiceFactory::GetInstance(), + base::BindRepeating( + &AuthenticationServiceFake::CreateAuthenticationService)); + builder.AddTestingFactory(ProfileSyncServiceFactory::GetInstance(), + base::BindRepeating(&CreateMockSyncService)); + builder.AddTestingFactory(SyncSetupServiceFactory::GetInstance(), + base::BindRepeating(&CreateMockSyncSetupService)); + browser_state_ = builder.Build(); + + mediator_ = [[AdvancedSettingsSigninMediator alloc] + initWithSyncSetupService:sync_setup_service() + authenticationService:authentication_service() + syncService:sync_service() + prefService:GetPrefService()]; + + sync_setup_service_mock_ = + static_cast<SyncSetupServiceMock*>(sync_setup_service()); + authentication_service_fake_ = + static_cast<AuthenticationServiceFake*>(authentication_service()); + } + + // Registers account preferences that will be used in reauthentication. + PrefService* GetPrefService() { + TestingPrefServiceSimple* prefs = new TestingPrefServiceSimple(); + PrefRegistrySimple* registry = prefs->registry(); + registry->RegisterStringPref(prefs::kGoogleServicesLastUsername, + kTestEmail); + registry->RegisterStringPref(prefs::kGoogleServicesLastAccountId, + kTestGaiaID); + registry->RegisterBooleanPref(autofill::prefs::kAutofillWalletImportEnabled, + false); + return prefs; + } + + // Identity services. + AuthenticationService* authentication_service() { + return AuthenticationServiceFactory::GetForBrowserState( + browser_state_.get()); + } + + SyncSetupService* sync_setup_service() { + return SyncSetupServiceFactory::GetForBrowserState(browser_state_.get()); + } + + SyncService* sync_service() { + return ProfileSyncServiceFactory::GetForBrowserState(browser_state_.get()); + } + + ios::FakeChromeIdentityService* identity_service() { + return ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); + } + + protected: + // Needed for test browser state created by TestChromeBrowserState(). + base::test::TaskEnvironment environment_; + std::unique_ptr<TestChromeBrowserState> browser_state_; + FakeChromeIdentity* identity_ = nullptr; + + AdvancedSettingsSigninMediator* mediator_ = nil; + + SyncSetupServiceMock* sync_setup_service_mock_ = nullptr; + AuthenticationServiceFake* authentication_service_fake_ = nullptr; +}; + +// Tests that a user is authenticated and synced when sync is enabled and +// sign-in is successful. +TEST_F(AdvancedSettingsSigninMediatorTest, + saveUserPreferenceSigninSuccessSyncEnabled) { + EXPECT_CALL(*sync_setup_service_mock_, IsSyncEnabled).WillOnce(Return(true)); + EXPECT_CALL(*sync_setup_service_mock_, + SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM)); + + authentication_service_fake_->SignIn(identity_); + [mediator_ saveUserPreferenceForSigninResult:SigninCoordinatorResultSuccess]; + + ASSERT_TRUE(authentication_service_fake_->IsAuthenticated()); +} + +// Tests that a user is authenticated but not synced when sync is disabled and +// sign-in is successful. +TEST_F(AdvancedSettingsSigninMediatorTest, + saveUserPreferenceSigninSuccessSyncDisabled) { + EXPECT_CALL(*sync_setup_service_mock_, IsSyncEnabled).WillOnce(Return(false)); + EXPECT_CALL(*sync_setup_service_mock_, + SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM)) + .Times(0); + + authentication_service_fake_->SignIn(identity_); + [mediator_ saveUserPreferenceForSigninResult:SigninCoordinatorResultSuccess]; + + ASSERT_TRUE(authentication_service_fake_->IsAuthenticated()); +} + +// Tests that a user is not authenticated when sign-in is canceled. +TEST_F(AdvancedSettingsSigninMediatorTest, saveUserPreferenceSigninCanceled) { + authentication_service_fake_->SignIn(identity_); + [mediator_ + saveUserPreferenceForSigninResult:SigninCoordinatorResultCanceledByUser]; + + ASSERT_FALSE(authentication_service_fake_->IsAuthenticated()); +} + +// Tests that a user's authentication does not change when sign-in is +// interrupted. +TEST_F(AdvancedSettingsSigninMediatorTest, + saveUserPreferenceSigninInterrupted) { + authentication_service_fake_->SignIn(identity_); + [mediator_ + saveUserPreferenceForSigninResult:SigninCoordinatorResultInterrupted]; + + ASSERT_TRUE(authentication_service_fake_->IsAuthenticated()); +}
diff --git a/ios/chrome/browser/ui/first_run/first_run_egtest.mm b/ios/chrome/browser/ui/first_run/first_run_egtest.mm index 11e31060..f431000 100644 --- a/ios/chrome/browser/ui/first_run/first_run_egtest.mm +++ b/ios/chrome/browser/ui/first_run/first_run_egtest.mm
@@ -51,6 +51,7 @@ - (void)tearDown { [super tearDown]; + [FirstRunAppInterface setUMACollectionEnabled:NO]; [FirstRunAppInterface resetUMACollectionEnabledByDefault]; } @@ -113,22 +114,21 @@ [[EarlGrey selectElementWithMatcher:FirstRunOptInAcceptButton()] performAction:grey_tap()]; - GREYAssert([FirstRunAppInterface isUMACollectionEnabled] != - [FirstRunAppInterface isUMACollectionEnabledByDefault], - @"Metrics reporting pref is incorrect."); + GREYAssertNotEqual([FirstRunAppInterface isUMACollectionEnabled], + [FirstRunAppInterface isUMACollectionEnabledByDefault], + @"Metrics reporting pref is incorrect."); } // Dismisses the first run screens. -// TODO(crbug.com/1061085): This test is flaky and has timeout. -- (void)FLAKY_testDismissFirstRun { +- (void)testDismissFirstRun { [FirstRunAppInterface showFirstRunUI]; [[EarlGrey selectElementWithMatcher:FirstRunOptInAcceptButton()] performAction:grey_tap()]; - GREYAssert([FirstRunAppInterface isUMACollectionEnabled] == - [FirstRunAppInterface isUMACollectionEnabledByDefault], - @"Metrics reporting does not match."); + GREYAssertEqual([FirstRunAppInterface isUMACollectionEnabled], + [FirstRunAppInterface isUMACollectionEnabledByDefault], + @"Metrics reporting does not match."); [[EarlGrey selectElementWithMatcher:SkipSigninButton()] performAction:grey_tap()];
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.h b/ios/chrome/browser/ui/main/browser_view_wrangler.h index 4aa2876c..0a57ab7 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.h +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.h
@@ -11,13 +11,12 @@ #import "ios/chrome/browser/ui/main/browser_interface_provider.h" @protocol ApplicationCommands; +class AppUrlLoadingService; @class BrowserCoordinator; @protocol BrowsingDataCommands; class ChromeBrowserState; @protocol WebStateListObserving; -class AppUrlLoadingService; - namespace { // Preference key used to store which profile is current. @@ -56,10 +55,6 @@ // immediately after initialization. - (void)createMainBrowser; -// Update the device sharing manager. This should be done after updates to the -// tab model. This class creates and manages the state of the sharing manager. -- (void)updateDeviceSharingManager; - // Destroy and rebuild the incognito Browser. - (void)destroyAndRebuildIncognitoBrowser;
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm index f47299e..dd23365e 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -10,8 +10,7 @@ #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/crash_report/crash_report_helper.h" -#import "ios/chrome/browser/device_sharing/device_sharing_manager.h" -#import "ios/chrome/browser/device_sharing/device_sharing_manager_factory.h" +#import "ios/chrome/browser/device_sharing/device_sharing_browser_agent.h" #import "ios/chrome/browser/main/browser.h" #import "ios/chrome/browser/main/browser_list.h" #import "ios/chrome/browser/main/browser_list_factory.h" @@ -24,7 +23,6 @@ #import "ios/chrome/browser/ui/browser_view/browser_view_controller.h" #import "ios/chrome/browser/ui/browser_view/browser_view_controller_dependency_factory.h" #import "ios/chrome/browser/url_loading/app_url_loading_service.h" -#import "ios/chrome/browser/web_state_list/active_web_state_observation_forwarder.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" #import "ios/web/public/web_state.h" @@ -93,7 +91,7 @@ @end -@interface BrowserViewWrangler () <WebStateListObserving, CRWWebStateObserver> { +@interface BrowserViewWrangler () { ChromeBrowserState* _browserState; __weak id<ApplicationCommands> _applicationCommandEndpoint; __weak id<BrowsingDataCommands> _browsingDataCommandEndpoint; @@ -102,15 +100,7 @@ std::unique_ptr<Browser> _mainBrowser; std::unique_ptr<Browser> _otrBrowser; - std::unique_ptr<WebStateListObserverBridge> _webStateListObserver; std::unique_ptr<WebStateListObserverBridge> _webStateListForwardingObserver; - // Bridge to observe WebState from Objective-C. This observer will be used to - // only monitor active webStates. - std::unique_ptr<web::WebStateObserverBridge> _activeWebStateObserver; - // Forwards observer methods for The active WebState in each WebStateList - // monitored by the BrowserViewWrangler. - std::map<WebStateList*, std::unique_ptr<ActiveWebStateObservationForwarder>> - _activeWebStateObservationForwarders; } @property(nonatomic, strong, readwrite) WrangledBrowser* mainInterface; @@ -161,11 +151,8 @@ _applicationCommandEndpoint = applicationCommandEndpoint; _browsingDataCommandEndpoint = browsingDataCommandEndpoint; _appURLLoadingService = appURLLoadingService; - _webStateListObserver = std::make_unique<WebStateListObserverBridge>(self); _webStateListForwardingObserver = std::make_unique<WebStateListObserverBridge>(observer); - _activeWebStateObserver = - std::make_unique<web::WebStateObserverBridge>(self); } return self; } @@ -217,8 +204,9 @@ _currentInterface = interface; - // The internal state of the Handoff Manager depends on the current BVC. - [self updateDeviceSharingManager]; + // Update the shared active URL for the new interface. + DeviceSharingBrowserAgent::FromBrowser(_currentInterface.browser) + ->UpdateForActiveBrowser(); } - (id<BrowserInterface>)incognitoInterface { @@ -259,8 +247,6 @@ breakpad::StopMonitoringTabStateForWebStateList(webStateList); breakpad::StopMonitoringURLsForWebStateList(webStateList); [tabModel disconnect]; - _activeWebStateObservationForwarders[webStateList] = nullptr; - webStateList->RemoveObserver(_webStateListObserver.get()); webStateList->RemoveObserver(_webStateListForwardingObserver.get()); } @@ -273,38 +259,12 @@ WebStateList* webStateList = self.otrBrowser->GetWebStateList(); breakpad::StopMonitoringTabStateForWebStateList(webStateList); [tabModel disconnect]; - _activeWebStateObservationForwarders[webStateList] = nullptr; - webStateList->RemoveObserver(_webStateListObserver.get()); webStateList->RemoveObserver(_webStateListForwardingObserver.get()); } _otrBrowser = std::move(otrBrowser); } -#pragma mark - BrowserViewInformation methods - -#pragma mark - WebStateListObserving - -- (void)webStateList:(WebStateList*)webStateList - didChangeActiveWebState:(web::WebState*)newWebState - oldWebState:(web::WebState*)oldWebState - atIndex:(int)atIndex - reason:(ActiveWebStateChangeReason)reason { - if (_isShutdown) - return; - - [self updateDeviceSharingManager]; -} - -#pragma mark - CRWWebStateObserver - -- (void)webState:(web::WebState*)webState - didFinishNavigation:(web::NavigationContext*)navigation { - // Active WebState has update the active URL. Update the DeviceSharingManager - // state. - [self updateDeviceSharingManager]; -} - #pragma mark - Mode Switching - (void)switchGlobalStateToMode:(ApplicationMode)mode { @@ -328,20 +288,6 @@ #pragma mark - Other public methods -- (void)updateDeviceSharingManager { - DeviceSharingManager* deviceSharingManager = - DeviceSharingManagerFactory::GetForBrowserState(_browserState); - web::WebState* activeWebState = - self.currentInterface.tabModel.webStateList->GetActiveWebState(); - // Set the active URL if there's an active webstate and the current BVC is not - // OTR. - if (activeWebState && !self.currentInterface.incognito) { - deviceSharingManager->UpdateActiveUrl(activeWebState->GetVisibleURL()); - } else { - deviceSharingManager->ClearActiveUrl(); - } -} - - (void)destroyAndRebuildIncognitoBrowser { // It is theoretically possible that a Tab has been added to |_otrTabModel| // since the deletion has been scheduled. It is unlikely to happen for real @@ -464,10 +410,6 @@ } - (void)addObserversToWebStateList:(WebStateList*)webStateList { - _activeWebStateObservationForwarders[webStateList] = - std::make_unique<ActiveWebStateObservationForwarder>( - webStateList, _activeWebStateObserver.get()); - webStateList->AddObserver(_webStateListObserver.get()); webStateList->AddObserver(_webStateListForwardingObserver.get()); breakpad::MonitorTabStateForWebStateList(webStateList); }
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index 28df250..1a070376 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -337,8 +337,6 @@ [self createInitialUI:(startInIncognito ? ApplicationMode::INCOGNITO : ApplicationMode::NORMAL)]; - [self.browserViewWrangler updateDeviceSharingManager]; - if (!self.mainController.startupParameters) { // The startup parameters may create new tabs or navigations. If the restore // infobar is displayed now, it may be dismissed immediately and the user
diff --git a/ios/chrome/browser/ui/main/test/stub_browser_interface_provider.mm b/ios/chrome/browser/ui/main/test/stub_browser_interface_provider.mm index 5dfd14d..700a67e2 100644 --- a/ios/chrome/browser/ui/main/test/stub_browser_interface_provider.mm +++ b/ios/chrome/browser/ui/main/test/stub_browser_interface_provider.mm
@@ -21,8 +21,4 @@ } return self; } - -- (void)cleanDeviceSharingManager { - // no-op -} @end
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm index 6ee9b5b..898955d3 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm
@@ -710,6 +710,9 @@ if ([field_ isPreEditing]) [field_ exitPreEditState]; this->SetUserText(str); + // Calling setText: does not trigger UIControlEventEditingChanged, so + // trigger that manually. + [field_ sendActionsForControlEvents:UIControlEventEditingChanged]; this->FocusOmnibox(); }
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.h b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.h index 74d9cd4..10de15e7 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.h +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.h
@@ -33,10 +33,6 @@ // It handles all the layout logic internally. @interface OmniboxPopupRowCell : UITableViewCell -// Layout this cell with the given data before displaying. -- (void)setupWithAutocompleteSuggestion:(id<AutocompleteSuggestion>)suggestion - incognito:(BOOL)incognito; - @property(nonatomic, weak) id<OmniboxPopupRowCellDelegate> delegate; // Used to fetch favicons. @property(nonatomic, weak) id<FaviconRetriever> faviconRetriever; @@ -57,6 +53,10 @@ // Image view for the leading image. @property(nonatomic, strong, readonly) OmniboxIconView* leadingIconView; +// Layout this cell with the given data before displaying. +- (void)setupWithAutocompleteSuggestion:(id<AutocompleteSuggestion>)suggestion + incognito:(BOOL)incognito; + @end #endif // IOS_CHROME_BROWSER_UI_OMNIBOX_POPUP_OMNIBOX_POPUP_ROW_CELL_H_
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm index d4c49a13..d49b602 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm
@@ -58,6 +58,13 @@ // Separator line for adjacent cells. @property(nonatomic, strong) UIView* separator; +// Stores the extra constraints activated when the cell enters deletion mode. +@property(nonatomic, strong) + NSArray<NSLayoutConstraint*>* deletingLayoutGuideConstraints; +// Stores the extra constrants activated when the cell is not in deletion mode. +@property(nonatomic, strong) + NSArray<NSLayoutConstraint*>* nonDeletingLayoutGuideConstraints; + @end @implementation OmniboxPopupRowCell @@ -124,6 +131,24 @@ } } +- (void)willTransitionToState:(UITableViewCellStateMask)state { + // |UITableViewCellStateDefaultMask| is actually 0, so it must be checked + // manually, and can't be checked with bitwise AND. + if (state == UITableViewCellStateDefaultMask) { + for (NSLayoutConstraint* constraint in self + .deletingLayoutGuideConstraints) { + DCHECK(constraint.active); + } + [self unfreezeLayoutGuidePositions]; + } else if (state & UITableViewCellStateShowingDeleteConfirmationMask) { + for (NSLayoutConstraint* constraint in self + .nonDeletingLayoutGuideConstraints) { + DCHECK(constraint.active); + } + [self freezeLayoutGuidePositions]; + } +} + #pragma mark - Property setter/getters - (void)setImageRetriever:(id<ImageRetriever>)imageRetriever { @@ -141,6 +166,11 @@ _omniboxSemanticContentAttribute = omniboxSemanticContentAttribute; self.contentView.semanticContentAttribute = omniboxSemanticContentAttribute; self.textStackView.semanticContentAttribute = omniboxSemanticContentAttribute; + // The layout guides may have been repositioned before this, so re-freeze. + if (self.showingDeleteConfirmation) { + [self unfreezeLayoutGuidePositions]; + [self freezeLayoutGuidePositions]; + } } - (BOOL)showsSeparator { @@ -256,17 +286,81 @@ stackViewToLayoutGuideTrailing.priority = higher; stackViewToCellTrailing.priority = highest; - [NSLayoutConstraint activateConstraints:@[ + // These constraints need to be removed when freezing the position of these + // views. See -freezeLayoutGuidePositions for the reason why. + self.nonDeletingLayoutGuideConstraints = @[ [self.leadingIconView.centerXAnchor constraintEqualToAnchor:imageLayoutGuide.centerXAnchor], - [self.leadingIconView.widthAnchor - constraintEqualToAnchor:imageLayoutGuide.widthAnchor], - [self.textStackView.leadingAnchor - constraintEqualToAnchor:textLayoutGuide.leadingAnchor], stackViewToLayoutGuideLeading, stackViewToLayoutGuideTrailing, + ]; + + [NSLayoutConstraint activateConstraints:@[ + [self.leadingIconView.widthAnchor + constraintEqualToAnchor:imageLayoutGuide.widthAnchor], stackViewToCellTrailing, ]]; + + [NSLayoutConstraint + activateConstraints:self.nonDeletingLayoutGuideConstraints]; +} + +// Freezes the position of any view that is positioned relative to the layout +// guides. When the view enters deletion mode (swipe-to-delete), the layout +// guides do not move. This means that the views in this cell positioned +// relative to the layout guide also do not move with the swipe. This method +// freezes those views with constraints relative to the cell content view so +// they do move with the swipe-to-delete. +- (void)freezeLayoutGuidePositions { + [NSLayoutConstraint + deactivateConstraints:self.nonDeletingLayoutGuideConstraints]; + + NamedGuide* imageLayoutGuide = + [NamedGuide guideWithName:kOmniboxLeadingImageGuide view:self]; + NamedGuide* textLayoutGuide = [NamedGuide guideWithName:kOmniboxTextFieldGuide + view:self]; + + // Layout guides should both be setup + DCHECK(imageLayoutGuide.isConstrained); + DCHECK(textLayoutGuide.isConstrained); + + self.deletingLayoutGuideConstraints = @[ + [self.leadingIconView.leadingAnchor + constraintEqualToAnchor:self.contentView.leadingAnchor + constant: + [self leadingSpaceForLayoutGuide:imageLayoutGuide]], + [self.textStackView.leadingAnchor + constraintEqualToAnchor:self.contentView.leadingAnchor + constant: + [self leadingSpaceForLayoutGuide:textLayoutGuide]], + ]; + + [NSLayoutConstraint activateConstraints:self.deletingLayoutGuideConstraints]; +} + +// Helper method for -freezeLayoutGuidePositions to calculate the actual +// distance between the leading edge of a layout guide and the leading edge +// of the cell's content view. +- (CGFloat)leadingSpaceForLayoutGuide:(UILayoutGuide*)layoutGuide { + CGRect layoutGuideFrame = + [layoutGuide.owningView convertRect:layoutGuide.layoutFrame + toView:self.contentView]; + return self.omniboxSemanticContentAttribute == + UISemanticContentAttributeForceRightToLeft + ? self.contentView.bounds.size.width - layoutGuideFrame.origin.x - + layoutGuideFrame.size.width + : layoutGuideFrame.origin.x; +} + +// Unfreezes the position of any view that is positioned relative to a layout +// guide. See the comment on -freezeLayoutGuidePositions for why that is +// necessary. +- (void)unfreezeLayoutGuidePositions { + [NSLayoutConstraint + deactivateConstraints:self.deletingLayoutGuideConstraints]; + self.deletingLayoutGuideConstraints = @[]; + [NSLayoutConstraint + activateConstraints:self.nonDeletingLayoutGuideConstraints]; } - (void)prepareForReuse {
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm index e626886..5636393 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm
@@ -141,6 +141,13 @@ base::TimeTicks::Now() - self.viewAppearanceTime); } +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator: + (id<UIViewControllerTransitionCoordinator>)coordinator { + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + [self.tableView setEditing:NO animated:NO]; +} + #pragma mark - AutocompleteResultConsumer - (void)updateMatches:(NSArray<id<AutocompleteSuggestion>>*)result
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h index 7ad5833c..e9aafe29 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h
@@ -8,7 +8,6 @@ #import <UIKit/UIKit.h> #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.h" -#import "ios/chrome/browser/ui/util/relaxed_bounds_constraints_hittest.h" #import "ios/web/public/ui/crw_web_view_scroll_view_proxy.h" class ChromeBrowserState; @@ -50,7 +49,7 @@ // revealing the actions. - (UIView*)toolbarSnapshotView; // The header view over which the overscroll action view will be added. -- (UIView<RelaxedBoundsConstraintsHitTestSupport>*)headerView; +- (UIView*)headerView; // Called to retrieve the top inset added to the scrollview for the header. - (CGFloat)overscrollActionsControllerHeaderInset: (OverscrollActionsController*)controller;
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 8901045..0a3c6f42 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -230,8 +230,6 @@ - (void)setup; // Resets scroll view's top content inset to |self.initialContentInset|. - (void)resetScrollViewTopContentInset; -// Access the headerView from the delegate. -- (UIView<RelaxedBoundsConstraintsHitTestSupport>*)headerView; // Locking/unlocking methods used to disable/enable the overscroll actions // with a reference count. - (void)incrementOverscrollActionLockForNotification: @@ -661,10 +659,6 @@ [self setScrollViewContentInset:insets]; } -- (UIView<RelaxedBoundsConstraintsHitTestSupport>*)headerView { - return [self.delegate headerView]; -} - - (void)incrementOverscrollActionLockForNotification:(NSNotification*)notif { if (![_lockIncrementNotifications containsObject:notif.name]) { [_lockIncrementNotifications addObject:notif.name]; @@ -759,11 +753,6 @@ [UIView beginAnimations:@"backgroundColor" context:NULL]; switch (self.overscrollState) { case OverscrollState::NO_PULL_STARTED: { - UIView<RelaxedBoundsConstraintsHitTestSupport>* headerView = - [self headerView]; - if ([headerView - respondsToSelector:@selector(setHitTestBoundsContraintRelaxed:)]) - [headerView setHitTestBoundsContraintRelaxed:NO]; [self.overscrollActionView removeFromSuperview]; SetViewFrameHeight( self.overscrollActionView, @@ -782,6 +771,8 @@ } break; case OverscrollState::STARTED_PULLING: { if (!self.overscrollActionView.superview && self.scrollViewDragged) { + UIView* headerView = [self.delegate headerView]; + DCHECK(headerView); if (previousOverscrollState == OverscrollState::NO_PULL_STARTED) { UIView* view = [self.delegate toolbarSnapshotView]; [self.overscrollActionView addSnapshotView:view]; @@ -795,14 +786,7 @@ self.overscrollActionView.backgroundView.alpha = 1; [self.overscrollActionView updateWithVerticalOffset:0]; [self.overscrollActionView updateWithHorizontalOffset:0]; - self.overscrollActionView.frame = [self headerView].bounds; - DCHECK([self headerView]); - UIView<RelaxedBoundsConstraintsHitTestSupport>* headerView = - [self headerView]; - if ([headerView - respondsToSelector:@selector( - setHitTestBoundsContraintRelaxed:)]) - [headerView setHitTestBoundsContraintRelaxed:YES]; + self.overscrollActionView.frame = headerView.bounds; [headerView addSubview:self.overscrollActionView]; [CATransaction commit]; }
diff --git a/ios/chrome/browser/ui/page_info/BUILD.gn b/ios/chrome/browser/ui/page_info/BUILD.gn index 458fbad..4f3174e 100644 --- a/ios/chrome/browser/ui/page_info/BUILD.gn +++ b/ios/chrome/browser/ui/page_info/BUILD.gn
@@ -8,6 +8,8 @@ "legacy_page_info_view_controller.h", "legacy_page_info_view_controller.mm", "page_info_consumer.h", + "page_info_cookies_view_controller.h", + "page_info_cookies_view_controller.mm", "page_info_description.h", "page_info_description.mm", "page_info_navigation_commands.h", @@ -34,6 +36,7 @@ "//ios/chrome/browser/ui/page_info:features", "//ios/chrome/browser/ui/page_info/requirements", "//ios/chrome/browser/ui/popup_menu", + "//ios/chrome/browser/ui/settings/cells", "//ios/chrome/browser/ui/table_view", "//ios/chrome/browser/ui/util", "//ios/chrome/common",
diff --git a/ios/chrome/browser/ui/page_info/features.h b/ios/chrome/browser/ui/page_info/features.h index 4152c0d..1ab84eea 100644 --- a/ios/chrome/browser/ui/page_info/features.h +++ b/ios/chrome/browser/ui/page_info/features.h
@@ -10,7 +10,7 @@ // Feature to enable the new design of the page info. extern const base::Feature kPageInfoRefactoring; -// Feature to allow user to manage third-party cookie blocking from the page +// Feature to allow user to manage cookie blocking from the page // info. extern const base::Feature kPageInfoChromeGuard;
diff --git a/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.h b/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.h new file mode 100644 index 0000000..c30c4a8 --- /dev/null +++ b/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.h
@@ -0,0 +1,15 @@ +// Copyright 2020 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 IOS_CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_COOKIES_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_COOKIES_VIEW_CONTROLLER_H_ + +#import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h" + +// View Controller for displaying Cookies information. +@interface PageInfoCookiesViewController : ChromeTableViewController + +@end + +#endif // IOS_CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_COOKIES_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.mm b/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.mm new file mode 100644 index 0000000..47612ba --- /dev/null +++ b/ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.mm
@@ -0,0 +1,60 @@ +// Copyright 2020 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 "ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.h" + +#import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" +#import "ios/chrome/browser/ui/util/uikit_ui_util.h" +#import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/constraints_ui_util.h" +#include "ios/chrome/grit/ios_strings.h" +#include "ui/base/l10n/l10n_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +typedef NS_ENUM(NSInteger, SectionIdentifier) { + SectionIdentifierContent = kSectionIdentifierEnumZero, +}; + +typedef NS_ENUM(NSInteger, ItemType) { + ItemTypeCookiesSwitch = kItemTypeEnumZero, +}; + +} // namespace + +@implementation PageInfoCookiesViewController + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = [UIColor colorNamed:kBackgroundColor]; + self.title = l10n_util::GetNSString(IDS_IOS_PAGE_INFO_COOKIES_TITLE); + + [self loadModel]; +} + +#pragma mark - ChromeTableViewController + +- (void)loadModel { + [super loadModel]; + [self.tableViewModel addSectionWithIdentifier:SectionIdentifierContent]; + + // Create the switch item. + SettingsSwitchItem* cookiesSwitchItem = + [[SettingsSwitchItem alloc] initWithType:ItemTypeCookiesSwitch]; + cookiesSwitchItem.text = + l10n_util::GetNSString(IDS_IOS_PAGE_INFO_COOKIES_SWITCH_LABEL); + [self.tableViewModel addItem:cookiesSwitchItem + toSectionWithIdentifier:SectionIdentifierContent]; + // TODO(crbug.com/1063824): Implement this. +} + +@end
diff --git a/ios/chrome/browser/ui/page_info/page_info_coordinator.mm b/ios/chrome/browser/ui/page_info/page_info_coordinator.mm index 47d3a45..ad3be48 100644 --- a/ios/chrome/browser/ui/page_info/page_info_coordinator.mm +++ b/ios/chrome/browser/ui/page_info/page_info_coordinator.mm
@@ -9,6 +9,7 @@ #import "ios/chrome/browser/reading_list/offline_page_tab_helper.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" +#import "ios/chrome/browser/ui/page_info/page_info_cookies_view_controller.h" #import "ios/chrome/browser/ui/page_info/page_info_mediator.h" #import "ios/chrome/browser/ui/page_info/page_info_navigation_commands.h" #import "ios/chrome/browser/ui/page_info/page_info_site_security_description.h" @@ -100,4 +101,11 @@ [self.navigationController pushViewController:viewController animated:YES]; } +- (void)showCookiesInfo { + PageInfoCookiesViewController* viewController = + [[PageInfoCookiesViewController alloc] + initWithStyle:UITableViewStylePlain]; + [self.navigationController pushViewController:viewController animated:YES]; +} + @end
diff --git a/ios/chrome/browser/ui/page_info/page_info_navigation_commands.h b/ios/chrome/browser/ui/page_info/page_info_navigation_commands.h index e1a434b9..e5a912d 100644 --- a/ios/chrome/browser/ui/page_info/page_info_navigation_commands.h +++ b/ios/chrome/browser/ui/page_info/page_info_navigation_commands.h
@@ -12,6 +12,9 @@ // Shows the site security information. - (void)showSiteSecurityInfo; +// Shows the cookies information. +- (void)showCookiesInfo; + @end #endif // IOS_CHROME_BROWSER_UI_PAGE_INFO_PAGE_INFO_NAVIGATION_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/page_info/page_info_view_controller.mm b/ios/chrome/browser/ui/page_info/page_info_view_controller.mm index 13f9091..7580088 100644 --- a/ios/chrome/browser/ui/page_info/page_info_view_controller.mm +++ b/ios/chrome/browser/ui/page_info/page_info_view_controller.mm
@@ -86,7 +86,7 @@ break; } case ItemTypeCookies: { - // TODO(crbug.com/1063824): Implement this. + [self.handler showCookiesInfo]; break; } default:
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_navigation_view.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_navigation_view.mm index f9a0431..18d2451 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_navigation_view.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_navigation_view.mm
@@ -68,10 +68,9 @@ // The duration of the animations played when the threshold is met. const CGFloat kSelectionAnimationDuration = 0.5; -UIColor* const kPageBackgroundColor = [UIColor colorNamed:kBackgroundColor]; -UIColor* const kSelectionCircleColor = - [UIColor colorNamed:kTextfieldBackgroundColor]; -UIColor* const kArrowColor = [UIColor colorNamed:kToolbarButtonColor]; +UIColor* SelectionCircleColor() { + return [UIColor colorNamed:kTextfieldBackgroundColor]; +} } @interface SideSwipeNavigationView () { @@ -107,14 +106,14 @@ image:(UIImage*)image { self = [super initWithFrame:frame]; if (self) { - self.backgroundColor = kPageBackgroundColor; + self.backgroundColor = [UIColor colorNamed:kBackgroundColor]; _canNavigate = canNavigate; if (canNavigate) { image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; const CGRect imageSize = CGRectMake(0, 0, 24, 24); _arrowView = [[UIImageView alloc] initWithImage:image]; - _arrowView.tintColor = kArrowColor; + _arrowView.tintColor = [UIColor colorNamed:kToolbarButtonColor]; _selectionCircleLayer = [self newSelectionCircleLayer]; [_arrowView setFrame:imageSize]; } @@ -167,7 +166,7 @@ if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection: previousTraitCollection]) { - _selectionCircleLayer.fillColor = kSelectionCircleColor.CGColor; + _selectionCircleLayer.fillColor = SelectionCircleColor().CGColor; } } } @@ -243,7 +242,7 @@ [_selectionCircleLayer removeAnimationForKey:@"transform"]; [_selectionCircleLayer setOpacity:0]; [_arrowView setAlpha:0]; - self.backgroundColor = kSelectionCircleColor; + self.backgroundColor = SelectionCircleColor(); block(); }]; @@ -426,11 +425,11 @@ selectionCircleLayer.bounds = bounds; selectionCircleLayer.backgroundColor = UIColor.clearColor.CGColor; if (@available(iOS 13, *)) { - UIColor* resolvedColor = [kSelectionCircleColor + UIColor* resolvedColor = [SelectionCircleColor() resolvedColorWithTraitCollection:self.traitCollection]; selectionCircleLayer.fillColor = resolvedColor.CGColor; } else { - selectionCircleLayer.fillColor = kSelectionCircleColor.CGColor; + selectionCircleLayer.fillColor = SelectionCircleColor().CGColor; } selectionCircleLayer.opacity = 0; selectionCircleLayer.transform =
diff --git a/ios/chrome/browser/ui/util/BUILD.gn b/ios/chrome/browser/ui/util/BUILD.gn index d8b7276..31b3363 100644 --- a/ios/chrome/browser/ui/util/BUILD.gn +++ b/ios/chrome/browser/ui/util/BUILD.gn
@@ -64,7 +64,6 @@ "pasteboard_util.mm", "property_animator_group.h", "property_animator_group.mm", - "relaxed_bounds_constraints_hittest.h", "reversed_animation.h", "reversed_animation.mm", "rtl_geometry.h",
diff --git a/ios/chrome/browser/ui/util/relaxed_bounds_constraints_hittest.h b/ios/chrome/browser/ui/util/relaxed_bounds_constraints_hittest.h deleted file mode 100644 index c891c68..0000000 --- a/ios/chrome/browser/ui/util/relaxed_bounds_constraints_hittest.h +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_UTIL_RELAXED_BOUNDS_CONSTRAINTS_HITTEST_H_ -#define IOS_CHROME_BROWSER_UI_UTIL_RELAXED_BOUNDS_CONSTRAINTS_HITTEST_H_ - -#import <Foundation/Foundation.h> - -// This protocol is meant to be implemented by subclasses of UIView. It exposes -// a property |hitTestBoundsContraintRelaxed| that when set to YES, inform that -// bounds constraints on the hitTest: method shouldn't be taken into account. -// The implementer of that protocol must override the hitTest: method and check -// for that property. -@protocol RelaxedBoundsConstraintsHitTestSupport<NSObject> - -@optional -@property(nonatomic, assign) BOOL hitTestBoundsContraintRelaxed; - -@end - -#endif // IOS_CHROME_BROWSER_UI_UTIL_RELAXED_BOUNDS_CONSTRAINTS_HITTEST_H_
diff --git a/ios/chrome/common/app_group/app_group_command.h b/ios/chrome/common/app_group/app_group_command.h index 04f3785..5df3b40 100644 --- a/ios/chrome/common/app_group/app_group_command.h +++ b/ios/chrome/common/app_group/app_group_command.h
@@ -32,7 +32,7 @@ // Prepares a command to search for |image|. - (void)prepareToSearchImage:(UIImage*)image; -// Launches the main app and execute the rceiver. +// Launches the main app and execute the receiver. - (void)executeInApp; @end
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb index 803af348..89590c4 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ar.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ar"> +<translation id="1211920912879022906">تم تسجيل الخروج من حسابك على Google مؤخرًا، ما تسبب في إزالة كلمات المرور المتزامنة. يُرجى تسجيل الدخول إلى Chrome وتفعيل المزامنة لعرضها هنا.</translation> +<translation id="2488806977964805203">إعداد رمز مرور</translation> +<translation id="2492201814011227831">يُرجى حفظ بعض كلمات المرور في Chrome للبدء. في حال سبق وأن خزّنت كلمات المرور في حسابك على Google، سجِّل الدخول إلى Chrome وفعِّل المزامنة لعرضها هنا.</translation> <translation id="3378542047369517508">الحصول على إذن بالوصول إلى جميع كلمات المرور المحفوظة في Chrome في أي تطبيق، وفي أي وقت</translation> <translation id="3660601625129812825">الملء التلقائي لكلمات المرور في Chrome</translation> +<translation id="4695654165345019650">الوصول إلى كلمات المرور...</translation> <translation id="5313485577007399362">تفعيل الملء التلقائي...</translation> <translation id="6494101196118320406">ما مِن كلمات مرور في Chrome</translation> +<translation id="6846906712230932330">لاستخدام كلمات المرور، يجب عليك أولاً إعداد رمز مرور على جهازك.</translation> <translation id="6965382102122355670">حسنًا</translation> <translation id="7870350829250847712">ما مِن كلمات مرور في Chrome</translation> +<translation id="8602573493531049509">تعرَّف على الطريقة</translation> <translation id="9087836967653912639">إلغاء</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_as.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_as.xtb index dff81f6..fbd9bb2f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_as.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_as.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="as"> +<translation id="1211920912879022906">আপুনি শেহতীয়াকৈ নিজৰ Google একাউণ্টৰ পৰা ছাইন আউট কৰিছে, যাৰ ফলত আপোনাৰ ছিংক হৈ থকা পাছৱৰ্ডসমূহ আঁতৰাই পেলোৱা হৈছে। সেইবোৰ ইয়াত দেখা পাবলৈ Chromeত ছাইন ইন কৰক আৰু ছিংক অন কৰক।</translation> +<translation id="2488806977964805203">এটা পাছক’ড ছেট কৰক</translation> +<translation id="2492201814011227831">আৰম্ভ কৰিবলৈ Chromeত কিছুমান পাছৱৰ্ড ছেভ কৰক। যদি ইতিমধ্যে আপোনাৰ Google একাউণ্টত ষ্ট’ৰ কৰি থোৱা পাছৱৰ্ড আছে, সেইবোৰ ইয়াত দেখা পাবলৈ Chromeত ছাইন ইন কৰক আৰু ছিংক অন কৰক।</translation> <translation id="3378542047369517508">আপুনি Chromeত ছেভ কৰা সকলো পাছৱৰ্ডৰ এক্সেছ পাওক। যিকোনো এপতে। যিকোনো সময়তে।</translation> <translation id="3660601625129812825">স্বয়ংক্রিয়ভাৱে পূৰ হোৱা Chromeৰ পাছৱৰ্ডসমূহ</translation> +<translation id="4695654165345019650">পাছৱৰ্ডসমূহ এক্সেছ কৰক...</translation> <translation id="5313485577007399362">স্বয়ংক্রিয়ভাৱে পূৰ হোৱা সুবিধাটো সক্ষম কৰক...</translation> <translation id="6494101196118320406">কোনো Chrome পাছৱৰ্ড নাই</translation> +<translation id="6846906712230932330">পাছৱৰ্ডসমূহ ব্যৱহাৰ কৰিবলৈ আপুনি প্ৰথমে নিজৰ ডিভাইচত এটা পাছক’ড ছেট কৰিবই লাগিব।</translation> <translation id="6965382102122355670">ঠিক আছে</translation> <translation id="7870350829250847712">কোনো Chrome পাছৱৰ্ড নাই</translation> +<translation id="8602573493531049509">কেনেকৈ কৰিব জানক</translation> <translation id="9087836967653912639">বাতিল কৰক</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb index 3fbc48b..93d1eb59 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_az.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="az"> +<translation id="1211920912879022906">Bu yaxınlarda Google Hesabınızdan çıxmısınız və nəticədə sinxronlaşdırılmış parollarınız silinib. Onları burada görmək üçün Chrome'a daxil olun və sinxronlaşdırmanı aktiv edin.</translation> +<translation id="2488806977964805203">Parol təyin edin</translation> +<translation id="2492201814011227831">Başlamaq üçün bəzi parolları Chrome'da yadda saxlayın. Artıq Google Hesabınızda saxlanmış parollarınız varsa, onları burada görmək üçün Chrome'a daxil olun və sinxronlaşdırmanı aktiv edin.</translation> <translation id="3378542047369517508">Chrome'da saxladığınız bütün parollara giriş əldə edin. İstənilən tətbiqdə. İstənilən vaxt.</translation> <translation id="3660601625129812825">Chrome Parollarını Avtomatik Doldurun</translation> +<translation id="4695654165345019650">Parollara Giriş...</translation> <translation id="5313485577007399362">Avtomatik doldurmanı aktivləşdirin...</translation> <translation id="6494101196118320406">Chrome Parolu Yoxdur</translation> +<translation id="6846906712230932330">Parollardan istifadə etmək üçün əvvəlcə cihazınızda parol təyin etməlisiniz.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Chrome Parolu Yoxdur</translation> +<translation id="8602573493531049509">İstifadə qaydasını öyrənin</translation> <translation id="9087836967653912639">Ləğv edin</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb index 11f18e4..2fac3b9 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_be.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="be"> +<translation id="1211920912879022906">Вы нядаўна выйшлі са свайго Уліковага запісу Google, і таму вашы сінхранізаваныя паролі перасталі паказвацца. Каб зноў пабачыць іх тут, увайдзіце ў Chrome і ўключыце сінхранізацыю.</translation> +<translation id="2488806977964805203">Задайце пароль</translation> +<translation id="2492201814011227831">Для пачатку захавайце некалькі пароляў у Chrome. Калі ў вашым Уліковым запісе Google ужо ёсць захаваныя паролі, то, каб убачыць іх тут, увайдзіце ў Chrome і ўключыце сінхранізацыю.</translation> <translation id="3378542047369517508">Доступ да ўсіх пароляў, захаваных у браўзеры Chrome, – у любой праграме, у любы час.</translation> <translation id="3660601625129812825">Уключыце функцыю аўтазапаўнення для пароляў Chrome</translation> +<translation id="4695654165345019650">Паролі доступу...</translation> <translation id="5313485577007399362">Уключыць Аўтазапаўненне...</translation> <translation id="6494101196118320406">Няма пароляў Chrome</translation> +<translation id="6846906712230932330">Каб выкарыстоўваць паролі, на прыладзе трэба спачатку наладзіць блакіроўку экрана.</translation> <translation id="6965382102122355670">ОК</translation> <translation id="7870350829250847712">Няма пароляў Chrome</translation> +<translation id="8602573493531049509">Даведацца больш</translation> <translation id="9087836967653912639">Скасаваць</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bn.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bn.xtb index d3fec5f4..6448f93d 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bn.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_bn.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bn"> +<translation id="1211920912879022906">আপনি সম্প্রতি নিজের Google অ্যাকাউন্ট থেকে সাইন-আউট করেছিলেন, যার ফলে আপনার সিঙ্ক করা পাসওয়ার্ডটি অ্যাকাউন্ট থেকে মুছে গেছে। Chrome-এ সাইন-ইন করুন এবং সিঙ্ক চালু করে নিজের পাসওয়ার্ড এখানে দেখুন।</translation> +<translation id="2488806977964805203">একটি পাসকোড সেট করুন</translation> +<translation id="2492201814011227831">শুরু করার জন্য Chrome-এ কিছু পাসওয়ার্ড সেভ করুন। যদি আপনার Google অ্যাকাউন্টে আগে থেকেই পাসওয়ার্ড সেভ করা থাকে, Chrome-এ সাইন-ইন করুন এবং সিঙ্ক চালু করে পাসওয়ার্ড দেখুন।</translation> <translation id="3378542047369517508">Chrome-এ আপনার সেভ করা সব পাসওয়ার্ড অ্যাক্সেস করুন। যেকোনও অ্যাপে। যেকোনও সময়।</translation> <translation id="3660601625129812825">Chrome-এর অটোফিল পাসওয়ার্ড</translation> +<translation id="4695654165345019650">পাসওয়ার্ড অ্যাক্সেস হওয়া...</translation> <translation id="5313485577007399362">অটোফিল চালু করুন...</translation> <translation id="6494101196118320406">Chrome-এ কোনও পাসওয়ার্ড নেই</translation> +<translation id="6846906712230932330">পাসওয়ার্ড ব্যবহার করার জন্য আপনার ডিভাইসে আপনাকে অবশ্যই একটি পাসকোড সেট করতে হবে।</translation> <translation id="6965382102122355670">ঠিক আছে</translation> <translation id="7870350829250847712">Chrome-এ কোনও পাসওয়ার্ড নেই</translation> +<translation id="8602573493531049509">কীভাবে করবেন জানুন</translation> <translation id="9087836967653912639">বাতিল করুন</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb index eef27e7..a885745 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_cs.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cs"> +<translation id="1211920912879022906">Nedávno jste se odhlásili z účtu Google a vaše synchronizovaná hesla přitom byla odstraněna. Chcete-li je zde zobrazit, přihlaste se do Chromu a zapněte synchronizaci.</translation> +<translation id="2488806977964805203">Nastavte heslo</translation> +<translation id="2492201814011227831">Chcete-li začít, uložte si v Chromu nějaká hesla. Pokud už máte hesla v účtu Google uložená, zobrazíte je zde tak, že se přihlásíte do Chromu a zapnete synchronizaci.</translation> <translation id="3378542047369517508">Získejte přístup ke všem heslům, která si uložíte do Chromu. V jakékoli aplikaci. Kdykoli.</translation> <translation id="3660601625129812825">Automatické vyplňování hesel Chromu</translation> +<translation id="4695654165345019650">Přístup k heslům...</translation> <translation id="5313485577007399362">Aktivovat Automatické vyplňování…</translation> <translation id="6494101196118320406">V Chromu nemáte žádná hesla</translation> +<translation id="6846906712230932330">Chcete-li použít hesla, musíte nejdříve na zařízení nastavit heslo.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">V Chromu nemáte žádná hesla</translation> +<translation id="8602573493531049509">Postup</translation> <translation id="9087836967653912639">Zrušit</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb index 49a5e22..9e04ed5 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_da.xtb
@@ -12,6 +12,6 @@ <translation id="6846906712230932330">Før du kan bruge adgangskoder, skal du angive en adgangskode på din enhed.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Ingen Chrome-adgangskoder</translation> -<translation id="8602573493531049509">Se, hvordan du gør</translation> +<translation id="8602573493531049509">Se hvordan</translation> <translation id="9087836967653912639">Annuller</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb index 92f016b3..b227b0f3 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_de.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="de"> +<translation id="1211920912879022906">Sie haben sich kürzlich von Ihrem Google-Konto abgemeldet, wodurch Ihre synchronisierten Passwörter entfernt wurden. Melden Sie sich in Chrome an und aktivieren Sie die Synchronisierung, damit sie wieder angezeigt werden.</translation> +<translation id="2488806977964805203">Sicherheitscode einrichten</translation> +<translation id="2492201814011227831">Sobald Sie Passwörter in Chrome gespeichert haben, werden sie hier angezeigt. Wenn in Ihrem Google-Konto bereits Passwörter gespeichert sind, melden Sie sich in Chrome an und aktivieren Sie die Synchronisierung, damit sie hier angezeigt werden.</translation> <translation id="3378542047369517508">Sie erhalten Zugriff auf alle Passwörter, die Sie in Chrome speichern. In jeder App, jederzeit.</translation> <translation id="3660601625129812825">Chrome-Passwörter automatisch ausfüllen</translation> +<translation id="4695654165345019650">Auf Passwörter zugreifen…</translation> <translation id="5313485577007399362">"Autom. ausfüllen" aktivieren…</translation> <translation id="6494101196118320406">Keine Chrome-Passwörter</translation> +<translation id="6846906712230932330">Sie müssen zuerst einen Sicherheitscode auf Ihrem Gerät einrichten, um Passwörter zu verwenden.</translation> <translation id="6965382102122355670">Ok</translation> <translation id="7870350829250847712">Keine Chrome-Passwörter</translation> +<translation id="8602573493531049509">Weitere Informationen</translation> <translation id="9087836967653912639">Abbrechen</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb index 39187b5f..2a73504 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es-419.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es-419"> +<translation id="1211920912879022906">Se quitaron las contraseñas sincronizadas porque hace poco saliste de tu Cuenta de Google. Para verlas aquí, accede a tu cuenta en Chrome y activa la sincronización.</translation> +<translation id="2488806977964805203">Establece una contraseña</translation> +<translation id="2492201814011227831">Guarda algunas contraseñas en Chrome para comenzar. Si ya tienes contraseñas almacenadas en tu Cuenta de Google, accede en Chrome y activa la sincronización para poder verlas.</translation> <translation id="3378542047369517508">Accede a todas las contraseñas que guardas en Chrome, desde cualquier app y en cualquier momento.</translation> <translation id="3660601625129812825">Autocompletar las contraseñas de Chrome</translation> +<translation id="4695654165345019650">Contraseñas de acceso…</translation> <translation id="5313485577007399362">Habilitar Autocompletar…</translation> <translation id="6494101196118320406">No hay contraseñas en Chrome</translation> +<translation id="6846906712230932330">Para usar las contraseñas, primero debes establecer una en tu dispositivo.</translation> <translation id="6965382102122355670">Aceptar</translation> <translation id="7870350829250847712">No hay contraseñas en Chrome</translation> +<translation id="8602573493531049509">Más información</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb index 9ae9342..59a5af0 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_es.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es"> +<translation id="1211920912879022906">Tus contraseñas sincronizadas se han quitado porque has cerrado sesión con tu cuenta de Google. Inicia sesión en Chrome y activa la sincronización para verlas aquí.</translation> +<translation id="2488806977964805203">Establecer una contraseña</translation> +<translation id="2492201814011227831">Guarda alguna contraseña en Chrome para empezar. Si ya tienes contraseñas almacenadas en tu cuenta de Google, inicia sesión en Chrome y activa la sincronización para verlas aquí.</translation> <translation id="3378542047369517508">Accede a todas las contraseñas que hayas guardado en Chrome. Desde cualquier aplicación y en cualquier momento.</translation> <translation id="3660601625129812825">Permite el autorelleno de contraseñas de Chrome</translation> +<translation id="4695654165345019650">Acceder a contraseñas...</translation> <translation id="5313485577007399362">Habilitar Autorrelleno...</translation> <translation id="6494101196118320406">No hay contraseñas de Chrome</translation> +<translation id="6846906712230932330">Para usar las contraseñas, primero debes establecer una contraseña en tu dispositivo.</translation> <translation id="6965382102122355670">Aceptar</translation> <translation id="7870350829250847712">No hay contraseñas de Chrome</translation> +<translation id="8602573493531049509">Más información</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb index b39c95af..0f416e53 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_eu.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="eu"> +<translation id="1211920912879022906">Duela gutxi amaitu duzu Google-ko kontuko saioa, eta, ondorioz, sinkronizatutako pasahitzak kendu egin dira. Haiek ikusteko, hasi saioa Chrome-n eta aktibatu sinkronizazioa.</translation> +<translation id="2488806977964805203">Ezarri pasakode bat</translation> +<translation id="2492201814011227831">Erabiltzen hasteko, gorde pasahitz batzuk Chrome-n. Google-ko kontuan gordeta badauzkazu pasahitzak dagoeneko, hasi saioa Chrome-n eta aktibatu sinkronizazioa haiek hemen ikusteko.</translation> <translation id="3378542047369517508">Atzitu Chrome-n gordeta dauzkazun pasahitz guztiak. Edozein aplikaziotatik, edonoiz.</translation> <translation id="3660601625129812825">Bete automatikoki Chrome-ko pasahitzak</translation> +<translation id="4695654165345019650">Atzitu pasahitzak…</translation> <translation id="5313485577007399362">Gaitu betetze automatikoa...</translation> <translation id="6494101196118320406">Ez dago pasahitzik Chrome-n</translation> +<translation id="6846906712230932330">Pasahitzak erabiltzeko, lehenik, pasakode bat ezarri behar duzu gailuan.</translation> <translation id="6965382102122355670">Ados</translation> <translation id="7870350829250847712">Ez dago pasahitzik Chrome-n</translation> +<translation id="8602573493531049509">Lortu argibideak</translation> <translation id="9087836967653912639">Utzi</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb index bb7c797..5c29da1 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fa.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fa"> +<translation id="1211920912879022906">بهتازگی از سیستم «حساب Google» خود خارج شدهاید که این کار باعث حذف شدن گذرواژههای همگامسازیشدهتان شده است. به سیستم Chrome وارد شوید و همگامسازی را روشن کنید تا گذرواژهها را اینجا ببینید.</translation> +<translation id="2488806977964805203">تنظیم گذرنویسه</translation> +<translation id="2492201814011227831">برای شروع، چند گذرواژه در Chrome ذخیره کنید. اگر قبلاً در «حساب Google» خود گذرواژه ذخیره کردهاید، به سیستم Chrome وارد شوید و همگامسازی را روشن کنید تا گذرواژهها را اینجا ببینید.</translation> <translation id="3378542047369517508">به همه گذرواژههایی که در Chrome ذخیره میکنید دسترسی داشته باشید. در هر برنامهای. هرزمانی.</translation> <translation id="3660601625129812825">تکمیل خودکار گذرواژههای Chrome</translation> +<translation id="4695654165345019650">دسترسی به گذرواژهها…</translation> <translation id="5313485577007399362">فعال کردن «تکمیل خودکار»…</translation> <translation id="6494101196118320406">گذرواژهای در Chrome نیست</translation> +<translation id="6846906712230932330">برای استفاده از گذرواژهها، ابتدا باید گذرنویسهای در دستگاه تنظیم کنید.</translation> <translation id="6965382102122355670">قبول</translation> <translation id="7870350829250847712">گذرواژهای در Chrome نیست</translation> +<translation id="8602573493531049509">با نحوه انجام کار آشنا شوید</translation> <translation id="9087836967653912639">لغو</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb index bf43979..47314f5 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fil.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fil"> +<translation id="1211920912879022906">Nag-sign out ka kamakailan sa iyong Google Account, na dahilan kaya naalis ang mga naka-sync mong password. Mag-sign in sa Chrome at i-on ang pag-sync para makita ang mga ito rito.</translation> +<translation id="2488806977964805203">Magtakda ng Passcode</translation> +<translation id="2492201814011227831">Mag-save ng ilang password sa Chrome para magsimula. Kung may mga password ka nang naka-store sa iyong Google Account, mag-sign in sa Chrome at i-on ang pag-sync para makita ang mga ito rito.</translation> <translation id="3378542047369517508">Magkaroon ng access sa lahat ng password na sine-save mo sa Chrome. Sa anumang app. Anumang oras.</translation> <translation id="3660601625129812825">I-autoFill ang Mga Password sa Chrome</translation> +<translation id="4695654165345019650">I-access ang Mga Password...</translation> <translation id="5313485577007399362">I-enable ang AutoFill...</translation> <translation id="6494101196118320406">Walang Password sa Chrome</translation> +<translation id="6846906712230932330">Para gumamit ng mga password, dapat ka munang magtakda ng passcode sa iyong device.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Walang Password sa Chrome</translation> +<translation id="8602573493531049509">Alamin Kung Paano</translation> <translation id="9087836967653912639">Kanselahin</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb index a35fbac..ba57b31 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_fr.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fr"> +<translation id="1211920912879022906">Vous vous êtes récemment déconnecté de votre compte Google, ce qui a entraîné la suppression de vos mots de passe synchronisés. Connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation> +<translation id="2488806977964805203">Définir un code secret</translation> +<translation id="2492201814011227831">Pour commencer, enregistrez des mots de passe dans Chrome. Si vous avez déjà stocké des mots de passe dans votre compte Google, connectez-vous à Chrome et activez la synchronisation pour les afficher ici.</translation> <translation id="3378542047369517508">Accédez à tous les mots de passe que vous enregistrez dans Chrome, à tout moment et quelle que soit l'application.</translation> <translation id="3660601625129812825">Remplir automatiquement les mots de passe Chrome</translation> +<translation id="4695654165345019650">Accéder aux mots de passe…</translation> <translation id="5313485577007399362">Activer la saisie automatique…</translation> <translation id="6494101196118320406">Aucun mot de passe Chrome</translation> +<translation id="6846906712230932330">Pour utiliser les mots de passe, vous devez d'abord définir un code secret sur votre appareil.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Aucun mot de passe Chrome</translation> +<translation id="8602573493531049509">En savoir plus</translation> <translation id="9087836967653912639">Annuler</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb index c250f81d8..ef813b0 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_gl.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="gl"> +<translation id="1211920912879022906">Pechaches sesión recentemente na túa Conta de Google, polo que se quitaron os contrasinais sincronizados. Inicia sesión en Chrome e activa a sincronización para velos aquí.</translation> +<translation id="2488806977964805203">Define un contrasinal</translation> +<translation id="2492201814011227831">Para comezar, garda algúns contrasinais en Chrome. Se xa tes contrasinais almacenados na túa Conta de Google, inicia sesión en Chrome e activa a sincronización para velos aquí.</translation> <translation id="3378542047369517508">Accede desde calquera aplicación e en calquera momento a todos os contrasinais gardados en Chrome.</translation> <translation id="3660601625129812825">Autocompletar os contrasinais de Chrome</translation> +<translation id="4695654165345019650">Acceso aos contrasinais…</translation> <translation id="5313485577007399362">Activar autocompletar…</translation> <translation id="6494101196118320406">Non hai ningún contrasinal de Chrome</translation> +<translation id="6846906712230932330">Para usar os contrasinais, en primeiro lugar debes definir un contrasinal no teu dispositivo.</translation> <translation id="6965382102122355670">Aceptar</translation> <translation id="7870350829250847712">Non hai ningún contrasinal de Chrome</translation> +<translation id="8602573493531049509">Máis información</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb index 95e248c..de2ce49 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_hu.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hu"> +<translation id="1211920912879022906">Nemrég kijelentkezett Google-fiókjából, amivel eltávolította a szinkronizált jelszavait. Ha szeretné látni itt a jelszavakat, jelentkezzen be a Chrome-ba, és kapcsolja be a szinkronizálást.</translation> +<translation id="2488806977964805203">Biztonsági kód beállítása</translation> +<translation id="2492201814011227831">A kezdéshez mentsen el néhány jelszót a Chrome-ban. Ha Google-fiókjában már vannak mentett jelszavak, jelentkezzen be a Chrome-ba, és kapcsolja be a szinkronizálást, hogy a jelszavak láthatók legyenek itt.</translation> <translation id="3378542047369517508">Hozzáférhet a Chrome böngészőben mentett összes jelszavához. Bármelyik alkalmazásban, bármikor.</translation> <translation id="3660601625129812825">Chrome-jelszavak automatikus kitöltése</translation> +<translation id="4695654165345019650">Hozzáférés a jelszavakhoz…</translation> <translation id="5313485577007399362">Automatikus kitöltés engedélyezése…</translation> <translation id="6494101196118320406">Nincsenek Chrome-jelszavak</translation> +<translation id="6846906712230932330">A jelszavak használatához előbb be kell állítania az eszközön a biztonsági kódot.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Nincsenek Chrome-jelszavak</translation> +<translation id="8602573493531049509">További információ</translation> <translation id="9087836967653912639">Mégse</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb index e45079d..4eade869 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_id.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="id"> +<translation id="1211920912879022906">Anda baru saja logout dari Akun Google, yang mengakibatkan sandi yang disinkronkan terhapus. Login ke Chrome dan aktifkan sinkronisasi untuk melihatnya di sini.</translation> +<translation id="2488806977964805203">Setel Kode Sandi</translation> +<translation id="2492201814011227831">Simpan sandi di Chrome untuk memulai. Jika Anda telah menyimpan sandi di Akun Google, login ke Chrome dan aktifkan sinkronisasi untuk melihatnya di sini.</translation> <translation id="3378542047369517508">Dapatkan akses ke semua sandi yang Anda simpan di Chrome. Di aplikasi apa saja. Kapan saja.</translation> <translation id="3660601625129812825">Isi Otomatis Sandi Chrome</translation> +<translation id="4695654165345019650">Akses Sandi ...</translation> <translation id="5313485577007399362">Aktifkan Isi Otomatis...</translation> <translation id="6494101196118320406">Tidak Ada Sandi Chrome</translation> +<translation id="6846906712230932330">Untuk menggunakan sandi, Anda harus menyetel kode sandi di perangkat terlebih dahulu.</translation> <translation id="6965382102122355670">Oke</translation> <translation id="7870350829250847712">Tidak Ada Sandi Chrome</translation> +<translation id="8602573493531049509">Pelajari Caranya</translation> <translation id="9087836967653912639">Batal</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb index 5ec6502..4731f15 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_is.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="is"> +<translation id="1211920912879022906">Þú skráðir þig nýlega út af Google reikningnum þínum og þá voru samstillt aðgangsorð fjarlægð. Skráðu þig inn í Chrome og kveiktu á samstillingu til að sjá þau hér.</translation> +<translation id="2488806977964805203">Veldu aðgangskóða</translation> +<translation id="2492201814011227831">Vistaðu aðgangsorð í Chrome til að hefjast handa. Ef aðgangsorð eru nú þegar vistuð á Google reikningnum þínum skaltu skrá þig inn í Chrome og kveikja á samstillingu til að sjá þau hér.</translation> <translation id="3378542047369517508">Fáðu aðgang að öllum aðgangsorðum sem þú vistar í Chrome. Í hvaða forriti sem er. Hvenær sem er.</translation> <translation id="3660601625129812825">Sjálfvirk útfylling aðgangsorða í Chrome</translation> +<translation id="4695654165345019650">Aðgangur að aðgangsorðum...</translation> <translation id="5313485577007399362">Kveikja á sjálfvirkri útfyllingu...</translation> <translation id="6494101196118320406">Engin aðgangsorð í Chrome</translation> +<translation id="6846906712230932330">Til að nota aðgangsorð þarftu fyrst að stilla aðgangskóða í tækinu þínu.</translation> <translation id="6965382102122355670">Í lagi</translation> <translation id="7870350829250847712">Engin aðgangsorð í Chrome</translation> +<translation id="8602573493531049509">Kynntu þér hvernig</translation> <translation id="9087836967653912639">Hætta</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb index cf4415e..d680e60e 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ja.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ja"> +<translation id="1211920912879022906">最近 Google アカウントからログアウトしたため、同期していたパスワードが削除されました。Chrome にログインして同期をオンにすると、ここにパスワードが表示されます。</translation> +<translation id="2488806977964805203">パスコードの設定</translation> +<translation id="2492201814011227831">開始するには Chrome でパスワードを保存してください。Google アカウントにパスワードをすでに保存している場合は、Chrome にログインして同期をオンにすると、パスワードがここに表示されます。</translation> <translation id="3378542047369517508">Chrome で保存したすべてのパスワードにはいつでもどのアプリからでもアクセスできます。</translation> <translation id="3660601625129812825">Chrome のパスワード自動入力</translation> +<translation id="4695654165345019650">パスワードにアクセスしています...</translation> <translation id="5313485577007399362">自動入力を有効にする...</translation> <translation id="6494101196118320406">Chrome パスワードはありません</translation> +<translation id="6846906712230932330">パスワードを使用するには、まずデバイスにパスコードを設定する必要があります。</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Chrome パスワードはありません</translation> +<translation id="8602573493531049509">詳細</translation> <translation id="9087836967653912639">キャンセル</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ka.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ka.xtb index 3feebd5..1a81706 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ka.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ka.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ka"> +<translation id="1211920912879022906">ახლახან თქვენი Google ანგარიშიდან გამოხვედით, რამაც სინქრონიზებული პაროლების ამოშლა გამოიწვია. მათ აქ სანახავად შედით Chrome-ში და ჩართეთ სინქრონიზაცია.</translation> +<translation id="2488806977964805203">დააყენეთ საიდუმლო კოდი</translation> +<translation id="2492201814011227831">დასაწყისისთვის შეინახეთ პაროლები Chrome-ში. თუ Google ანგარიშში პაროლები უკვე შენახული გაქვთ, მათ აქ სანახავად შედით Chrome-ში და ჩართეთ სინქრონიზაცია.</translation> <translation id="3378542047369517508">იქონიეთ წვდომა თქვენ მიერ Chrome-ში შენახულ ყველა პაროლზე. ნებისმიერი აპიდან, ნებისმიერ დროს.</translation> <translation id="3660601625129812825">Chrome-ის პაროლების ავტომატური შევსება</translation> +<translation id="4695654165345019650">პაროლებზე წვდომა...</translation> <translation id="5313485577007399362">ავტომატური შევსების ჩართვა...</translation> <translation id="6494101196118320406">Chrome-ის პაროლები არ არის</translation> +<translation id="6846906712230932330">პაროლების გამოსაყენებლად, პირველ რიგში, საჭიროა თქვენს მოწყობილობაზე საიდუმლო კოდის დაყენება.</translation> <translation id="6965382102122355670">კარგი</translation> <translation id="7870350829250847712">Chrome-ის პაროლები არ არის</translation> +<translation id="8602573493531049509">ინსტრუქცია</translation> <translation id="9087836967653912639">გაუქმება</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb index e48ad7a2d..b0691fc 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kk.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="kk"> +<translation id="1211920912879022906">Google есептік жазбасынан жақында шығып кеткендіктен, синхрондалған құпия сөздеріңіз өшірілді. Оларды осында көру үшін Chrome есептік жазбасына кіріп, синхрондауды іске қосыңыз.</translation> +<translation id="2488806977964805203">Рұқсат кодын орнату</translation> +<translation id="2492201814011227831">Бастау үшін Chrome браузерінде кейбір құпия сөздерді сақтаңыз. Google есептік жазбаңызда сақталған құпия сөздер болса, оларды көру үшін Chrome браузеріне кіріп, синхрондауды іске қосыңыз.</translation> <translation id="3378542047369517508">Chrome браузерінде сақталған барлық құпия сөзді пайдаланыңыз. Оларды кез келген қолданбада және уақытта пайдалана аласыз.</translation> <translation id="3660601625129812825">Chrome құпия сөздерін автотолтыру</translation> +<translation id="4695654165345019650">Құпия сөздерге кіріңіз...</translation> <translation id="5313485577007399362">Автотолтыруды қосу...</translation> <translation id="6494101196118320406">Chrome құпия сөздері жоқ</translation> +<translation id="6846906712230932330">Құпия сөздерді пайдалану үшін алдымен құрылғыға рұқсат кодын орнату керек.</translation> <translation id="6965382102122355670">Жарайды</translation> <translation id="7870350829250847712">Chrome құпия сөздері жоқ</translation> +<translation id="8602573493531049509">Әдісін білу</translation> <translation id="9087836967653912639">Бас тарту</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb index da84a0b3..cc310c4 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_km.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="km"> +<translation id="1211920912879022906">កាលពីពេលថ្មីៗនេះ អ្នកបានចេញពីគណនី Google របស់អ្នក ដែលបានលុបពាក្យសម្ងាត់ដែលអ្នកបានធ្វើសមកាលកម្ម។ សូមចូល Chrome រួចបើកសមកាលកម្ម ដើម្បីមើលពាក្យសម្ងាត់ទាំងនោះនៅទីនេះ។</translation> +<translation id="2488806977964805203">កំណត់លេខកូដសម្ងាត់</translation> +<translation id="2492201814011227831">រក្សាទុកពាក្យសម្ងាត់មួយចំនួននៅក្នុង Chrome ដើម្បីចាប់ផ្ដើម។ ប្រសិនបើអ្នកបានរក្សាទុកពាក្យសម្ងាត់នៅក្នុងគណនី Google របស់អ្នករួចហើយ សូមចូល Chrome រួចបើកសមកាលកម្ម ដើម្បីមើលពាក្យសម្ងាត់ទាំងនោះនៅទីនេះ។</translation> <translation id="3378542047369517508">មានសិទ្ធិចូលប្រើពាក្យសម្ងាត់ទាំងអស់ ដែលអ្នករក្សាទុកនៅក្នុង Chrome។ គ្រប់កម្មវិធី និងគ្រប់ពេលវេលា។</translation> <translation id="3660601625129812825">បំពេញពាក្យសម្ងាត់ Chrome ដោយស្វ័យប្រវត្តិ</translation> +<translation id="4695654165345019650">ចូលប្រើពាក្យសម្ងាត់...</translation> <translation id="5313485577007399362">បើកការបំពេញស្វ័យប្រវត្តិ...</translation> <translation id="6494101196118320406">គ្មានពាក្យសម្ងាត់ Chrome ទេ</translation> +<translation id="6846906712230932330">ដើម្បីប្រើពាក្យសម្ងាត់ អ្នកត្រូវតែកំណត់លេខកូដសម្ងាត់នៅលើឧបករណ៍របស់អ្នកជាមុនសិន។</translation> <translation id="6965382102122355670">យល់ព្រម</translation> <translation id="7870350829250847712">គ្មានពាក្យសម្ងាត់ Chrome ទេ</translation> +<translation id="8602573493531049509">ស្វែងយល់អំពីរបៀប</translation> <translation id="9087836967653912639">បោះបង់</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kn.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kn.xtb index 246cbda..c39f605 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kn.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_kn.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="kn"> +<translation id="1211920912879022906">ನಿಮ್ಮ ಸಿಂಕ್ ಮಾಡಿದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಕಾರಣವಾದ ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನೀವು ಇತ್ತೀಚೆಗೆ ಸೈನ್ ಔಟ್ ಆಗಿದ್ದೀರಿ. Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ ಮತ್ತು ಆ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಇಲ್ಲಿ ನೋಡಲು ಸಿಂಕ್ ಆನ್ ಮಾಡಿ.</translation> +<translation id="2488806977964805203">ಪಾಸ್ಕೋಡ್ ಹೊಂದಿಸಿ</translation> +<translation id="2492201814011227831">ಪ್ರಾರಂಭಿಸಲು, Chrome ನಲ್ಲಿ ಕೆಲವು ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಉಳಿಸಿ. ನೀವು ಈಗಾಗಲೇ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ್ದರೆ, ಅವುಗಳನ್ನು ಇಲ್ಲಿ ನೋಡಲು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ ಹಾಗೂ ಸಿಂಕ್ ಅನ್ನು ಆನ್ ಮಾಡಿ.</translation> <translation id="3378542047369517508">Chrome ನಲ್ಲಿ ನೀವು ಉಳಿಸುವ ಎಲ್ಲಾ ಪಾಸ್ವರ್ಡ್ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ. ಯಾವುದೇ ಆ್ಯಪ್ನಲ್ಲಿ, ಯಾವಾಗ ಬೇಕಾದರೂ.</translation> <translation id="3660601625129812825">ಸ್ವಯಂ ಭರ್ತಿ Chrome ಪಾಸ್ವರ್ಡ್ಗಳು</translation> +<translation id="4695654165345019650">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪ್ರವೇಶಿಸಿ...</translation> <translation id="5313485577007399362">ಸ್ವಯಂ ಭರ್ತಿ ಸಕ್ರಿಯಗೊಳಿಸಿ...</translation> <translation id="6494101196118320406">ಯಾವುದೇ Chrome ಪಾಸ್ವರ್ಡ್ಗಳಿಲ್ಲ</translation> +<translation id="6846906712230932330">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಬಳಸಲು, ನೀವು ಮೊದಲು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪಾಸ್ಕೋಡ್ ಅನ್ನು ಹೊಂದಿಸಬೇಕು.</translation> <translation id="6965382102122355670">ಸರಿ</translation> <translation id="7870350829250847712">ಯಾವುದೇ Chrome ಪಾಸ್ವರ್ಡ್ಗಳಿಲ್ಲ</translation> +<translation id="8602573493531049509">ಹೇಗೆ ಎಂಬುದನ್ನು ತಿಳಿದುಕೊಳ್ಳಿ</translation> <translation id="9087836967653912639">ರದ್ದುಗೊಳಿಸಿ</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb index c3666ea4..096f680 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ko.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ko"> +<translation id="1211920912879022906">최근 Google 계정에서 로그아웃했기 때문에 동기화된 비밀번호가 삭제되었습니다. Chrome에 로그인한 다음 동기화를 사용 설정하면 여기에서 비밀번호를 확인할 수 있습니다.</translation> +<translation id="2488806977964805203">비밀번호 설정</translation> +<translation id="2492201814011227831">Chrome에 비밀번호를 저장하여 시작해 보세요. 이미 Google 계정에 저장된 비밀번호가 있다면 Chrome에 로그인하고 동기화를 사용 설정하면 여기에서 비밀번호를 확인할 수 있습니다.</translation> <translation id="3378542047369517508">Chrome에 저장한 모든 비밀번호에 언제든지, 어떤 앱에서든 액세스할 수 있습니다.</translation> <translation id="3660601625129812825">Chrome 비밀번호 자동 완성</translation> +<translation id="4695654165345019650">비밀번호에 액세스합니다...</translation> <translation id="5313485577007399362">자동 완성 사용...</translation> <translation id="6494101196118320406">Chrome 비밀번호 없음</translation> +<translation id="6846906712230932330">비밀번호를 사용하려면 기기에 비밀번호를 설정해야 합니다.</translation> <translation id="6965382102122355670">확인</translation> <translation id="7870350829250847712">Chrome 비밀번호 없음</translation> +<translation id="8602573493531049509">방법 알아보기</translation> <translation id="9087836967653912639">취소</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb index d984cc22..ff081e91 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ky.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ky"> +<translation id="1211920912879022906">Жакында Google аккаунтуңуздан чыгып кеткениңизден улам, шайкештирилген сырсөздөрүңүз өчүрүлдү. Chrome'го кирип, аларды бул жерде көрүү үчүн шайкештирүүнү күйгүзүңүз.</translation> +<translation id="2488806977964805203">Өткөрүүчү кодду коюу</translation> +<translation id="2492201814011227831">Баштоо үчүн айрым сырсөздөрдү Chrome'до сактаңыз. Эгер Google аккаунтуңузга сакталган сырсөздөрүңүз болсо, Chrome'го кирип, аларды бул жерде көрүү үчүн шайкештирүүнү күйгүзүңүз.</translation> <translation id="3378542047369517508">Chrome'до сакталган бардык сырсөздөрдү колдонуу мүмкүнчүлүгүн алыңыз. Бардык колдонмолордо. Ар дайым.</translation> <translation id="3660601625129812825">Chrome сырсөздөрүн автоматтык түрдө толтуруңүз</translation> +<translation id="4695654165345019650">Сырсөздөргө мүмкүнчүлүк алуу...</translation> <translation id="5313485577007399362">Автоматтык түрдө толтурууну иштетүү...</translation> <translation id="6494101196118320406">Chrome сырсөздөрү жок</translation> +<translation id="6846906712230932330">Сырсөздөрдү колдонуу үчүн, адегенде, түзмөгүңүздөгү өткөрүүчү кодду жөндөп алышыңыз керек.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Chrome сырсөздөрү жок</translation> +<translation id="8602573493531049509">Үйрөнүп алыңыз</translation> <translation id="9087836967653912639">Жокко чыгаруу</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb index 19a4854..b52fd347 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mn.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="mn"> +<translation id="1211920912879022906">Та саяхан Google Бүртгэлээсээ гарсан тул таны синк хийсэн нууц үгсийг хассан. Тэднийг энд харахын тулд Chrome-д нэвтэрч, синк хийхийг асаана уу.</translation> +<translation id="2488806977964805203">Нууц код тохируулах</translation> +<translation id="2492201814011227831">Эхлүүлэхийн тул Chrome-д зарим нууц үгээ хадгална уу. Хэрэв танд Google Бүртгэлдээ хадгалсан нууц үгс хэдийн байгаа бол тэднийг энд харахын тулд Chrome-д нэвтэрч, синк хийхийг асаана уу.</translation> <translation id="3378542047369517508">Chrome-д хадгалсан бүх нууц үгэндээ хандаарай. Дурын апп дээр. Хүссэн үедээ.</translation> <translation id="3660601625129812825">Chrome-н нууц үгийг автоматаар бөглөх</translation> +<translation id="4695654165345019650">Нууц үгнүүдэд хандах...</translation> <translation id="5313485577007399362">Автоматаар бөглөх хэсгийг идэвхжүүлэх...</translation> <translation id="6494101196118320406">Chrome-н нууц үг байхгүй</translation> +<translation id="6846906712230932330">Нууц үгсийг ашиглахын тулд та эхлээд төхөөрөмж дээрээ нууц код тохируулах ёстой.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Chrome-н нууц үг байхгүй</translation> +<translation id="8602573493531049509">Заавар харах</translation> <translation id="9087836967653912639">Цуцлах</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb index d5e6742..2f47b7db 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_mr.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="mr"> +<translation id="1211920912879022906">तुम्ही नुकतेच तुमच्या Google खाते मधून साइन आउट केले, ज्यामुळे तुमचे सिंक केलेले पासवर्ड काढले गेले. ते येथे पाहण्यासाठी Chrome मध्ये साइन इन करा आणि सिंक सुरू करा.</translation> +<translation id="2488806977964805203">पासकोड सेट करा</translation> +<translation id="2492201814011227831">सुरुवात करण्यासाठी Chrome मध्ये काही पासवर्ड सेव्ह करा. तुमच्याकडे आधीच तुमच्या Google खाते मध्ये स्टोअर केलेले पासवर्ड असल्यास, Chrome मध्ये साइन इन करा आणि ते येथे पाहण्यासाठी सिंक सुरू करा.</translation> <translation id="3378542047369517508">तुम्ही Chrome मध्ये सेव्ह करत असलेल्या पासवर्डचा अॅक्सेस मिळवा. कोणत्याही अॅपमध्ये. कोणत्याही वेळी.</translation> <translation id="3660601625129812825">ऑटोफिल Chrome पासवर्ड</translation> +<translation id="4695654165345019650">पासवर्ड अॅक्सेस करा...</translation> <translation id="5313485577007399362">ऑटोफिल सुरू करा...</translation> <translation id="6494101196118320406">Chrome पासवर्ड नाहीत</translation> +<translation id="6846906712230932330">पासवर्ड वापरण्यासाठी, तुम्ही आधी तुमच्या डिव्हाइसवर पासकोड सेट करणे आवश्यक आहे.</translation> <translation id="6965382102122355670">ठीक आहे</translation> <translation id="7870350829250847712">Chrome पासवर्ड नाहीत</translation> +<translation id="8602573493531049509">कसे ते जाणून घ्या</translation> <translation id="9087836967653912639">रद्द करा</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ne.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ne.xtb index e139d89..e69b3ec5 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ne.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ne.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ne"> +<translation id="1211920912879022906">तपाईंले हालसालै आफ्नो Google खाताबाट साइन आउट गर्नुभएको हुनाले तपाईंका सिंक गरिएका पासवर्डहरू हटाइए। आफ्ना सिंक गरिएका पासवर्डहरू यहाँ फेला पार्न Chrome मा साइन इन गरी सिंक गर्ने सुविधा सक्रिय गर्नुहोस्।</translation> +<translation id="2488806977964805203">कुनै पासकोड सेट गर्नुहोस्</translation> +<translation id="2492201814011227831">सुरु गर्न Chrome मा केही पासवर्डहरू सुरक्षित गर्नुहोस्। तपाईंले आफ्नो Google खातामा पासवर्डहरू सुरक्षित गरिसक्नुभएको छ भने ती पासवर्ड यहाँ फेला पार्न Chrome मा साइन इन गरी सिंक गर्नुहोस्।</translation> <translation id="3378542047369517508">तपाईंले Chrome मा सुरक्षित गर्ने सबै पासवर्डहरूमाथि पहुँच राख्नुहोस्। जुनसुकै अनुप्रयोगमा। जुनसुकै बेला।</translation> <translation id="3660601625129812825">Chrome का पासवर्डहरू स्वतः भर्नुहोस्</translation> +<translation id="4695654165345019650">पासवर्डहरू प्रयोग गर्नुहोस्...</translation> <translation id="5313485577007399362">स्वतः भरण सुविधा सक्षम पार्नुहोस्...</translation> <translation id="6494101196118320406">Chrome मा कुनै पनि पासवर्ड छैन</translation> +<translation id="6846906712230932330">पासवर्डहरू प्रयोग गर्न सर्वप्रथम तपाईंले आफ्नो यन्त्रमा अनिवार्य रूपमा कुनै पासकोड सेट गर्नु पर्छ।</translation> <translation id="6965382102122355670">ठिक छ</translation> <translation id="7870350829250847712">Chrome मा कुनै पनि पासवर्ड छैन</translation> +<translation id="8602573493531049509">यसो गर्ने तरिका सिक्नुहोस्</translation> <translation id="9087836967653912639">रद्द गर्नुहोस्</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_or.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_or.xtb index dbe70b5..da6bc1f 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_or.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_or.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="or"> +<translation id="1211920912879022906">ଆପଣ ବର୍ତ୍ତମାନ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରୁ ସାଇନ୍ ଆଉଟ୍ କରିଛନ୍ତି, ଯାହା ଆପଣଙ୍କ ସିଙ୍କ୍ କରାଯାଇଥିବା ପାସୱାର୍ଡଗୁଡ଼ିକୁ କାଢ଼ି ଦେଇଛି। Chromeରେ ସାଇନ୍ ଇନ୍ କରି ସେଗୁଡ଼ିକୁ ଏଠାରେ ଦେଖିବାକୁ ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ।</translation> +<translation id="2488806977964805203">ଏକ ପାସକୋଡ୍ ସେଟ୍ କରନ୍ତୁ</translation> +<translation id="2492201814011227831">ଆରମ୍ଭ କରିବାକୁ Chromeରେ କିଛି ପାସୱାର୍ଡ ସେଭ୍ କରନ୍ତୁ। ଯଦି ଆପଣଙ୍କ ପାଖରେ ପୂର୍ବରୁ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ପାସୱାର୍ଡଗୁଡ଼ିକ ଷ୍ଟୋର୍ ହୋଇ ରହିଛି, ତେବେ Chromeରେ ସାଇନ୍ ଇନ୍ କରି ସେଗୁଡ଼ିକୁ ଏଠାରେ ଦେଖିବାକୁ ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ।</translation> <translation id="3378542047369517508">ଆପଣ Chromeରେ ସେଭ୍ କରିଥିବା ସମସ୍ତ ପାସୱାର୍ଡକୁ ଆକ୍ସେସ୍ ପାଆନ୍ତୁ। ଯେ କୌଣସି ଆପରେ। ଯେ କୌଣସି ସମୟରେ।</translation> <translation id="3660601625129812825">AutoFill Chrome ପାସୱାର୍ଡ</translation> +<translation id="4695654165345019650">ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ…</translation> <translation id="5313485577007399362">AutoFill ସକ୍ଷମ କରନ୍ତୁ...</translation> <translation id="6494101196118320406">କୌଣସି Chrome ପାସୱାର୍ଡ ନାହିଁ</translation> +<translation id="6846906712230932330">ପାସୱାର୍ଡଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଆପଣ ନିଶ୍ଚିତ ରୂପେ ପ୍ରଥମେ ଏକ ପାସକୋଡ୍ ସେଟ୍ କରିବା ଆବଶ୍ୟକ।</translation> <translation id="6965382102122355670">ଓକେ ବଟନ୍</translation> <translation id="7870350829250847712">କୌଣସି Chrome ପାସୱାର୍ଡ ନାହିଁ</translation> +<translation id="8602573493531049509">କିପରି କରିବେ ଜାଣନ୍ତୁ</translation> <translation id="9087836967653912639">ବାତିଲ୍ କରନ୍ତୁ</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pa.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pa.xtb index b5301208..a63adeb3 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pa.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pa.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pa"> +<translation id="1211920912879022906">ਤੁਸੀਂ ਹਾਲ ਹੀ ਵਿੱਚ ਆਪਣੇ Google ਖਾਤੇ ਵਿੱਚੋਂ ਸਾਈਨ-ਆਊਟ ਕੀਤਾ ਹੈ, ਜਿਸ ਕਰਕੇ ਤੁਹਾਡੇ ਸਮਕਾਲੀਕਰਨ ਕੀਤੇ ਪਾਸਵਰਡ ਹਟ ਗਏ ਹਨ। Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਇੱਥੇ ਦੇਖਣ ਲਈ ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰੋ।</translation> +<translation id="2488806977964805203">ਕੋਈ ਪਾਸਕੋਡ ਸੈੱਟ ਕਰੋ</translation> +<translation id="2492201814011227831">ਸ਼ੁਰੂ ਕਰਨ ਲਈ Chrome ਵਿੱਚ ਕੁਝ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰੋ। ਜੇ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਪਾਸਵਰਡ ਸਟੋਰ ਕੀਤੇ ਹੋਏ ਹਨ, ਤਾਂ Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਇੱਥੇ ਦੇਖਣ ਲਈ ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰੋ।</translation> <translation id="3378542047369517508">Chrome ਵਿੱਚ ਆਪਣੇ ਰੱਖਿਅਤ ਕੀਤੇ ਸਾਰੇ ਪਾਸਵਰਡਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ। ਕਿਸੇ ਵੀ ਐਪ ਵਿੱਚ। ਕਿਸੇ ਵੀ ਵੇਲੇ।</translation> <translation id="3660601625129812825">ਆਟੋਫਿਲ Chrome ਪਾਸਵਰਡ</translation> +<translation id="4695654165345019650">ਪਾਸਵਰਡਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰੋ...</translation> <translation id="5313485577007399362">ਆਟੋਫਿਲ ਨੂੰ ਚਾਲੂ ਕਰੋ...</translation> <translation id="6494101196118320406">ਕੋਈ Chrome ਪਾਸਵਰਡ ਨਹੀਂ</translation> +<translation id="6846906712230932330">ਪਾਸਵਰਡਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ ਪਾਸਕੋਡ ਸੈੱਟ ਕਰਨਾ ਲਾਜ਼ਮੀ ਹੈ।</translation> <translation id="6965382102122355670">ਠੀਕ</translation> <translation id="7870350829250847712">ਕੋਈ Chrome ਪਾਸਵਰਡ ਨਹੀਂ</translation> +<translation id="8602573493531049509">ਤਰੀਕਾ ਜਾਣੋ</translation> <translation id="9087836967653912639">ਰੱਦ ਕਰੋ</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb index 9e85c22..df2342e8 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_pt-PT.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> +<translation id="1211920912879022906">Recentemente, terminou sessão na sua Conta Google, o que removeu as suas palavras-passe sincronizadas. Inicie sessão no Chrome e ative a sincronização para as ver aqui.</translation> +<translation id="2488806977964805203">Defina um código secreto</translation> +<translation id="2492201814011227831">Guarde algumas palavras-passe no Chrome para começar. Se já tiver palavras-passe armazenadas na sua Conta Google, inicie sessão no Chrome e ative a sincronização para as ver aqui.</translation> <translation id="3378542047369517508">Obtenha acesso a todas as palavras-passe que guardar no Chrome. Em qualquer app. Em qualquer altura.</translation> <translation id="3660601625129812825">Preenchimento automático de palavras-passe do Chrome</translation> +<translation id="4695654165345019650">A aceder a palavras-passe…</translation> <translation id="5313485577007399362">Ativar preenchimento automático…</translation> <translation id="6494101196118320406">Sem palavras-passe do Chrome</translation> +<translation id="6846906712230932330">Para utilizar palavras-passe, tem de definir primeiro um código secreto no dispositivo.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Sem palavras-passe do Chrome</translation> +<translation id="8602573493531049509">Saber como</translation> <translation id="9087836967653912639">Cancelar</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb index d06bd0c1..cd274a94 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ru.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ru"> +<translation id="1211920912879022906">Вы недавно вышли из своего аккаунта Google, в результате чего ваши синхронизированные пароли были удалены. Чтобы они появились здесь, войдите в Chrome и включите синхронизацию.</translation> +<translation id="2488806977964805203">Установите код доступа</translation> +<translation id="2492201814011227831">Для начала сохраните несколько паролей в Chrome. В вашем аккаунте Google уже есть сохраненные пароли? Чтобы они появились здесь, войдите в Chrome и включите синхронизацию.</translation> <translation id="3378542047369517508">Вы сможете использовать сохраненные в Chrome пароли в любом приложении.</translation> <translation id="3660601625129812825">Автозаполнение паролей Chrome</translation> +<translation id="4695654165345019650">Доступ к паролям…</translation> <translation id="5313485577007399362">Включить автозаполнение</translation> <translation id="6494101196118320406">Нет паролей Chrome</translation> +<translation id="6846906712230932330">Чтобы использовать пароли, установите на устройстве код доступа.</translation> <translation id="6965382102122355670">ОК</translation> <translation id="7870350829250847712">Нет паролей Chrome</translation> +<translation id="8602573493531049509">Подробнее</translation> <translation id="9087836967653912639">Отмена</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb index 23ab707..ed9abb1 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sq"> +<translation id="1211920912879022906">Ke dalë së fundi nga "Llogaria jote e Google", gjë që ka hequr fjalëkalimet e tua të sinkronizuara. Identifikohu në Chrome dhe aktivizo sinkronizimin për t'i parë këtu.</translation> +<translation id="2488806977964805203">Vendos një kod</translation> +<translation id="2492201814011227831">Ruaj disa fjalëkalime në Chrome që të fillosh. Nëse ke tashmë fjalëkalime të ruajtura në "Llogarinë tënde të Google", identifikohu në Chrome dhe aktivizo sinkronizimin për t'i parë ato këtu.</translation> <translation id="3378542047369517508">Merr qasjen te të gjitha fjalëkalimet që ruan në Chrome. Në çdo aplikacion. Në çdo kohë.</translation> <translation id="3660601625129812825">Plotëso automatikisht fjalëkalimet e Chrome</translation> +<translation id="4695654165345019650">Qasu te fjalëkalimet...</translation> <translation id="5313485577007399362">Aktivizo plotësimin automatik...</translation> <translation id="6494101196118320406">Nuk ka asnjë fjalëkalim të Chrome</translation> +<translation id="6846906712230932330">Për të përdorur fjalëkalimet, duhet të vendosësh në fillim një kod në pajisjen tënde.</translation> <translation id="6965382102122355670">Në rregull</translation> <translation id="7870350829250847712">Nuk ka asnjë fjalëkalim të Chrome</translation> +<translation id="8602573493531049509">Mëso se si</translation> <translation id="9087836967653912639">Anulo</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb index 6a6da0ac..aa3bd70 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sr.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr"> +<translation id="1211920912879022906">Недавно сте се одјавили са Google налога, чиме су уклоњене синхронизоване лозинке. Пријавите се у Chrome и укључите синхронизацију да бисте их видели овде.</translation> +<translation id="2488806977964805203">Подесите шифру</translation> +<translation id="2492201814011227831">Сачувајте неке лозинке у Chrome-у да бисте започели. Ако сте већ сачували лозинке на Google налогу, пријавите се у Chrome и укључите синхронизацију да би се приказале овде.</translation> <translation id="3378542047369517508">Добијте приступ свим лозинкама које чувате у Chrome-у. У било којој апликацији. У било ком тренутку.</translation> <translation id="3660601625129812825">Аутоматско попуњавање лозинки за Chrome</translation> +<translation id="4695654165345019650">Приступа се лозинкама...</translation> <translation id="5313485577007399362">Омогући аутоматско попуњавање...</translation> <translation id="6494101196118320406">Нема лозинки за Chrome</translation> +<translation id="6846906712230932330">Да бисте користили лозинке, прво морате да подесите шифру на уређају.</translation> <translation id="6965382102122355670">Потврди</translation> <translation id="7870350829250847712">Нема лозинки за Chrome</translation> +<translation id="8602573493531049509">Сазнајте како</translation> <translation id="9087836967653912639">Откажи</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb index 472f33c..8e0af76 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sv.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sv"> +<translation id="1211920912879022906">Du har nyligen loggat ut från Google-kontot. Samtidigt togs dina synkroniserade lösenord bort. Logga in i Chrome och aktivera synkronisering för att se dem här.</translation> +<translation id="2488806977964805203">Ställ in ett lösenord</translation> +<translation id="2492201814011227831">Spara några lösenord i Chrome för att komma igång. Om du redan har sparat lösenord i Google-kontot visas de här om du loggar in i Chrome och aktiverar synkronisering.</translation> <translation id="3378542047369517508">Få tillgång till alla lösenord du har sparat i Chrome – när som helst, i vilken app som helst.</translation> <translation id="3660601625129812825">Autofyll lösenord i Chrome</translation> +<translation id="4695654165345019650">Åtkomst till lösenord …</translation> <translation id="5313485577007399362">Aktivera Autofyll …</translation> <translation id="6494101196118320406">Inga lösenord i Chrome</translation> +<translation id="6846906712230932330">Du måste ställa in ett lösenord på enheten innan du kan använda lösenord här.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Inga lösenord i Chrome</translation> +<translation id="8602573493531049509">Läs mer</translation> <translation id="9087836967653912639">Avbryt</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb index ebcfe53..b4cadd6 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_te.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="te"> +<translation id="1211920912879022906">ఇటీవల మీ Google ఖాతా నుండి మీరు సైన్ అవుట్ చేశారు కాబట్టి, సింక్ చేసి ఉన్న మీ పాస్వర్డ్లు తీసివేయబడ్డాయి. వాటిని ఇక్కడ చూడటానికి Chromeలో సైన్ ఇన్ చేసి, సింక్ను ఆన్ చేయండి.</translation> +<translation id="2488806977964805203">పాస్కోడ్ను సెట్ చేయండి</translation> +<translation id="2492201814011227831">ప్రారంభించడానికి కొన్ని పాస్వర్డ్లను Chromeలో సేవ్ చేయండి. మీ Google ఖాతాలో పాస్వర్డ్లు ఏవైనా ఇదివరకే స్టోర్ అయి ఉంటే, వాటిని ఇక్కడ చూడటానికి Chromeలో సైన్ ఇన్ చేసి, సింక్ను ఆన్ చేయండి.</translation> <translation id="3378542047369517508">మీరు Chromeలో సేవ్ చేసే అన్ని పాస్వర్డ్లకు యాక్సెస్ పొందండి. ఏదైనా యాప్లో, ఎప్పుడైనా పొందండి.</translation> <translation id="3660601625129812825">Chrome పాస్వర్డ్లను ఆటోఫిల్ చేయండి</translation> +<translation id="4695654165345019650">పాస్వర్డ్లను యాక్సెస్ చేయడానికి...</translation> <translation id="5313485577007399362">ఆటోఫిల్ను ఎనేబుల్ చేయి...</translation> <translation id="6494101196118320406">Chrome పాస్వర్డ్లు లేవు</translation> +<translation id="6846906712230932330">పాస్వర్డ్లను ఉపయోగించడానికి, మీరు ముందుగా తప్పక మీ పరికరంలో పాస్కోడ్ను సెట్ చేయాలి.</translation> <translation id="6965382102122355670">సరే</translation> <translation id="7870350829250847712">Chrome పాస్వర్డ్లు లేవు</translation> +<translation id="8602573493531049509">ఎలాగో తెలుసుకోండి</translation> <translation id="9087836967653912639">రద్దు చేయి</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb index d28a464..2c503c8 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_tr.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="tr"> +<translation id="1211920912879022906">Kısa süre önce Google Hesabınızın oturumunu kapattığınızdan senkronize edilen şifreleriniz kaldırıldı. Chrome'da oturum açıp senkronizasyonu etkinleştirerek söz konusu şifreleri burada görebilirsiniz.</translation> +<translation id="2488806977964805203">Şifre Kodu Ayarlayın</translation> +<translation id="2492201814011227831">Başlamak için Chrome'a birkaç şifre kaydedin. Halihazırda Google Hesabınızda kayıtlı şifreleriniz varsa Chrome'da oturum açıp senkronizasyonu etkinleştirerek onları burada görebilirsiniz.</translation> <translation id="3378542047369517508">Chrome'da kaydettiğiniz tüm şifrelere erişim elde edin. Tüm uygulamalarda. Her zaman.</translation> <translation id="3660601625129812825">Otomatik Doldurma Chrome Şifreleri</translation> +<translation id="4695654165345019650">Erişim Şifreleri...</translation> <translation id="5313485577007399362">Otomatik Doldurmayı Etkinleştir...</translation> <translation id="6494101196118320406">Chrome Şifresi Yok</translation> +<translation id="6846906712230932330">Şifreleri kullanmak için öncelikle cihazınızda bir şifre kodu ayarlamanız gerekir.</translation> <translation id="6965382102122355670">Tamam</translation> <translation id="7870350829250847712">Chrome Şifresi Yok</translation> +<translation id="8602573493531049509">Nasıl Yapacağınızı Öğrenin</translation> <translation id="9087836967653912639">İptal</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb index cd01460..33f815c2 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_ur.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ur"> +<translation id="1211920912879022906">آپ حال میں ہی اپنے Google اکاؤنٹ سے سائن آؤٹ ہوئے ہیں جس سے آپ کے سنک کردہ پاس ورڈز ہٹ گئے۔ Chrome میں سائن ان کریں اور انہیں یہاں دیکھنے کے لیے مطابقت پذیری کو آن کریں۔</translation> +<translation id="2488806977964805203">ایک پاس کوڈ سیٹ کریں</translation> +<translation id="2492201814011227831">شروع کرنے کے لیے کچھ پاس ورڈز کو Chrome میں محفوظ کریں۔ اگر آپ کے پاس Google اکاؤنٹ میں پہلے سے ہی پاسورڈز اسٹور ہیں، تو Chrome میں سائن ان کریں اور انہیں یہاں دیکھنے کے لیے مطابقت پذیری کو آن کریں۔</translation> <translation id="3378542047369517508">Chrome میں محفوظ سبھی پاس ورڈز تک رسائی حاصل کریں۔ کسی بھی ایپ میں۔ کسی بھی وقت۔</translation> <translation id="3660601625129812825">آٹو فل Chrome پاس ورڈز</translation> +<translation id="4695654165345019650">پاسورڈز تک رسائی حاصل کریں...</translation> <translation id="5313485577007399362">آٹو فل فعال کریں...</translation> <translation id="6494101196118320406">کوئی Chrome پاس ورڈز نہیں</translation> +<translation id="6846906712230932330">پاس ورڈز استعمال کرنے کے ليے، آپ کو اپنے آلے پر پہلے پاس کوڈ سیٹ کرنا ہوگا۔</translation> <translation id="6965382102122355670">ٹھیک ہے</translation> <translation id="7870350829250847712">کوئی Chrome پاس ورڈز نہیں</translation> +<translation id="8602573493531049509">طریقہ جانیں</translation> <translation id="9087836967653912639">منسوخ کریں</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb index cd6d63f9..7ff8c559 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_uz.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="uz"> +<translation id="1211920912879022906">Yaqinda Google hisobingizdan chiqib ketdingiz va sinxronlangan parollaringiz olib tashlandi. Chrome hisobingizga kiring va sinxronizatsiyani yoqib, ularni shu yerda koʻrishingiz mumkin.</translation> +<translation id="2488806977964805203">Maxfiy kodni belgilang</translation> +<translation id="2492201814011227831">Ishni boshlash uchun Chrome ichiga bir-ikkita parolni saqlang. Agar Google hisobingizda parollar allaqachon saqlangan boʻlsa, Chrome hisobingizga kiring va sinxronizatsiyani yoqib, ularni shu yerda koʻrishingiz mumkin.</translation> <translation id="3378542047369517508">Chromeda saqlangan parollaringizdan istalgan joyda foydalaning. Istalgan ilovada, istalgan vaqtda.</translation> <translation id="3660601625129812825">Chrome parollarning avtomatik kiritilishi</translation> +<translation id="4695654165345019650">Parollarga ruxsat...</translation> <translation id="5313485577007399362">Avtomatik kiritish funksiyasini yoqish...</translation> <translation id="6494101196118320406">Hech qanday Chrome paroli topilmadi</translation> +<translation id="6846906712230932330">Parollarni ishlatish uchun qurilmangizni maxfiy kod bilan qulflang.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Hech qanday Chrome paroli topilmadi</translation> +<translation id="8602573493531049509">Batafsil axborot</translation> <translation id="9087836967653912639">Bekor qilish</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb index 21b2362..8be5cd6 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_vi.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="vi"> +<translation id="1211920912879022906">Gần đây, bạn đã đăng xuất khỏi Tài khoản Google của mình nên các mật khẩu mà bạn đồng bộ hóa đã bị xóa. Hãy đăng nhập vào Chrome rồi bật tính năng đồng bộ hóa để xem các mật khẩu đó tại đây.</translation> +<translation id="2488806977964805203">Đặt mật mã</translation> +<translation id="2492201814011227831">Lưu một số mật khẩu trong Chrome để bắt đầu. Nếu bạn đã lưu các mật khẩu trong Tài khoản Google của mình, hãy đăng nhập vào Chrome rồi bật tính năng đồng bộ hóa để xem các mật khẩu đó tại đây.</translation> <translation id="3378542047369517508">Có quyền sử dụng tất cả các mật khẩu mà bạn lưu trên Chrome trong mọi ứng dụng, bất cứ lúc nào.</translation> <translation id="3660601625129812825">Tự động điền mật khẩu Chrome</translation> +<translation id="4695654165345019650">Truy cập vào các mật khẩu...</translation> <translation id="5313485577007399362">Bật tính năng Tự động điền...</translation> <translation id="6494101196118320406">Không có mật khẩu Chrome</translation> +<translation id="6846906712230932330">Để sử dụng mật khẩu, trước tiên, bạn phải đặt mật mã trên thiết bị của mình.</translation> <translation id="6965382102122355670">OK</translation> <translation id="7870350829250847712">Không có mật khẩu Chrome</translation> +<translation id="8602573493531049509">Tìm hiểu cách thức</translation> <translation id="9087836967653912639">Hủy</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb index 3265e3b..15712a95 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-HK.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-HK"> +<translation id="1211920912879022906">您最近登出了 Google 帳戶,因此已同步處理的密碼已被移除。請登入 Chrome 並開啟同步功能,密碼便會在這裡顯示。</translation> +<translation id="2488806977964805203">設定密碼</translation> +<translation id="2492201814011227831">在 Chrome 中儲存一些密碼即可開始使用。如果您已在 Google 帳戶中儲存密碼,請登入 Chrome 並啟用同步功能,密碼便會在這裡顯示。</translation> <translation id="3378542047369517508">隨時存取在 Chrome 中儲存的所有密碼,且在任何應用程式中都能存取。</translation> <translation id="3660601625129812825">自動填入 Chrome 密碼</translation> +<translation id="4695654165345019650">存取密碼…</translation> <translation id="5313485577007399362">啟用自動填入功能…</translation> <translation id="6494101196118320406">沒有 Chrome 密碼</translation> +<translation id="6846906712230932330">如要使用密碼,您必須先在裝置上設定密碼。</translation> <translation id="6965382102122355670">確定</translation> <translation id="7870350829250847712">沒有 Chrome 密碼</translation> +<translation id="8602573493531049509">瞭解詳情</translation> <translation id="9087836967653912639">取消</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb index bdc10e20..98e23457 100644 --- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb +++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_zh-TW.xtb
@@ -1,11 +1,17 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> +<translation id="1211920912879022906">你最近登出了 Google 帳戶,因此已同步處理的密碼遭到移除。請登入 Chrome 並啟用同步功能,即可在這裡查看密碼。</translation> +<translation id="2488806977964805203">請設定通行碼</translation> +<translation id="2492201814011227831">在 Chrome 中儲存一些密碼即可開始使用。如果你已在 Google 帳戶中儲存密碼,請登入 Chrome 並啟用同步功能,即可在這裡查看密碼。</translation> <translation id="3378542047369517508">隨時都能使用自己儲存在 Chrome 中的所有密碼 (適用於任何應用程式)。</translation> <translation id="3660601625129812825">自動填入 Chrome 密碼</translation> +<translation id="4695654165345019650">存取密碼…</translation> <translation id="5313485577007399362">啟用自動填入功能…</translation> <translation id="6494101196118320406">沒有任何 Chrome 密碼</translation> +<translation id="6846906712230932330">你必須先在裝置上設定通行碼才能使用密碼。</translation> <translation id="6965382102122355670">確定</translation> <translation id="7870350829250847712">沒有任何 Chrome 密碼</translation> +<translation id="8602573493531049509">瞭解詳情</translation> <translation id="9087836967653912639">取消</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index 579bfe0..ae2c56c 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -205,6 +205,7 @@ "//ios/chrome/browser/overlays:unit_tests", "//ios/chrome/browser/overscroll_actions:unit_tests", "//ios/chrome/browser/passwords:unit_tests", + "//ios/chrome/browser/policy:unit_tests", "//ios/chrome/browser/prerender:unit_tests", "//ios/chrome/browser/reading_list:unit_tests", "//ios/chrome/browser/safe_browsing:unit_tests", @@ -228,6 +229,7 @@ "//ios/chrome/browser/ui/authentication/cells:unit_tests", "//ios/chrome/browser/ui/authentication/signin:unit_tests", "//ios/chrome/browser/ui/authentication/signin/add_account_signin:unit_tests", + "//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin:unit_tests", "//ios/chrome/browser/ui/authentication/signin/user_signin:unit_tests", "//ios/chrome/browser/ui/autofill/cells:unit_tests", "//ios/chrome/browser/ui/autofill/manual_fill:unit_tests",
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index c87f2f4..392f4a3b 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -76,7 +76,7 @@ executable_args = [ "--args-json", - "{\"test_args\": [\"--enable-features=ClearSyncedData\",]}", + "{\"test_args\": [\"--enable-features=ClearSyncedData\"]}", ] xctest = false }
diff --git a/ios/chrome/test/earl_grey2/smoke_egtest.mm b/ios/chrome/test/earl_grey2/smoke_egtest.mm index 585c525e..d687720 100644 --- a/ios/chrome/test/earl_grey2/smoke_egtest.mm +++ b/ios/chrome/test/earl_grey2/smoke_egtest.mm
@@ -256,7 +256,6 @@ relaunchPolicy:ForceRelaunchByCleanShutdown]; [[EarlGrey selectElementWithMatcher:grey_text(@"Restore")] assertWithMatcher:grey_notVisible()]; - [ChromeEarlGrey waitForMainTabCount:2]; } // Tests hard kill(crash) through AppLaunchManager.
diff --git a/ios/testing/earl_grey/coverage_utils.mm b/ios/testing/earl_grey/coverage_utils.mm index 02f921b..4da3ca7 100644 --- a/ios/testing/earl_grey/coverage_utils.mm +++ b/ios/testing/earl_grey/coverage_utils.mm
@@ -12,7 +12,7 @@ #endif #if BUILDFLAG(CLANG_PROFILING) -#include "base/test/profiling_utils.h" +#include "base/test/clang_profiling.h" extern "C" void __llvm_profile_reset_counters(void); #endif
diff --git a/ios/third_party/material_components_ios/BUILD.gn b/ios/third_party/material_components_ios/BUILD.gn index 8b56bc2f..1a01d30 100644 --- a/ios/third_party/material_components_ios/BUILD.gn +++ b/ios/third_party/material_components_ios/BUILD.gn
@@ -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("//build/config/ios/ios_sdk.gni") import("//build/config/ios/rules.gni") import("//build/config/locales.gni") import("//ios/third_party/features.gni") @@ -45,7 +46,9 @@ "src/components/AppBar/src/MDCAppBar.h", "src/components/AppBar/src/MDCAppBarContainerViewController.h", "src/components/AppBar/src/MDCAppBarNavigationController.h", + "src/components/AppBar/src/MDCAppBarNavigationControllerToBeDeprecatedDelegate.h", "src/components/AppBar/src/MDCAppBarViewController.h", + "src/components/AppBar/src/MDCAppBarViewControllerAccessibilityPerformEscapeDelegate.h", "src/components/AppBar/src/MaterialAppBar.h", "src/components/AppBar/src/Theming/MDCAppBarViewController+MaterialTheming.h", "src/components/AppBar/src/Theming/MaterialAppBar+Theming.h", @@ -65,6 +68,8 @@ "src/components/BottomAppBar/src/private/MDCBottomAppBarLayer.h", "src/components/BottomNavigation/src/MDCBottomNavigationBar.h", "src/components/BottomNavigation/src/MDCBottomNavigationBarController.h", + "src/components/BottomNavigation/src/MDCBottomNavigationBarControllerDelegate.h", + "src/components/BottomNavigation/src/MDCBottomNavigationBarDelegate.h", "src/components/BottomNavigation/src/MaterialBottomNavigation.h", "src/components/BottomNavigation/src/MaterialBottomNavigationBeta.h", "src/components/BottomNavigation/src/Theming/MDCBottomNavigationBar+MaterialTheming.h", @@ -77,7 +82,9 @@ "src/components/BottomNavigation/src/private/MaterialBottomNavigationStrings.h", "src/components/BottomNavigation/src/private/MaterialBottomNavigationStrings_table.h", "src/components/BottomSheet/src/MDCBottomSheetController.h", + "src/components/BottomSheet/src/MDCBottomSheetControllerDelegate.h", "src/components/BottomSheet/src/MDCBottomSheetPresentationController.h", + "src/components/BottomSheet/src/MDCBottomSheetPresentationControllerDelegate.h", "src/components/BottomSheet/src/MDCBottomSheetTransitionController.h", "src/components/BottomSheet/src/MDCSheetState.h", "src/components/BottomSheet/src/MaterialBottomSheet.h", @@ -85,8 +92,10 @@ "src/components/BottomSheet/src/ShapeThemer/MaterialBottomSheet+ShapeThemer.h", "src/components/BottomSheet/src/UIViewController+MaterialBottomSheet.h", "src/components/BottomSheet/src/private/MDCDraggableView.h", + "src/components/BottomSheet/src/private/MDCDraggableViewDelegate.h", "src/components/BottomSheet/src/private/MDCSheetBehavior.h", "src/components/BottomSheet/src/private/MDCSheetContainerView.h", + "src/components/BottomSheet/src/private/MDCSheetContainerViewDelegate.h", "src/components/ButtonBar/src/MDCButtonBar.h", "src/components/ButtonBar/src/MDCButtonBarButton.h", "src/components/ButtonBar/src/MDCButtonBarDelegate.h", @@ -149,6 +158,7 @@ "src/components/Collections/src/MaterialCollections.h", "src/components/Collections/src/private/MDCCollectionGridBackgroundView.h", "src/components/Collections/src/private/MDCCollectionInfoBarView.h", + "src/components/Collections/src/private/MDCCollectionInfoBarViewDelegate.h", "src/components/Collections/src/private/MDCCollectionStringResources.h", "src/components/Collections/src/private/MDCCollectionViewEditor.h", "src/components/Collections/src/private/MDCCollectionViewStyler.h", @@ -158,8 +168,10 @@ "src/components/Dialogs/src/ColorThemer/MaterialDialogs+ColorThemer.h", "src/components/Dialogs/src/MDCAlertController+ButtonForAction.h", "src/components/Dialogs/src/MDCAlertController.h", + "src/components/Dialogs/src/MDCAlertControllerDelegate.h", "src/components/Dialogs/src/MDCAlertControllerView.h", "src/components/Dialogs/src/MDCDialogPresentationController.h", + "src/components/Dialogs/src/MDCDialogPresentationControllerDelegate.h", "src/components/Dialogs/src/MDCDialogTransitionController.h", "src/components/Dialogs/src/MaterialDialogs.h", "src/components/Dialogs/src/Theming/MDCAlertController+MaterialTheming.h", @@ -195,26 +207,38 @@ "src/components/FlexibleHeader/src/CanAlwaysExpandToMaximumHeight/MDCFlexibleHeaderView+canAlwaysExpandToMaximumHeight.h", "src/components/FlexibleHeader/src/CanAlwaysExpandToMaximumHeight/MaterialFlexibleHeader+CanAlwaysExpandToMaximumHeight.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderContainerViewController.h", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderSafeAreaDelegate.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderView+ShiftBehavior.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderView.h", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewAnimationDelegate.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewController.h", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewDelegate.h", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewLayoutDelegate.h", "src/components/FlexibleHeader/src/MaterialFlexibleHeader.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderHairline.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderMinMaxHeight.h", + "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderMinMaxHeightDelegate.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderTopSafeArea.h", + "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderTopSafeAreaDelegate.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderView+Private.h", "src/components/FlexibleHeader/src/private/MDCStatusBarShifter.h", + "src/components/FlexibleHeader/src/private/MDCStatusBarShifterDelegate.h", "src/components/HeaderStackView/src/ColorThemer/MDCHeaderStackViewColorThemer.h", "src/components/HeaderStackView/src/ColorThemer/MaterialHeaderStackView+ColorThemer.h", "src/components/HeaderStackView/src/MDCHeaderStackView.h", "src/components/HeaderStackView/src/MaterialHeaderStackView.h", "src/components/Ink/src/MDCInkGestureRecognizer.h", "src/components/Ink/src/MDCInkTouchController.h", + "src/components/Ink/src/MDCInkTouchControllerDelegate.h", "src/components/Ink/src/MDCInkView.h", + "src/components/Ink/src/MDCInkViewDelegate.h", "src/components/Ink/src/MaterialInk.h", "src/components/Ink/src/private/MDCInkLayer.h", + "src/components/Ink/src/private/MDCInkLayerDelegate.h", "src/components/Ink/src/private/MDCLegacyInkLayer+Private.h", "src/components/Ink/src/private/MDCLegacyInkLayer.h", + "src/components/Ink/src/private/MDCLegacyInkLayerDelegate.h", + "src/components/Ink/src/private/MDCLegacyInkLayerRippleDelegate.h", "src/components/LibraryInfo/src/MDCLibraryInfo.h", "src/components/LibraryInfo/src/MaterialLibraryInfo.h", "src/components/List/src/MDCBaseCell.h", @@ -235,11 +259,14 @@ "src/components/NavigationDrawer/src/ColorThemer/MaterialNavigationDrawer+ColorThemer.h", "src/components/NavigationDrawer/src/MDCBottomDrawerHeader.h", "src/components/NavigationDrawer/src/MDCBottomDrawerPresentationController.h", + "src/components/NavigationDrawer/src/MDCBottomDrawerPresentationControllerDelegate.h", "src/components/NavigationDrawer/src/MDCBottomDrawerState.h", "src/components/NavigationDrawer/src/MDCBottomDrawerTransitionController.h", "src/components/NavigationDrawer/src/MDCBottomDrawerViewController.h", + "src/components/NavigationDrawer/src/MDCBottomDrawerViewControllerDelegate.h", "src/components/NavigationDrawer/src/MaterialNavigationDrawer.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerContainerViewController.h", + "src/components/NavigationDrawer/src/private/MDCBottomDrawerContainerViewControllerDelegate.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerHeaderMask.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerShadowedView.h", "src/components/OverlayWindow/src/MDCOverlayWindow.h", @@ -258,11 +285,16 @@ "src/components/ProgressView/src/MaterialProgressView.h", "src/components/ProgressView/src/Theming/MDCProgressView+MaterialTheming.h", "src/components/ProgressView/src/Theming/MaterialProgressView+Theming.h", + "src/components/ProgressView/src/private/MaterialProgressViewStrings.h", + "src/components/ProgressView/src/private/MaterialProgressViewStrings_table.h", "src/components/Ripple/src/MDCRippleTouchController.h", + "src/components/Ripple/src/MDCRippleTouchControllerDelegate.h", "src/components/Ripple/src/MDCRippleView.h", + "src/components/Ripple/src/MDCRippleViewDelegate.h", "src/components/Ripple/src/MDCStatefulRippleView.h", "src/components/Ripple/src/MaterialRipple.h", "src/components/Ripple/src/private/MDCRippleLayer.h", + "src/components/Ripple/src/private/MDCRippleLayerDelegate.h", "src/components/ShadowElevations/src/MDCShadowElevations.h", "src/components/ShadowElevations/src/MaterialShadowElevations.h", "src/components/ShadowLayer/src/MDCShadowLayer.h", @@ -287,6 +319,7 @@ "src/components/Slider/src/ColorThemer/MDCSliderColorThemer.h", "src/components/Slider/src/ColorThemer/MaterialSlider+ColorThemer.h", "src/components/Slider/src/MDCSlider.h", + "src/components/Slider/src/MDCSliderDelegate.h", "src/components/Slider/src/MaterialSlider.h", "src/components/Slider/src/private/MDCSlider+Private.h", "src/components/Slider/src/private/MDCSlider_Subclassable.h", @@ -294,6 +327,7 @@ "src/components/Snackbar/src/FontThemer/MaterialSnackbar+FontThemer.h", "src/components/Snackbar/src/MDCSnackbarAlignment.h", "src/components/Snackbar/src/MDCSnackbarManager.h", + "src/components/Snackbar/src/MDCSnackbarManagerDelegate.h", "src/components/Snackbar/src/MDCSnackbarMessage.h", "src/components/Snackbar/src/MDCSnackbarMessageView.h", "src/components/Snackbar/src/MaterialSnackbar.h", @@ -307,6 +341,8 @@ "src/components/Snackbar/src/private/MaterialSnackbarStrings_table.h", "src/components/Tabs/src/MDCTabBar.h", "src/components/Tabs/src/MDCTabBarAlignment.h", + "src/components/Tabs/src/MDCTabBarControllerDelegate.h", + "src/components/Tabs/src/MDCTabBarDelegate.h", "src/components/Tabs/src/MDCTabBarDisplayDelegate.h", "src/components/Tabs/src/MDCTabBarExtendedAlignment.h", "src/components/Tabs/src/MDCTabBarIndicatorAttributes.h", @@ -340,6 +376,7 @@ "src/components/Tabs/src/private/MDCItemBarBadge.h", "src/components/Tabs/src/private/MDCItemBarCell+Private.h", "src/components/Tabs/src/private/MDCItemBarCell.h", + "src/components/Tabs/src/private/MDCItemBarDelegate.h", "src/components/Tabs/src/private/MDCItemBarStringConstants.h", "src/components/Tabs/src/private/MDCItemBarStyle.h", "src/components/Tabs/src/private/MDCTabBarIndicatorView.h", @@ -375,6 +412,7 @@ "src/components/TextFields/src/MDCIntrinsicHeightTextView.h", "src/components/TextFields/src/MDCMultilineTextField.h", "src/components/TextFields/src/MDCMultilineTextInputDelegate.h", + "src/components/TextFields/src/MDCMultilineTextInputLayoutDelegate.h", "src/components/TextFields/src/MDCTextField.h", "src/components/TextFields/src/MDCTextFieldPositioningDelegate.h", "src/components/TextFields/src/MDCTextInput.h", @@ -580,6 +618,7 @@ "src/components/Palettes/src/private", "src/components/ProgressView/src", "src/components/ProgressView/src/Theming", + "src/components/ProgressView/src/private", "src/components/Ripple/src", "src/components/Ripple/src/private", "src/components/ShadowElevations/src", @@ -705,8 +744,10 @@ "src/components/AppBar/src/MDCAppBarContainerViewController.m", "src/components/AppBar/src/MDCAppBarNavigationController.h", "src/components/AppBar/src/MDCAppBarNavigationController.m", + "src/components/AppBar/src/MDCAppBarNavigationControllerToBeDeprecatedDelegate.h", "src/components/AppBar/src/MDCAppBarViewController.h", "src/components/AppBar/src/MDCAppBarViewController.m", + "src/components/AppBar/src/MDCAppBarViewControllerAccessibilityPerformEscapeDelegate.h", "src/components/AppBar/src/MaterialAppBar.h", "src/components/AppBar/src/Theming/MDCAppBarViewController+MaterialTheming.h", "src/components/AppBar/src/Theming/MDCAppBarViewController+MaterialTheming.m", @@ -734,6 +775,8 @@ "src/components/BottomNavigation/src/MDCBottomNavigationBar.m", "src/components/BottomNavigation/src/MDCBottomNavigationBarController.h", "src/components/BottomNavigation/src/MDCBottomNavigationBarController.m", + "src/components/BottomNavigation/src/MDCBottomNavigationBarControllerDelegate.h", + "src/components/BottomNavigation/src/MDCBottomNavigationBarDelegate.h", "src/components/BottomNavigation/src/MaterialBottomNavigation.h", "src/components/BottomNavigation/src/MaterialBottomNavigationBeta.h", "src/components/BottomNavigation/src/Theming/MDCBottomNavigationBar+MaterialTheming.h", @@ -752,8 +795,10 @@ "src/components/BottomNavigation/src/private/MaterialBottomNavigationStrings_table.h", "src/components/BottomSheet/src/MDCBottomSheetController.h", "src/components/BottomSheet/src/MDCBottomSheetController.m", + "src/components/BottomSheet/src/MDCBottomSheetControllerDelegate.h", "src/components/BottomSheet/src/MDCBottomSheetPresentationController.h", "src/components/BottomSheet/src/MDCBottomSheetPresentationController.m", + "src/components/BottomSheet/src/MDCBottomSheetPresentationControllerDelegate.h", "src/components/BottomSheet/src/MDCBottomSheetTransitionController.h", "src/components/BottomSheet/src/MDCBottomSheetTransitionController.m", "src/components/BottomSheet/src/MDCSheetState.h", @@ -765,10 +810,12 @@ "src/components/BottomSheet/src/UIViewController+MaterialBottomSheet.m", "src/components/BottomSheet/src/private/MDCDraggableView.h", "src/components/BottomSheet/src/private/MDCDraggableView.m", + "src/components/BottomSheet/src/private/MDCDraggableViewDelegate.h", "src/components/BottomSheet/src/private/MDCSheetBehavior.h", "src/components/BottomSheet/src/private/MDCSheetBehavior.m", "src/components/BottomSheet/src/private/MDCSheetContainerView.h", "src/components/BottomSheet/src/private/MDCSheetContainerView.m", + "src/components/BottomSheet/src/private/MDCSheetContainerViewDelegate.h", "src/components/ButtonBar/src/MDCButtonBar.h", "src/components/ButtonBar/src/MDCButtonBar.m", "src/components/ButtonBar/src/MDCButtonBarButton.h", @@ -869,6 +916,7 @@ "src/components/Collections/src/private/MDCCollectionGridBackgroundView.m", "src/components/Collections/src/private/MDCCollectionInfoBarView.h", "src/components/Collections/src/private/MDCCollectionInfoBarView.m", + "src/components/Collections/src/private/MDCCollectionInfoBarViewDelegate.h", "src/components/Collections/src/private/MDCCollectionStringResources.h", "src/components/Collections/src/private/MDCCollectionStringResources.m", "src/components/Collections/src/private/MDCCollectionViewEditor.h", @@ -884,9 +932,11 @@ "src/components/Dialogs/src/MDCAlertController+ButtonForAction.m", "src/components/Dialogs/src/MDCAlertController.h", "src/components/Dialogs/src/MDCAlertController.m", + "src/components/Dialogs/src/MDCAlertControllerDelegate.h", "src/components/Dialogs/src/MDCAlertControllerView.h", "src/components/Dialogs/src/MDCDialogPresentationController.h", "src/components/Dialogs/src/MDCDialogPresentationController.m", + "src/components/Dialogs/src/MDCDialogPresentationControllerDelegate.h", "src/components/Dialogs/src/MDCDialogTransitionController.h", "src/components/Dialogs/src/MDCDialogTransitionController.m", "src/components/Dialogs/src/MaterialDialogs.h", @@ -940,21 +990,28 @@ "src/components/FlexibleHeader/src/CanAlwaysExpandToMaximumHeight/MaterialFlexibleHeader+CanAlwaysExpandToMaximumHeight.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderContainerViewController.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderContainerViewController.m", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderSafeAreaDelegate.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderView+ShiftBehavior.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderView.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderView.m", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewAnimationDelegate.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewController.h", "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewController.m", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewDelegate.h", + "src/components/FlexibleHeader/src/MDCFlexibleHeaderViewLayoutDelegate.h", "src/components/FlexibleHeader/src/MaterialFlexibleHeader.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderHairline.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderHairline.m", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderMinMaxHeight.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderMinMaxHeight.m", + "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderMinMaxHeightDelegate.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderTopSafeArea.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderTopSafeArea.m", + "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderTopSafeAreaDelegate.h", "src/components/FlexibleHeader/src/private/MDCFlexibleHeaderView+Private.h", "src/components/FlexibleHeader/src/private/MDCStatusBarShifter.h", "src/components/FlexibleHeader/src/private/MDCStatusBarShifter.m", + "src/components/FlexibleHeader/src/private/MDCStatusBarShifterDelegate.h", "src/components/HeaderStackView/src/ColorThemer/MDCHeaderStackViewColorThemer.h", "src/components/HeaderStackView/src/ColorThemer/MDCHeaderStackViewColorThemer.m", "src/components/HeaderStackView/src/ColorThemer/MaterialHeaderStackView+ColorThemer.h", @@ -965,14 +1022,19 @@ "src/components/Ink/src/MDCInkGestureRecognizer.m", "src/components/Ink/src/MDCInkTouchController.h", "src/components/Ink/src/MDCInkTouchController.m", + "src/components/Ink/src/MDCInkTouchControllerDelegate.h", "src/components/Ink/src/MDCInkView.h", "src/components/Ink/src/MDCInkView.m", + "src/components/Ink/src/MDCInkViewDelegate.h", "src/components/Ink/src/MaterialInk.h", "src/components/Ink/src/private/MDCInkLayer.h", "src/components/Ink/src/private/MDCInkLayer.m", + "src/components/Ink/src/private/MDCInkLayerDelegate.h", "src/components/Ink/src/private/MDCLegacyInkLayer+Private.h", "src/components/Ink/src/private/MDCLegacyInkLayer.h", "src/components/Ink/src/private/MDCLegacyInkLayer.m", + "src/components/Ink/src/private/MDCLegacyInkLayerDelegate.h", + "src/components/Ink/src/private/MDCLegacyInkLayerRippleDelegate.h", "src/components/LibraryInfo/src/MDCLibraryInfo.h", "src/components/LibraryInfo/src/MDCLibraryInfo.m", "src/components/LibraryInfo/src/MaterialLibraryInfo.h", @@ -1004,14 +1066,17 @@ "src/components/NavigationDrawer/src/MDCBottomDrawerHeader.h", "src/components/NavigationDrawer/src/MDCBottomDrawerPresentationController.h", "src/components/NavigationDrawer/src/MDCBottomDrawerPresentationController.m", + "src/components/NavigationDrawer/src/MDCBottomDrawerPresentationControllerDelegate.h", "src/components/NavigationDrawer/src/MDCBottomDrawerState.h", "src/components/NavigationDrawer/src/MDCBottomDrawerTransitionController.h", "src/components/NavigationDrawer/src/MDCBottomDrawerTransitionController.m", "src/components/NavigationDrawer/src/MDCBottomDrawerViewController.h", "src/components/NavigationDrawer/src/MDCBottomDrawerViewController.m", + "src/components/NavigationDrawer/src/MDCBottomDrawerViewControllerDelegate.h", "src/components/NavigationDrawer/src/MaterialNavigationDrawer.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerContainerViewController.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerContainerViewController.m", + "src/components/NavigationDrawer/src/private/MDCBottomDrawerContainerViewControllerDelegate.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerHeaderMask.h", "src/components/NavigationDrawer/src/private/MDCBottomDrawerHeaderMask.m", "src/components/NavigationDrawer/src/private/MDCBottomDrawerShadowedView.h", @@ -1040,15 +1105,20 @@ "src/components/ProgressView/src/Theming/MDCProgressView+MaterialTheming.h", "src/components/ProgressView/src/Theming/MDCProgressView+MaterialTheming.m", "src/components/ProgressView/src/Theming/MaterialProgressView+Theming.h", + "src/components/ProgressView/src/private/MaterialProgressViewStrings.h", + "src/components/ProgressView/src/private/MaterialProgressViewStrings_table.h", "src/components/Ripple/src/MDCRippleTouchController.h", "src/components/Ripple/src/MDCRippleTouchController.m", + "src/components/Ripple/src/MDCRippleTouchControllerDelegate.h", "src/components/Ripple/src/MDCRippleView.h", "src/components/Ripple/src/MDCRippleView.m", + "src/components/Ripple/src/MDCRippleViewDelegate.h", "src/components/Ripple/src/MDCStatefulRippleView.h", "src/components/Ripple/src/MDCStatefulRippleView.m", "src/components/Ripple/src/MaterialRipple.h", "src/components/Ripple/src/private/MDCRippleLayer.h", "src/components/Ripple/src/private/MDCRippleLayer.m", + "src/components/Ripple/src/private/MDCRippleLayerDelegate.h", "src/components/ShadowElevations/src/MDCShadowElevations.h", "src/components/ShadowElevations/src/MaterialShadowElevations.h", "src/components/ShadowElevations/src/MaterialShadowElevationsDummy.m", @@ -1091,6 +1161,7 @@ "src/components/Slider/src/ColorThemer/MaterialSlider+ColorThemer.h", "src/components/Slider/src/MDCSlider.h", "src/components/Slider/src/MDCSlider.m", + "src/components/Slider/src/MDCSliderDelegate.h", "src/components/Slider/src/MaterialSlider.h", "src/components/Slider/src/private/MDCSlider+Private.h", "src/components/Slider/src/private/MDCSlider_Subclassable.h", @@ -1100,6 +1171,7 @@ "src/components/Snackbar/src/MDCSnackbarAlignment.h", "src/components/Snackbar/src/MDCSnackbarManager.h", "src/components/Snackbar/src/MDCSnackbarManager.m", + "src/components/Snackbar/src/MDCSnackbarManagerDelegate.h", "src/components/Snackbar/src/MDCSnackbarMessage.h", "src/components/Snackbar/src/MDCSnackbarMessage.m", "src/components/Snackbar/src/MDCSnackbarMessageView.h", @@ -1118,6 +1190,8 @@ "src/components/Tabs/src/MDCTabBar.h", "src/components/Tabs/src/MDCTabBar.m", "src/components/Tabs/src/MDCTabBarAlignment.h", + "src/components/Tabs/src/MDCTabBarControllerDelegate.h", + "src/components/Tabs/src/MDCTabBarDelegate.h", "src/components/Tabs/src/MDCTabBarDisplayDelegate.h", "src/components/Tabs/src/MDCTabBarExtendedAlignment.h", "src/components/Tabs/src/MDCTabBarIndicatorAttributes.h", @@ -1166,6 +1240,7 @@ "src/components/Tabs/src/private/MDCItemBarCell+Private.h", "src/components/Tabs/src/private/MDCItemBarCell.h", "src/components/Tabs/src/private/MDCItemBarCell.m", + "src/components/Tabs/src/private/MDCItemBarDelegate.h", "src/components/Tabs/src/private/MDCItemBarStringConstants.h", "src/components/Tabs/src/private/MDCItemBarStyle.h", "src/components/Tabs/src/private/MDCItemBarStyle.m", @@ -1221,6 +1296,7 @@ "src/components/TextFields/src/MDCMultilineTextField.h", "src/components/TextFields/src/MDCMultilineTextField.m", "src/components/TextFields/src/MDCMultilineTextInputDelegate.h", + "src/components/TextFields/src/MDCMultilineTextInputLayoutDelegate.h", "src/components/TextFields/src/MDCTextField.h", "src/components/TextFields/src/MDCTextField.m", "src/components/TextFields/src/MDCTextFieldPositioningDelegate.h", @@ -1642,8 +1718,62 @@ "icon_name must be defined for $target_name") _icon_name = invoker.icon_name - _icon_path = "src/components/private/Icons/icons/$_icon_name/src/" + - "MaterialIcons_$_icon_name.bundle/$_icon_name" + _additional_icon_name = "" + if (defined(invoker.additional_icon_name)) { + _additional_icon_name = invoker.additional_icon_name + } + + bundle_data("${_icon_name}_bundle_info_plist") { + sources = + [ "src/components/private/Icons/icons/$_icon_name/src/Info.plist" ] + outputs = [ "{{bundle_contents_dir}}/Info.plist" ] + } + + bundle_data("${_icon_name}_bundle_icons") { + _assets_directory = "MaterialIcons_${_icon_name}.xcassets" + _imageset_directory = "${_assets_directory}/${_icon_name}.imageset" + _source_directory = "src/components/private/Icons/icons/$_icon_name/src" + sources = [ + "${_source_directory}/${_imageset_directory}/${_icon_name}.png", + "${_source_directory}/${_imageset_directory}/${_icon_name}@2x.png", + "${_source_directory}/${_imageset_directory}/${_icon_name}@3x.png", + "${_source_directory}/${_imageset_directory}/Contents.json", + ] + outputs = [ + "{{bundle_contents_dir}}/${_imageset_directory}/{{source_file_part}}", + ] + } + if (_additional_icon_name != "") { + bundle_data("${_icon_name}_bundle_additional_icons") { + _assets_directory = "MaterialIcons_${_icon_name}.xcassets" + _imageset_directory = + "${_assets_directory}/${_additional_icon_name}.imageset" + _source_directory = "src/components/private/Icons/icons/$_icon_name/src" + sources = [ + "${_source_directory}/${_imageset_directory}/${_additional_icon_name}.png", + "${_source_directory}/${_imageset_directory}/${_additional_icon_name}@2x.png", + "${_source_directory}/${_imageset_directory}/${_additional_icon_name}@3x.png", + "${_source_directory}/${_imageset_directory}/Contents.json", + ] + outputs = [ + "{{bundle_contents_dir}}/${_imageset_directory}/{{source_file_part}}", + ] + } + } + + create_bundle(target_name + "_bundle") { + bundle_root_dir = "$root_gen_dir/$target_name" + bundle_contents_dir = bundle_root_dir + bundle_resources_dir = bundle_contents_dir + bundle_executable_dir = bundle_contents_dir + deps = [ + ":${_icon_name}_bundle_icons", + ":${_icon_name}_bundle_info_plist", + ] + if (_additional_icon_name != "") { + deps += [ ":${_icon_name}_bundle_additional_icons" ] + } + } bundle_data(target_name) { forward_variables_from(invoker, @@ -1653,10 +1783,10 @@ "outputs", "icon_name", ]) + public_deps = [ ":${target_name}_bundle" ] sources = [ - "$_icon_path.png", - "$_icon_path@2x.png", - "$_icon_path@3x.png", + "$root_gen_dir/${target_name}_bundle/Assets.car", + "$root_gen_dir/${target_name}_bundle/Info.plist", ] outputs = [ "{{bundle_resources_dir}}/MaterialIcons_$_icon_name.bundle/" + "{{source_file_part}}" ] @@ -1664,6 +1794,7 @@ } _icon_names = [ + "ic_arrow_back", "ic_check", "ic_check_circle", "ic_chevron_right", @@ -1680,28 +1811,15 @@ material_component_icon_bundle("material_component_${_icon_name}_bundle") { visibility = [ ":*" ] icon_name = _icon_name + if (icon_name == "ic_arrow_back") { + additional_icon_name = "ic_arrow_back_ios" + } } } -# TODO(crbug.com/662421): Move back to _icon_names when there is just one -# resource. -bundle_data("material_component_ic_arrow_back_bundle") { - visibility = [ ":*" ] - sources = [ - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back.png", - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back@2x.png", - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back@3x.png", - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back_ios.png", - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back_ios@2x.png", - "src/components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/ic_arrow_back_ios@3x.png", - ] - outputs = [ "{{bundle_resources_dir}}/MaterialIcons_ic_arrow_back.bundle/" + - "{{source_file_part}}" ] -} - group("material_components_icons") { visibility = [ ":*" ] - deps = [ ":material_component_ic_arrow_back_bundle" ] + deps = [] foreach(_icon_name, _icon_names) { deps += [ ":material_component_${_icon_name}_bundle" ] }
diff --git a/ios/web/common/BUILD.gn b/ios/web/common/BUILD.gn index bd3943d..51d0f5f 100644 --- a/ios/web/common/BUILD.gn +++ b/ios/web/common/BUILD.gn
@@ -7,6 +7,8 @@ source_set("common") { sources = [ "crw_content_view.h", + "crw_viewport_adjustment.h", + "crw_viewport_adjustment_container.h", "crw_web_view_content_view.h", "crw_web_view_content_view.mm", "referrer_util.cc",
diff --git a/ios/web/common/crw_viewport_adjustment.h b/ios/web/common/crw_viewport_adjustment.h new file mode 100644 index 0000000..5b591b4f --- /dev/null +++ b/ios/web/common/crw_viewport_adjustment.h
@@ -0,0 +1,25 @@ +// Copyright 2020 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 IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_H_ +#define IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_H_ + +#import <UIKit/UIKit.h> + +// Protocol used to update a page's viewport when part of the web view is +// covered by browser UI (e.g. toolbars). +@protocol CRWViewportAdjustment <NSObject> +// The viewport insets into the web view that are covered by the Browser UI. +@property(nonatomic, assign) UIEdgeInsets viewportInsets; +// The viewport's affected viewport edges that are affected by the web view's +// safe area insets. +@property(nonatomic, readonly) UIRectEdge viewportEdgesAffectedBySafeArea; + +// Updates maximum and minimum viewport insets for the wrapper. +- (void)updateMinViewportInsets:(UIEdgeInsets)minInsets + maxViewportInsets:(UIEdgeInsets)maxInsets; + +@end + +#endif // IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_H_
diff --git a/ios/web/common/crw_viewport_adjustment_container.h b/ios/web/common/crw_viewport_adjustment_container.h new file mode 100644 index 0000000..48671b2 --- /dev/null +++ b/ios/web/common/crw_viewport_adjustment_container.h
@@ -0,0 +1,19 @@ +// Copyright 2020 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 IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_CONTAINER_H_ +#define IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_CONTAINER_H_ + +#import "ios/web/common/crw_viewport_adjustment.h" + +@class CRWWebViewContentView; + +// The container view for CRWViewportAdjustment. +@protocol CRWViewportAdjustmentContainer <NSObject> +// The CRWViewportAdjustment view being displayed. +@property(nonatomic, strong, readonly) + UIView<CRWViewportAdjustment>* fullscreenViewportAdjuster; +@end + +#endif // IOS_WEB_COMMON_CRW_VIEWPORT_ADJUSTMENT_CONTAINER_H_
diff --git a/ios/web/common/crw_web_view_content_view.h b/ios/web/common/crw_web_view_content_view.h index d8c1ef6..a3d81b2 100644 --- a/ios/web/common/crw_web_view_content_view.h +++ b/ios/web/common/crw_web_view_content_view.h
@@ -6,9 +6,10 @@ #define IOS_WEB_COMMON_CRW_WEB_VIEW_CONTENT_VIEW_H_ #import "ios/web/common/crw_content_view.h" +#import "ios/web/common/crw_viewport_adjustment.h" // Wraps a web vew in a CRWContentView. -@interface CRWWebViewContentView : CRWContentView +@interface CRWWebViewContentView : CRWContentView <CRWViewportAdjustment> // The webView passed to |-initWithWebView|. @property(nonatomic, strong, readonly) UIView* webView;
diff --git a/ios/web/common/crw_web_view_content_view.mm b/ios/web/common/crw_web_view_content_view.mm index 49ccbad..dfa7930 100644 --- a/ios/web/common/crw_web_view_content_view.mm +++ b/ios/web/common/crw_web_view_content_view.mm
@@ -28,8 +28,10 @@ @implementation CRWWebViewContentView @synthesize contentOffset = _contentOffset; @synthesize contentInset = _contentInset; -@synthesize shouldUseViewContentInset = _shouldUseViewContentInset; @synthesize scrollView = _scrollView; +@synthesize shouldUseViewContentInset = _shouldUseViewContentInset; +@synthesize viewportEdgesAffectedBySafeArea = _viewportEdgesAffectedBySafeArea; +@synthesize viewportInsets = _viewportInsets; @synthesize webView = _webView; - (instancetype)initWithWebView:(UIView*)webView @@ -113,4 +115,11 @@ } } +#pragma mark - CRWViewportAdjusting + +// TODO(crbug.com/1064041): Implement. +- (void)updateMinViewportInsets:(UIEdgeInsets)minInsets + maxViewportInsets:(UIEdgeInsets)maxInsets { +} + @end
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm index 4814358..ba81875 100644 --- a/ios/web/navigation/navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -528,84 +528,6 @@ ASSERT_EQ(4, navigation_manager()->GetLastCommittedItemIndex()); } -// Tests offsets with pending transient entries (specifically going back and -// forward from a pending navigation entry that is added to the middle of the -// navigation stack). -TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) { - // This test directly manipulates the WKBackForwardListItem mocks stored in - // mock_wk_list_ so that the associated NavigationItem objects are retained - // throughout the test case. - WKBackForwardListItem* wk_item0 = - [CRWFakeBackForwardList itemWithURLString:@"http://www.url.com/0"]; - WKBackForwardListItem* wk_item1 = - [CRWFakeBackForwardList itemWithURLString:@"http://www.url.com/1"]; - WKBackForwardListItem* wk_item2 = - [CRWFakeBackForwardList itemWithURLString:@"http://www.url.com/2"]; - - // Create a transient item in the middle of the navigation stack and go back - // to it (pending index is 1, current index is 2). - navigation_manager()->AddPendingItem( - GURL("http://www.url.com/0"), Referrer(), ui::PAGE_TRANSITION_LINK, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - - mock_wk_list_.currentItem = wk_item0; - mock_wk_list_.backList = nil; - mock_wk_list_.forwardList = nil; - navigation_manager()->CommitPendingItem(); - - navigation_manager()->AddPendingItem( - GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_LINK, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - - mock_wk_list_.currentItem = wk_item1; - mock_wk_list_.backList = @[ wk_item0 ]; - navigation_manager()->CommitPendingItem(); - - navigation_manager()->AddPendingItem( - GURL("http://www.url.com/2"), Referrer(), ui::PAGE_TRANSITION_LINK, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - - mock_wk_list_.currentItem = wk_item2; - mock_wk_list_.backList = @[ wk_item0, wk_item1 ]; - navigation_manager()->CommitPendingItem(); - - // Under back-forward navigation, both WKBackForwardList and WKWebView.URL are - // updated before |didStartProvisionalNavigation| callback, which calls - // AddPendingItem. Simulate this behavior. - OCMStub([mock_web_view_ URL]) - .andReturn([NSURL URLWithString:@"http://www.url.com/1"]); - mock_wk_list_.currentItem = wk_item1; - mock_wk_list_.backList = @[ wk_item0 ]; - mock_wk_list_.forwardList = @[ wk_item2 ]; - navigation_manager()->AddPendingItem( - GURL("http://www.url.com/1"), Referrer(), ui::PAGE_TRANSITION_LINK, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - navigation_manager()->AddTransientItem(GURL("http://www.url.com/1")); - - ASSERT_EQ(3, navigation_manager()->GetItemCount()); - ASSERT_EQ(2, navigation_manager()->GetLastCommittedItemIndex()); - ASSERT_EQ(1, navigation_manager()->GetPendingItemIndex()); - EXPECT_EQ(2, navigation_manager()->GetIndexForOffset(1)); - EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); - - // TODO(crbug.com/734150): Investigate why this test still fails for the new - // navigation manager. - return; - - // Now go forward to that middle transient item (pending index is 1, - // current index is 0). - SimulateGoToIndex(0); - EXPECT_EQ(3, navigation_manager()->GetItemCount()); - EXPECT_EQ(0, navigation_manager()->GetLastCommittedItemIndex()); - EXPECT_EQ(1, navigation_manager()->GetPendingItemIndex()); - EXPECT_EQ(2, navigation_manager()->GetIndexForOffset(1)); - EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); -} - // Tests that when given a pending item, adding a new pending item replaces the // existing pending item if their URLs are different. TEST_F(NavigationManagerTest, ReplacePendingItemIfDiffernetURL) { @@ -863,34 +785,6 @@ } // Tests that when the last committed item exists, adding a pending item with -// the same URL fails if both the new item and the last committed item are form -// submissions. -// TODO(crbug.com/734150): Enable this test when form submission check is -// implemented. -TEST_F(NavigationManagerTest, - DISABLED_NotAddSameUrlPendingItemIfDuplicateFormSubmission) { - GURL existing_url = GURL("http://www.existing.com"); - navigation_manager()->AddPendingItem( - existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - - [mock_wk_list_ setCurrentURL:@"http://www.existing.com"]; - navigation_manager()->CommitPendingItem(); - - ASSERT_TRUE(navigation_manager()->GetLastCommittedItem()); - EXPECT_FALSE(navigation_manager()->GetPendingItem()); - EXPECT_EQ(1, navigation_manager()->GetItemCount()); - - navigation_manager()->AddPendingItem( - existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT, - web::NavigationInitiationType::BROWSER_INITIATED, - web::NavigationManager::UserAgentOverrideOption::INHERIT); - EXPECT_FALSE(navigation_manager()->GetPendingItem()); - EXPECT_EQ(1, navigation_manager()->GetItemCount()); -} - -// Tests that when the last committed item exists, adding a pending item with // the same URL fails if the user agent override option is INHERIT. TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfOverrideInherit) { GURL existing_url = GURL("http://www.existing.com");
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl.mm b/ios/web/navigation/wk_based_navigation_manager_impl.mm index 46cfd3f8..bc9f5e54 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl.mm +++ b/ios/web/navigation/wk_based_navigation_manager_impl.mm
@@ -1138,7 +1138,6 @@ return item; } - // TODO(crbug.com/734150): Add a stat counter to track rebuilding frequency. WKBackForwardListItem* prev_wk_item = index == 0 ? nil : GetWKItemAtIndex(index - 1); std::unique_ptr<web::NavigationItemImpl> new_item =
diff --git a/ios/web/web_state/ui/crw_web_controller_container_view.mm b/ios/web/web_state/ui/crw_web_controller_container_view.mm index 28ca276..5bfddf1 100644 --- a/ios/web/web_state/ui/crw_web_controller_container_view.mm +++ b/ios/web/web_state/ui/crw_web_controller_container_view.mm
@@ -6,6 +6,7 @@ #include "base/logging.h" #import "ios/web/common/crw_content_view.h" +#import "ios/web/common/crw_viewport_adjustment_container.h" #import "ios/web/common/crw_web_view_content_view.h" #include "ios/web/common/features.h" #import "ios/web/web_state/ui/crw_web_view_proxy_impl.h" @@ -14,7 +15,7 @@ #error "This file requires ARC support." #endif -@interface CRWWebControllerContainerView () +@interface CRWWebControllerContainerView () <CRWViewportAdjustmentContainer> // Redefine properties as readwrite. @property(nonatomic, strong, readwrite) @@ -60,6 +61,14 @@ #pragma mark Accessors +- (UIView<CRWViewportAdjustment>*)fullscreenViewportAdjuster { + if (![self.webViewContentView + conformsToProtocol:@protocol(CRWViewportAdjustment)]) { + return nil; + } + return self.webViewContentView; +} + - (void)setWebViewContentView:(CRWWebViewContentView*)webViewContentView { if (![_webViewContentView isEqual:webViewContentView]) { [_webViewContentView removeFromSuperview];
diff --git a/media/base/android/BUILD.gn b/media/base/android/BUILD.gn index 7ca4b552..480089fa 100644 --- a/media/base/android/BUILD.gn +++ b/media/base/android/BUILD.gn
@@ -155,7 +155,7 @@ android_resources("media_java_resources") { custom_package = "org.chromium.media" - resource_dirs = [ "java/res" ] + sources = [ "java/res/raw/empty.wav" ] } android_library("media_java") {
diff --git a/media/remoting/BUILD.gn b/media/remoting/BUILD.gn index f0d7b85e..f302a057 100644 --- a/media/remoting/BUILD.gn +++ b/media/remoting/BUILD.gn
@@ -111,6 +111,7 @@ } test("media_remoting_unittests") { + data = [ "//media/test/data/" ] deps = [ ":media_remoting_tests", "//media/test:run_all_unittests",
diff --git a/mojo/core/core.cc b/mojo/core/core.cc index cbe96e8..d6092658 100644 --- a/mojo/core/core.cc +++ b/mojo/core/core.cc
@@ -602,15 +602,19 @@ auto* message_event = reinterpret_cast<ports::UserMessageEvent*>(message_handle); auto* message = message_event->GetMessage<UserMessageImpl>(); - if (message->source_node() == ports::kInvalidNodeName) { - DVLOG(1) << "Received invalid message from unknown node."; + NodeController* node_controller = GetNodeController(); + + if (!node_controller->HasBadMessageHandler(message->source_node())) { + if (message->source_node() == ports::kInvalidNodeName) + DVLOG(1) << "Received invalid message from unknown node."; if (!default_process_error_callback_.is_null()) default_process_error_callback_.Run(std::string(error, error_num_bytes)); return MOJO_RESULT_OK; } - GetNodeController()->NotifyBadMessageFrom( - message->source_node(), std::string(error, error_num_bytes)); + node_controller->NotifyBadMessageFrom(message->source_node(), + std::string(error, error_num_bytes)); + return MOJO_RESULT_OK; }
diff --git a/mojo/core/node_channel.cc b/mojo/core/node_channel.cc index b9246d35..e898b04 100644 --- a/mojo/core/node_channel.cc +++ b/mojo/core/node_channel.cc
@@ -223,8 +223,8 @@ } void NodeChannel::NotifyBadMessage(const std::string& error) { - if (!process_error_callback_.is_null()) - process_error_callback_.Run("Received bad user message: " + error); + DCHECK(HasBadMessageHandler()); + process_error_callback_.Run("Received bad user message: " + error); } void NodeChannel::SetRemoteProcessHandle(ScopedProcessHandle process_handle) {
diff --git a/mojo/core/node_channel.h b/mojo/core/node_channel.h index ab392c5..ea91f927 100644 --- a/mojo/core/node_channel.h +++ b/mojo/core/node_channel.h
@@ -103,9 +103,14 @@ // Leaks the pipe handle instead of closing it on shutdown. void LeakHandleOnShutdown(); - // Invokes the bad message callback for this channel, if any. + // Invokes the bad message callback for this channel. To avoid losing error + // reports the caller should ensure that the channel |HasBadMessageHandler| + // before calling |NotifyBadMessage|. void NotifyBadMessage(const std::string& error); + // Returns whether the channel has a bad message handler. + bool HasBadMessageHandler() { return !process_error_callback_.is_null(); } + void SetRemoteProcessHandle(ScopedProcessHandle process_handle); bool HasRemoteProcessHandle(); ScopedProcessHandle CloneRemoteProcessHandle();
diff --git a/mojo/core/node_controller.cc b/mojo/core/node_controller.cc index 58dfda0..345d22a 100644 --- a/mojo/core/node_controller.cc +++ b/mojo/core/node_controller.cc
@@ -325,8 +325,14 @@ void NodeController::NotifyBadMessageFrom(const ports::NodeName& source_node, const std::string& error) { scoped_refptr<NodeChannel> peer = GetPeerChannel(source_node); - if (peer) - peer->NotifyBadMessage(error); + DCHECK(peer); + DCHECK(peer->HasBadMessageHandler()); + peer->NotifyBadMessage(error); +} + +bool NodeController::HasBadMessageHandler(const ports::NodeName& source_node) { + scoped_refptr<NodeChannel> peer = GetPeerChannel(source_node); + return peer ? peer->HasBadMessageHandler() : false; } void NodeController::ForceDisconnectProcessForTesting(
diff --git a/mojo/core/node_controller.h b/mojo/core/node_controller.h index 12b3838..e964508 100644 --- a/mojo/core/node_controller.h +++ b/mojo/core/node_controller.h
@@ -118,10 +118,14 @@ void RequestShutdown(base::OnceClosure callback); // Notifies the NodeController that we received a bad message from the given - // node. + // node. To avoid losing error reports the caller should ensure that the + // source node |HasBadMessageHandler| before calling |NotifyBadMessageFrom|. void NotifyBadMessageFrom(const ports::NodeName& source_node, const std::string& error); + // Returns whether |source_node| exists and has a bad message handler. + bool HasBadMessageHandler(const ports::NodeName& source_node); + // Force-closes the connection to another process to simulate connection // failures for testing. |process_id| must correspond to a process to which // this node has an active NodeChannel.
diff --git a/net/android/BUILD.gn b/net/android/BUILD.gn index 827f243..fd5ad1c 100644 --- a/net/android/BUILD.gn +++ b/net/android/BUILD.gn
@@ -150,7 +150,15 @@ } android_resources("net_unittests_apk_resources") { - resource_dirs = [ "unittest_support/res" ] + sources = [ + "unittest_support/res/mipmap-hdpi/app_icon.png", + "unittest_support/res/mipmap-mdpi/app_icon.png", + "unittest_support/res/mipmap-xhdpi/app_icon.png", + "unittest_support/res/mipmap-xxhdpi/app_icon.png", + "unittest_support/res/mipmap-xxxhdpi/app_icon.png", + "unittest_support/res/xml/dummy_spnego_account_preferences.xml", + "unittest_support/res/xml/dummy_spnego_authenticator.xml", + ] custom_package = "org.chromium.native_test" }
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc index a2e8cae..b8762226 100644 --- a/net/cert/cert_verify_proc.cc +++ b/net/cert/cert_verify_proc.cc
@@ -841,9 +841,9 @@ // Not a real certificate - just for testing. // net/data/ssl/certificates/name_constraint_*.pem { - {{0x8e, 0x9b, 0x14, 0x9f, 0x01, 0x45, 0x4c, 0xee, 0xde, 0xfa, 0x5e, - 0x73, 0x40, 0x36, 0x21, 0xba, 0xd9, 0x1f, 0xee, 0xe0, 0x3e, 0x74, - 0x25, 0x6c, 0x59, 0xf4, 0x6f, 0xbf, 0x45, 0x03, 0x5f, 0x8d}}, + {{0x0d, 0x93, 0x13, 0xa7, 0xd7, 0x0d, 0x35, 0x89, 0x33, 0x50, 0x6e, + 0x9b, 0x68, 0x30, 0x7a, 0x4f, 0x7d, 0x3a, 0x7a, 0x42, 0xd4, 0x60, + 0x9a, 0x5e, 0x10, 0x4b, 0x58, 0xa5, 0xa7, 0x90, 0xa5, 0x81}}, kDomainsTest, }, };
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index 7d13ac8..c2b0f8c 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -1515,8 +1515,8 @@ } // This tests that on successful certificate verification, -// CertVerifyResult::public_key_hashes is filled with a SHA1 and SHA256 hash -// for each of the certificates in the chain. +// CertVerifyResult::public_key_hashes is filled with a SHA256 hash for each +// of the certificates in the chain. TEST_P(CertVerifyProcInternalTest, PublicKeyHashes) { if (!SupportsReturningVerifiedChain()) { LOG(INFO) << "Skipping this test in this platform."; @@ -1554,7 +1554,7 @@ std::vector<std::string> expected_public_key_hashes = { // Target - "sha256/jpsUnwFFTO7e+l5zQDYhutkf7uA+dCVsWfRvv0UDX40=", + "sha256/DZMTp9cNNYkzUG6baDB6T306ekLUYJpeEEtYpaeQpYE=", // Intermediate "sha256/D9u0epgvPYlG9YiVp7V+IMT+xhUpB5BhsS/INjDXc4Y=",
diff --git a/net/cert/cert_verify_result.cc b/net/cert/cert_verify_result.cc index 03bd9f2..b6d9543 100644 --- a/net/cert/cert_verify_result.cc +++ b/net/cert/cert_verify_result.cc
@@ -58,18 +58,4 @@ ClearAllUserData(); } -bool CertVerifyResult::operator==(const CertVerifyResult& other) const { - return (!!verified_cert == !!other.verified_cert) && - (!verified_cert || - verified_cert->EqualsIncludingChain(other.verified_cert.get())) && - std::tie(cert_status, has_md2, has_md4, has_md5, has_sha1, - has_sha1_leaf, public_key_hashes, is_issued_by_known_root, - is_issued_by_additional_trust_anchor, ocsp_result) == - std::tie(other.cert_status, other.has_md2, other.has_md4, - other.has_md5, other.has_sha1, other.has_sha1_leaf, - other.public_key_hashes, other.is_issued_by_known_root, - other.is_issued_by_additional_trust_anchor, - other.ocsp_result); -} - } // namespace net
diff --git a/net/cert/cert_verify_result.h b/net/cert/cert_verify_result.h index 964f3f9c..a8cac35 100644 --- a/net/cert/cert_verify_result.h +++ b/net/cert/cert_verify_result.h
@@ -36,10 +36,6 @@ void Reset(); - // Returns true if all the members of |this| are equal to |other|'s (including - // the |verified_cert| intermediates). - bool operator==(const CertVerifyResult& other) const; - // The certificate chain that was constructed during verification. // // Note: Although |verified_cert| will match the originally supplied
diff --git a/net/cert/crl_set.cc b/net/cert/crl_set.cc index a782f22..882c0392 100644 --- a/net/cert/crl_set.cc +++ b/net/cert/crl_set.cc
@@ -438,8 +438,22 @@ const std::string spki(reinterpret_cast<const char*>(issuer_spki->data), sizeof(issuer_spki->data)); std::vector<std::string> serials; - if (!serial_number.empty()) + if (!serial_number.empty()) { serials.push_back(serial_number); + // |serial_number| is in DER-encoded form, which means it may have a + // leading 0x00 to indicate it is a positive INTEGER. CRLSets are stored + // without these leading 0x00, as handled in CheckSerial(), so remove + // that here. As DER-encoding means that any sequences of leading zeroes + // should be omitted, except to indicate sign, there should only ever + // be one, and the next byte should have the high bit set. + DCHECK_EQ(serials[0][0] & 0x80, 0); // Negative serials are not allowed. + if (serials[0][0] == 0x00) { + serials[0].erase(0, 1); + // If there was a leading 0x00, then the high-bit of the next byte + // should have been set. + DCHECK(!serials[0].empty() && serials[0][0] & 0x80); + } + } crl_set->crls_.emplace(std::move(spki), std::move(serials)); }
diff --git a/net/cert/crl_set.h b/net/cert/crl_set.h index c012314..06d173d 100644 --- a/net/cert/crl_set.h +++ b/net/cert/crl_set.h
@@ -42,7 +42,8 @@ // CheckSerial returns the information contained in the set for a given // certificate: - // serial_number: the serial number of the certificate + // serial_number: the serial number of the certificate, as the DER-encoded + // value // issuer_spki_hash: the SHA256 of the SubjectPublicKeyInfo of the CRL // signer Result CheckSerial( @@ -91,7 +92,7 @@ // ForTesting returns a CRLSet for testing. If |is_expired| is true, calling // IsExpired on the result will return true. If |issuer_spki| is not NULL, // the CRLSet will cover certificates issued by that SPKI. If |serial_number| - // is not empty, then that big-endian serial number will be considered to + // is not empty, then that DER-encoded serial number will be considered to // have been revoked by |issuer_spki|. If |common_name| is not empty then the // CRLSet will consider certificates with a subject consisting only of that // common name to be revoked unless they match an SPKI hash from
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc index f8c98061..7d47fff 100644 --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc
@@ -119,16 +119,18 @@ CookieSameSite samesite, CookieEffectiveSameSite effective_samesite, bool is_secure, - CookieOptions::SameSiteCookieContext context, + CookieOptions::SameSiteCookieContext same_site_context, CanonicalCookie::CookieInclusionStatus* status) { if (samesite == CookieSameSite::UNSPECIFIED && - context < CookieOptions::SameSiteCookieContext::SAME_SITE_LAX) { + same_site_context.context < + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { status->AddWarningReason(CanonicalCookie::CookieInclusionStatus:: WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); } if (effective_samesite == CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE && - context == - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE) { + same_site_context.context == + CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX_METHOD_UNSAFE) { // This warning is more specific so remove the previous, more general, // warning. status->RemoveWarningReason( @@ -471,26 +473,27 @@ effective_same_site, CookieEffectiveSameSite::COUNT); } - UMA_HISTOGRAM_ENUMERATION("Cookie.RequestSameSiteContext", - options.same_site_cookie_context(), - CookieOptions::SameSiteCookieContext::COUNT); + UMA_HISTOGRAM_ENUMERATION( + "Cookie.RequestSameSiteContext", + options.same_site_cookie_context().context, + CookieOptions::SameSiteCookieContext::ContextType::COUNT); switch (effective_same_site) { case CookieEffectiveSameSite::STRICT_MODE: - if (options.same_site_cookie_context() < - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT) { + if (options.same_site_cookie_context().context < + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT) { status.AddExclusionReason( CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT); } break; case CookieEffectiveSameSite::LAX_MODE: - if (options.same_site_cookie_context() < - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX) { + if (options.same_site_cookie_context().context < + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { // Log metrics for a cookie that would have been included under the // "Lax-allow-unsafe" intervention, had it been new enough. if (SameSite() == CookieSameSite::UNSPECIFIED && - options.same_site_cookie_context() == - CookieOptions::SameSiteCookieContext:: + options.same_site_cookie_context().context == + CookieOptions::SameSiteCookieContext::ContextType:: SAME_SITE_LAX_METHOD_UNSAFE) { UMA_HISTOGRAM_CUSTOM_TIMES( "Cookie.SameSiteUnspecifiedTooOldToAllowUnsafe", cookie_age, @@ -507,13 +510,14 @@ // TODO(crbug.com/990439): Add a browsertest for this behavior. case CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE: DCHECK(SameSite() == CookieSameSite::UNSPECIFIED); - if (options.same_site_cookie_context() < - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE) { + if (options.same_site_cookie_context().context < + CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX_METHOD_UNSAFE) { // TODO(chlily): Do we need a separate CookieInclusionStatus for this? status.AddExclusionReason( CookieInclusionStatus::EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX); - } else if (options.same_site_cookie_context() == - CookieOptions::SameSiteCookieContext:: + } else if (options.same_site_cookie_context().context == + CookieOptions::SameSiteCookieContext::ContextType:: SAME_SITE_LAX_METHOD_UNSAFE) { // Log metrics for cookies that activate the "Lax-allow-unsafe" // intervention. This histogram macro allows up to 3 minutes, which is @@ -549,16 +553,17 @@ effective_same_site, CookieEffectiveSameSite::COUNT); - if (options.IsDifferentScheme() && + if (options.same_site_cookie_context().IsDifferentScheme() && ((effective_same_site == CookieEffectiveSameSite::LAX_MODE) || (effective_same_site == CookieEffectiveSameSite::STRICT_MODE) || (effective_same_site == CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE))) { - UMA_HISTOGRAM_ENUMERATION("Cookie.SameSiteDifferentSchemeRequest", - options.same_site_cookie_context_full(), - CookieOptions::SameSiteCookieContext::COUNT); + UMA_HISTOGRAM_ENUMERATION( + "Cookie.SameSiteDifferentSchemeRequest", + options.same_site_cookie_context().ConvertToMetricsValue(), + CookieOptions::SameSiteCookieContext::MetricCount()); AddSameSiteCrossSchemeWarning(&status, - options.same_site_cookie_context_full()); + options.same_site_cookie_context()); } } @@ -607,8 +612,8 @@ // This intentionally checks for `< SAME_SITE_LAX`, as we allow // `SameSite=Strict` cookies to be set for top-level navigations that // qualify for receipt of `SameSite=Lax` cookies. - if (options.same_site_cookie_context() < - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX) { + if (options.same_site_cookie_context().context < + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { DVLOG(net::cookie_util::kVlogSetCookies) << "Trying to set a `SameSite=Strict` cookie from a " "cross-site URL."; @@ -618,8 +623,8 @@ break; case CookieEffectiveSameSite::LAX_MODE: case CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE: - if (options.same_site_cookie_context() < - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX) { + if (options.same_site_cookie_context().context < + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { if (SameSite() == CookieSameSite::UNSPECIFIED) { DVLOG(net::cookie_util::kVlogSetCookies) << "Cookies with no known SameSite attribute being treated as " @@ -648,18 +653,18 @@ effective_same_site, CookieEffectiveSameSite::COUNT); - if (options.IsDifferentScheme() && + if (options.same_site_cookie_context().IsDifferentScheme() && ((effective_same_site == CookieEffectiveSameSite::LAX_MODE) || (effective_same_site == CookieEffectiveSameSite::STRICT_MODE) || (effective_same_site == CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE))) { // TODO(crbug.com/1034014): Change enum to one with less confusing // phrasing. - UMA_HISTOGRAM_ENUMERATION("Cookie.SameSiteDifferentSchemeResponse", - options.same_site_cookie_context_full(), - CookieOptions::SameSiteCookieContext::COUNT); - AddSameSiteCrossSchemeWarning(status, - options.same_site_cookie_context_full()); + UMA_HISTOGRAM_ENUMERATION( + "Cookie.SameSiteDifferentSchemeResponse", + options.same_site_cookie_context().ConvertToMetricsValue(), + CookieOptions::SameSiteCookieContext::MetricCount()); + AddSameSiteCrossSchemeWarning(status, options.same_site_cookie_context()); } } @@ -754,43 +759,50 @@ void net::CanonicalCookie::AddSameSiteCrossSchemeWarning( CookieInclusionStatus* status, - CookieOptions::SameSiteCookieContext context) const { - switch (context) { - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL: - status->AddWarningReason( - CookieInclusionStatus:: - WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL); - break; - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL: - status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_LAX_CROSS_SCHEME_SECURE_URL); - break; - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL: - status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_STRICT_CROSS_SCHEME_SECURE_URL); - break; - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL: - status->AddWarningReason( - CookieInclusionStatus:: - WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL); - break; - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL: - status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_LAX_CROSS_SCHEME_INSECURE_URL); - break; - case CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL: - status->AddWarningReason( - CookieInclusionStatus:: - WARN_SAMESITE_STRICT_CROSS_SCHEME_INSECURE_URL); - break; - default: - break; + CookieOptions::SameSiteCookieContext same_site_context) const { + if (same_site_context.cross_schemeness == + CookieOptions::SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE) { + switch (same_site_context.context) { + case CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX_METHOD_UNSAFE: + status->AddWarningReason( + CookieInclusionStatus:: + WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL); + break; + case CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX: + status->AddWarningReason( + CookieInclusionStatus::WARN_SAMESITE_LAX_CROSS_SCHEME_SECURE_URL); + break; + case CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT: + status->AddWarningReason( + CookieInclusionStatus:: + WARN_SAMESITE_STRICT_CROSS_SCHEME_SECURE_URL); + break; + default: + break; + } + } else if (same_site_context.cross_schemeness == + CookieOptions::SameSiteCookieContext::CrossSchemeness:: + SECURE_INSECURE) { + switch (same_site_context.context) { + case CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX_METHOD_UNSAFE: + status->AddWarningReason( + CookieInclusionStatus:: + WARN_SAMESITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL); + break; + case CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX: + status->AddWarningReason( + CookieInclusionStatus::WARN_SAMESITE_LAX_CROSS_SCHEME_INSECURE_URL); + break; + case CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT: + status->AddWarningReason( + CookieInclusionStatus:: + WARN_SAMESITE_STRICT_CROSS_SCHEME_INSECURE_URL); + break; + default: + break; + } } }
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc index 6235f47..493af3f 100644 --- a/net/cookies/canonical_cookie_unittest.cc +++ b/net/cookies/canonical_cookie_unittest.cc
@@ -708,33 +708,38 @@ const base::TimeDelta kLongAge = kLaxAllowUnsafeMaxAge * 4; const base::TimeDelta kShortAge = kLaxAllowUnsafeMaxAge / 4; + using SameSiteCookieContext = CookieOptions::SameSiteCookieContext; + // Test cases that are the same regardless of feature status or access // semantics: std::vector<IncludeForRequestURLTestCase> common_test_cases = { // Strict cookies: {"Common=1;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT)}, {"Common=2;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT)}, {"Common=3;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT)}, {"Common=4;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus()}, {"Common=5;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -742,8 +747,9 @@ WARN_SAMESITE_STRICT_CROSS_SCHEME_SECURE_URL})}, {"Common=6;SameSite=Strict", CookieSameSite::STRICT_MODE, CookieEffectiveSameSite::STRICT_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -752,26 +758,29 @@ // Lax cookies: {"Common=7;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus::EXCLUDE_SAMESITE_LAX)}, {"Common=8;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus::EXCLUDE_SAMESITE_LAX)}, {"Common=9;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus()}, {"Common=10;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus()}, {"Common=11;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -779,8 +788,9 @@ WARN_SAMESITE_LAX_CROSS_SCHEME_SECURE_URL})}, {"Common=12;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -788,8 +798,9 @@ WARN_SAMESITE_STRICT_CROSS_SCHEME_SECURE_URL})}, {"Common=13;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -797,8 +808,9 @@ WARN_SAMESITE_LAX_CROSS_SCHEME_INSECURE_URL})}, {"Common=14;SameSite=Lax", CookieSameSite::LAX_MODE, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -807,39 +819,45 @@ // None and Secure cookies: {"Common=15;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus()}, {"Common=16;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus()}, {"Common=17;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus()}, {"Common=18;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus()}, {"Common=19;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), CanonicalCookie::CookieInclusionStatus()}, {"Common=20;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), CanonicalCookie::CookieInclusionStatus()}, {"Common=21;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), CanonicalCookie::CookieInclusionStatus()}, {"Common=22;SameSite=None;Secure", CookieSameSite::NO_RESTRICTION, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), CanonicalCookie::CookieInclusionStatus()}}; // Test cases where the default is None (either access semantics is LEGACY, or @@ -848,7 +866,7 @@ // Unspecified cookies (without SameSite-by-default): {"DefaultNone=1", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -856,7 +874,8 @@ WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT})}, {"DefaultNone=2", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -864,11 +883,12 @@ WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT})}, {"DefaultNone=3", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus()}, {"DefaultNone=4", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::NO_RESTRICTION, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus()}}; // Test cases where the default is Lax (either access semantics is NONLEGACY, @@ -877,7 +897,7 @@ // Unspecified recently-created cookies (with SameSite-by-default): {"DefaultLax=1", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus:: EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, @@ -886,7 +906,8 @@ kShortAge}, {"DefaultLax=2", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus::MakeFromReasonsForTesting( std::vector< CanonicalCookie::CookieInclusionStatus::ExclusionReason>(), @@ -895,16 +916,17 @@ kShortAge}, {"DefaultLax=3", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus(), kShortAge}, {"DefaultLax=4", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus(), kShortAge}, // Unspecified not-recently-created cookies (with SameSite-by-default): {"DefaultLax=5", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus:: EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, @@ -913,7 +935,8 @@ kLongAge}, {"DefaultLax=6", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE), CanonicalCookie::CookieInclusionStatus( CanonicalCookie::CookieInclusionStatus:: EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, @@ -922,11 +945,12 @@ kLongAge}, {"DefaultLax=7", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), CanonicalCookie::CookieInclusionStatus(), kLongAge}, {"DefaultLax=8", CookieSameSite::UNSPECIFIED, CookieEffectiveSameSite::LAX_MODE, - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), CanonicalCookie::CookieInclusionStatus(), kLongAge}, }; @@ -1032,8 +1056,8 @@ base::Optional<base::Time> server_time = base::nullopt; CookieOptions options; options.set_exclude_httponly(); - options.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::CROSS_SITE); + options.set_same_site_cookie_context(CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE)); // Test IncludeForRequestURL() // Note: This is a cookie that should never exist normally, because Create() @@ -1978,26 +2002,36 @@ CookieOptions context_cross_site; CookieOptions context_same_site_lax; context_same_site_lax.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX)); CookieOptions context_same_site_strict; context_same_site_strict.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT)); CookieOptions context_same_site_lax_to_secure; context_same_site_lax_to_secure.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX, + CookieOptions::SameSiteCookieContext::CrossSchemeness:: + INSECURE_SECURE)); CookieOptions context_same_site_strict_to_secure; context_same_site_strict_to_secure.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + CookieOptions::SameSiteCookieContext::CrossSchemeness:: + INSECURE_SECURE)); CookieOptions context_same_site_lax_to_insecure; context_same_site_lax_to_insecure.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX, + CookieOptions::SameSiteCookieContext::CrossSchemeness:: + SECURE_INSECURE)); CookieOptions context_same_site_strict_to_insecure; context_same_site_strict_to_insecure.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + CookieOptions::SameSiteCookieContext::CrossSchemeness:: + SECURE_INSECURE)); { CanonicalCookie cookie_same_site_unrestricted(
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index 84a7d50..783485c 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc
@@ -301,9 +301,9 @@ // |same_site_requirement|, and the options permit HttpOnly access. bool IsHttpSameSiteContextAtLeast( const CookieOptions& options, - CookieOptions::SameSiteCookieContext same_site_requirement) { + CookieOptions::SameSiteCookieContext::ContextType same_site_requirement) { return !options.exclude_httponly() && - options.same_site_cookie_context() >= same_site_requirement; + options.same_site_cookie_context().context >= same_site_requirement; } } // namespace @@ -1713,7 +1713,8 @@ (cookie_util:: IsRecentHttpSameSiteAccessGrantsLegacyCookieSemanticsEnabled() && IsHttpSameSiteContextAtLeast( - options, CookieOptions::SameSiteCookieContext::SAME_SITE_LAX)); + options, + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX)); // If the current cookie access is not itself http-and-same-site, but the last // one that was, was recent enough, (and the corresponding feature is enabled) @@ -1761,10 +1762,11 @@ // time should not be updated when the cookie is accessed to populate the UI.) if (!options.update_access_time()) return; - - CookieOptions::SameSiteCookieContext same_site_requirement = - is_set ? CookieOptions::SameSiteCookieContext::SAME_SITE_LAX - : CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT; + CookieOptions::SameSiteCookieContext::ContextType same_site_requirement; + same_site_requirement = + is_set + ? CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX + : CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT; if (IsHttpSameSiteContextAtLeast(options, same_site_requirement)) last_http_same_site_accesses_[cookie.UniqueKey()] = base::TimeTicks::Now(); }
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc index 9663b25..477961d 100644 --- a/net/cookies/cookie_monster_unittest.cc +++ b/net/cookies/cookie_monster_unittest.cc
@@ -1631,7 +1631,8 @@ return_excluded.set_return_excluded_cookies(); return_excluded.set_exclude_httponly(); return_excluded.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT)); excluded_cookies = GetExcludedCookiesForURLWithOptions( cm.get(), http_www_foo_.url(), return_excluded); @@ -3366,7 +3367,8 @@ CookieMonster cm(nullptr, nullptr); CookieOptions env_cross_site; env_cross_site.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::CROSS_SITE); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE)); CanonicalCookie::CookieInclusionStatus status; // Cookie can be created successfully; SameSite is not checked on Creation. @@ -3428,7 +3430,8 @@ // not allow httponly. CookieOptions options_no_httponly; options_no_httponly.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT)); options_no_httponly.set_exclude_httponly(); // Default, but make it explicit. ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> callback; cm.SetCanonicalCookieAsync(std::move(cookie), "http", options_no_httponly, @@ -3861,7 +3864,8 @@ CookieOptions http_lax_options; http_lax_options.set_include_httponly(); http_lax_options.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX)); // This one only works because it's treated as Legacy, otherwise it would be // rejected for being SameSite=None without secure. EXPECT_TRUE(CreateAndSetCookie(cm_.get(), kHttpUrl, "cookie=1;SameSite=None", @@ -3899,7 +3903,8 @@ CookieOptions exclude_http_lax_options; exclude_http_lax_options.set_exclude_httponly(); exclude_http_lax_options.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX)); EXPECT_TRUE(CreateAndSetCookie(cm_.get(), kHttpUrl, "cookie=1", exclude_http_lax_options)); // There is no recent eligible last access time, because we deleted the @@ -3918,7 +3923,8 @@ CookieOptions http_strict_options; http_strict_options.set_include_httponly(); http_strict_options.set_same_site_cookie_context( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT)); EXPECT_FALSE(CreateAndSetCookie(cm_.get(), kHttpUrl, "cookie=2;Secure", http_strict_options)); EXPECT_EQ("", GetCookiesWithOptions(cm_.get(), kHttpUrl, CookieOptions()));
diff --git a/net/cookies/cookie_options.cc b/net/cookies/cookie_options.cc index 786c338b..252de95 100644 --- a/net/cookies/cookie_options.cc +++ b/net/cookies/cookie_options.cc
@@ -8,10 +8,25 @@ namespace net { +CookieOptions::SameSiteCookieContext +CookieOptions::SameSiteCookieContext::MakeInclusive() { + return SameSiteCookieContext(ContextType::SAME_SITE_STRICT); +} + +int64_t CookieOptions::SameSiteCookieContext::ConvertToMetricsValue() const { + if (cross_schemeness == CrossSchemeness::INSECURE_SECURE) { + return static_cast<int64_t>(context) | kToSecureMask; + } else if (cross_schemeness == CrossSchemeness::SECURE_INSECURE) { + return static_cast<int64_t>(context) | kToInsecureMask; + } + return static_cast<int64_t>(context); +} + // Keep default values in sync with content/public/common/cookie_manager.mojom. CookieOptions::CookieOptions() : exclude_httponly_(true), - same_site_cookie_context_(SameSiteCookieContext::CROSS_SITE), + same_site_cookie_context_(SameSiteCookieContext( + SameSiteCookieContext::ContextType::CROSS_SITE)), update_access_time_(true), return_excluded_cookies_(false) {} @@ -19,9 +34,20 @@ CookieOptions CookieOptions::MakeAllInclusive() { CookieOptions options; options.set_include_httponly(); - options.set_same_site_cookie_context(SameSiteCookieContext::SAME_SITE_STRICT); + options.set_same_site_cookie_context(SameSiteCookieContext::MakeInclusive()); options.set_do_not_update_access_time(); return options; } +bool operator==(const CookieOptions::SameSiteCookieContext& lhs, + const CookieOptions::SameSiteCookieContext& rhs) { + return std::tie(lhs.context, lhs.cross_schemeness) == + std::tie(rhs.context, rhs.cross_schemeness); +} + +bool operator!=(const CookieOptions::SameSiteCookieContext& lhs, + const CookieOptions::SameSiteCookieContext& rhs) { + return !(lhs == rhs); +} + } // namespace net
diff --git a/net/cookies/cookie_options.h b/net/cookies/cookie_options.h index 1c1aaad1..4cae02e 100644 --- a/net/cookies/cookie_options.h +++ b/net/cookies/cookie_options.h
@@ -16,38 +16,70 @@ class NET_EXPORT CookieOptions { public: - // Mask indicating insecure site-for-cookies and secure request/response. - static const int kToSecureMask = 1 << 5; - // Mask indicating secure site-for-cookies and insecure request/response. - static const int kToInsecureMask = kToSecureMask << 1; // Relation between the cookie and the navigational environment. - // CROSS_SITE to SAME_SITE_STRICT are ordered from least to most trusted - // environment. The remaining values are reiterations with additional bits for - // cross-scheme contexts. Don't renumber, used in histograms. - enum class SameSiteCookieContext { - CROSS_SITE = 0, - // Same rules as lax but the http method is unsafe. - SAME_SITE_LAX_METHOD_UNSAFE = 1, - SAME_SITE_LAX = 2, - SAME_SITE_STRICT = 3, - // The CROSS_SCHEME enums are for when the url and site_for_cookies - // differ in their schemes (http vs https). Their values are chosen such - // that the CROSS_SCHEME flag can be bitmasked out. - // SECURE_URL indicates either a request to a secure url or a response from - // a secure url, similarly for INSECURE. - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL = - SAME_SITE_LAX_METHOD_UNSAFE | kToSecureMask, - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL = SAME_SITE_LAX | kToSecureMask, - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL = SAME_SITE_STRICT | kToSecureMask, - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL = - SAME_SITE_LAX_METHOD_UNSAFE | kToInsecureMask, - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL = SAME_SITE_LAX | kToInsecureMask, - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL = - SAME_SITE_STRICT | kToInsecureMask, + class NET_EXPORT SameSiteCookieContext { + public: + // CROSS_SITE to SAME_SITE_STRICT are ordered from least to most trusted + // environment. Don't renumber, used in histograms. + enum class ContextType { + CROSS_SITE = 0, + // Same rules as lax but the http method is unsafe. + SAME_SITE_LAX_METHOD_UNSAFE = 1, + SAME_SITE_LAX = 2, + SAME_SITE_STRICT = 3, - // Keep last, used for histograms. - COUNT + // Keep last, used for histograms. + COUNT + }; + + // Used for when, and in what direction, same-site requests and responses + // are made in a cross-scheme context. Currently only used for metrics + // gathering and does not affect cookie behavior. + enum class CrossSchemeness { + NONE, + INSECURE_SECURE, // Insecure site-for-cookies, secure request/response + SECURE_INSECURE // Secure site-for-cookies, insecure request/response + }; + + SameSiteCookieContext() : SameSiteCookieContext(ContextType::CROSS_SITE) {} + explicit SameSiteCookieContext( + ContextType same_site_context, + CrossSchemeness cross_schemeness = CrossSchemeness::NONE) + : context(same_site_context), cross_schemeness(cross_schemeness) {} + + bool IsDifferentScheme() const { + return cross_schemeness != SameSiteCookieContext::CrossSchemeness::NONE; + } + + // Convenience method which returns a SameSiteCookieContext with the most + // inclusive context. This allows access to all SameSite cookies. + static SameSiteCookieContext MakeInclusive(); + + // The following functions are for conversion to the previous style of + // SameSiteCookieContext for metrics usage. This may be removed when the + // metrics using them are also removed. + + // Used as the "COUNT" entry in a histogram enum. + static constexpr int64_t MetricCount() { + return (static_cast<int>(ContextType::SAME_SITE_STRICT) | + kToInsecureMask) + + 1; + } + int64_t ConvertToMetricsValue() const; + + ContextType context; + + CrossSchemeness cross_schemeness; + + private: + // The following variables are for conversion to the previous style of + // SameSiteCookieContext for metrics usage. This may be removed when the + // metrics using them are also removed. + // Mask indicating insecure site-for-cookies and secure request/response. + static const int kToSecureMask = 1 << 5; + // Mask indicating secure site-for-cookies and insecure request/response. + static const int kToInsecureMask = kToSecureMask << 1; }; // Creates a CookieOptions object which: @@ -77,33 +109,9 @@ // Strips off the cross-scheme bits to only return the same-site context. SameSiteCookieContext same_site_cookie_context() const { - return RemoveCrossSchemeBitmask(same_site_cookie_context_); - } - - SameSiteCookieContext same_site_cookie_context_full() const { return same_site_cookie_context_; } - static SameSiteCookieContext ApplyCrossSchemeBitmask( - SameSiteCookieContext context, - int mask) { - int return_value = static_cast<int>(context); - return_value = return_value | mask; - return static_cast<CookieOptions::SameSiteCookieContext>(return_value); - } - - static SameSiteCookieContext RemoveCrossSchemeBitmask( - SameSiteCookieContext context) { - int return_value = static_cast<int>(context); - return_value = return_value & ~(kToSecureMask | kToInsecureMask); - return static_cast<CookieOptions::SameSiteCookieContext>(return_value); - } - - bool IsDifferentScheme() const { - return static_cast<int>(same_site_cookie_context_) & - (kToSecureMask | kToInsecureMask); - } - void set_update_access_time() { update_access_time_ = true; } void set_do_not_update_access_time() { update_access_time_ = false; } bool update_access_time() const { return update_access_time_; } @@ -127,6 +135,12 @@ bool return_excluded_cookies_; }; +NET_EXPORT bool operator==(const CookieOptions::SameSiteCookieContext& lhs, + const CookieOptions::SameSiteCookieContext& rhs); + +NET_EXPORT bool operator!=(const CookieOptions::SameSiteCookieContext& lhs, + const CookieOptions::SameSiteCookieContext& rhs); + } // namespace net #endif // NET_COOKIES_COOKIE_OPTIONS_H_
diff --git a/net/cookies/cookie_store_change_unittest.h b/net/cookies/cookie_store_change_unittest.h index 0361b26..ba3767f 100644 --- a/net/cookies/cookie_store_change_unittest.h +++ b/net/cookies/cookie_store_change_unittest.h
@@ -382,7 +382,7 @@ CookieOptions allow_httponly; allow_httponly.set_include_httponly(); allow_httponly.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(this->CreateAndSetCookie(cs, this->http_www_foo_.url(), "A=C; path=/path1; httponly", @@ -1179,7 +1179,7 @@ CookieOptions allow_httponly; allow_httponly.set_include_httponly(); allow_httponly.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(this->CreateAndSetCookie(cs, this->http_www_foo_.url(), "A=C; path=/foo; httponly", @@ -2203,7 +2203,7 @@ CookieOptions allow_httponly; allow_httponly.set_include_httponly(); allow_httponly.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(this->CreateAndSetCookie(cs, this->http_www_foo_.url(), "abc=hij; path=/foo; httponly",
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h index 847ee04f..1e86c65 100644 --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h
@@ -144,7 +144,7 @@ if (!CookieStoreTestTraits::supports_http_only) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); return GetCookiesWithOptions(cs, url, options); } @@ -217,7 +217,7 @@ if (can_modify_httponly) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cs->SetCanonicalCookieAsync(std::move(cookie), std::move(source_scheme), options, callback.MakeCallback()); callback.WaitUntilDone(); @@ -232,7 +232,7 @@ if (!CookieStoreTestTraits::supports_http_only) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); return CreateAndSetCookie(cs, url, cookie_line, options, base::make_optional(server_time)); } @@ -244,7 +244,7 @@ if (!CookieStoreTestTraits::supports_http_only) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); return CreateAndSetCookie(cs, url, cookie_line, options); } @@ -264,7 +264,7 @@ options.set_include_httponly(); // Allow setting SameSite cookies. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); DCHECK(cs); ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus> callback; @@ -285,7 +285,7 @@ if (can_modify_httponly) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cs->SetCanonicalCookieAsync(std::move(cookie), std::move(source_scheme), options, callback.MakeCallback()); callback.WaitUntilDone(); @@ -484,7 +484,7 @@ if (TypeParam::supports_http_only) { net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookies = this->GetCookieListWithOptions(cs, this->www_foo_bar_.url(), options); it = cookies.begin(); @@ -1217,7 +1217,7 @@ if (!TypeParam::supports_http_only) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); GURL url("http://www7.ipdl.inpit.go.jp/Tokujitu/tjkta.ipdl?N0000=108"); std::string set_cookie_line = "ACSTM=20130308043820420042; path=/; domain=ipdl.inpit.go.jp; Expires="; @@ -1247,7 +1247,7 @@ CookieOptions options; options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); // Create a httponly cookie. EXPECT_TRUE(this->CreateAndSetCookie(cs, this->http_www_foo_.url(), @@ -1535,7 +1535,7 @@ CookieOptions allow_httponly; allow_httponly.set_include_httponly(); allow_httponly.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(this->CreateAndSetCookie(cs, url_foo, "b=val2; path=/path1; httponly; " "expires=Mon, 18-Apr-22 22:50:14 GMT", @@ -1591,7 +1591,7 @@ if (!TypeParam::supports_http_only) options.set_include_httponly(); options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(this->CreateAndSetCookie(cs, url_foo, "a", options)); CookieList list = this->GetAllCookiesForURL(cs, url_foo); @@ -1634,7 +1634,7 @@ CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); CookieList cookies = this->GetCookieListWithOptions( cs, GURL("http://d.c.b.a.foo.com/aa/bb/cc/dd"), options);
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc index 5f48629..43b0cac51 100644 --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc
@@ -74,50 +74,53 @@ return false; } -CookieOptions::SameSiteCookieContext ComputeSchemeChange( +CookieOptions::SameSiteCookieContext::CrossSchemeness ComputeSchemeChange( CookieOptions::SameSiteCookieContext same_site_type, const GURL& url, const SiteForCookies& site_for_cookies) { - DCHECK(same_site_type == - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT || - same_site_type == CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + DCHECK(same_site_type.context >= + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX); + CookieOptions::SameSiteCookieContext::CrossSchemeness cross_schemeness = + CookieOptions::SameSiteCookieContext::CrossSchemeness::NONE; bool url_secure = url.SchemeIsCryptographic(); bool site_for_cookies_secure = GURL::SchemeIsCryptographic(site_for_cookies.scheme()); - // Check for different schemes and add flag if so. if (url_secure && !site_for_cookies_secure) { - same_site_type = CookieOptions::ApplyCrossSchemeBitmask( - same_site_type, CookieOptions::kToSecureMask); + cross_schemeness = + CookieOptions::SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE; } else if (!url_secure && site_for_cookies_secure) { - same_site_type = CookieOptions::ApplyCrossSchemeBitmask( - same_site_type, CookieOptions::kToInsecureMask); + cross_schemeness = + CookieOptions::SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE; } - return same_site_type; + return cross_schemeness; } CookieOptions::SameSiteCookieContext ComputeSameSiteContext( const GURL& url, const SiteForCookies& site_for_cookies, const base::Optional<url::Origin>& initiator) { + CookieOptions::SameSiteCookieContext same_site_type( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE); if (site_for_cookies.IsFirstParty(url)) { - CookieOptions::SameSiteCookieContext same_site_type; // Create a SiteForCookies object from the initiator so that we can reuse // IsFirstParty(). if (!initiator || SiteForCookies::FromOrigin(initiator.value()).IsFirstParty(url)) { - same_site_type = CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT; + same_site_type.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT; } else { - same_site_type = CookieOptions::SameSiteCookieContext::SAME_SITE_LAX; + same_site_type.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; } - same_site_type = ComputeSchemeChange(same_site_type, url, site_for_cookies); - - return same_site_type; + same_site_type.cross_schemeness = + ComputeSchemeChange(same_site_type, url, site_for_cookies); } - return CookieOptions::SameSiteCookieContext::CROSS_SITE; + + return same_site_type; } } // namespace @@ -449,28 +452,27 @@ // but appear like cross-site ones. // // * Otherwise, do not include same-site cookies. + CookieOptions::SameSiteCookieContext same_site_context; + if (attach_same_site_cookies) { - return ComputeSchemeChange( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, url, - site_for_cookies); + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT; + same_site_context.cross_schemeness = + ComputeSchemeChange(same_site_context, url, site_for_cookies); + return same_site_context; } - CookieOptions::SameSiteCookieContext same_site_context = - ComputeSameSiteContext(url, site_for_cookies, initiator); - - int scheme_bitmask = - static_cast<int>(same_site_context) & - (CookieOptions::kToSecureMask | CookieOptions::kToInsecureMask); + same_site_context = ComputeSameSiteContext(url, site_for_cookies, initiator); // If the method is safe, the context is Lax. Otherwise, make a note that // the method is unsafe. - if (CookieOptions::RemoveCrossSchemeBitmask(same_site_context) == - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX && + if (same_site_context.context == + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX && !net::HttpUtil::IsMethodSafe(http_method)) { - return CookieOptions::ApplyCrossSchemeBitmask( - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, - scheme_bitmask); + same_site_context.context = CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX_METHOD_UNSAFE; } + return same_site_context; } @@ -480,9 +482,11 @@ const base::Optional<url::Origin>& initiator, bool attach_same_site_cookies) { if (attach_same_site_cookies) { - return ComputeSchemeChange( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, url, - site_for_cookies); + CookieOptions::SameSiteCookieContext same_site_context( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT); + same_site_context.cross_schemeness = + ComputeSchemeChange(same_site_context, url, site_for_cookies); + return same_site_context; } return ComputeSameSiteContext(url, site_for_cookies, initiator); } @@ -492,14 +496,19 @@ const SiteForCookies& site_for_cookies, const base::Optional<url::Origin>& initiator, bool attach_same_site_cookies) { + CookieOptions::SameSiteCookieContext same_site_context; // |initiator| is here in case it'll be decided to ignore |site_for_cookies| // for entirely browser-side requests (see https://crbug.com/958335). if (attach_same_site_cookies || site_for_cookies.IsFirstParty(url)) { - return ComputeSchemeChange( - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, url, - site_for_cookies); + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; + same_site_context.cross_schemeness = + ComputeSchemeChange(same_site_context, url, site_for_cookies); + return same_site_context; } else { - return CookieOptions::SameSiteCookieContext::CROSS_SITE; + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE; + return same_site_context; } } @@ -507,12 +516,17 @@ const GURL& url, const SiteForCookies& site_for_cookies, bool attach_same_site_cookies) { + CookieOptions::SameSiteCookieContext same_site_context; if (attach_same_site_cookies || site_for_cookies.IsFirstParty(url)) { - return ComputeSchemeChange( - CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, url, - site_for_cookies); + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; + same_site_context.cross_schemeness = + ComputeSchemeChange(same_site_context, url, site_for_cookies); + return same_site_context; } else { - return CookieOptions::SameSiteCookieContext::CROSS_SITE; + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE; + return same_site_context; } } @@ -520,14 +534,19 @@ const GURL& url, const SiteForCookies& site_for_cookies, bool attach_same_site_cookies) { + CookieOptions::SameSiteCookieContext same_site_context; // If the URL is same-site as site_for_cookies it's same-site as all frames // in the tree from the initiator frame up --- including the initiator frame. if (attach_same_site_cookies || site_for_cookies.IsFirstParty(url)) { - return ComputeSchemeChange( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, url, - site_for_cookies); + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT; + same_site_context.cross_schemeness = + ComputeSchemeChange(same_site_context, url, site_for_cookies); + return same_site_context; } else { - return CookieOptions::SameSiteCookieContext::CROSS_SITE; + same_site_context.context = + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE; + return same_site_context; } }
diff --git a/net/cookies/cookie_util_unittest.cc b/net/cookies/cookie_util_unittest.cc index 10ee01b..62c9002 100644 --- a/net/cookies/cookie_util_unittest.cc +++ b/net/cookies/cookie_util_unittest.cc
@@ -254,70 +254,79 @@ } TEST(CookieUtilTest, TestComputeSameSiteContextForScriptGet) { + using SameSiteCookieContext = CookieOptions::SameSiteCookieContext; // |site_for_cookies| not matching the URL -> it's cross-site. EXPECT_EQ( - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), base::nullopt /*initiator*/, false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::CROSS_SITE, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://notexample.com")), - url::Origin::Create(GURL("http://example.com")), - false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://notexample.com")), + url::Origin::Create(GURL("http://example.com")), + false /* attach_same_site_cookies */)); EXPECT_EQ( - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://a.com"), SiteForCookies::FromUrl(GURL("http://b.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /* attach_same_site_cookies */)); // Same |site_for_cookies|, but not |initiator| -> it's same-site lax. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - false /* attach_same_site_cookies */)); + EXPECT_EQ( + CookieOptions::SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + false /* attach_same_site_cookies */)); // This isn't a full on origin check --- subdomains and different schema are // accepted. - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://sub.example.com"), - SiteForCookies::FromUrl(GURL("http://sub2.example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://sub.example.com"), + SiteForCookies::FromUrl(GURL("http://sub2.example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://sub.example.com"), - SiteForCookies::FromUrl(GURL("http://sub.example.com:8080")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext(SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://sub.example.com"), + SiteForCookies::FromUrl(GURL("http://sub.example.com:8080")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + false /* attach_same_site_cookies */)); // nullopt |initiator| is trusted for purposes of strict, an opaque one isn't. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), @@ -325,165 +334,198 @@ false /* attach_same_site_cookies */)); EXPECT_EQ( - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), base::nullopt /*initiator*/, false /* attach_same_site_cookies */)); EXPECT_EQ( - CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), base::nullopt /*initiator*/, false /* attach_same_site_cookies */)); EXPECT_EQ( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), base::nullopt /*initiator*/, false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin(), false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin(), + false /* attach_same_site_cookies */)); // |attach_same_site_cookies| causes (some variant of) SAME_SITE_STRICT to be // returned. EXPECT_EQ( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), base::nullopt /*initiator*/, true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://notexample.com")), - url::Origin::Create(GURL("http://example.com")), - true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://notexample.com")), + url::Origin::Create(GURL("http://example.com")), + true /* attach_same_site_cookies */)); EXPECT_EQ( - CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://a.com"), SiteForCookies::FromUrl(GURL("http://b.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForScriptGet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://sub.example.com"), - SiteForCookies::FromUrl(GURL("http://sub2.example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://sub.example.com"), + SiteForCookies::FromUrl(GURL("http://sub2.example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForScriptGet( - GURL("http://sub.example.com"), - SiteForCookies::FromUrl(GURL("http://sub.example.com:8080")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForScriptGet( + GURL("http://sub.example.com"), + SiteForCookies::FromUrl(GURL("http://sub.example.com:8080")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /* attach_same_site_cookies */)); } TEST(CookieUtilTest, ComputeSameSiteContextForRequest) { + using SameSiteCookieContext = CookieOptions::SameSiteCookieContext; EXPECT_EQ( - CookieOptions::SameSiteCookieContext::CROSS_SITE, + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), cookie_util::ComputeSameSiteContextForRequest( "GET", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), base::nullopt /*initiator*/, false /*attach_same_site_cookies*/)); // |attach_same_site_cookies| = true bypasses all checks. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForRequest( - "GET", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForRequest( + "GET", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForRequest( - "POST", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForRequest( + "POST", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForRequest( - "GET", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://question.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - true /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForRequest( + "GET", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://question.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + true /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForRequest( - "GET", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://example.com")), - false /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForRequest( + "GET", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://example.com")), + false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - cookie_util::ComputeSameSiteContextForRequest( - "POST", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://example.com")), - false /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT), + cookie_util::ComputeSameSiteContextForRequest( + "POST", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://example.com")), + false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForRequest( "GET", GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://example.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://example.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForRequest( "GET", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), url::Origin::Create(GURL("http://example.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), @@ -491,61 +533,71 @@ false /*attach_same_site_cookies*/)); // Normally, lax requests also require a safe method. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForRequest( - "GET", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - false /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForRequest( + "GET", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForRequest( - "HEAD", GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://example.com")), - url::Origin::Create(GURL("http://from-elsewhere.com")), - false /*attach_same_site_cookies*/)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForRequest( + "HEAD", GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://example.com")), + url::Origin::Create(GURL("http://from-elsewhere.com")), + false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForRequest( "GET", GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForRequest( "GET", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, + EXPECT_EQ(SameSiteCookieContext(CookieOptions::SameSiteCookieContext:: + ContextType::SAME_SITE_LAX_METHOD_UNSAFE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("http://example.com"), SiteForCookies::FromUrl(GURL("https://example.com")), url::Origin::Create(GURL("http://from-elsewhere.com")), false /*attach_same_site_cookies*/)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX_METHOD_UNSAFE, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForRequest( "POST", GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), @@ -554,80 +606,99 @@ } TEST(CookieUtilTest, ComputeSameSiteContextForSet) { - EXPECT_EQ(CookieOptions::SameSiteCookieContext::CROSS_SITE, + using SameSiteCookieContext = CookieOptions::SameSiteCookieContext; + EXPECT_EQ(SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), cookie_util::ComputeSameSiteContextForResponse( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), base::nullopt, false /* attach_same_site_cookies */)); // Same as above except |attach_same_site_cookies| makes it return LAX. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForResponse( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://notexample.com")), - base::nullopt, true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForResponse( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://notexample.com")), base::nullopt, + true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::CROSS_SITE, + EXPECT_EQ(SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), cookie_util::ComputeSameSiteContextForScriptSet( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), false /* attach_same_site_cookies */)); // Same as above except |attach_same_site_cookies| makes it return LAX. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptSet( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://notexample.com")), - true /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptSet( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://notexample.com")), + true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForResponse( - GURL("http://example.com/dir"), - SiteForCookies::FromUrl(GURL("http://sub.example.com")), - base::nullopt, false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForResponse( - GURL("http://example.com/dir"), - SiteForCookies::FromUrl(GURL("http://sub.example.com")), - base::nullopt, true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForResponse( + GURL("http://example.com/dir"), + SiteForCookies::FromUrl(GURL("http://sub.example.com")), + base::nullopt, false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForResponse( + GURL("http://example.com/dir"), + SiteForCookies::FromUrl(GURL("http://sub.example.com")), + base::nullopt, true /* attach_same_site_cookies */)); + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForResponse( GURL("http://example.com/dir"), SiteForCookies::FromUrl(GURL("https://sub.example.com")), base::nullopt, false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForResponse( GURL("http://example.com/dir"), SiteForCookies::FromUrl(GURL("https://sub.example.com")), base::nullopt, true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForResponse( GURL("https://example.com/dir"), SiteForCookies::FromUrl(GURL("http://sub.example.com")), base::nullopt, false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForResponse( GURL("https://example.com/dir"), SiteForCookies::FromUrl(GURL("http://sub.example.com")), base::nullopt, true /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - cookie_util::ComputeSameSiteContextForScriptSet( - GURL("http://example.com/dir"), - SiteForCookies::FromUrl(GURL("http://sub.example.com")), - false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, + EXPECT_EQ( + SameSiteCookieContext( + CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX), + cookie_util::ComputeSameSiteContextForScriptSet( + GURL("http://example.com/dir"), + SiteForCookies::FromUrl(GURL("http://sub.example.com")), + false /* attach_same_site_cookies */)); + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::SECURE_INSECURE), cookie_util::ComputeSameSiteContextForScriptSet( GURL("http://example.com/dir"), SiteForCookies::FromUrl(GURL("https://sub.example.com")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_LAX, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForScriptSet( GURL("https://example.com/dir"), SiteForCookies::FromUrl(GURL("http://sub.example.com")), @@ -635,15 +706,18 @@ } TEST(CookieUtilTest, TestComputeSameSiteContextForSubresource) { + using SameSiteCookieContext = CookieOptions::SameSiteCookieContext; // |site_for_cookies| not matching the URL -> it's cross-site. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::CROSS_SITE, - cookie_util::ComputeSameSiteContextForSubresource( - GURL("http://example.com"), - SiteForCookies::FromUrl(GURL("http://notexample.com")), - false /* attach_same_site_cookies */)); + EXPECT_EQ( + SameSiteCookieContext(SameSiteCookieContext::ContextType::CROSS_SITE), + cookie_util::ComputeSameSiteContextForSubresource( + GURL("http://example.com"), + SiteForCookies::FromUrl(GURL("http://notexample.com")), + false /* attach_same_site_cookies */)); // Same as above except |attach_same_site_cookies| makes it return STRICT. - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForSubresource( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://notexample.com")), @@ -651,26 +725,30 @@ // This isn't a full on origin check --- subdomains and different schema are // accepted. - EXPECT_EQ(CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT, + SameSiteCookieContext::CrossSchemeness::INSECURE_SECURE), cookie_util::ComputeSameSiteContextForSubresource( GURL("https://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForSubresource( GURL("http://sub.example.com"), SiteForCookies::FromUrl(GURL("http://sub2.example.com")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForSubresource( GURL("http://sub.example.com"), SiteForCookies::FromUrl(GURL("http://sub.example.com:8080")), false /* attach_same_site_cookies */)); - EXPECT_EQ(CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(SameSiteCookieContext( + SameSiteCookieContext::ContextType::SAME_SITE_STRICT), cookie_util::ComputeSameSiteContextForSubresource( GURL("http://example.com"), SiteForCookies::FromUrl(GURL("http://example.com")),
diff --git a/net/data/ssl/certificates/10_year_validity.pem b/net/data/ssl/certificates/10_year_validity.pem index 47e0e10e..99368b9 100644 --- a/net/data/ssl/certificates/10_year_validity.pem +++ b/net/data/ssl/certificates/10_year_validity.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 12 (0xc) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:ac + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Oct 30 00:00:00 2008 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ae:21:b3:7f:5c:19:df:fd:97:51:cd:d4:30:35: - eb:50:4e:66:03:78:79:10:82:cb:02:5f:af:63:30: - 4a:54:ef:3e:3b:b8:76:7f:73:23:88:a7:4f:3c:65: - 78:1b:11:ea:49:f1:25:d4:cc:17:67:12:51:ce:a1: - f6:15:57:c6:9c:19:3c:8c:f0:9d:ce:c5:5e:a4:36: - d7:61:d3:21:21:c7:33:78:47:d6:74:e9:fa:b8:d8: - f2:f4:01:b4:ac:9f:69:d0:09:bc:1a:7c:35:7c:12: - c4:54:ba:5b:2b:80:37:6c:75:fe:08:36:44:bc:f1: - 3b:a9:c9:2b:a0:97:f8:75:4f:cd:27:24:f0:66:5e: - 8b:b9:b0:b1:49:50:80:80:00:de:83:e3:cb:09:c5: - 14:6e:9a:1f:28:0d:4a:7a:3b:90:19:13:e6:d0:32: - 08:6f:97:5f:2a:3e:a7:88:ef:98:01:fd:0c:2c:2b: - ba:5c:24:33:1d:b7:c3:48:55:d5:e3:5e:c0:ea:e9: - b2:8b:f5:b4:5d:10:50:48:88:59:0b:48:a5:80:94: - 2a:34:d6:b8:47:e6:ee:23:cc:e1:72:cf:ce:97:34: - 99:01:2f:66:7e:d4:39:be:5a:0a:01:47:8e:1d:5f: - 83:34:bf:69:6b:12:63:4c:47:25:0d:4c:b0:07:db: - 32:c7 + 00:b1:03:36:49:f8:96:0d:64:a9:d6:36:4a:c8:24: + b7:5b:75:14:2e:ab:dc:e3:36:13:99:2b:15:b5:31: + f6:04:52:3a:c8:e7:f4:68:f6:ec:a9:28:c8:c5:4c: + 16:6b:5a:a7:fc:ab:7a:52:d1:21:ce:a6:c3:86:b3: + 8e:1d:c6:e5:98:49:ab:81:2d:6b:98:b4:89:78:2c: + c1:33:44:8f:a6:f4:18:69:1d:42:58:f6:cb:9b:42: + 2b:05:5b:98:85:36:80:56:b7:3e:ff:09:72:d5:0e: + 44:9e:38:e4:57:f9:d3:0c:b0:21:c3:49:80:63:10: + 9e:33:b3:07:8a:a5:89:3c:58:f4:78:39:0c:d9:91: + 4d:e1:a5:48:d1:e6:f2:7e:fe:d7:5a:e7:0f:1e:60: + 0d:93:af:c4:d5:16:05:43:89:8a:85:ad:7d:74:e2: + 61:f5:84:43:02:9a:89:f5:fc:56:b8:94:b4:56:ad: + d7:c2:71:a8:64:f2:c8:2c:7c:06:00:51:41:2d:ef: + b8:0e:e6:f0:77:61:af:b2:ac:1f:3d:82:3d:57:2c: + 02:e4:ba:b6:11:cc:07:72:b1:a8:69:a5:d0:a6:d1: + 4d:d5:76:4e:41:80:a6:d8:3e:aa:80:ad:a6:45:de: + 8c:bb:83:b7:7f:a5:e9:8d:78:58:78:4a:4c:73:10: + 20:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 66:B2:C9:2E:D5:94:64:B0:57:CC:2C:7C:47:3E:4C:32:A0:62:1D:ED + 24:53:64:B9:97:60:01:71:F1:EA:6F:82:9E:63:93:B6:C2:87:CC:72 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 5d:52:44:7e:39:ff:d6:01:44:8a:a3:f2:b2:13:98:d2:cd:e1: - 00:09:23:2d:05:3a:73:39:96:c6:88:c2:c1:5f:b8:8a:2b:18: - 8c:71:df:56:87:ed:8d:d1:14:36:c3:ef:58:8a:99:ce:88:ba: - f3:80:d6:7f:31:2e:3d:3a:22:7d:de:1b:33:94:33:b1:e4:cb: - 30:bc:a6:48:fa:f9:1f:f3:12:a8:9f:38:5c:10:7d:50:d2:65: - ab:10:06:19:de:2f:a5:42:3f:70:1b:99:79:96:9d:e2:74:2a: - 90:b7:a7:37:61:23:3e:b9:c2:ae:d8:1a:a5:00:60:c6:e8:48: - ce:98:3e:0a:04:12:0c:ce:e1:3b:7a:14:e8:0a:44:78:51:37: - 0d:98:05:f5:d6:43:f1:4e:a3:48:0b:ea:44:da:03:6a:90:a2: - be:85:91:b6:07:43:ec:32:f8:d8:36:7f:d9:17:c9:ee:7b:50: - d6:ef:2b:1f:f2:9c:41:35:9d:7d:8a:34:87:df:3e:c7:78:55: - cc:89:b5:30:07:13:66:a8:ab:f8:72:9f:13:ed:58:14:25:85: - 06:1d:56:5b:84:5b:8a:53:22:73:55:17:08:0a:38:d7:1e:2f: - 74:58:d2:2b:72:64:a0:40:eb:ac:1a:bd:c6:65:ea:a4:3e:13: - 62:04:39:e0 + c5:32:68:ce:13:b6:f5:c3:9d:82:70:a3:b7:1b:0b:d0:4e:8c: + 2f:8d:1b:cb:6e:b9:66:32:a6:1f:3d:c8:b5:bb:b3:10:b9:6c: + 89:78:92:b5:e7:a8:ee:af:d0:8f:09:15:77:a0:45:cf:86:5f: + f7:41:86:97:87:00:8d:e7:55:ea:29:77:95:ea:a5:08:6a:1e: + 3b:e2:cc:63:f2:23:a4:63:ab:dd:e0:ee:0b:6c:dc:d6:ed:9a: + b2:84:a8:b8:0b:6a:9e:d9:78:1d:3f:56:75:ff:55:f8:7c:78: + 9a:88:73:31:64:b0:9b:36:67:7f:6e:5d:18:4b:ab:8d:67:06: + 43:91:19:76:df:f5:c7:4f:58:2a:56:19:f4:81:8a:6e:65:76: + 65:48:e1:3e:11:5b:88:6b:c0:46:b2:5e:79:4e:91:ff:94:d5: + 52:d5:63:66:08:99:2b:2a:7d:f4:f6:19:9c:33:00:ee:03:75: + 74:a9:72:90:c3:26:26:8f:d9:1e:f6:ed:ca:c1:a7:f1:c5:ce: + 12:ec:35:4d:45:db:87:01:d8:d5:31:56:35:5b:6f:9d:b8:18: + b6:61:e8:3c:fb:fb:23:32:a5:62:25:50:61:80:1f:02:0a:28: + 62:78:92:89:58:8d:18:23:6d:7c:ee:93:55:aa:2d:5c:e8:72: + f6:04:0a:9b -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBDDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTA4MTAzMDAw -MDAwMFoXDTE4MTAyOTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAK4hs39cGd/9l1HN1DA161BOZgN4eRCCywJfr2MwSlTvPju4dn9zI4in -TzxleBsR6knxJdTMF2cSUc6h9hVXxpwZPIzwnc7FXqQ212HTISHHM3hH1nTp+rjY -8vQBtKyfadAJvBp8NXwSxFS6WyuAN2x1/gg2RLzxO6nJK6CX+HVPzSck8GZei7mw -sUlQgIAA3oPjywnFFG6aHygNSno7kBkT5tAyCG+XXyo+p4jvmAH9DCwrulwkMx23 -w0hV1eNewOrpsov1tF0QUEiIWQtIpYCUKjTWuEfm7iPM4XLPzpc0mQEvZn7UOb5a -CgFHjh1fgzS/aWsSY0xHJQ1MsAfbMscCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFGayyS7VlGSwV8wsfEc+TDKgYh3tMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBdUkR+Of/WAUSKo/Ky -E5jSzeEACSMtBTpzOZbGiMLBX7iKKxiMcd9Wh+2N0RQ2w+9YipnOiLrzgNZ/MS49 -OiJ93hszlDOx5MswvKZI+vkf8xKonzhcEH1Q0mWrEAYZ3i+lQj9wG5l5lp3idCqQ -t6c3YSM+ucKu2BqlAGDG6EjOmD4KBBIMzuE7ehToCkR4UTcNmAX11kPxTqNIC+pE -2gNqkKK+hZG2B0PsMvjYNn/ZF8nue1DW7ysf8pxBNZ19ijSH3z7HeFXMibUwBxNm -qKv4cp8T7VgUJYUGHVZbhFuKUyJzVRcICjjXHi90WNIrcmSgQOusGr3GZeqkPhNi -BDng +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqrDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTA4MTAzMDAwMDAwMFoXDTE4MTAyOTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALEDNkn4lg1kqdY2Ssgkt1t1FC6r3OM2E5kr +FbUx9gRSOsjn9Gj27KkoyMVMFmtap/yrelLRIc6mw4azjh3G5ZhJq4Eta5i0iXgs +wTNEj6b0GGkdQlj2y5tCKwVbmIU2gFa3Pv8JctUORJ445Ff50wywIcNJgGMQnjOz +B4qliTxY9Hg5DNmRTeGlSNHm8n7+11rnDx5gDZOvxNUWBUOJioWtfXTiYfWEQwKa +ifX8VriUtFat18JxqGTyyCx8BgBRQS3vuA7m8Hdhr7KsHz2CPVcsAuS6thHMB3Kx +qGml0KbRTdV2TkGAptg+qoCtpkXejLuDt3+l6Y14WHhKTHMQILkCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFCRTZLmXYAFx8epvgp5jk7bCh8xyMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQDFMmjOE7b1w52CcKO3GwvQTowvjRvLbrlmMqYfPci1u7MQuWyJeJK156jur9CP +CRV3oEXPhl/3QYaXhwCN51XqKXeV6qUIah474sxj8iOkY6vd4O4LbNzW7ZqyhKi4 +C2qe2XgdP1Z1/1X4fHiaiHMxZLCbNmd/bl0YS6uNZwZDkRl23/XHT1gqVhn0gYpu +ZXZlSOE+EVuIa8BGsl55TpH/lNVS1WNmCJkrKn309hmcMwDuA3V0qXKQwyYmj9ke +9u3Kwafxxc4S7DVNRduHAdjVMVY1W2+duBi2Yeg8+/sjMqViJVBhgB8CCihieJKJ +WI0YI2187pNVqi1c6HL2BAqb -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/11_year_validity.pem b/net/data/ssl/certificates/11_year_validity.pem index 50eb0894..e18ba63 100644 --- a/net/data/ssl/certificates/11_year_validity.pem +++ b/net/data/ssl/certificates/11_year_validity.pem
@@ -1,41 +1,42 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 13 (0xd) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:ad + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Oct 30 00:00:00 2014 GMT - Not After : Jun 2 17:10:52 2028 GMT + Not After : Oct 30 00:00:00 2025 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:d2:33:c9:3e:ee:c5:00:08:54:d0:a9:26:f1:21: - 21:86:20:92:dc:1f:c9:0f:95:c3:60:8b:72:14:51: - 60:44:6e:b6:bd:f4:59:28:70:4c:df:87:e0:c9:2c: - db:c8:b3:4d:c8:72:92:0e:ab:55:a5:10:8e:e4:cf: - 77:23:77:25:a5:62:95:fc:32:b3:da:66:2f:ae:23: - 5e:3d:aa:1d:87:96:61:a5:eb:86:39:e1:74:a2:1d: - a2:50:e1:93:e6:dc:ab:70:99:e4:e4:49:72:6c:00: - e8:53:06:1f:86:19:37:79:83:2e:a5:69:b7:80:4c: - 06:f4:1c:6f:61:76:6b:71:da:ef:0d:2d:30:20:8c: - d1:69:9b:c1:63:00:6f:8f:af:6e:f0:0f:64:bd:fd: - 3a:17:dd:fe:62:44:b2:74:33:2d:98:de:04:e1:e9: - e7:92:1d:bf:9b:dc:3c:90:b9:db:1d:ba:cf:84:72: - 27:54:e9:59:10:37:44:db:5e:1c:ba:45:16:9c:9b: - 85:7d:c2:8f:74:da:8c:12:4f:fc:64:8f:4d:7b:91: - 84:2b:10:b6:a3:ab:f6:0d:f0:27:73:55:0c:2d:1c: - 2b:2f:7d:bc:46:70:c7:25:c1:b2:0c:2a:21:e5:a2: - 42:7f:91:4c:e7:f6:50:76:26:82:78:f0:50:88:45: - 68:71 + 00:b1:49:dd:3b:68:74:39:a7:8a:02:e6:32:0d:d9: + 0e:08:5d:77:36:f5:a5:5b:34:aa:84:c5:6e:e4:32: + 9c:3b:bf:36:0c:72:8c:98:a3:59:e1:60:c5:d8:ee: + f2:04:ac:4c:9b:e7:a6:d8:6b:24:cf:87:4b:55:82: + bf:0c:67:c1:9c:63:4e:d8:41:4d:15:5b:44:01:8d: + db:ca:b8:1a:ef:26:36:d0:ad:50:67:5d:4f:2f:ef: + 51:e7:78:0e:40:e9:e7:e0:a6:e8:f9:39:8d:47:a3: + 8c:14:bc:af:dd:f4:f5:64:33:04:78:39:22:b4:a2: + b1:11:71:94:50:a8:2a:98:22:c6:c4:7a:ff:8b:a4: + 54:c0:0c:db:55:5f:2e:58:a5:fd:13:5c:df:9c:bc: + 5f:96:2c:3e:ee:df:71:64:07:c6:60:0d:6c:b5:6f: + 50:d9:21:eb:4c:6e:15:1a:90:2e:11:49:64:36:a3: + 04:03:39:14:1e:ad:32:be:69:8b:26:92:ca:38:a8: + 51:49:c0:1e:5c:d1:2f:d2:e3:b2:11:a6:88:d7:61: + f8:4f:c0:61:d1:6f:41:92:b1:6a:21:38:ff:8b:37: + ba:f3:49:b9:45:74:f5:7c:c5:65:fb:c0:dd:65:b1: + 3c:ba:ed:0c:46:e8:62:06:82:77:8e:df:52:d1:a5: + 7c:c5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 49:8C:47:E1:3D:FB:65:5C:B5:B9:78:5A:DC:3D:AC:DC:C2:55:84:BA + ED:37:D9:2A:6C:CB:3D:D8:B2:05:8F:1B:D5:10:69:79:95:C0:13:62 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 16:b3:2e:6b:4a:d1:8b:ea:56:72:cd:e7:e7:51:1f:70:19:48: - 52:5c:6f:b6:ba:e0:f1:0a:0f:38:aa:ed:de:8c:32:56:74:1d: - 69:30:ee:68:ba:2b:7e:6b:93:f0:69:7f:5f:bb:18:88:41:3e: - 86:3a:00:f8:23:f9:d1:ab:53:9d:50:ea:2e:37:37:0d:0a:cc: - af:22:90:11:29:f3:b6:d4:28:47:83:75:66:19:19:88:a0:20: - 6b:64:7b:95:32:5d:85:14:c6:a6:77:11:a5:c4:72:72:c1:aa: - 3a:dd:ee:dc:28:71:4e:1e:ae:d5:1d:74:3e:71:8a:da:7e:f8: - 4c:2c:20:6c:01:ee:33:90:27:3a:5d:87:75:73:4c:24:c0:ad: - b0:6e:a3:32:bc:e4:93:53:73:40:cb:37:55:4b:d2:d5:79:b9: - 86:bc:69:35:d1:33:11:4a:33:ad:d1:78:18:99:c8:b0:fb:c6: - 82:40:87:56:47:ff:f1:ec:2a:07:53:ea:7f:17:a8:78:3c:21: - e5:e7:6e:54:16:02:8b:71:c9:fb:41:c4:f7:f0:1d:9d:8e:5b: - 94:6f:2c:25:12:95:02:ca:08:d5:42:16:fd:b8:dc:d8:4b:07: - 8f:bb:b2:4e:51:e8:32:87:61:a1:96:de:ff:24:86:4f:41:38: - 65:18:f0:b8 + 9e:18:73:a8:48:59:21:7d:bc:f4:26:88:2f:45:52:3f:3d:9b: + a8:60:8f:60:96:fa:6d:17:74:87:41:12:da:f7:59:c4:6a:52: + 02:82:f0:b9:a5:b5:f8:36:a0:c1:f7:90:6e:c6:41:9f:28:34: + 13:5e:5e:cd:68:e8:1e:76:f6:3c:16:03:73:f0:5b:ca:22:34: + 90:36:fa:b3:4b:33:16:63:c1:b0:c9:2b:ac:a8:60:4b:ff:4d: + 9b:a0:d4:a9:f9:b1:b2:4a:48:91:06:79:d2:19:45:d2:07:61: + 5e:c4:7b:8b:30:89:14:4f:97:79:c9:a8:f9:0d:90:47:d0:f5: + dd:6d:b3:b7:d0:7e:4a:cf:21:c5:9a:13:2e:b8:d6:bf:5b:bf: + 6c:0e:2c:89:51:02:99:d2:ab:c5:cb:1f:38:91:bc:cd:11:01: + 76:62:66:15:c1:b1:3c:36:e2:d7:13:b1:e0:59:12:54:43:4e: + ba:f3:b7:47:e9:01:ef:f2:82:85:3f:8e:0b:58:70:2b:07:f4: + 37:df:0e:2d:88:48:76:76:4b:33:c6:ce:8b:11:dc:ac:7a:a9: + e8:07:25:1b:12:33:c3:12:8c:1d:31:59:f4:02:fb:d1:97:df: + 7b:ea:20:b7:ef:b0:e8:4b:57:74:21:f8:9e:81:02:ec:bc:d2: + 56:fc:0a:27 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBDTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE0MTAzMDAw -MDAwMFoXDTI4MDYwMjE3MTA1MlowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANIzyT7uxQAIVNCpJvEhIYYgktwfyQ+Vw2CLchRRYERutr30WShwTN+H -4Mks28izTchykg6rVaUQjuTPdyN3JaVilfwys9pmL64jXj2qHYeWYaXrhjnhdKId -olDhk+bcq3CZ5ORJcmwA6FMGH4YZN3mDLqVpt4BMBvQcb2F2a3Ha7w0tMCCM0Wmb -wWMAb4+vbvAPZL39Ohfd/mJEsnQzLZjeBOHp55Idv5vcPJC52x26z4RyJ1TpWRA3 -RNteHLpFFpybhX3Cj3TajBJP/GSPTXuRhCsQtqOr9g3wJ3NVDC0cKy99vEZwxyXB -sgwqIeWiQn+RTOf2UHYmgnjwUIhFaHECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFEmMR+E9+2Vctbl4Wtw9rNzCVYS6MB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAWsy5rStGL6lZyzefn -UR9wGUhSXG+2uuDxCg84qu3ejDJWdB1pMO5ouit+a5PwaX9fuxiIQT6GOgD4I/nR -q1OdUOouNzcNCsyvIpARKfO21ChHg3VmGRmIoCBrZHuVMl2FFMamdxGlxHJywao6 -3e7cKHFOHq7VHXQ+cYrafvhMLCBsAe4zkCc6XYd1c0wkwK2wbqMyvOSTU3NAyzdV -S9LVebmGvGk10TMRSjOt0XgYmciw+8aCQIdWR//x7CoHU+p/F6h4PCHl525UFgKL -ccn7QcT38B2djluUbywlEpUCygjVQhb9uNzYSwePu7JOUegyh2Ghlt7/JIZPQThl -GPC4 +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqrTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE0MTAzMDAwMDAwMFoXDTI1MTAzMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALFJ3TtodDmnigLmMg3ZDghddzb1pVs0qoTF +buQynDu/NgxyjJijWeFgxdju8gSsTJvnpthrJM+HS1WCvwxnwZxjTthBTRVbRAGN +28q4Gu8mNtCtUGddTy/vUed4DkDp5+Cm6Pk5jUejjBS8r9309WQzBHg5IrSisRFx +lFCoKpgixsR6/4ukVMAM21VfLlil/RNc35y8X5YsPu7fcWQHxmANbLVvUNkh60xu +FRqQLhFJZDajBAM5FB6tMr5piyaSyjioUUnAHlzRL9LjshGmiNdh+E/AYdFvQZKx +aiE4/4s3uvNJuUV09XzFZfvA3WWxPLrtDEboYgaCd47fUtGlfMUCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFO032Spsyz3YsgWPG9UQaXmVwBNiMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQCeGHOoSFkhfbz0JogvRVI/PZuoYI9glvptF3SHQRLa91nEalICgvC5pbX4NqDB +95BuxkGfKDQTXl7NaOgedvY8FgNz8FvKIjSQNvqzSzMWY8GwySusqGBL/02boNSp ++bGySkiRBnnSGUXSB2FexHuLMIkUT5d5yaj5DZBH0PXdbbO30H5KzyHFmhMuuNa/ +W79sDiyJUQKZ0qvFyx84kbzNEQF2YmYVwbE8NuLXE7HgWRJUQ06687dH6QHv8oKF +P44LWHArB/Q33w4tiEh2dkszxs6LEdyseqnoByUbEjPDEowdMVn0AvvRl9976iC3 +77DoS1d0IfiegQLsvNJW/Aon -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/39_months_after_2015_04.pem b/net/data/ssl/certificates/39_months_after_2015_04.pem index d988960a..3e9765e 100644 --- a/net/data/ssl/certificates/39_months_after_2015_04.pem +++ b/net/data/ssl/certificates/39_months_after_2015_04.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 14 (0xe) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:ae + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Apr 2 00:00:00 2015 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ab:bd:7c:d8:34:99:c9:fa:d9:7e:0a:ac:77:89: - fb:de:ee:b0:ec:59:45:f6:a0:15:b9:60:2a:0a:8f: - 77:a7:43:dc:62:e6:20:9e:ef:9f:c3:4f:59:f4:cb: - 23:32:85:0f:a4:66:77:f6:bc:f2:1b:d1:b7:dc:c3: - 66:a0:83:37:73:2a:6a:80:9b:a1:aa:8c:18:ad:49: - b0:44:e8:cf:11:da:0d:52:ab:59:50:d4:87:c8:98: - 4f:fc:7e:46:49:53:e5:3b:10:dd:29:7b:0b:fa:38: - 76:7e:b5:a6:a8:9b:e4:20:b8:99:18:7d:57:46:dd: - 33:46:7a:2a:ae:dc:3b:18:1b:68:b3:36:37:6d:1a: - ec:78:f5:65:0f:5d:f9:1b:ec:68:7d:a4:83:79:ad: - cc:a0:68:4f:6c:5b:36:c1:48:0b:3f:3e:4c:ae:91: - de:4a:db:f6:a9:82:c2:54:9d:6f:28:db:00:bb:0f: - a4:44:43:40:c3:b0:e3:ec:f8:57:8c:c1:db:bb:00: - 64:15:48:06:7b:01:da:34:bc:ac:c1:61:ec:07:76: - 80:08:86:94:34:c4:d8:db:65:80:6a:7f:c0:b9:61: - f5:3c:92:99:45:ce:17:92:81:81:32:43:39:35:ac: - a4:04:5a:d6:f0:5e:01:3e:f2:3f:3b:74:c9:33:77: - 87:c1 + 00:b8:6e:8d:68:4f:77:ca:bd:68:33:e0:34:86:88: + c0:77:99:40:10:59:4c:13:26:35:82:ca:a9:95:6d: + 2d:5b:db:08:54:25:9b:89:17:7b:95:f9:76:73:51: + 0f:04:de:ba:d0:24:7d:53:e7:17:87:e7:29:96:23: + f1:79:a6:48:99:e7:f0:58:d1:82:2d:97:33:8f:7f: + 21:7b:33:b8:bb:66:a2:cb:9f:14:12:15:9c:b4:8c: + b4:eb:e3:90:5a:3a:60:fe:0a:cc:60:38:62:75:5b: + 90:15:39:10:19:44:67:c2:bf:e2:00:c1:85:f8:9e: + 2a:66:c7:75:36:d3:f4:c0:9e:aa:1d:2f:6f:17:20: + 35:3d:eb:b6:e1:2a:28:1d:c9:d3:c5:49:a2:e0:30: + 45:09:88:1d:39:c3:ba:f2:fa:de:a6:b6:95:fa:4f: + 1d:cf:8b:35:46:48:24:a6:b0:f0:6f:e6:e2:20:75: + 8a:1b:84:08:90:e6:c4:99:ab:f2:b5:7d:cf:58:b2: + f8:24:fd:70:01:bf:e4:bd:34:9f:54:a7:27:6e:50: + 12:76:0c:05:46:15:46:43:4c:85:79:e1:b0:b4:58: + 5d:0e:82:9e:c0:74:ef:00:6e:7c:87:39:86:c3:7d: + 28:cd:4c:04:c8:04:76:95:74:8a:b9:b9:e5:69:1e: + 4e:bf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 10:E9:95:5F:D7:78:0F:A8:F8:3C:89:9A:36:AA:E9:F2:52:C3:60:30 + 2B:FE:91:91:29:47:E7:52:B7:72:F9:10:DF:E9:16:03:E5:5E:CB:18 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 05:a5:b1:fe:ec:c3:19:31:04:40:47:70:79:b6:c3:99:ca:ff: - 26:f8:26:88:fc:c9:fc:30:27:d7:15:4e:cb:df:45:09:1e:ea: - bc:ac:9f:99:3a:a7:cc:bf:dd:93:a7:96:ff:5b:b9:9a:bb:49: - 1d:3c:ab:53:97:c8:83:4a:87:3d:e0:81:d1:47:68:ac:ea:1f: - bc:88:3c:74:17:39:34:23:4d:28:a5:db:20:16:c7:ea:08:ef: - c4:bc:f4:8c:5a:94:b0:f6:1a:23:e3:c3:e3:a6:ef:52:f8:70: - d1:59:95:21:e7:57:b6:bb:c8:05:6a:c7:7e:ba:b8:36:4b:75: - 5c:6c:74:1f:0d:a0:18:c9:ad:db:9a:b6:f8:eb:63:25:b8:88: - 48:b7:43:68:dd:6c:ce:0b:4f:c5:1f:7b:5f:94:c6:29:62:77: - 2a:85:9c:61:8b:a7:67:c8:17:5b:2f:a7:a5:0b:d2:d8:eb:1d: - 8f:ed:67:93:3a:df:f1:29:e9:97:71:a3:01:48:3d:be:f5:15: - 5d:f5:32:bc:18:52:9f:9c:3b:64:e8:a9:55:32:91:6d:c9:cc: - 84:65:16:39:4c:ad:20:2b:e9:e9:46:f3:71:7c:44:45:05:6f: - 68:86:66:5e:0c:e2:7d:86:65:9c:6e:e5:39:2d:a8:03:30:b2: - e2:77:5d:70 + 37:49:01:63:f6:d0:5d:df:c6:49:f2:3a:4a:62:cc:f9:c2:23: + 07:7f:bf:08:be:84:93:77:6b:b2:93:86:3d:0b:d1:0e:0b:d4: + 8d:2f:eb:b4:a4:f6:19:b3:77:16:f5:29:88:5a:f0:cb:18:98: + 7c:d1:5d:23:7c:65:6c:c2:c9:95:42:1a:06:21:85:46:26:f9: + 45:1e:91:81:32:dd:e5:a3:75:d9:39:14:8a:2e:bb:35:7e:6a: + a8:77:2c:4e:7e:5d:83:05:2c:b3:4b:41:9c:93:4c:d6:74:1c: + 6b:f2:98:e3:48:a4:d3:82:46:62:45:aa:4c:77:e2:7e:f3:0a: + e5:8a:0a:ef:47:d4:4a:f0:47:53:c3:25:87:9d:84:5d:3a:c4: + 79:33:0c:06:5e:98:ec:14:dc:ee:15:ca:f1:3f:b7:f3:ac:a9: + 11:2a:3f:e2:ba:bb:f9:4c:43:b9:7e:01:27:a0:9d:92:4a:02: + 21:cb:21:d7:b7:5d:f8:65:03:24:64:ac:11:d0:11:c3:93:72: + e0:be:11:73:8d:4f:7a:8d:c6:95:49:bd:84:61:95:79:3e:94: + 67:c7:55:19:87:84:c0:04:e4:8e:ce:bd:b5:bb:87:54:9f:10: + 4e:5c:43:52:c4:3c:cb:1d:e9:27:cc:f1:37:bf:cc:99:7f:71: + e5:31:49:bd -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBDjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE1MDQwMjAw -MDAwMFoXDTE4MDcwMjAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKu9fNg0mcn62X4KrHeJ+97usOxZRfagFblgKgqPd6dD3GLmIJ7vn8NP -WfTLIzKFD6Rmd/a88hvRt9zDZqCDN3MqaoCboaqMGK1JsETozxHaDVKrWVDUh8iY -T/x+RklT5TsQ3Sl7C/o4dn61pqib5CC4mRh9V0bdM0Z6Kq7cOxgbaLM2N20a7Hj1 -ZQ9d+RvsaH2kg3mtzKBoT2xbNsFICz8+TK6R3krb9qmCwlSdbyjbALsPpERDQMOw -4+z4V4zB27sAZBVIBnsB2jS8rMFh7Ad2gAiGlDTE2NtlgGp/wLlh9TySmUXOF5KB -gTJDOTWspARa1vBeAT7yPzt0yTN3h8ECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFBDplV/XeA+o+DyJmjaq6fJSw2AwMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAFpbH+7MMZMQRAR3B5 -tsOZyv8m+CaI/Mn8MCfXFU7L30UJHuq8rJ+ZOqfMv92Tp5b/W7mau0kdPKtTl8iD -Soc94IHRR2is6h+8iDx0Fzk0I00opdsgFsfqCO/EvPSMWpSw9hoj48Pjpu9S+HDR -WZUh51e2u8gFasd+urg2S3VcbHQfDaAYya3bmrb462MluIhIt0No3WzOC0/FH3tf -lMYpYncqhZxhi6dnyBdbL6elC9LY6x2P7WeTOt/xKemXcaMBSD2+9RVd9TK8GFKf -nDtk6KlVMpFtycyEZRY5TK0gK+npRvNxfERFBW9ohmZeDOJ9hmWcbuU5LagDMLLi -d11w +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqrjANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE1MDQwMjAwMDAwMFoXDTE4MDcwMjAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALhujWhPd8q9aDPgNIaIwHeZQBBZTBMmNYLK +qZVtLVvbCFQlm4kXe5X5dnNRDwTeutAkfVPnF4fnKZYj8XmmSJnn8FjRgi2XM49/ +IXszuLtmosufFBIVnLSMtOvjkFo6YP4KzGA4YnVbkBU5EBlEZ8K/4gDBhfieKmbH +dTbT9MCeqh0vbxcgNT3rtuEqKB3J08VJouAwRQmIHTnDuvL63qa2lfpPHc+LNUZI +JKaw8G/m4iB1ihuECJDmxJmr8rV9z1iy+CT9cAG/5L00n1SnJ25QEnYMBUYVRkNM +hXnhsLRYXQ6CnsB07wBufIc5hsN9KM1MBMgEdpV0irm55WkeTr8CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFCv+kZEpR+dSt3L5EN/pFgPlXssYMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQA3SQFj9tBd38ZJ8jpKYsz5wiMHf78IvoSTd2uyk4Y9C9EOC9SNL+u0pPYZs3cW +9SmIWvDLGJh80V0jfGVswsmVQhoGIYVGJvlFHpGBMt3lo3XZORSKLrs1fmqodyxO +fl2DBSyzS0Gck0zWdBxr8pjjSKTTgkZiRapMd+J+8wrligrvR9RK8EdTwyWHnYRd +OsR5MwwGXpjsFNzuFcrxP7fzrKkRKj/iurv5TEO5fgEnoJ2SSgIhyyHXt134ZQMk +ZKwR0BHDk3LgvhFzjU96jcaVSb2EYZV5PpRnx1UZh4TABOSOzr21u4dUnxBOXENS +xDzLHeknzPE3v8yZf3HlMUm9 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/39_months_based_on_last_day.pem b/net/data/ssl/certificates/39_months_based_on_last_day.pem index 8009696..d2ac9f04 100644 --- a/net/data/ssl/certificates/39_months_based_on_last_day.pem +++ b/net/data/ssl/certificates/39_months_based_on_last_day.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 30 (0x1e) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b2 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Feb 28 00:00:00 2017 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:e0:95:35:0d:8e:3b:c4:7c:1d:ea:d6:1a:41:a9: - 4c:14:6e:3c:12:a3:01:55:fc:b5:ee:d5:7a:d3:4d: - b5:f4:9b:0e:57:50:cc:28:17:4f:68:93:5f:14:e2: - ac:c7:eb:1d:e1:13:82:b6:14:eb:9d:42:26:1e:3c: - 37:c7:73:e2:93:0f:d9:5b:e7:2f:46:60:54:e6:a4: - 1c:89:ac:9c:30:1f:29:bf:36:e2:88:8a:e5:ac:14: - 67:df:d7:93:38:85:d8:71:5a:5c:ae:80:d1:f9:ef: - 12:82:91:08:be:de:07:70:25:be:50:3c:c6:5e:e1: - 15:82:9d:1d:cb:2b:4c:b1:ea:2d:e4:6f:db:33:d8: - d3:27:d0:c1:8f:52:db:91:1a:b6:03:9e:fb:3b:49: - 7e:ef:4a:fd:38:b2:c6:26:ea:63:85:be:0f:50:c3: - 24:4c:36:dc:96:7b:ae:59:1f:c5:44:2a:14:76:71: - 39:ab:ac:0e:ad:bb:ca:32:94:9c:d4:5b:7d:71:6b: - c9:e8:4b:80:8f:e4:b8:07:bf:70:05:2f:52:b7:86: - 7c:ca:de:b3:b3:38:56:5f:35:96:15:94:c3:0d:fd: - 45:2b:38:ee:ca:ee:77:34:62:5d:85:57:d1:e3:30: - 24:0e:b1:5c:21:80:5b:24:82:01:67:25:12:a7:8b: - 3c:11 + 00:d2:0b:08:4a:9b:6f:11:d7:ff:cf:6f:c5:ab:f7: + 3a:cd:8d:63:4c:eb:15:40:87:cc:fe:fb:39:40:c1: + ca:19:2f:4e:49:ae:53:dd:b7:4a:ae:9a:b2:e6:e5: + 6e:69:8d:0c:22:53:d9:32:a5:9f:f1:3a:62:ea:1d: + 46:ea:03:e4:8d:da:27:5e:85:03:25:16:8e:5e:a2: + ef:3b:87:7c:f9:b6:58:c8:93:2c:24:36:64:e5:96: + 30:3b:88:a1:e9:ef:8d:94:a6:cb:ae:ae:fa:b0:9b: + 9f:e9:7c:c5:d7:b7:9c:04:a3:0a:73:a1:e7:01:6f: + 3e:3b:58:14:bd:63:03:bd:4a:4a:a5:10:0f:02:8f: + 6f:4c:7d:67:c6:d5:8e:2d:95:8f:83:77:10:2a:1e: + 8d:7b:e9:33:0a:41:00:92:8a:88:16:a2:f2:86:0c: + 59:9c:08:84:fd:19:15:c6:ca:87:fe:d9:fd:0a:b4: + e5:a8:5d:47:2c:ee:e0:7f:9b:7e:0e:7e:8f:88:ff: + 31:8c:c9:02:bb:d9:c7:e4:87:e9:0e:fc:89:db:dd: + 68:ed:3f:9f:52:24:37:48:e9:f8:cc:59:74:12:05: + d1:ba:15:b9:aa:61:48:77:41:e9:d7:ed:4f:97:e1: + fd:dc:b8:f1:4b:54:97:2e:a5:0c:bb:8c:6d:4b:fa: + 2f:11 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 39:50:0A:32:04:A7:EC:70:F4:1B:1E:68:F3:B3:40:57:A7:55:4D:8A + 10:8D:94:CF:31:9D:7D:3E:3A:DD:47:D6:87:88:36:B2:20:57:55:9C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 83:f0:0b:fc:3c:6e:40:6b:00:58:de:43:2a:d4:ea:08:8c:88: - 9c:02:76:7d:9f:55:08:fc:da:c0:fe:9a:07:84:c2:5d:85:06: - ec:ee:e4:8a:c4:c1:f2:6e:6e:a8:bc:8f:de:d2:b4:39:43:c8: - 99:56:57:b8:f7:2e:8c:90:a5:fd:7d:1f:79:8d:e1:2a:59:65: - e6:9b:2b:5d:62:7b:b0:e5:66:45:5e:fe:a3:44:52:34:40:90: - f6:35:dd:51:7d:38:07:0b:cd:84:ec:68:19:c5:c8:b4:0e:19: - 7f:f0:a8:92:33:59:8c:24:a8:7d:f0:b3:4b:3c:20:09:5d:b6: - 78:a2:b3:1e:86:e3:88:ff:94:00:74:97:d0:41:91:45:f5:1d: - 32:e2:3f:fa:cc:90:2a:fd:8d:e2:84:e5:1b:16:83:13:3e:1c: - 6b:9f:55:0a:b9:00:16:b7:3f:07:68:1b:60:cf:46:56:ba:54: - 05:06:90:6b:40:16:cd:4c:67:46:87:f1:05:35:c6:ca:07:fb: - e2:ca:c1:ed:37:1e:a5:ec:87:ca:4f:bf:98:e6:07:8e:66:76: - 26:67:b9:28:5f:95:ef:83:35:09:94:ba:2b:48:53:51:0d:85: - 62:7e:b3:a3:d0:f7:44:62:14:21:bf:b8:99:2b:b6:0b:be:b8: - c9:ee:96:56 + 5d:08:1a:36:85:35:31:62:46:c4:bd:dd:2c:1e:d3:0d:ed:07: + 5e:d4:7f:06:44:4f:17:f2:7c:32:78:b7:4c:25:a7:c5:81:26: + 65:20:5c:c9:30:53:02:19:05:75:1d:be:ef:a9:9b:53:27:34: + 1c:19:c5:52:cb:c0:c2:ac:78:ff:27:22:b4:e1:8b:32:ae:5b: + cb:08:0b:c2:4f:27:70:89:9f:e3:be:09:d7:e6:33:88:8b:74: + 57:1a:8d:79:5e:8b:20:a3:12:3e:9b:56:73:82:9e:35:00:8a: + 5a:38:0b:4e:e9:9e:43:63:93:61:df:b6:e3:00:4b:b2:4a:f9: + 0a:74:fa:d5:aa:06:b5:44:07:c7:46:6c:4a:2a:69:fc:2a:34: + 77:16:b4:6c:e1:a5:b2:e3:d0:4a:39:87:87:16:ba:6b:ea:ab: + a1:c5:81:64:55:cf:68:74:63:d0:95:2e:2c:39:62:75:b8:f2: + c1:7f:0f:30:50:10:d3:9b:84:bd:07:63:b7:1c:58:de:dc:e4: + b1:74:48:00:b7:89:d9:02:83:37:c7:ea:94:dd:af:3f:fd:47: + 86:70:d1:d0:d0:06:36:6c:3f:b1:8a:e7:db:6a:f0:b7:82:5c: + c0:d9:ca:30:ff:4e:d5:cd:e3:d5:4c:7e:86:7f:7e:5f:2b:d1: + d4:3e:2c:5f -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBHjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDIyODAw -MDAwMFoXDTIwMDUzMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOCVNQ2OO8R8HerWGkGpTBRuPBKjAVX8te7VetNNtfSbDldQzCgXT2iT -XxTirMfrHeETgrYU651CJh48N8dz4pMP2VvnL0ZgVOakHImsnDAfKb824oiK5awU -Z9/XkziF2HFaXK6A0fnvEoKRCL7eB3AlvlA8xl7hFYKdHcsrTLHqLeRv2zPY0yfQ -wY9S25EatgOe+ztJfu9K/TiyxibqY4W+D1DDJEw23JZ7rlkfxUQqFHZxOausDq27 -yjKUnNRbfXFryehLgI/kuAe/cAUvUreGfMres7M4Vl81lhWUww39RSs47srudzRi -XYVX0eMwJA6xXCGAWySCAWclEqeLPBECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFDlQCjIEp+xw9BseaPOzQFenVU2KMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCD8Av8PG5AawBY3kMq -1OoIjIicAnZ9n1UI/NrA/poHhMJdhQbs7uSKxMHybm6ovI/e0rQ5Q8iZVle49y6M -kKX9fR95jeEqWWXmmytdYnuw5WZFXv6jRFI0QJD2Nd1RfTgHC82E7GgZxci0Dhl/ -8KiSM1mMJKh98LNLPCAJXbZ4orMehuOI/5QAdJfQQZFF9R0y4j/6zJAq/Y3ihOUb -FoMTPhxrn1UKuQAWtz8HaBtgz0ZWulQFBpBrQBbNTGdGh/EFNcbKB/viysHtNx6l -7IfKT7+Y5geOZnYmZ7koX5XvgzUJlLorSFNRDYVifrOj0PdEYhQhv7iZK7YLvrjJ -7pZW +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqsjANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE3MDIyODAwMDAwMFoXDTIwMDUzMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANILCEqbbxHX/89vxav3Os2NY0zrFUCHzP77 +OUDByhkvTkmuU923Sq6asublbmmNDCJT2TKln/E6YuodRuoD5I3aJ16FAyUWjl6i +7zuHfPm2WMiTLCQ2ZOWWMDuIoenvjZSmy66u+rCbn+l8xde3nASjCnOh5wFvPjtY +FL1jA71KSqUQDwKPb0x9Z8bVji2Vj4N3ECoejXvpMwpBAJKKiBai8oYMWZwIhP0Z +FcbKh/7Z/Qq05ahdRyzu4H+bfg5+j4j/MYzJArvZx+SH6Q78idvdaO0/n1IkN0jp ++MxZdBIF0boVuaphSHdB6dftT5fh/dy48UtUly6lDLuMbUv6LxECAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBCNlM8xnX0+Ot1H1oeINrIgV1WcMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBdCBo2hTUxYkbEvd0sHtMN7Qde1H8GRE8X8nwyeLdMJafFgSZlIFzJMFMCGQV1 +Hb7vqZtTJzQcGcVSy8DCrHj/JyK04YsyrlvLCAvCTydwiZ/jvgnX5jOIi3RXGo15 +XosgoxI+m1Zzgp41AIpaOAtO6Z5DY5Nh37bjAEuySvkKdPrVqga1RAfHRmxKKmn8 +KjR3FrRs4aWy49BKOYeHFrpr6quhxYFkVc9odGPQlS4sOWJ1uPLBfw8wUBDTm4S9 +B2O3HFje3OSxdEgAt4nZAoM3x+qU3a8//UeGcNHQ0AY2bD+xiufbavC3glzA2cow +/07VzePVTH6Gf35fK9HUPixf -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/40_months_after_2015_04.pem b/net/data/ssl/certificates/40_months_after_2015_04.pem index df5acc8c..d1b165b 100644 --- a/net/data/ssl/certificates/40_months_after_2015_04.pem +++ b/net/data/ssl/certificates/40_months_after_2015_04.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 15 (0xf) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:af + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Apr 2 00:00:00 2015 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b9:66:bc:55:7c:ca:70:eb:2e:6a:8b:11:8c:af: - 1e:2d:e2:ae:a5:b9:96:be:0a:16:08:2b:98:d6:8c: - a6:24:87:a8:0e:2e:23:f0:5a:8b:fa:6e:b7:dc:b2: - 2a:56:57:d7:76:91:69:c3:23:44:f3:40:74:d7:83: - 6d:fb:94:d9:e8:e6:34:96:2d:cb:43:02:69:c4:5f: - c0:01:09:9a:0f:55:5b:f5:b8:77:5e:ab:0b:58:46: - 1f:d4:42:59:43:3f:5a:92:5a:ca:22:8d:a9:18:ff: - ac:48:e9:f3:a4:a4:f3:d5:9b:e8:23:70:cd:26:f2: - 02:0b:e3:1e:a5:e6:ea:46:0f:39:06:fb:1b:f3:e9: - ce:65:df:15:e6:3f:72:c0:03:72:5e:3d:e0:4c:94: - 27:8c:ee:76:44:49:eb:f0:27:0f:d9:fc:02:fe:e5: - fd:70:d8:fe:8a:a6:99:61:52:76:b9:6b:af:89:50: - 84:ab:2b:c9:2a:13:0d:3b:f8:fe:50:61:a8:e0:57: - e1:f6:14:66:00:55:15:b3:99:03:be:fe:6f:24:39: - 12:b6:8b:bd:d5:60:7f:21:c2:24:68:07:62:dd:73: - 72:49:0a:09:cc:65:27:7c:37:0e:00:9b:b5:8a:4f: - 70:fb:c5:14:34:42:cb:27:4b:22:50:8d:5b:17:0f: - 9b:85 + 00:c6:38:11:5d:02:9c:2e:98:d0:8b:06:27:b3:11: + f2:f3:36:55:3d:e4:4e:6b:6b:0a:99:0d:69:1d:57: + 61:6b:f2:c6:20:6f:b0:bc:50:b3:44:00:13:09:23: + e7:18:5a:49:90:48:cd:b1:c7:9a:e9:a1:ef:9d:92: + 67:c9:ca:a8:ff:43:49:1b:8f:48:4a:63:ec:48:9c: + e2:e6:92:ea:7a:d4:04:92:de:46:88:0d:56:54:4b: + 43:29:54:f6:85:ff:9c:99:83:c2:64:0a:f6:da:cd: + fd:81:29:be:3e:25:99:1a:9c:94:22:52:f0:9c:b8: + 45:32:61:68:b3:5d:e2:9d:f6:3f:04:6f:49:c8:d8: + 22:9b:46:ca:73:99:62:a7:38:fb:27:ec:55:74:5c: + cd:83:b8:be:30:28:f8:18:c4:e5:08:36:09:e6:7e: + 59:e7:cb:2b:f7:b2:8e:2b:46:6b:15:19:61:19:0c: + ba:bf:5d:0d:d3:7a:3a:06:96:79:5e:cb:f4:5b:c8: + 54:f4:0f:e7:68:63:64:bc:69:61:ec:a6:5f:74:18: + 60:a3:7c:86:db:ca:2f:2b:3e:e2:8b:75:21:c4:b8: + 21:a4:65:30:bb:fe:f3:6f:d8:d5:fb:67:d3:65:4d: + 9f:b1:98:5a:3c:ac:6b:4d:d2:32:4e:98:b9:16:a2: + 70:91 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - CE:65:A6:37:A7:B6:38:4B:38:A3:6E:80:C7:7C:13:FB:51:C2:45:B6 + 5C:12:BB:05:BF:14:14:34:85:67:ED:C5:E3:3B:BF:FC:49:27:AE:E3 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 25:63:1e:16:83:f3:48:52:80:be:0b:82:4c:24:27:58:44:b0: - 1a:38:e4:4d:49:b8:86:43:a2:c7:59:31:40:74:3b:a7:18:07: - 30:7d:f6:5c:e5:f3:1f:49:d3:32:1c:f1:b9:47:c8:52:5b:19: - 93:a9:6b:80:41:96:a9:35:ce:d1:ff:9d:82:c6:13:ca:04:56: - 38:fc:df:cf:5a:54:5f:77:a9:28:c5:c6:0b:0b:56:04:e8:37: - 73:d3:8e:b9:6f:c8:92:46:ab:35:07:5e:55:06:d2:fc:ac:8b: - e2:c7:4d:6c:30:1f:db:c1:29:b9:1b:2a:e1:b3:43:37:33:42: - ad:3a:fa:20:96:46:f5:84:ea:15:c2:83:c9:12:c7:71:54:37: - 53:88:45:00:aa:62:d9:c1:f5:1e:c5:f1:11:95:7d:31:54:21: - 56:37:1d:36:b0:42:c8:a8:6d:83:01:8d:14:f8:e3:88:05:b6: - 81:43:d3:19:5d:3b:f4:6b:81:cf:2b:e8:cd:57:54:0e:6f:7a: - ef:fc:47:e6:3c:a9:cb:14:4a:6e:29:c7:00:ae:86:c3:fe:74: - 38:92:37:bd:6a:08:97:f5:5c:26:b6:15:41:11:7a:1e:b9:71: - e7:9e:73:6b:f4:10:03:76:43:86:91:02:f8:30:4c:e7:bc:af: - 55:10:bf:52 + 31:3a:7d:11:f7:80:72:df:80:6b:c8:e9:72:e1:f3:b5:3e:09: + a0:79:44:8a:08:5a:3e:e0:f7:7e:59:66:df:99:c6:d8:09:6b: + cc:c8:9e:76:4f:c5:5b:57:db:e0:08:3c:ce:de:3f:87:fd:71: + f6:f9:b2:a1:70:27:a7:60:d7:49:d8:2b:b7:a4:86:a1:e7:ff: + 4e:ee:41:18:1e:2c:aa:14:55:3a:ce:b4:1c:58:c5:28:71:33: + f7:4c:5f:36:f8:de:e7:43:34:92:6e:d6:15:14:43:67:43:94: + f8:79:0d:77:3d:cb:6a:3e:d2:ae:85:3d:9c:f6:b7:93:dc:81: + f1:b3:49:ab:00:47:4f:e9:61:b8:dc:bd:81:7a:d4:d0:07:3a: + 10:d1:7c:93:e9:d2:09:2e:9f:f6:c2:46:6c:63:ec:da:f2:f1: + aa:31:a9:a9:e3:0d:c5:d7:d5:72:a8:77:b6:62:b7:63:84:45: + ce:bc:c9:32:42:8f:71:6c:6a:f0:10:33:25:1d:24:d3:06:f2: + 0b:fc:5b:9c:e3:10:46:bf:00:90:0b:61:cf:5a:f0:ba:0b:fd: + b9:2c:d0:aa:b0:65:b5:ac:21:d1:b1:4b:f2:d0:ca:58:80:f4: + 81:2d:3a:fb:81:0a:71:d1:d4:63:9c:0a:f9:c5:1d:1e:52:40: + 48:e4:ad:46 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBDzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE1MDQwMjAw -MDAwMFoXDTE4MDgwMTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALlmvFV8ynDrLmqLEYyvHi3irqW5lr4KFggrmNaMpiSHqA4uI/Bai/pu -t9yyKlZX13aRacMjRPNAdNeDbfuU2ejmNJYty0MCacRfwAEJmg9VW/W4d16rC1hG -H9RCWUM/WpJayiKNqRj/rEjp86Sk89Wb6CNwzSbyAgvjHqXm6kYPOQb7G/PpzmXf -FeY/csADcl494EyUJ4zudkRJ6/AnD9n8Av7l/XDY/oqmmWFSdrlrr4lQhKsrySoT -DTv4/lBhqOBX4fYUZgBVFbOZA77+byQ5EraLvdVgfyHCJGgHYt1zckkKCcxlJ3w3 -DgCbtYpPcPvFFDRCyydLIlCNWxcPm4UCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFM5lpjentjhLOKNugMd8E/tRwkW2MB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAlYx4Wg/NIUoC+C4JM -JCdYRLAaOORNSbiGQ6LHWTFAdDunGAcwffZc5fMfSdMyHPG5R8hSWxmTqWuAQZap -Nc7R/52CxhPKBFY4/N/PWlRfd6koxcYLC1YE6Ddz0465b8iSRqs1B15VBtL8rIvi -x01sMB/bwSm5Gyrhs0M3M0KtOvoglkb1hOoVwoPJEsdxVDdTiEUAqmLZwfUexfER -lX0xVCFWNx02sELIqG2DAY0U+OOIBbaBQ9MZXTv0a4HPK+jNV1QOb3rv/EfmPKnL -FEpuKccArobD/nQ4kje9agiX9VwmthVBEXoeuXHnnnNr9BADdkOGkQL4MEznvK9V -EL9S +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqrzANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE1MDQwMjAwMDAwMFoXDTE4MDgwMTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMY4EV0CnC6Y0IsGJ7MR8vM2VT3kTmtrCpkN +aR1XYWvyxiBvsLxQs0QAEwkj5xhaSZBIzbHHmumh752SZ8nKqP9DSRuPSEpj7Eic +4uaS6nrUBJLeRogNVlRLQylU9oX/nJmDwmQK9trN/YEpvj4lmRqclCJS8Jy4RTJh +aLNd4p32PwRvScjYIptGynOZYqc4+yfsVXRczYO4vjAo+BjE5Qg2CeZ+WefLK/ey +jitGaxUZYRkMur9dDdN6OgaWeV7L9FvIVPQP52hjZLxpYeymX3QYYKN8htvKLys+ +4ot1IcS4IaRlMLv+82/Y1ftn02VNn7GYWjysa03SMk6YuRaicJECAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFwSuwW/FBQ0hWftxeM7v/xJJ67jMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQAxOn0R94By34BryOly4fO1PgmgeUSKCFo+4Pd+WWbfmcbYCWvMyJ52T8VbV9vg +CDzO3j+H/XH2+bKhcCenYNdJ2Cu3pIah5/9O7kEYHiyqFFU6zrQcWMUocTP3TF82 ++N7nQzSSbtYVFENnQ5T4eQ13PctqPtKuhT2c9reT3IHxs0mrAEdP6WG43L2BetTQ +BzoQ0XyT6dIJLp/2wkZsY+za8vGqMamp4w3F19VyqHe2YrdjhEXOvMkyQo9xbGrw +EDMlHSTTBvIL/Fuc4xBGvwCQC2HPWvC6C/25LNCqsGW1rCHRsUvy0MpYgPSBLTr7 +gQpx0dRjnAr5xR0eUkBI5K1G -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/60_months_after_2012_07.pem b/net/data/ssl/certificates/60_months_after_2012_07.pem index dab4d76..1dfdc2c6 100644 --- a/net/data/ssl/certificates/60_months_after_2012_07.pem +++ b/net/data/ssl/certificates/60_months_after_2012_07.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 16 (0x10) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b0 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Oct 30 00:00:00 2014 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:d7:ad:de:70:7e:14:f1:ca:94:be:98:67:43:26: - f8:b3:52:cf:da:cf:a3:ef:1b:68:c6:bd:89:ed:dd: - 1d:c0:75:ee:5c:1c:bb:a4:da:d2:68:91:d9:52:ca: - 49:9c:f4:fd:2e:03:de:da:01:51:6e:11:53:e0:9f: - 3b:3b:f9:df:ed:18:ec:9c:54:90:4f:17:39:fd:5f: - d0:b3:37:1f:40:fe:8a:43:17:27:ed:81:d4:36:0b: - 8c:c8:0d:d1:a0:79:0b:2a:36:76:80:c0:11:d0:2c: - 30:2f:e0:97:8f:9a:2a:39:c7:98:81:91:c7:09:30: - 12:10:5f:8c:7f:bd:8f:42:20:e2:82:dd:26:3c:1f: - 2c:d1:9b:3c:92:25:8e:46:54:19:24:87:cc:e4:84: - d1:63:20:06:a9:08:53:cd:a6:81:bd:91:94:2b:4e: - 05:84:32:93:d6:ce:56:1d:80:6d:4f:bc:ef:cb:d0: - bc:d4:c8:ce:ff:ac:1f:41:cc:4e:fb:2e:14:a3:54: - 84:14:e4:5b:8b:f8:a4:d8:40:d9:11:12:1d:c5:6a: - d0:e7:13:e5:cb:97:9e:d2:61:64:c3:58:3a:c1:e2: - 07:5a:b8:32:27:b9:fa:67:4d:69:05:8e:c5:92:03: - c1:e8:b6:0e:94:a4:91:64:99:72:50:bb:d0:5b:68: - 2c:0d + 00:cb:b4:ce:ca:b2:86:ee:9d:20:3f:7f:16:e8:75: + 50:19:d5:e3:dc:c9:0e:7c:b5:9c:62:94:f9:28:8f: + 34:cf:bc:e8:c4:ba:d0:0e:62:3a:50:34:93:9e:24: + fb:14:1c:8b:5a:7e:17:1d:2b:15:cd:4d:5b:c9:60: + 8d:d0:af:bb:29:76:28:97:c4:86:e5:82:6b:55:55: + 17:db:83:01:09:ed:cd:db:34:09:dd:59:6a:2c:13: + eb:3b:13:b0:ac:dc:e2:96:87:1b:04:17:56:bb:a7: + 37:d8:25:3a:b6:96:10:85:b3:ca:29:73:d7:5b:78: + 45:08:ff:92:b1:7a:a5:20:85:71:e5:6e:03:43:3c: + b5:53:b4:09:73:7f:4a:7d:61:5f:e3:17:eb:c6:11: + 6a:14:92:fb:d1:4d:47:30:1d:4d:6b:63:31:d8:9b: + 64:7b:9c:10:16:28:53:ee:3c:d6:65:f5:8a:1b:11: + 26:61:8d:92:e7:e8:a7:d9:01:98:b1:6e:d4:6e:2e: + d1:19:fd:a4:74:e4:5f:c9:b5:6b:e6:68:08:5a:cc: + 19:29:b0:6b:c8:20:40:62:05:9e:94:c4:81:7c:3e: + 64:1d:f1:b9:b0:65:4b:0c:49:c9:3d:30:32:ad:60: + 04:00:65:eb:b2:26:97:f3:8b:25:67:51:cb:e4:76: + 02:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - BA:4E:4A:D5:D7:99:D0:37:13:7B:64:37:1A:0B:1F:5E:9D:93:1F:F4 + C8:29:36:3A:9A:AD:3C:CC:49:FA:9B:76:D5:B2:3F:A4:55:E2:2F:10 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - a2:e4:6c:8f:21:3b:6c:ee:16:f3:58:41:35:18:e2:a7:88:e5: - d5:7b:a5:4c:e3:36:9d:d9:f5:ba:98:38:6c:da:b8:b3:4e:fa: - c8:38:fa:a9:89:62:90:cb:ec:6a:26:ac:f3:7b:5c:f1:68:06: - dd:34:0f:fc:39:27:8f:fa:e9:c8:8e:81:0e:57:ca:40:6d:ee: - 79:a7:f7:02:28:18:60:2c:a7:81:c6:45:a2:2d:fc:2c:bc:87: - 76:3a:e1:b5:52:67:99:1b:0b:d6:f3:57:d5:29:ec:ee:a5:ea: - 1d:9c:29:ec:f9:f9:cf:48:72:86:15:99:a1:e6:55:e1:b6:e4: - 50:15:25:58:71:5e:26:a7:af:03:21:ce:ca:62:cd:98:d5:d4: - 0c:32:4a:05:82:35:2a:bd:06:ce:c2:05:01:55:82:ee:98:e2: - a7:07:55:1e:0c:4b:48:05:42:89:29:08:13:0a:f5:1d:7c:9f: - a4:09:99:35:bb:9b:44:ad:81:87:75:8a:b1:a0:bf:2d:46:c6: - 5b:90:84:03:20:6f:6e:d3:b9:52:44:06:28:3f:16:f2:75:27: - 66:01:70:39:79:39:84:ed:e5:61:b0:83:22:c9:f1:ad:ca:8a: - 6c:26:4a:c7:05:9a:7f:9f:29:6f:ed:a9:1e:8d:29:b5:08:26: - 21:61:c2:54 + 11:15:89:8f:4a:84:fc:f9:32:5c:52:b1:d6:55:3a:c3:3c:e9: + 01:8e:8e:c1:33:15:9e:6f:1d:99:92:2d:f6:79:65:6e:a8:b4: + 94:32:c8:06:d5:e1:7b:48:d7:ee:e4:69:1c:2a:c4:8b:34:d8: + a4:ed:86:48:bb:38:a6:a7:b5:12:e6:88:3f:70:dd:49:07:5a: + df:63:4f:e9:cb:62:2b:ac:9e:7c:e8:6f:ad:14:7a:64:f6:80: + b7:90:e6:e4:b7:4b:39:9b:f8:be:59:54:a2:55:43:36:c3:94: + bb:61:fd:e1:6a:06:ab:8f:1d:28:92:ef:cf:b4:3a:38:fd:fd: + 33:45:75:4d:0f:2f:83:78:76:34:e1:ce:c1:4d:1e:e4:be:d2: + b7:52:e2:6e:9c:fb:59:41:18:50:3b:34:a4:d0:b6:e5:cc:1e: + 21:45:45:a5:48:f3:55:b6:27:22:51:0a:4c:44:c7:65:91:c7: + 0b:4b:7a:ce:2a:0f:42:09:8b:eb:58:a0:db:fa:b1:cf:5a:4e: + 8a:ac:e7:41:28:1c:b9:fa:62:ec:a0:47:27:e2:31:4a:df:2a: + 95:68:51:e1:62:f2:26:a7:b9:ad:32:e5:cf:20:d8:b2:25:fc: + 2e:c5:ab:68:1f:f8:cd:8e:83:a6:f7:7d:da:0b:7f:b0:3f:f0: + b2:e4:27:39 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBEDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE0MTAzMDAw -MDAwMFoXDTE5MDkzMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANet3nB+FPHKlL6YZ0Mm+LNSz9rPo+8baMa9ie3dHcB17lwcu6Ta0miR -2VLKSZz0/S4D3toBUW4RU+CfOzv53+0Y7JxUkE8XOf1f0LM3H0D+ikMXJ+2B1DYL -jMgN0aB5Cyo2doDAEdAsMC/gl4+aKjnHmIGRxwkwEhBfjH+9j0Ig4oLdJjwfLNGb -PJIljkZUGSSHzOSE0WMgBqkIU82mgb2RlCtOBYQyk9bOVh2AbU+878vQvNTIzv+s -H0HMTvsuFKNUhBTkW4v4pNhA2RESHcVq0OcT5cuXntJhZMNYOsHiB1q4Mie5+mdN -aQWOxZIDwei2DpSkkWSZclC70FtoLA0CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFLpOStXXmdA3E3tkNxoLH16dkx/0MB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCi5GyPITts7hbzWEE1 -GOKniOXVe6VM4zad2fW6mDhs2rizTvrIOPqpiWKQy+xqJqzze1zxaAbdNA/8OSeP -+unIjoEOV8pAbe55p/cCKBhgLKeBxkWiLfwsvId2OuG1UmeZGwvW81fVKezupeod -nCns+fnPSHKGFZmh5lXhtuRQFSVYcV4mp68DIc7KYs2Y1dQMMkoFgjUqvQbOwgUB -VYLumOKnB1UeDEtIBUKJKQgTCvUdfJ+kCZk1u5tErYGHdYqxoL8tRsZbkIQDIG9u -07lSRAYoPxbydSdmAXA5eTmE7eVhsIMiyfGtyopsJkrHBZp/nylv7akejSm1CCYh -YcJU +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqsDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE0MTAzMDAwMDAwMFoXDTE5MDkzMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMu0zsqyhu6dID9/Fuh1UBnV49zJDny1nGKU ++SiPNM+86MS60A5iOlA0k54k+xQci1p+Fx0rFc1NW8lgjdCvuyl2KJfEhuWCa1VV +F9uDAQntzds0Cd1ZaiwT6zsTsKzc4paHGwQXVrunN9glOraWEIWzyilz11t4RQj/ +krF6pSCFceVuA0M8tVO0CXN/Sn1hX+MX68YRahSS+9FNRzAdTWtjMdibZHucEBYo +U+481mX1ihsRJmGNkufop9kBmLFu1G4u0Rn9pHTkX8m1a+ZoCFrMGSmwa8ggQGIF +npTEgXw+ZB3xubBlSwxJyT0wMq1gBABl67Iml/OLJWdRy+R2Aq0CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMgpNjqarTzMSfqbdtWyP6RV4i8QMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQARFYmPSoT8+TJcUrHWVTrDPOkBjo7BMxWebx2Zki32eWVuqLSUMsgG1eF7SNfu +5GkcKsSLNNik7YZIuzimp7US5og/cN1JB1rfY0/py2IrrJ586G+tFHpk9oC3kObk +t0s5m/i+WVSiVUM2w5S7Yf3hagarjx0oku/PtDo4/f0zRXVNDy+DeHY04c7BTR7k +vtK3UuJunPtZQRhQOzSk0LblzB4hRUWlSPNVticiUQpMRMdlkccLS3rOKg9CCYvr +WKDb+rHPWk6KrOdBKBy5+mLsoEcn4jFK3yqVaFHhYvImp7mtMuXPINiyJfwuxato +H/jNjoOm933aC3+wP/Cy5Cc5 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/61_months_after_2012_07.pem b/net/data/ssl/certificates/61_months_after_2012_07.pem index ef21ce9..e9b7cf8 100644 --- a/net/data/ssl/certificates/61_months_after_2012_07.pem +++ b/net/data/ssl/certificates/61_months_after_2012_07.pem
@@ -1,41 +1,42 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 17 (0x11) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b1 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Oct 30 00:00:00 2014 GMT - Not After : Jun 9 17:10:52 2022 GMT + Not After : Nov 3 00:00:00 2019 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:e1:6a:f0:32:d3:9e:18:77:0f:08:d1:d0:03:11: - ac:65:b3:11:e5:dd:5f:ee:74:f5:ff:c8:b1:56:80: - fd:ad:af:82:24:95:c0:7d:99:d2:62:46:bb:fb:9e: - 75:40:5e:15:d0:9e:d9:29:0a:3f:25:bd:83:a5:da: - c6:41:99:59:b2:8e:7b:3e:bb:2d:0c:8f:ea:f9:26: - e5:c6:8f:4a:68:0b:fa:84:3c:1b:57:db:53:eb:6c: - af:9a:8a:7b:9b:b0:fb:cc:92:3e:8a:ea:24:d0:3c: - ff:06:c6:f0:79:b2:1b:8d:3f:3f:d6:ed:08:8c:48: - 9c:40:fa:f9:28:95:d1:f3:5e:8d:1b:4b:63:c4:d3: - 48:77:34:ee:82:db:6e:53:6b:32:ba:db:23:87:07: - 85:ad:26:9b:1b:d0:bb:2f:6b:48:c0:17:d0:2a:af: - 04:c2:87:10:5c:16:71:4c:a5:21:0d:5b:c0:80:1c: - c5:7c:39:4b:ca:93:23:5a:37:e4:fb:d2:7d:2c:f8: - 1b:20:bc:06:01:76:05:63:07:bd:3d:b7:6f:b2:dd: - 68:d9:88:76:9e:23:17:9a:8d:d1:58:b6:a9:9a:81: - 72:c0:8c:2b:8b:b3:e0:c5:93:b1:50:49:d3:ef:de: - 9b:e0:1f:75:77:cb:61:ae:f4:7a:f8:40:2e:88:77: - 67:bf + 00:b9:3e:12:ef:d9:f2:02:be:b4:9e:10:1c:c2:ce: + 7b:68:fb:35:9c:26:b9:d2:19:56:21:26:5d:f2:52: + 13:f8:4e:ff:e7:ef:55:26:eb:2b:61:db:7d:aa:a3: + 7c:7a:b6:bf:f2:be:8d:75:4c:43:d9:56:c7:61:5e: + 6a:8c:2e:af:44:3a:30:2c:ab:31:e0:27:2b:db:ca: + 2d:d4:71:0b:d9:c1:6a:33:6b:f4:59:2e:97:d7:4c: + 09:3e:c9:b2:80:e6:35:60:c6:c3:e8:1a:de:43:18: + 49:48:4a:04:58:21:bb:6e:52:cb:03:79:18:2f:d0: + f2:f8:87:5e:8a:ad:5b:39:7b:03:f2:9b:56:3d:9c: + e6:46:c0:16:ac:38:6e:05:a9:60:7b:41:82:91:09: + 57:45:e6:11:7d:c6:d2:9b:b7:6b:1d:66:d9:b2:79: + 15:17:0d:2e:8f:ef:a4:cc:99:db:1b:56:d1:e4:a3: + 80:13:c9:23:e0:fb:09:ca:b6:b3:44:f2:f7:b6:7c: + 97:e1:70:bb:2b:05:ad:fb:ce:43:43:1e:79:73:9c: + 57:c7:d2:48:70:99:04:45:b2:4c:0f:7d:af:54:8d: + e8:e9:3f:a8:ab:12:e9:ba:29:17:67:4d:40:97:77: + b7:42:05:9f:2b:bf:39:b1:19:81:9f:28:3b:8f:03: + 55:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - ED:25:EF:01:D1:A8:70:5C:5B:FD:6B:2C:9E:5E:69:2F:49:21:C1:DA + D7:AD:91:9D:C9:B9:1E:52:52:A9:5A:61:C6:47:72:1B:BA:B3:14:0C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 19:1d:92:62:5e:9f:3a:4b:20:2c:2e:1a:25:31:1d:95:b4:21: - d3:ec:ee:77:60:85:85:40:1c:eb:7f:22:9e:ab:1f:74:74:d5: - cc:4b:af:c4:cc:4f:60:ab:05:14:f1:35:20:b7:ec:92:56:0e: - 2d:b4:de:65:f2:50:31:19:ad:9e:7e:bb:50:05:e4:e7:d8:5d: - ed:d1:f8:58:75:5d:72:23:97:30:e6:e8:ac:83:35:1d:6a:5f: - 94:2f:55:59:1e:a5:a5:a1:90:86:d9:5b:0f:54:59:05:11:01: - ee:a7:fe:c9:a3:13:32:13:d8:c4:55:95:c6:cf:fa:be:a5:ff: - 57:4d:e7:15:de:7e:82:8d:7f:d1:3b:49:0f:98:dc:28:c7:af: - 62:aa:f8:bd:a4:db:aa:a5:56:d3:49:91:5a:86:28:b0:5a:90: - b9:7d:9f:e0:cc:f2:e3:dc:5e:f0:bf:92:38:7d:b8:d2:f4:af: - 83:ef:c7:02:60:e7:6b:12:d7:b9:ea:20:e7:3b:e4:75:61:cf: - 98:58:af:fe:11:81:08:b6:98:cc:ce:4f:d5:9c:93:88:c6:a7: - 52:31:53:d0:d0:cf:c5:65:e4:b3:0a:ef:4b:01:73:e3:8c:40: - 10:a4:52:4d:08:4c:85:8d:27:ad:f6:2f:4a:7a:9c:4b:d4:99: - 94:07:be:90 + 42:aa:97:1b:b1:d0:9e:07:e0:e8:f7:76:05:61:55:06:ee:e5: + b6:b2:83:c1:b7:83:dc:4d:8d:3d:89:5f:fe:79:e9:78:c5:86: + da:12:94:78:07:a4:3f:b8:9f:8f:76:5d:d8:79:eb:79:0a:68: + 52:aa:a4:45:3e:8e:70:eb:8c:55:86:f7:b0:61:a9:4b:37:49: + 11:a0:02:bf:4d:11:7b:20:78:60:24:cb:76:45:ef:bf:80:63: + 46:83:ec:e2:b6:56:e4:10:03:21:dd:d2:5e:8b:0e:f4:a7:93: + f7:3b:78:b7:33:06:26:33:06:30:fe:f3:ad:b3:66:cf:45:39: + 77:99:a3:7c:0b:1e:fc:cb:5a:43:42:e3:9c:ef:a2:ba:25:dc: + 05:03:d7:7e:80:f9:95:ba:7a:5c:c9:b8:ca:6a:8b:26:4d:e8: + a6:e2:c2:fe:25:c9:30:69:c2:3b:41:0e:7a:04:52:3c:96:5e: + ee:53:c9:b9:44:02:86:4c:70:ca:b6:01:94:99:22:af:42:f9: + ab:4b:c5:07:4d:80:6b:0a:1a:44:5f:cc:43:09:43:e1:34:f2: + b4:70:6b:21:93:c0:8e:53:c5:ef:e4:7d:01:18:d6:bc:23:3f: + 6a:f4:cd:03:31:cd:68:b6:97:04:61:9b:cc:49:77:6e:0c:12: + c9:b9:40:14 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBETANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE0MTAzMDAw -MDAwMFoXDTIyMDYwOTE3MTA1MlowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOFq8DLTnhh3DwjR0AMRrGWzEeXdX+509f/IsVaA/a2vgiSVwH2Z0mJG -u/uedUBeFdCe2SkKPyW9g6XaxkGZWbKOez67LQyP6vkm5caPSmgL+oQ8G1fbU+ts -r5qKe5uw+8ySPorqJNA8/wbG8HmyG40/P9btCIxInED6+SiV0fNejRtLY8TTSHc0 -7oLbblNrMrrbI4cHha0mmxvQuy9rSMAX0CqvBMKHEFwWcUylIQ1bwIAcxXw5S8qT -I1o35PvSfSz4GyC8BgF2BWMHvT23b7LdaNmIdp4jF5qN0Vi2qZqBcsCMK4uz4MWT -sVBJ0+/em+AfdXfLYa70evhALoh3Z78CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFO0l7wHRqHBcW/1rLJ5eaS9JIcHaMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAZHZJiXp86SyAsLhol -MR2VtCHT7O53YIWFQBzrfyKeqx90dNXMS6/EzE9gqwUU8TUgt+ySVg4ttN5l8lAx -Ga2efrtQBeTn2F3t0fhYdV1yI5cw5uisgzUdal+UL1VZHqWloZCG2VsPVFkFEQHu -p/7JoxMyE9jEVZXGz/q+pf9XTecV3n6CjX/RO0kPmNwox69iqvi9pNuqpVbTSZFa -hiiwWpC5fZ/gzPLj3F7wv5I4fbjS9K+D78cCYOdrEte56iDnO+R1Yc+YWK/+EYEI -tpjMzk/VnJOIxqdSMVPQ0M/FZeSzCu9LAXPjjEAQpFJNCEyFjSet9i9KepxL1JmU -B76Q +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqsTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE0MTAzMDAwMDAwMFoXDTE5MTEwMzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALk+Eu/Z8gK+tJ4QHMLOe2j7NZwmudIZViEm +XfJSE/hO/+fvVSbrK2HbfaqjfHq2v/K+jXVMQ9lWx2Feaowur0Q6MCyrMeAnK9vK +LdRxC9nBajNr9Fkul9dMCT7JsoDmNWDGw+ga3kMYSUhKBFghu25SywN5GC/Q8viH +XoqtWzl7A/KbVj2c5kbAFqw4bgWpYHtBgpEJV0XmEX3G0pu3ax1m2bJ5FRcNLo/v +pMyZ2xtW0eSjgBPJI+D7Ccq2s0Ty97Z8l+FwuysFrfvOQ0MeeXOcV8fSSHCZBEWy +TA99r1SN6Ok/qKsS6bopF2dNQJd3t0IFnyu/ObEZgZ8oO48DVcsCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNetkZ3JuR5SUqlaYcZHchu6sxQMMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBCqpcbsdCeB+Do93YFYVUG7uW2soPBt4PcTY09iV/+eel4xYbaEpR4B6Q/uJ+P +dl3Yeet5CmhSqqRFPo5w64xVhvewYalLN0kRoAK/TRF7IHhgJMt2Re+/gGNGg+zi +tlbkEAMh3dJeiw70p5P3O3i3MwYmMwYw/vOts2bPRTl3maN8Cx78y1pDQuOc76K6 +JdwFA9d+gPmVunpcybjKaosmTeim4sL+JckwacI7QQ56BFI8ll7uU8m5RAKGTHDK +tgGUmSKvQvmrS8UHTYBrChpEX8xDCUPhNPK0cGshk8COU8Xv5H0BGNa8Iz9q9M0D +Mc1otpcEYZvMSXduDBLJuUAU -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/825_days_1_second_after_2018_03_01.pem b/net/data/ssl/certificates/825_days_1_second_after_2018_03_01.pem index 2061fd9..0ac89a5 100644 --- a/net/data/ssl/certificates/825_days_1_second_after_2018_03_01.pem +++ b/net/data/ssl/certificates/825_days_1_second_after_2018_03_01.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 29 (0x1d) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b9 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Mar 2 00:00:00 2018 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b1:72:29:83:ff:96:bf:59:ab:e7:e0:a2:c3:eb: - 03:05:2a:34:92:0f:b9:4d:51:7a:4f:2d:3d:4b:24: - f8:d8:17:0e:9f:88:38:aa:fc:5b:bb:13:ab:a1:1d: - c6:1e:58:b2:b1:f5:04:bb:75:7f:70:9e:82:8f:97: - 73:25:c8:ff:35:41:2f:0c:20:f1:4a:98:18:5f:aa: - 8a:14:e8:9b:6c:f4:15:28:15:ad:52:da:f9:18:74: - 70:f9:c7:93:3c:2b:ee:88:37:de:51:af:b7:0e:0c: - a1:4f:00:4f:48:fe:58:47:69:b8:57:98:f9:46:f7: - db:ab:59:02:e6:c5:55:45:04:26:6b:7b:52:41:b7: - 24:4e:d4:c2:f9:bc:1b:ff:6d:fb:37:0f:88:f5:e8: - 4e:24:e1:e5:ce:e7:2b:2d:a7:1c:44:18:cc:56:7d: - 92:06:51:03:56:0f:f6:1c:fa:c6:52:39:aa:f7:f8: - 09:d3:0d:4d:e7:fa:71:f9:79:3a:26:0a:85:cd:5b: - d5:3b:af:cb:49:d8:2c:f9:fb:cb:5e:f9:ca:8c:1d: - 0e:b7:03:70:9b:84:f6:dc:9d:39:6e:19:5a:d1:76: - bb:57:57:be:e0:d1:4f:5b:30:5c:22:6e:5f:e4:27: - 1a:0c:5d:62:65:9a:f3:e1:d9:45:be:6a:38:a4:15: - 49:bb + 00:ad:80:98:89:16:89:da:7f:11:d0:e7:ac:79:a7: + 9f:a2:31:fa:e6:22:54:5a:1f:bf:04:95:50:16:06: + b2:39:33:c4:e7:cc:0f:ee:71:90:34:64:52:1e:fe: + 30:65:30:3f:28:98:de:1f:72:19:83:37:67:d6:e3: + ed:95:28:a1:53:9c:8f:3e:49:99:98:9c:1b:04:4a: + fe:6f:60:5b:5c:43:a9:0c:fd:b4:04:6f:a3:07:10: + b6:68:4e:49:87:37:e4:d4:c7:61:ed:4a:6c:c4:ea: + 24:d6:33:a6:2c:9d:ae:04:5b:11:60:5d:bd:66:ef: + 4f:82:86:f2:d6:d2:00:12:fa:c0:81:b8:b2:e2:6b: + 11:2e:1d:22:42:fe:0c:ac:60:b9:12:98:c5:41:fb: + 11:e0:1a:fb:fe:fa:72:c9:a9:ce:69:f1:eb:2e:df: + 25:99:05:34:1f:04:11:0b:4c:39:57:a5:3c:7d:4b: + 26:8b:7e:3e:e5:aa:df:ec:64:3c:29:b5:0c:bb:ec: + 3a:f3:79:2f:26:b4:62:07:6d:53:e8:fc:8c:7c:1d: + 76:3f:fe:5f:ec:72:17:a4:c1:4b:be:1b:d5:e5:20: + df:7e:05:04:7c:e4:3c:7c:0d:10:79:a2:f1:b5:dd: + 7f:e1:4b:48:66:b3:4e:df:fa:82:00:8a:c5:7b:4b: + 3d:85 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - BC:F3:2D:55:5F:B1:CE:8D:5A:05:B4:FC:17:A9:4A:2F:14:8E:1C:F2 + 0A:5D:95:5F:6B:5D:7E:D8:97:A8:8B:BF:E3:93:00:FE:C1:77:56:59 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 76:6e:b9:fe:1c:ee:83:57:f7:cb:b8:51:e9:9a:c5:49:04:79: - d7:fc:1b:8a:53:62:d5:50:fd:f6:11:73:3c:cd:be:49:27:6e: - 26:68:87:f8:2e:a8:de:0d:d4:a2:22:66:fc:f4:5b:fc:7c:e1: - 0b:06:ae:4d:8c:af:20:30:67:b0:2e:99:72:12:ee:54:89:4d: - f8:21:32:d4:0f:50:54:ed:cb:4e:c9:8c:ba:ce:37:ec:a2:92: - 58:b4:6f:bd:98:5f:fd:10:71:39:ac:4e:da:ad:71:13:a4:7b: - af:54:7e:47:11:30:55:93:50:ff:de:10:eb:be:9a:ca:77:cc: - e6:10:3e:bd:a3:c8:ce:42:00:cd:1d:d1:a4:d0:79:b2:f2:df: - 09:7c:c9:8a:57:5e:b5:15:8f:d7:19:ad:5d:d5:9a:a8:5b:2a: - 3e:49:4e:a9:6e:c7:bc:c0:d6:4a:21:02:48:a4:c1:60:0d:dd: - bb:a6:d9:d3:c7:4f:a8:35:63:a4:3c:43:47:3d:68:96:ba:44: - 4f:08:0d:a6:40:0a:c2:c6:76:a8:79:a2:5b:e9:00:da:4a:7e: - 87:46:94:d5:16:bc:08:e7:6f:66:3a:4a:37:fe:99:2f:25:38: - 2b:3a:cd:e9:2d:e4:dc:c0:9d:38:34:42:5a:6a:7b:be:dc:a7: - d0:a7:9a:4f + c0:09:34:ed:6d:08:f7:c7:43:c0:29:b1:58:c4:4f:e4:7a:88: + 3f:a1:c2:74:eb:c0:6a:4b:51:e1:f6:78:b2:7c:aa:f0:e7:87: + d5:0d:c2:71:e0:1c:c7:0a:34:84:22:cb:93:ba:cb:48:5e:53: + 6d:9d:ca:0f:a8:cf:80:7d:e5:ab:76:c7:4d:9e:fa:a7:28:77: + eb:b0:09:51:27:c1:49:59:e3:23:4d:00:1a:37:00:45:e4:17: + 3f:5a:d1:21:39:c5:f2:12:e3:b7:26:ed:e0:99:42:69:ff:a1: + 9c:1e:a8:34:ea:d9:fb:fe:19:2d:c4:1d:8b:ad:30:d6:31:5b: + 37:8a:ed:3e:26:56:01:89:d2:ac:4d:a0:5f:d5:9b:ab:51:f8: + ef:24:1b:4c:67:e4:cd:8e:8f:09:1b:f5:4b:96:f6:7a:e3:b9: + aa:8c:b4:d8:96:b2:87:f7:ed:b4:92:03:68:39:92:24:ca:19: + 18:c7:d8:36:dc:60:31:4e:8f:13:9d:c2:9e:56:78:79:21:03: + 50:9b:86:d3:23:aa:5c:3c:16:e8:16:ae:0c:b3:c4:26:bd:c3: + f2:b1:15:ed:11:b0:91:63:b2:12:a4:73:57:b6:a0:9f:4c:6f: + d5:af:43:28:48:c4:8f:07:fe:b8:ab:a8:db:16:aa:81:a4:e7: + 81:6e:a1:e5 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBHTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE4MDMwMjAw -MDAwMFoXDTIwMDYwNDAwMDAwMVowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALFyKYP/lr9Zq+fgosPrAwUqNJIPuU1Rek8tPUsk+NgXDp+IOKr8W7sT -q6Edxh5YsrH1BLt1f3Cego+XcyXI/zVBLwwg8UqYGF+qihTom2z0FSgVrVLa+Rh0 -cPnHkzwr7og33lGvtw4MoU8AT0j+WEdpuFeY+Ub326tZAubFVUUEJmt7UkG3JE7U -wvm8G/9t+zcPiPXoTiTh5c7nKy2nHEQYzFZ9kgZRA1YP9hz6xlI5qvf4CdMNTef6 -cfl5OiYKhc1b1Tuvy0nYLPn7y175yowdDrcDcJuE9tydOW4ZWtF2u1dXvuDRT1sw -XCJuX+QnGgxdYmWa8+HZRb5qOKQVSbsCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFLzzLVVfsc6NWgW0/BepSi8UjhzyMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQB2brn+HO6DV/fLuFHp -msVJBHnX/BuKU2LVUP32EXM8zb5JJ24maIf4LqjeDdSiImb89Fv8fOELBq5NjK8g -MGewLplyEu5UiU34ITLUD1BU7ctOyYy6zjfsopJYtG+9mF/9EHE5rE7arXETpHuv -VH5HETBVk1D/3hDrvprKd8zmED69o8jOQgDNHdGk0Hmy8t8JfMmKV161FY/XGa1d -1ZqoWyo+SU6pbse8wNZKIQJIpMFgDd27ptnTx0+oNWOkPENHPWiWukRPCA2mQArC -xnaoeaJb6QDaSn6HRpTVFrwI529mOko3/pkvJTgrOs3pLeTcwJ04NEJaanu+3KfQ -p5pP +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFquTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE4MDMwMjAwMDAwMFoXDTIwMDYwNDAwMDAwMVowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAK2AmIkWidp/EdDnrHmnn6Ix+uYiVFofvwSV +UBYGsjkzxOfMD+5xkDRkUh7+MGUwPyiY3h9yGYM3Z9bj7ZUooVOcjz5JmZicGwRK +/m9gW1xDqQz9tARvowcQtmhOSYc35NTHYe1KbMTqJNYzpiydrgRbEWBdvWbvT4KG +8tbSABL6wIG4suJrES4dIkL+DKxguRKYxUH7EeAa+/76csmpzmnx6y7fJZkFNB8E +EQtMOVelPH1LJot+PuWq3+xkPCm1DLvsOvN5Lya0YgdtU+j8jHwddj/+X+xyF6TB +S74b1eUg334FBHzkPHwNEHmi8bXdf+FLSGazTt/6ggCKxXtLPYUCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFApdlV9rXX7Yl6iLv+OTAP7Bd1ZZMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQDACTTtbQj3x0PAKbFYxE/keog/ocJ068BqS1Hh9niyfKrw54fVDcJx4BzHCjSE +IsuTustIXlNtncoPqM+AfeWrdsdNnvqnKHfrsAlRJ8FJWeMjTQAaNwBF5Bc/WtEh +OcXyEuO3Ju3gmUJp/6GcHqg06tn7/hktxB2LrTDWMVs3iu0+JlYBidKsTaBf1Zur +UfjvJBtMZ+TNjo8JG/VLlvZ647mqjLTYlrKH9+20kgNoOZIkyhkYx9g23GAxTo8T +ncKeVnh5IQNQm4bTI6pcPBboFq4Ms8QmvcPysRXtEbCRY7ISpHNXtqCfTG/Vr0Mo +SMSPB/64q6jbFqqBpOeBbqHl -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/825_days_after_2018_03_01.pem b/net/data/ssl/certificates/825_days_after_2018_03_01.pem index 95a57bb..5596953 100644 --- a/net/data/ssl/certificates/825_days_after_2018_03_01.pem +++ b/net/data/ssl/certificates/825_days_after_2018_03_01.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 28 (0x1c) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b8 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Mar 2 00:00:00 2018 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:a9:a4:7e:68:33:ea:40:c5:66:fe:cf:92:6c:ab: - fc:dc:2c:e7:42:73:44:1a:f4:0e:8b:3b:3d:23:d7: - 41:aa:21:7e:a6:98:06:9c:05:d3:e6:60:e5:52:5e: - 4f:f2:dd:22:f3:1a:e7:7a:43:91:c5:7a:5b:b9:75: - f0:57:ae:69:73:e3:4d:7b:ec:e1:fa:05:34:93:7f: - 95:84:dd:3b:75:73:ab:fc:fc:2d:84:04:3f:1f:20: - d8:2e:6e:b9:9e:51:b1:8f:57:17:67:56:ec:8c:5a: - 08:36:a5:5e:4f:14:18:87:5f:82:f0:2c:87:d6:de: - 06:d3:f7:7f:99:54:55:3f:ec:fc:51:20:ac:48:89: - 34:22:c2:13:a5:75:20:e6:5b:c3:61:9e:8d:b2:24: - 99:8b:c1:e3:3d:54:7a:5b:d6:68:83:b2:49:a1:9a: - df:70:e2:bb:eb:8c:0c:a8:9a:a0:af:5e:d3:e9:db: - 93:51:9f:1c:48:80:0f:4d:76:20:34:23:fe:2a:8e: - 52:e2:93:9a:e3:fb:6b:73:a6:fa:6f:2d:50:5a:65: - ce:ed:15:ca:94:9d:56:7f:9d:23:f5:ce:0b:54:04: - ad:ff:17:4e:92:4a:d1:1c:ab:a7:c2:9d:99:e7:3b: - f1:98:68:88:a7:5c:e5:c0:39:5f:c3:25:56:85:a6: - 14:c1 + 00:d8:2b:9b:bd:10:74:a6:6f:9d:2b:1f:c6:f7:10: + 69:fd:8a:13:f4:6b:71:b6:15:3a:66:0e:48:92:4f: + 08:e3:93:d4:0d:6b:79:2e:c1:55:99:73:1c:b6:6f: + b7:92:7f:3a:38:63:15:6b:dc:52:45:8a:cf:f3:f2: + 62:e2:ef:3e:12:cf:98:ca:b1:d2:8e:47:a3:ba:92: + ce:9b:2b:5f:4a:aa:0f:5e:cf:63:58:b7:cf:9b:78: + 2a:f2:8d:8e:24:73:92:2f:ed:dc:19:b0:e4:fe:ed: + 66:4a:4f:5e:3f:cd:d4:9c:96:51:34:37:67:8e:8a: + ed:49:0c:97:2b:db:da:6e:04:a5:56:32:64:74:cb: + d0:09:95:4c:39:df:38:20:ff:fa:87:4b:73:15:ce: + 38:7c:bc:af:47:c2:c8:21:f6:3d:52:98:b0:c5:2c: + b2:cd:87:34:41:ba:4b:f9:19:68:98:2b:4e:0e:88: + 46:a6:79:7e:4e:b3:ca:2c:83:1d:6e:9f:7d:8d:d2: + 79:48:b9:1f:a0:33:11:35:43:96:0f:72:c0:d6:7b: + d8:ad:33:12:6e:a9:32:34:da:91:5a:a9:2c:fe:c8: + 2b:76:99:27:2c:cf:ae:c8:dd:49:99:b5:18:fd:7c: + 0b:c0:1f:86:53:23:1b:25:b2:e8:8a:da:0b:88:19: + 3e:85 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 32:7A:77:17:24:D3:A1:E2:D9:79:98:0C:A0:19:65:18:06:7D:74:4B + E5:64:89:76:C4:A8:B3:BF:29:71:0B:83:86:5F:60:77:28:82:AE:52 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 23:0d:4a:51:cc:45:b5:57:44:4b:db:8b:18:f9:77:85:72:ed: - 94:b8:20:31:52:0e:c3:49:71:2f:0b:1f:fe:a4:d9:39:e4:99: - 52:fd:a5:22:fc:9e:f4:45:9b:be:dd:a5:52:2b:45:74:52:61: - e0:03:66:f2:88:c8:15:79:4a:cf:e1:71:b3:d9:40:21:93:5f: - 1a:a4:08:26:80:32:45:5a:0e:a4:b2:79:1f:02:5a:c1:c7:61: - 32:c4:e0:0d:07:32:71:38:f4:85:b8:55:84:0d:ec:b2:cc:f3: - 8d:a1:df:d2:70:c2:d4:f1:68:4c:b0:87:a7:37:4d:44:b7:d6: - 93:37:bb:d3:0d:9c:11:5e:4c:1e:f9:c5:5a:26:53:82:46:62: - cf:10:fd:9c:c3:5f:48:02:69:90:9e:36:f6:77:fe:53:a6:6d: - 3c:52:ac:38:4b:44:d2:58:df:71:ec:e1:c3:6e:da:08:0c:ae: - c7:19:ef:fe:94:1b:ce:2d:40:c9:e7:ff:9c:c1:8a:f6:0f:79: - d6:bf:59:c3:ea:13:42:24:79:35:d6:85:13:54:d3:96:58:4c: - 8d:0a:01:d9:7d:37:97:9e:66:56:f7:75:f5:b8:8c:8b:a2:73: - e1:07:ca:5b:41:3e:db:2c:c7:8a:ad:97:95:b9:1a:e5:51:2f: - 42:49:88:b4 + 36:dd:82:06:b0:07:79:81:c8:5c:e0:cf:4f:06:a0:03:99:3b: + 41:93:bb:79:3f:7d:ce:3e:e6:d4:78:a0:4e:3b:c4:3f:09:9c: + f5:91:53:84:c9:2d:12:ac:19:ef:d4:d5:83:8f:c8:9c:9f:5d: + d5:d9:02:6b:c2:c2:0e:b3:78:34:9e:58:1d:b8:3b:04:31:e5: + a4:ce:d0:1c:d9:44:81:7f:e2:36:de:30:9f:7d:18:40:2e:9c: + 27:f7:27:43:7e:c2:35:ce:8e:9f:07:bc:9f:f6:2f:57:ab:51: + 2b:5d:aa:74:b2:e9:86:ce:b8:b0:7a:ee:22:e2:fa:29:8d:3b: + 7d:6b:f5:d2:42:66:c8:bc:cd:8e:ff:ca:c4:2d:e6:70:62:52: + 67:e3:89:d7:8f:f9:f4:0c:c0:db:d7:2e:b3:fb:97:d5:38:0c: + 83:88:76:76:fc:43:ab:8e:8b:ee:12:c2:10:b9:37:e7:40:a3: + 2f:2e:bb:d2:5d:c5:04:97:19:bb:0f:f2:80:dc:66:86:b5:6e: + ea:87:ff:d7:5b:13:f0:11:09:92:f4:a8:93:ac:33:75:cc:44: + 3a:9d:a8:d3:5a:d4:06:14:05:7e:3d:5e:32:29:98:9a:45:e1: + 2e:37:3a:39:75:c0:50:fe:9e:b0:e3:d2:16:16:91:64:c0:79: + 99:cd:47:42 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBHDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE4MDMwMjAw -MDAwMFoXDTIwMDYwNDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKmkfmgz6kDFZv7Pkmyr/Nws50JzRBr0Dos7PSPXQaohfqaYBpwF0+Zg -5VJeT/LdIvMa53pDkcV6W7l18FeuaXPjTXvs4foFNJN/lYTdO3Vzq/z8LYQEPx8g -2C5uuZ5RsY9XF2dW7IxaCDalXk8UGIdfgvAsh9beBtP3f5lUVT/s/FEgrEiJNCLC -E6V1IOZbw2GejbIkmYvB4z1UelvWaIOySaGa33Diu+uMDKiaoK9e0+nbk1GfHEiA -D012IDQj/iqOUuKTmuP7a3Om+m8tUFplzu0VypSdVn+dI/XOC1QErf8XTpJK0Ryr -p8Kdmec78ZhoiKdc5cA5X8MlVoWmFMECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFDJ6dxck06Hi2XmYDKAZZRgGfXRLMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAjDUpRzEW1V0RL24sY -+XeFcu2UuCAxUg7DSXEvCx/+pNk55JlS/aUi/J70RZu+3aVSK0V0UmHgA2byiMgV -eUrP4XGz2UAhk18apAgmgDJFWg6ksnkfAlrBx2EyxOANBzJxOPSFuFWEDeyyzPON -od/ScMLU8WhMsIenN01Et9aTN7vTDZwRXkwe+cVaJlOCRmLPEP2cw19IAmmQnjb2 -d/5Tpm08Uqw4S0TSWN9x7OHDbtoIDK7HGe/+lBvOLUDJ5/+cwYr2D3nWv1nD6hNC -JHk11oUTVNOWWEyNCgHZfTeXnmZW93X1uIyLonPhB8pbQT7bLMeKrZeVuRrlUS9C -SYi0 +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFquDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE4MDMwMjAwMDAwMFoXDTIwMDYwNDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANgrm70QdKZvnSsfxvcQaf2KE/RrcbYVOmYO +SJJPCOOT1A1reS7BVZlzHLZvt5J/OjhjFWvcUkWKz/PyYuLvPhLPmMqx0o5Ho7qS +zpsrX0qqD17PY1i3z5t4KvKNjiRzki/t3Bmw5P7tZkpPXj/N1JyWUTQ3Z46K7UkM +lyvb2m4EpVYyZHTL0AmVTDnfOCD/+odLcxXOOHy8r0fCyCH2PVKYsMUsss2HNEG6 +S/kZaJgrTg6IRqZ5fk6zyiyDHW6ffY3SeUi5H6AzETVDlg9ywNZ72K0zEm6pMjTa +kVqpLP7IK3aZJyzPrsjdSZm1GP18C8AfhlMjGyWy6IraC4gZPoUCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOVkiXbEqLO/KXELg4ZfYHcogq5SMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQA23YIGsAd5gchc4M9PBqADmTtBk7t5P33OPubUeKBOO8Q/CZz1kVOEyS0SrBnv +1NWDj8icn13V2QJrwsIOs3g0nlgduDsEMeWkztAc2USBf+I23jCffRhALpwn9ydD +fsI1zo6fB7yf9i9Xq1ErXap0sumGzriweu4i4vopjTt9a/XSQmbIvM2O/8rELeZw +YlJn44nXj/n0DMDb1y6z+5fVOAyDiHZ2/EOrjovuEsIQuTfnQKMvLrvSXcUElxm7 +D/KA3GaGtW7qh//XWxPwEQmS9KiTrDN1zEQ6najTWtQGFAV+PV4yKZiaReEuNzo5 +dcBQ/p6w49IWFpFkwHmZzUdC -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/826_days_after_2018_03_01.pem b/net/data/ssl/certificates/826_days_after_2018_03_01.pem index e010db2c..2ff7482 100644 --- a/net/data/ssl/certificates/826_days_after_2018_03_01.pem +++ b/net/data/ssl/certificates/826_days_after_2018_03_01.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 27 (0x1b) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b7 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Mar 2 00:00:00 2018 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:cf:da:ab:7b:a6:ed:17:b4:7b:14:b9:8c:29:a3: - 7f:25:cb:7c:a4:1c:23:da:c5:fc:8a:29:bd:be:b0: - 3d:40:c1:51:08:46:db:73:8c:dd:5c:06:3e:8c:f2: - b5:d1:eb:b0:94:74:e0:46:14:b6:55:d0:bb:a9:b9: - 63:ae:7c:ee:e6:4c:7a:81:f3:37:1f:37:8b:dc:86: - d1:79:0f:6e:ca:ca:ff:d0:91:e2:e9:f6:0c:38:ca: - 29:18:d2:92:65:88:6d:d6:72:14:b2:8b:06:11:6f: - f7:3d:9d:54:3b:b5:ca:4d:d6:02:d8:1b:28:2c:bd: - 35:09:d3:29:c7:1d:82:9b:12:3b:a8:5c:51:68:69: - 72:d2:03:6a:2e:af:b5:33:fc:f3:57:b6:cb:7f:76: - d6:2d:f7:82:74:50:f0:ef:b0:ac:08:90:be:b1:6c: - 47:ad:cb:e5:e1:fe:9a:c2:e8:0e:7f:e7:40:11:87: - ec:1b:37:cb:d2:6d:77:96:66:48:15:c2:f2:c2:9b: - aa:e0:64:ad:8f:ee:fe:81:ca:26:43:0f:21:f3:33: - 47:0d:be:ab:a4:8f:8f:84:1d:bc:e8:8f:ef:4d:ad: - 7b:39:30:22:c0:67:b2:ec:86:f7:f0:7b:f3:11:3d: - 8d:b3:5e:74:a4:9f:75:e4:4a:6c:c2:b8:d5:91:52: - bf:4f + 00:a4:a0:d8:9f:7e:c5:40:3f:86:4d:96:b5:77:01: + ab:1b:6c:de:dd:43:e9:86:5c:24:71:7e:07:d7:20: + a8:eb:31:f1:2b:8d:9a:0a:ed:a6:82:b8:0b:7b:31: + e7:f2:11:b7:b7:1d:e1:b1:05:8a:8e:d8:72:19:57: + 01:f0:e6:94:aa:0a:c7:f1:c1:eb:49:3c:2c:a7:39: + 21:51:5e:4c:d1:d0:76:ad:4d:d9:82:c8:5e:82:ee: + 38:bb:36:84:57:9f:a8:9f:e6:41:0d:97:36:61:96: + 87:e4:c3:ed:eb:58:f3:c1:0f:f1:9e:9c:89:7d:dc: + 16:05:7e:a8:d0:4b:72:64:a8:65:f4:47:77:ea:bd: + 28:ec:57:0b:11:25:4c:c2:5e:de:cf:77:94:78:93: + 53:83:74:33:3e:37:23:27:a5:6e:89:6a:86:4e:6c: + 79:df:44:c3:99:fc:99:e3:2b:1d:a1:9e:16:28:42: + 63:d4:0a:73:1b:05:81:dc:7a:16:7b:7c:7e:aa:d2: + 83:c2:67:03:dd:88:ba:b5:9c:05:9c:ec:df:84:98: + d6:34:4d:58:ba:fc:32:4d:9c:95:0e:35:76:52:3c: + 4c:ff:9d:6d:f2:aa:3b:56:77:66:f8:da:c3:c6:28: + 9e:45:56:4c:54:75:65:a9:cd:e4:2a:73:7a:8c:19: + 23:51 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 57:B6:A1:A5:9D:E5:D4:1E:49:10:E6:56:D8:70:E6:A1:D5:74:F2:46 + 62:3F:A7:B2:91:44:A4:AB:9D:89:48:C1:B9:5D:DA:2B:4B:F4:76:56 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 92:f9:fd:c1:02:55:b9:61:ac:c5:15:87:4c:24:db:a5:b4:9b: - 33:ab:24:3e:4c:3d:28:f4:f1:2c:50:64:ca:8a:2f:79:df:af: - e7:d8:cb:8e:98:c9:d3:f3:be:b3:40:ec:28:47:66:be:6f:75: - b8:eb:3f:07:18:97:2c:a1:7d:65:3b:4f:d8:c9:4b:ba:21:c2: - af:cf:90:aa:6a:a1:e7:70:3e:c0:54:6e:22:6c:11:ce:55:f2: - d7:9d:6a:bb:4d:40:8c:24:05:04:05:c0:35:c4:28:b7:0b:d6: - c9:39:a1:1b:6b:8a:aa:da:87:8f:ce:be:18:ac:04:1b:31:52: - 39:ab:03:cf:41:07:b5:64:e2:e5:5b:76:52:20:2a:9e:4d:17: - c4:b6:64:09:0e:64:66:f9:d3:23:74:2c:fe:c1:79:15:e0:c0: - 59:a1:ee:71:f7:0a:8e:3a:5c:46:c0:18:20:a0:33:ff:02:37: - 46:61:a8:6a:51:ac:a5:39:a1:cf:49:61:76:6b:df:a9:68:63: - e9:d2:1a:bb:43:60:d4:99:65:1a:91:04:03:42:43:db:2b:28: - dc:c8:af:03:b4:71:5a:c9:17:a5:ff:c9:cc:04:c7:41:7f:b3: - a5:d5:72:3d:77:45:f3:57:a0:1d:24:4f:8a:24:42:a5:9d:49: - f2:18:cc:ac + 1d:a7:66:71:92:5c:d7:57:7e:98:f9:4b:c9:87:e8:24:a0:cd: + 34:ad:95:3b:c2:4b:e5:ae:f3:cd:45:b5:e5:a4:15:13:3e:7e: + 3d:5e:0c:f7:95:b5:c5:9f:6d:0b:bc:95:08:f7:23:ed:a2:43: + 45:9c:48:03:49:ed:81:f7:68:90:a6:f4:29:bc:c5:30:7e:59: + 27:3b:c8:08:5b:ff:48:3e:b3:c4:6b:5e:4b:e8:ec:4e:e4:ce: + c3:84:ca:c9:2d:8a:ed:1c:51:3d:b5:20:20:1e:88:ca:22:c6: + 64:b2:6f:c5:a5:e4:da:8d:14:98:60:e7:22:41:b8:29:f8:ef: + fe:5b:05:8c:55:6a:0c:d3:45:25:a8:6d:24:24:f1:28:e3:40: + 48:1f:71:40:b6:85:c4:62:07:10:0a:9b:92:20:4b:42:9c:26: + f2:37:14:74:ee:a8:b5:f5:db:14:83:be:07:71:ba:b3:91:b6: + 47:b2:57:1f:b5:25:95:d7:6d:4e:a4:78:5a:5a:23:3f:30:54: + 0f:b5:0f:9b:23:e7:5f:29:50:1e:b9:e3:af:71:06:70:36:2b: + 4a:4b:52:ef:b6:db:38:a8:93:85:5f:78:a1:8a:22:b7:dc:4a: + fe:49:1a:59:31:b0:5e:3d:6c:c1:f5:e1:a3:c1:3a:28:3f:a7: + c6:b0:c4:f4 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBGzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE4MDMwMjAw -MDAwMFoXDTIwMDYwNTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAM/aq3um7Re0exS5jCmjfyXLfKQcI9rF/Iopvb6wPUDBUQhG23OM3VwG -PozytdHrsJR04EYUtlXQu6m5Y6587uZMeoHzNx83i9yG0XkPbsrK/9CR4un2DDjK -KRjSkmWIbdZyFLKLBhFv9z2dVDu1yk3WAtgbKCy9NQnTKccdgpsSO6hcUWhpctID -ai6vtTP881e2y3921i33gnRQ8O+wrAiQvrFsR63L5eH+msLoDn/nQBGH7Bs3y9Jt -d5ZmSBXC8sKbquBkrY/u/oHKJkMPIfMzRw2+q6SPj4QdvOiP702tezkwIsBnsuyG -9/B78xE9jbNedKSfdeRKbMK41ZFSv08CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFFe2oaWd5dQeSRDmVthw5qHVdPJGMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCS+f3BAlW5YazFFYdM -JNultJszqyQ+TD0o9PEsUGTKii9536/n2MuOmMnT876zQOwoR2a+b3W46z8HGJcs -oX1lO0/YyUu6IcKvz5CqaqHncD7AVG4ibBHOVfLXnWq7TUCMJAUEBcA1xCi3C9bJ -OaEba4qq2oePzr4YrAQbMVI5qwPPQQe1ZOLlW3ZSICqeTRfEtmQJDmRm+dMjdCz+ -wXkV4MBZoe5x9wqOOlxGwBggoDP/AjdGYahqUaylOaHPSWF2a9+paGPp0hq7Q2DU -mWUakQQDQkPbKyjcyK8DtHFayRel/8nMBMdBf7Ol1XI9d0XzV6AdJE+KJEKlnUny -GMys +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqtzANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE4MDMwMjAwMDAwMFoXDTIwMDYwNTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSg2J9+xUA/hk2WtXcBqxts3t1D6YZcJHF+ +B9cgqOsx8SuNmgrtpoK4C3sx5/IRt7cd4bEFio7YchlXAfDmlKoKx/HB60k8LKc5 +IVFeTNHQdq1N2YLIXoLuOLs2hFefqJ/mQQ2XNmGWh+TD7etY88EP8Z6ciX3cFgV+ +qNBLcmSoZfRHd+q9KOxXCxElTMJe3s93lHiTU4N0Mz43Iyelbolqhk5sed9Ew5n8 +meMrHaGeFihCY9QKcxsFgdx6Fnt8fqrSg8JnA92IurWcBZzs34SY1jRNWLr8Mk2c +lQ41dlI8TP+dbfKqO1Z3Zvjaw8YonkVWTFR1ZanN5CpzeowZI1ECAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFGI/p7KRRKSrnYlIwbld2itL9HZWMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQAdp2ZxklzXV36Y+UvJh+gkoM00rZU7wkvlrvPNRbXlpBUTPn49Xgz3lbXFn20L +vJUI9yPtokNFnEgDSe2B92iQpvQpvMUwflknO8gIW/9IPrPEa15L6OxO5M7DhMrJ +LYrtHFE9tSAgHojKIsZksm/FpeTajRSYYOciQbgp+O/+WwWMVWoM00UlqG0kJPEo +40BIH3FAtoXEYgcQCpuSIEtCnCbyNxR07qi19dsUg74HcbqzkbZHslcftSWV121O +pHhaWiM/MFQPtQ+bI+dfKVAeueOvcQZwNitKS1Lvtts4qJOFX3ihiiK33Er+SRpZ +MbBePWzB9eGjwTooP6fGsMT0 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/900_days_after_2019_07_01.pem b/net/data/ssl/certificates/900_days_after_2019_07_01.pem index 14514b06..c26e8739e 100644 --- a/net/data/ssl/certificates/900_days_after_2019_07_01.pem +++ b/net/data/ssl/certificates/900_days_after_2019_07_01.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 32 (0x20) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:c0 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jul 1 00:00:00 2019 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:d2:76:d1:5f:28:08:6d:97:b7:6c:31:e1:7f:dd: - ff:c9:46:ac:c5:39:26:20:35:6d:50:58:4f:36:1f: - e9:c4:04:03:c3:80:d4:c0:a4:7d:8a:77:a9:72:76: - 66:31:cb:24:5b:ed:cc:e5:b4:25:ec:7d:8c:74:58: - 82:d4:0b:af:09:d6:01:6c:45:d3:d3:3f:d7:c8:87: - f7:91:21:0b:59:fe:40:50:ba:a2:b7:c3:a5:2b:35: - 36:78:e8:b1:73:fe:f4:a3:b6:cc:b0:30:6f:01:cd: - 4a:5c:d4:93:2b:a3:37:c5:c5:55:2c:92:8f:da:5d: - 5b:6e:dc:e0:73:17:35:d6:f5:1c:29:3d:f8:1d:37: - 98:41:65:9f:b1:f2:54:ec:39:35:95:3b:14:fd:60: - 8e:63:0d:6d:3f:63:b7:18:8b:90:73:43:d4:0d:05: - d9:81:c8:5d:09:cc:43:a0:a7:fd:05:5f:fb:f2:b7: - bc:24:54:46:64:01:86:33:ca:45:7a:b0:70:1f:3e: - 04:ad:33:38:74:44:2a:40:f2:e0:6a:e2:de:ed:c1: - 20:3e:af:46:6b:c9:25:a5:15:54:56:7a:3a:7c:8f: - 27:21:4f:d2:b6:5a:1f:21:8e:75:62:8b:40:58:f9: - 54:8d:8e:20:1f:5f:9b:6e:65:44:b4:c3:a6:83:8b: - 6d:d5 + 00:a4:57:b8:aa:2a:90:a1:4e:5c:cd:df:45:06:fc: + 6d:f9:e5:1c:8b:0f:65:8f:d2:dc:fc:b2:03:38:63: + fb:c4:d6:93:bd:dc:cc:8f:0b:3c:3d:42:32:40:de: + 95:e2:5f:9a:7e:19:0c:06:40:55:b1:7a:e4:fc:80: + 2d:3f:86:8e:d5:a0:6e:e3:21:10:f1:32:eb:cf:41: + 57:5e:4e:2c:52:cc:d7:22:0b:24:f3:10:0d:ad:30: + 2f:2f:e7:83:33:a7:a3:0c:b2:2a:f9:0c:c1:b7:89: + 9c:24:38:cd:6a:bf:c1:c6:d4:aa:4e:5f:17:c1:3a: + 19:d9:84:f7:cf:99:3f:2c:25:d3:ac:4f:b9:9c:35: + 1f:b0:8f:99:c9:09:a6:e5:05:5b:f2:b6:17:32:33: + 6d:8d:24:ca:e3:de:4b:64:4e:77:33:2d:5f:37:89: + e8:cb:f2:1a:c8:62:39:03:e5:f7:30:05:52:1c:3a: + c2:86:1b:dc:fe:83:d1:de:99:8e:b0:6d:2b:f7:1b: + 1c:a2:39:75:25:c6:9c:6e:6e:0b:4b:44:fd:ae:d7: + 57:a8:82:11:36:a2:a4:7b:72:02:ce:eb:fa:eb:ca: + 35:83:3c:93:2f:1a:4b:9f:2d:90:f9:1d:39:65:4a: + 93:99:80:87:77:e0:a7:ee:48:f4:1a:a4:8b:a4:8d: + 5e:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - D2:C1:43:17:52:15:0E:E2:4C:0C:BA:1B:EB:F5:E6:EF:F5:09:B0:EC + 70:0A:87:A4:15:46:AB:83:13:EB:AD:AB:F2:93:D5:38:90:75:76:14 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - bf:d2:85:20:48:0c:a9:b5:6c:76:13:d1:ef:56:6f:0d:42:cd: - ae:97:26:7a:99:f3:d4:72:66:5e:db:ae:28:94:2f:9b:86:d5: - 94:00:5e:aa:c5:f6:f6:40:1b:99:1b:0f:5d:7e:74:95:2e:ef: - b8:bf:df:80:6c:b3:97:f2:e7:c8:4a:da:12:73:f4:ab:ea:a0: - 74:63:57:e0:9f:5f:1e:7e:f3:c7:de:e7:4c:69:54:92:d9:67: - a9:79:8b:c9:b9:ce:23:96:d2:25:85:4a:32:06:ca:6b:db:bb: - 02:12:34:02:f2:85:a8:40:81:f5:42:d3:d3:8c:fa:af:ce:29: - 6a:cd:cf:46:df:88:d6:d4:69:77:19:62:c2:09:b3:a8:00:32: - db:a8:9e:66:c3:5e:56:79:8c:76:50:c4:e8:48:60:48:93:a8: - af:5c:32:d4:e0:e7:91:1f:12:25:9b:a5:67:0e:4a:bf:eb:84: - be:ba:f7:0b:ac:09:60:1b:fe:92:2b:98:1e:23:24:9c:97:fd: - 5e:ee:5a:2f:c2:80:cc:f6:55:31:77:b2:c4:5d:ff:f2:c7:cd: - d8:a8:bb:ee:76:70:7f:04:63:24:df:9f:99:b1:35:79:9e:52: - 17:73:83:95:55:6e:bb:56:4b:76:c4:d0:b2:03:bf:8c:e7:7d: - 40:26:9e:3b + 1d:90:bc:fe:ea:e3:79:0d:5c:6a:d8:dd:de:84:7d:b2:d3:20: + 8f:31:05:cf:0d:f9:c4:82:d9:db:3d:b9:ee:a4:9f:ff:91:82: + 4a:9a:3c:ab:19:73:be:b7:60:f6:6f:45:7e:4b:93:9e:58:ad: + c1:16:d7:e2:83:26:ce:e7:31:be:80:35:59:c4:1a:06:5c:af: + 27:e8:3b:89:b1:f6:dd:c9:83:de:47:36:78:cc:d8:5b:b8:4e: + 4f:d8:8d:33:86:b7:b5:28:e4:f0:1e:6e:ac:eb:d2:cc:0c:36: + b5:b3:30:17:a2:7a:15:6a:cf:42:e4:09:67:40:bd:27:39:e6: + 01:b8:b4:c5:dd:ce:63:99:67:29:7c:f0:ba:84:74:79:33:1c: + 94:92:63:2a:8a:f6:b7:da:de:33:12:80:58:cd:d4:0c:e6:29: + 78:07:ff:3a:5a:5c:92:d3:69:c5:de:10:56:fb:90:c4:24:86: + 7c:6f:fe:27:35:d9:3b:9b:73:6d:69:37:63:b8:bd:c8:4b:25: + 01:33:77:06:a4:7e:f5:05:2a:47:86:36:c8:7c:ab:17:b4:4e: + 03:42:1d:f6:57:3c:ac:aa:61:56:03:f2:d3:34:7d:0a:71:e5: + 3b:92:54:91:df:06:b9:dc:8a:cb:a2:33:a4:45:7b:c2:c2:b0: + fb:98:6a:40 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBIDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE5MDcwMTAw -MDAwMFoXDTIxMTIxNzAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANJ20V8oCG2Xt2wx4X/d/8lGrMU5JiA1bVBYTzYf6cQEA8OA1MCkfYp3 -qXJ2ZjHLJFvtzOW0Jex9jHRYgtQLrwnWAWxF09M/18iH95EhC1n+QFC6orfDpSs1 -NnjosXP+9KO2zLAwbwHNSlzUkyujN8XFVSySj9pdW27c4HMXNdb1HCk9+B03mEFl -n7HyVOw5NZU7FP1gjmMNbT9jtxiLkHND1A0F2YHIXQnMQ6Cn/QVf+/K3vCRURmQB -hjPKRXqwcB8+BK0zOHREKkDy4Gri3u3BID6vRmvJJaUVVFZ6OnyPJyFP0rZaHyGO -dWKLQFj5VI2OIB9fm25lRLTDpoOLbdUCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFNLBQxdSFQ7iTAy6G+v15u/1CbDsMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQC/0oUgSAyptWx2E9Hv -Vm8NQs2ulyZ6mfPUcmZe264olC+bhtWUAF6qxfb2QBuZGw9dfnSVLu+4v9+AbLOX -8ufIStoSc/Sr6qB0Y1fgn18efvPH3udMaVSS2WepeYvJuc4jltIlhUoyBspr27sC -EjQC8oWoQIH1QtPTjPqvzilqzc9G34jW1Gl3GWLCCbOoADLbqJ5mw15WeYx2UMTo -SGBIk6ivXDLU4OeRHxIlm6VnDkq/64S+uvcLrAlgG/6SK5geIyScl/1e7lovwoDM -9lUxd7LEXf/yx83YqLvudnB/BGMk35+ZsTV5nlIXc4OVVW67Vkt2xNCyA7+M531A -Jp47 +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqwDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE5MDcwMTAwMDAwMFoXDTIxMTIxNzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKRXuKoqkKFOXM3fRQb8bfnlHIsPZY/S3Pyy +Azhj+8TWk73czI8LPD1CMkDeleJfmn4ZDAZAVbF65PyALT+GjtWgbuMhEPEy689B +V15OLFLM1yILJPMQDa0wLy/ngzOnowyyKvkMwbeJnCQ4zWq/wcbUqk5fF8E6GdmE +98+ZPywl06xPuZw1H7CPmckJpuUFW/K2FzIzbY0kyuPeS2ROdzMtXzeJ6MvyGshi +OQPl9zAFUhw6woYb3P6D0d6ZjrBtK/cbHKI5dSXGnG5uC0tE/a7XV6iCETaipHty +As7r+uvKNYM8ky8aS58tkPkdOWVKk5mAh3fgp+5I9Bqki6SNXg0CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHAKh6QVRquDE+utq/KT1TiQdXYUMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQAdkLz+6uN5DVxq2N3ehH2y0yCPMQXPDfnEgtnbPbnupJ//kYJKmjyrGXO+t2D2 +b0V+S5OeWK3BFtfigybO5zG+gDVZxBoGXK8n6DuJsfbdyYPeRzZ4zNhbuE5P2I0z +hre1KOTwHm6s69LMDDa1szAXonoVas9C5AlnQL0nOeYBuLTF3c5jmWcpfPC6hHR5 +MxyUkmMqiva32t4zEoBYzdQM5il4B/86WlyS02nF3hBW+5DEJIZ8b/4nNdk7m3Nt +aTdjuL3ISyUBM3cGpH71BSpHhjbIfKsXtE4DQh32VzysqmFWA/LTNH0KceU7klSR +3wa53IrLojOkRXvCwrD7mGpA -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/bad_validity.pem b/net/data/ssl/certificates/bad_validity.pem index cb51391..9fc050e 100644 --- a/net/data/ssl/certificates/bad_validity.pem +++ b/net/data/ssl/certificates/bad_validity.pem
@@ -1,36 +1,37 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAECggEAXuyGumXEnl/g2oueEX0J8FKOgj4e7z0+8OQAiRLYgf9B -XmfTGZ3DcCnB6p8F6p2wCjIW2j64y0mJLZEnZAwBV/F8CuUOEErSJM2x0BnHV7Kv -JmtebDEWWTNTTcX9/gDhtF0bdQK5WMt6OKJdKZRHUITk52u+pov7jWZDw99+tG5w -InCv1RekWbAGZWLs9hyzpOpvp0tGM2O9+XCWQh/LLeLb5rJkTcH8NKv9Xh+tLeSU -i/FER+rQHsMVA4uHdBmRgPsBnPrJopcKWQImRXDGidEd5AUWLIECQdnZI8pbtmjV -0HZj+UuUlDFdALmCHX+NxR4Z+hyi+E96ZWw/J9FHwQKBgQDYX0e873Sf4tDOn0cZ -Olof3cXPri8ezKoeAD8tfY0bxLIoOwDUtJXZeGEZD3sduDJDCdvS1M/eeW04ePlx -kTmcDecaYm4t3KYzbPauudbMQEQFvsoivp8ct/synPcRtGPTHg+GUHaqWT1d4DjT -WClxx67ugD/YQYs5UY/uLjm4tQKBgQDV2lh1Uk3xBj15FZrzg/7GM7bK3L/Xcxzz -VewAksKuVEyoqHfZAo6P/xOiQkwc9kBoet43MiNyph/kYssQowE+Pg+WffB1Ve4F -kVsq6z1mwAfnYD6m4GHxfrV6VxwM3ItiX+PiKQ4YWsbyjc/vC4ZRSarLwbk8Woya -lNucr2hGmQKBgF5sdioFdaewm98Psz9XL61oYsLXCMkwF60v/mIjwEi19emIljw8 -8ogM+JKvJtM5ZvXKf5vqMyyrYPacFH9zGOj5SDlDa0GoYP9gNebaQtqv0P+Q2zV+ -aoFl6MGVrlyTlFy1aaD7zE1a1GT7TNEuUCfPNI/wd+wv7kn9RgpzMc1hAoGBAJrh -5Zkq/+olc9ZDcJMXsSkJgUURdhvrcjdGroOHx1oNEexA/3P7ZxchTa4ByDBdpS5G -drSRKp05dfWqG5o0BI140z9SfRnuH1KHAPlnoHPPdqn7ycSA1E7cT0GI33btMEIS -YvCEfYHkFRzM2qEtvp0W9o1WA/uTNSwrzZaAb8xZAoGAZZLwniPa8zkd+4WAPSN6 -LVj+1dGasfL/zftFhVxu0/KCpdggghG26Ej0ieG71k8Xg9tpZDJvo9Kj0s8Hu4Zu -TnhwwRVyUHls+Gl0t8XXV/ryRLHB8zY45k6A+Yvc/iOYQVmY2rE4kB4PDsrJ+d5P -wA1o1OPvcx28oBjHViWoWJQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmWNw2JdGmpJMI +zy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs82C3SJapHT/Sk844JmDfT +D3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsLHa3Yn0mxcvKvCN/IAqrL +8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpmw/LH/mmHL3AMG2Y3ksU/ +hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszFgVkuChsOG1lxytOQ72/K +t4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG8xkI+j/6Hkqb/LUWF4gN +OA7Dpl/VAgMBAAECggEAeqgjGDoisMHBOUmqjK1zmfcSd/1b8nWtMZWVLy6yyFIU +teoWVY3Lqdjyr5anksD7IcIvHkIIhcKbxyEoYz7m4TIzSO6dgnxhyaK+R6Dccqiq +oBPG4Bx+xJCpBLVJruUlLZcYoz/j4lM1JVWT0FDxWsN79RYASMvXO32S9ZXrfC1S +YZjVeUrjyrc7Y2Z6z/n89P9mfWUwqOuuH6fHpNHvBugteFB3pS2oclooOh3hXWIu +ZSHWOyX0wj0Rk1iuOBADqxhec/zR4nQ9IZi3nRbfNyoUYzf2qgqPcS9yROS9PZQw +rESmMXpVJ1aF9sFo0LA5KW2sT7qbVWeLwfF8nZvPgQKBgQDdoAdvu5BPTk4E2jg9 +y/VfESKiVd1BStsw5DWBZtgDGDpLHtkoezcao0hJxGKAsnWJ1EqhqViNXEJcECi6 +Xdr5EF525y9KdKCld7q9ZeQbvvg0QLHXYY0bQhPhbymosFg+qdJCHfn8Wwim8Ibc +JnjpzDdzSKEWELanUrSTEla1TQKBgQDAJe6I4CtEXaBXi06KQHnKHI+9uu1w0TBp +YuM2/3v7CVBcN/lkmK/tnM+RZqgEi/Nhy08uIfIQjWetq7FQjbLEsesy3zlqIlth +Kw4jCcdrPW3XTp/Ru7rUQUjBTWpDh/f1T41OzY4qE5X6v2MQkJP5a614Qi2kqFZ3 +neZtpfNwqQKBgASoFR/q3/ham9cMQrxBqdEqigDBLxntGbfoQ5uJbqZ5/tePOV7Z +X+oGXkF2h99OYJvZwwushDjMJHTMvh5UVIKBLorvBpZY5vszDdBm8KkIlSx744C0 +AwP8mnBVJpntwpzmco2DFbqQqxje2uaLRGUdLlkUwJW3Gi9f1H12mC3NAoGBAJOr +00HwfnAhQHxnfKn12WPCRZo8EgV1T65+qD75ZJBO3SqyfgGY8wQ7Uq7dZV1xLVBI +TwcWYZHlCvxHCpPtAqn2TtsfAWIXG4F29HtrJY6+fC9PprYqf/BmaALfez6BPciT +JfedNJgTy10VP45YftDet0fIHIoCMcnmWVSFiK1ZAoGABYToKrxvwdgzqRt22k0D +OcMTSQqpcO/WZfcpFK9leOLuKBNniow1PSYkymdVgCkSjrY3Oksxh/0V20H62oqU +bJMTvYZFpTcCQgcwSiyQD2o2PgKNxrxIfII4/9H8hjV99uXaafEWFky8ea6GEJaN +4PkKpNDj9dus6J2Hzat2c3E= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 8 (0x8) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a9 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jan 1 00:00:00 1 GMT @@ -38,32 +39,32 @@ Subject: CN=Leaf Certificate Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,39 +73,40 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 86:50:e0:4c:98:8e:43:69:c2:2f:f5:2e:2e:64:30:28:0f:49: - 48:d1:9a:61:bc:49:01:f8:84:0a:04:91:d4:04:ee:9d:02:fd: - 00:2b:6d:57:d5:23:c7:62:eb:e2:96:15:90:bb:1d:3a:8f:98: - 32:1b:0f:04:d1:e8:ce:e6:4f:a3:2b:3a:41:9c:04:15:b2:30: - 3d:ef:f9:d1:8f:73:f2:f6:f9:0b:2e:8a:05:ce:ec:8f:1d:f1: - 84:c0:ba:a3:ef:c3:1a:83:fb:19:1e:03:fd:46:3b:97:28:55: - af:0a:e9:3f:36:90:a0:8a:a6:13:ff:d1:10:ac:d1:7e:79:54: - ae:fe:74:b9:7c:3f:8c:b4:e1:3c:5d:0b:18:92:69:00:04:0a: - be:0a:c9:bd:57:ec:9b:c3:8d:d9:07:fd:97:5b:04:e9:b1:29: - d9:82:8e:f6:fe:ce:76:2c:b3:d4:3b:f3:06:6d:30:a6:b5:1d: - 4b:f0:8c:57:07:1d:0e:23:6e:e4:50:fb:ef:74:d7:78:ff:be: - 31:97:66:ce:9f:a8:98:48:21:97:56:29:d5:c2:6e:66:6f:9e: - f3:ad:cc:92:f0:ad:fb:0b:e7:90:42:f3:27:13:69:35:71:bb: - ee:9d:fd:dc:ee:3b:62:c4:2a:98:ca:15:6f:15:d9:f9:0f:82: - eb:fe:80:03 + a5:9c:bb:a6:5e:84:75:ff:c7:7c:35:68:dc:46:fd:66:ce:e3: + 0c:1b:58:e8:0a:43:73:bd:d2:77:70:2c:23:73:6e:07:49:4c: + 43:72:bb:1c:9d:53:a6:a8:38:b7:88:b2:c8:5f:df:ec:10:17: + 35:d9:88:4a:85:cc:8f:16:9a:d6:ea:2d:a5:fc:11:48:b9:6f: + db:9f:26:e6:a2:b3:59:31:c0:7e:db:b1:73:e3:ce:5d:50:38: + e9:2f:26:72:5d:a6:14:47:89:f5:d4:b4:d7:05:b3:ad:39:82: + 4d:87:99:2d:93:df:1b:ab:07:b5:bd:e4:f0:ef:72:54:e8:80: + 58:a3:b8:40:49:53:8d:d1:36:4f:21:aa:b1:3d:9b:23:61:c4: + 2f:7f:ec:b5:9b:16:ff:7f:ab:4a:dd:32:ee:63:06:a3:ba:f2: + 05:18:31:62:04:0f:cf:52:88:04:ae:2a:2a:a6:95:7d:4c:aa: + be:4b:ad:d7:41:53:79:5d:cf:12:39:1d:10:3d:f0:74:20:72: + 6f:19:a5:b1:fd:0e:b3:b4:56:5a:ce:69:31:d6:fe:b0:2a:7d: + 89:74:4d:5f:ef:45:c5:69:79:75:62:13:92:ac:10:73:0d:c1: + a3:eb:c3:38:3b:a8:43:cd:3d:d5:ea:a8:0a:68:f9:ba:ef:f5: + 09:76:0f:32 -----BEGIN CERTIFICATE----- -MIIDfjCCAmagAwIBAgIBCDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMCIYDzAwMDEwMTAx -MDAwMDAwWhgPMDAwMTAxMDEwMDAwMDBaMBsxGTAXBgNVBAMTEExlYWYgQ2VydGlm -aWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTg3OAvB4h0 -Op/TMKNxivnWpeWmUzAfBgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAd -BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0RBAgwBocEfwAAATAN -BgkqhkiG9w0BAQsFAAOCAQEAhlDgTJiOQ2nCL/UuLmQwKA9JSNGaYbxJAfiECgSR -1ATunQL9ACttV9Ujx2Lr4pYVkLsdOo+YMhsPBNHozuZPoys6QZwEFbIwPe/50Y9z -8vb5Cy6KBc7sjx3xhMC6o+/DGoP7GR4D/UY7lyhVrwrpPzaQoIqmE//REKzRfnlU -rv50uXw/jLThPF0LGJJpAAQKvgrJvVfsm8ON2Qf9l1sE6bEp2YKO9v7Odiyz1Dvz -Bm0wprUdS/CMVwcdDiNu5FD773TXeP++MZdmzp+omEghl1Yp1cJuZm+e863MkvCt -+wvnkELzJxNpNXG77p393O47YsQqmMoVbxXZ+Q+C6/6AAw== +MIIDjTCCAnWgAwIBAgIQPiydvrBCyM/8mULVTUFqqTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMCIYDzAwMDEwMTAxMDAwMDAwWhgPMDAwMTAxMDEwMDAwMDBaMBsxGTAXBgNV +BAMMEExlYWYgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCmWNw2JdGmpJMIzy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs8 +2C3SJapHT/Sk844JmDfTD3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsL +Ha3Yn0mxcvKvCN/IAqrL8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpm +w/LH/mmHL3AMG2Y3ksU/hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszF +gVkuChsOG1lxytOQ72/Kt4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG +8xkI+j/6Hkqb/LUWF4gNOA7Dpl/VAgMBAAGjgYAwfjAMBgNVHRMBAf8EAjAAMB0G +A1UdDgQWBBSBzafdUkN/33pLuvWwthCgRAzsbDAfBgNVHSMEGDAWgBSbJguKmKm7 +HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYD +VR0RBAgwBocEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEApZy7pl6Edf/HfDVo3Eb9 +Zs7jDBtY6ApDc73Sd3AsI3NuB0lMQ3K7HJ1Tpqg4t4iyyF/f7BAXNdmISoXMjxaa +1uotpfwRSLlv258m5qKzWTHAftuxc+POXVA46S8mcl2mFEeJ9dS01wWzrTmCTYeZ +LZPfG6sHtb3k8O9yVOiAWKO4QElTjdE2TyGqsT2bI2HEL3/stZsW/3+rSt0y7mMG +o7ryBRgxYgQPz1KIBK4qKqaVfUyqvkut10FTeV3PEjkdED3wdCBybxmlsf0Os7RW +Ws5pMdb+sCp9iXRNX+9FxWl5dWITkqwQcw3Bo+vDODuoQ8091eqoCmj5uu/1CXYP +Mg== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension.pem b/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension.pem index 250b88b1..95cdd26 100644 --- a/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension.pem +++ b/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension.pem
@@ -1,21 +1,21 @@ -----BEGIN CERTIFICATE----- -MIIDaDCCAlCgAwIBAgIJAL+mLJGnpUF1MA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTgw -NjI4MDU0MzM2WhcNMTkwNjI4MDU0MzM2WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEApHXhhcN/ztDSl5gCN4kKnu0BvMIJuePoHQPK+tSKoZ/KJJlf -dJXh28dPtkCH/Niyuk/n6noyxFnVZe0oPiSS8YxPJl1mq4EBpojxNiag2CxmTtd+ -KpIkVnxxR9sm9gOtkYoWjKS4ZZrMP/NscDOJczWxa4t/J56S+y5Ai0eO+FnA2muh -S0wM0hzTMliB8wziEwrwdG/ALRrq41VP+7ENhrEm0XfQR0HAu6E2EcniG582k6Gk -4K3BhKCA5pPT/wD2F3vtthGkhr6/zNGdHlD3ak/6W8lBpu5m0ZMw0DXDa3AGx8+J -bHC2wensrIiBfPqIWeLZaV5DGw33h0di1FOqtwIDAQABoyUwIzAPBgNVHREECDAG -hwR/AAABMBAGCisGAQQB1nkCARYEAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQAO69by -+kSrwuURVR2oWiWPzL6uFmQ3B6hK9Y1xL1EQDfwQdp734J7lvM+HqtQocwkt9Bu3 -FYnkELXve2QM5eyDtp56NJ6hGuavMFucvBuW26xYmOaeQVVR2TEJDJ8aVZ9j+eRc -UninLwe/tS8bVDgyhVMyAZNRSRNLYcJ4tj69zI5jFfNMOYXFdIkLH43OmS3YDJxZ -LG04e+kGlVYRRhnxbIQwhpnJen7Xrch9s7knLbnWrBnY6p+zHKFXLZU4xEa0i+Oh -nq1J52iUIjJJyCQrNCRergz1BW+8Nupz1f86VHS7eAAdq28//fAiguO+AHCrDIaL -DXQBKUctVk5MY6i7 +MIIDczCCAlugAwIBAgIUBdr4m5otqGWF8sQcOBHQyV2ukGYwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MzBaFw0yMTAzMTMyMDQ2MzBaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjXA7p3tWcWML9bBmhYteqhMuAtQ/W5/7q +I6o3w1r6VkqH4vkIT9v+4/VgQE4Q2VbmEeK9nBGUQoJXdFcrQ95BY597QjFISULw +qRelmR+tIY23K8JNK0QPFn6CPhPsQz/EPXk2+8gNL/Lj9DybRKDdrfS/xF5jefOT +BiASU1mRUe67y8lPcbcBbuRyaRU6PgZwQx3aPBLTn32bMfZXL+BBA2QTNH1M+YSf +otU6c0qdbGmLp+iEuYv0xFeXIDNhpYhnj3v/6MGbKl/pB5g5sPzOCp5uIw3b+ZL5 +WN8tYY0djgmKbcOEoSAmI8BmWNG7z+i5/Rr9eNAHwvX/T1bZ2ZyBAgMBAAGjJTAj +MA8GA1UdEQQIMAaHBH8AAAEwEAYKKwYBBAHWeQIBFgQCBQAwDQYJKoZIhvcNAQEL +BQADggEBAIJOMJjMtky/DvbAi0kOg9ck0Dsj670+JAvaEC22OtvnCsbTt2KgmYNz +eynR3YEjZkFjV/cDQeaQUFYFmxbctL8vWQ07HfKfpbDalxoP+6XRVf6KpYcQaNvF +o+5fd3AmQHPUIRiQuy0+K8rQklo0vrY4usH1/U40FqqIkgPNIPdugUAeCEcvh14c +dCIumYCDYF0Fa/IEHkEOrByyuNky3LTCOK/r/h166pCYU2ag5udoiRZQn9CHomAF +46g9CLjfMak67GiQQvmbOB8suT6lX+8XBWg4dy2IGEaYAlQ2E9uWtzkC8yGRoPn6 +8jjJn8AdirTOOGxHz65yJdJbYHnpvAs= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension_invalid.pem b/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension_invalid.pem index 9479417..082bbb0 100644 --- a/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension_invalid.pem +++ b/net/data/ssl/certificates/can_sign_http_exchanges_draft_extension_invalid.pem
@@ -1,21 +1,21 @@ -----BEGIN CERTIFICATE----- -MIIDaDCCAlCgAwIBAgIJAKacjL/rr3TRMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTgw -ODI0MjM0MjM1WhcNMTkwODI0MjM0MjM1WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAtrUDSOYujJGYyc9B35JV5panjbG8KOCky14YGdMQWvlo7mCK -mbtefpFzC5EvZERZey8cMdKzUMRtoCDFNtqTS96V5XLxCzNTe6xynu9BHtQuddzS -3E8e4fltfkvV2rz47Q/ciyUhfmXdMEW3RFdj7oohddRJtpF7FdNp9ShCnVILUIPJ -sspaUJBVO3L+O042CwVwOndEt4N/Xd7Bf4516q4sVKAHL/QWpJzauHi50kvCVo6f -b2h/e9eCin50Ydd+A3UjY02pQh6gmHZXvQwxYC9qRTrMI+LsBBnubXcCzloHT9FU -8umggcLjeuPzcXQV5jwBwFiuMhJBUYl1a7USpwIDAQABoyUwIzAPBgNVHREECDAG -hwR/AAABMBAGCisGAQQB1nkCARYEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCbrJ6W -lrL6DJdafOjx+7nnqCzcY36r/58EFTyLkpKNBdzOLdpQld66QAsJi/nRlfxtk/2m -AEMZOa0wyuC0jZ+2Z1fDJ0GJwir7QKxedJqm3Oh4x4O5MsNxB3U3u7hiT+mJQhWS -2UWALvCbG4lmSLEv5NR6zNcATJX0jwCVPfibJwTVolpSeFCPfJ1nwVyXnYrNY4Qr -gy5FnZc3o5qZ70QZ5dozhJSZF2gBFlOs3aanWjQwkw6IUzABhnAlwtlgxb6A/XkA -OBvVlrMoSEMWdfTSJ2P6upcjhuVocqnd2UJ4CNDr79nJN63p6GQXPRhlYHpakm5w -/wLqXAxa/mEXqkSQ +MIIDczCCAlugAwIBAgIUQeyVfVMC4fKzl+J67ydMLC1eoIUwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MzBaFw0yMTAzMTMyMDQ2MzBaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhJlsb6DK7dWB6GKhe66bMQGBh9GqMdwWi ++LVDCq4/SJVMP/S9gnzvbX/MoRAuNzSefxy2mB0wIoEfP4gIQw/zoKIlgDFe5oKz +V4kvCxKSeWdpznNuofo0Yi83AzrqP4olRspwGzwaSr0w9TFGLPwtmsfGnE9p2uZ/ +MFDDKyWeLNOHRxGfAOYaaTYEkdGTsIwIUq6/JHyKZwhkZtl5ZW3SrqVPY1TS5dh1 +Hi6kAIGjiw0+kE464RX0to3CJSXOWB9FiOd0MMQ+QaKhEAZ8K0SeRLhDzVsBnX4L +waeiPhm8+COngIuUiwHp+u/S/akwm4RHI62hxS4Hoke+VQWDJ0jlAgMBAAGjJTAj +MA8GA1UdEQQIMAaHBH8AAAEwEAYKKwYBBAHWeQIBFgQCMAAwDQYJKoZIhvcNAQEL +BQADggEBAEOK4hmCXlk8FEbVbz2kAxW3YZkluo+8nEhVEZP3RcY+zDBIhwTSra1u +Ewn9wkzta8WY5axXk4vKPx7RkUdeaHpCdGNOVyGkhxHm5Mrxf9VdXNOvWURiEHoa +rHZ0U4UJxaPJpkRseVGRrkdSz9OA4Sm6kKGrw8Yr66Ij9vfREgVPU60dH+5iFb0Z +SxwIfsV1Q8vGDRDBvv17xbl9MM3tpDeEpAOj4nHGaWOyw3w/ZBkLhGMv10Upc30y ++OANGzwvdalT2uq9k9YogoXw9ytpa9YP8FGcNsWO/g5FNIdVdfmJS7f+DD00jYVp +kVtNMF0MgVKG76ny5PrmUDpWltq7wPQ= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/common_name_only.pem b/net/data/ssl/certificates/common_name_only.pem index 5f7811a0..eb3caf0 100644 --- a/net/data/ssl/certificates/common_name_only.pem +++ b/net/data/ssl/certificates/common_name_only.pem
@@ -1,36 +1,37 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCp1J9FuvCmfgoP -pUn3w+iVRBwBOCXlZyzRcfRsiOfEGNnY8gEDNoyccKFHnj5rtJ/kQc9IgcZC2nob -qUSdHBEhUjKZbDZXOTXlBmpVY3qw0edMgwS9SSmaM5axPXEqJn7KShyzEC+3qux1 -T+gH8DBgwiP2qjM1A6nqf0/QDDms15sKhZJm9Z/MBpbpO/4zPjYSdsADv9sc7uyU -xRnNp3PQWu/hZjgg9w0tZWOzBaKHTHJLV+wH8frRqwLdHoB+gSIUfmNnGHKe59ia -rWjGU4l5b4kOVS8e5dSfdvNLbUM8z8dMvRq68fJnCJLkqnV7cehYmi+c6iGvDbkV -y7vVzfWnAgMBAAECggEALyW5+c/GE1KWVHWcrU4T+axo4eXGj4MvLA4ovyDaxtPn -VpUItu2j56JVA97okVoZsXKbqxNsCQ9CKv+47qzmDIwXRASIqXpWffhj+MSfQQtk -3Rbab/optIdx5E6cZgk91cbxZLyvopuu/XprfhiuNY5wEYB6qtMTjug9LhLWyCa3 -N2tTlIi8qMa79HPYcJ3l7en8jXrx+/856hCGGXXNP6H3HP4Kf171tZryDuekJhwt -pm6chDeFMkvJVa8GflKUxC5aVqhb84apCArvuaP/IXlDf0mEcyToyTjQaHitWtYo -BqueC3wMU5e5TvfQ3CKutWP3L9fQzU/mzpbEAuMMcQKBgQDUU47C0xwaIhfTyY2V -j9xDoEyJiRiaw0wUg2WtlNyIfUCOJSFxHeXqCmu1TurBxoNprlWZCf+myBR7hKXV -XbjRSluo7EFe6qF5ZxfVkTgaggSUmqd65kCDGyWQTZQ4tw+qal6T3TekJOwoAPa0 -ifKfPmzW/uleFwsXRJb5ydNA3QKBgQDMw13gt6s9xSAjvmZwdHdwb7712K4RrcoL -vrdOI6HEVDYsu2+zJxEtp0koE1Dk5LBUP4VAaDw1ABcx+Qon29mFy/orc8uH0PEu -SES6kZxr70eKJ67jvgs370m8zM+IJsC4RJ1wu09Q0vsdJ2TZLG5jlQD1no08Ta37 -Wv27zenGUwKBgH7ukPsBj9xDo3D2HlFaFnjLPNZAAliLBlGBF+kEhC6Iim4v3mUs -VYVrw2Y5jnhXf7pPAVcjNhVzqWMKMsVyaQmdZVyAGLhwliXorsP7M8oNDkX0iskb -G1gFg5hX+JNLRO9A9dd5uUjE1fU4VkQp78SpYhHJhKO+LOA1HfioYkV1AoGALHAt -3Iof2M0CN5+nvboY/cbSq6o1xNJxqfDe+U9UWTZpd3XKPRg6ay0F/HOMt9BF0FLk -yWCVyG7XmdnRcWsOHzJwfaOoxTX8Ua4PdGoLh4UrgnkwRG7HIoGFADt2wraeVp9V -h9Su1vyi0OXuxg8VefkpdyTMxAybuJQ7wtliZc8CgYEAouBfKjc3xn/jrf++kgie -taZ+ormKZs2mfTfcEMeQv7Bd7sEUWCoRevdorTlHaw1DKBqFq56Y1v3ppH83C6DH -5v1+43M6zq7qWGSgf5nbQ1ZBMUR0FMcBujc9JFX52Zc7ScvE1hwMT3lBJut/ln5W -h1oQd50MoCr4WE39Em4/H3o= +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCcvBOlD/eaadr5 +NB33MsG0KC5UlkebMSJuurca1kUHzhbZqhxCWTEd3uqDbtJzNaaYLfcWoWnp1nB7 +PiBtvwNanqAuUhlOw5NhVJVdi1KeFGnKxO/fupU20tHRh9z8odbKnKD1TNg9kKZo +Z0PeMaMK8FYf9sJIMhpBoakkQzsllBAxLO1tgo9VmhBgCaCRcj6A6nrpOO3x1HEC +1Q863WhMqYwyy707TSyqiJ2Ipu2/NUxhDeL/ptD+zP9NV9w4iowc3878vQIorxjV +40FhxAdwk4ohG+uPZ3gq/ln8xmGgS/BWSZ5kW+qmJvDRg0a3kO5TR1i4lZh8p7ul +BvrkzOAlAgMBAAECggEAMHs82GIIBQuZYFxuqHha0o9bRW7211prfDTlTrfYwoFN +MCcedqeAOe0qPV2aW2jND2WoeKeVS2+5e2XMQiZDs1Q92BYtHeABRqoTScw+0gce +ckpYqKveXAb6QAX2pW6qMiIg57/NY73Ku6C1rZVNCaUt/tUlY4+b75FB8KWbNhQK +vqsclR+82qQpbx0d8ttAHntF9M1RVpQCJoJWmUM+vAwKwAIg/YyxhBjHoWmYwkQM +Hj9wgCcr0hLmIWYTYV61TJVlPgg7xQQdnYnrZ+/whjLNAJDFchakviqFnAIeK6lF +lcIQZy3rPm8am0NYqg7T8bjWTx60IXJ21xUrYFRaQQKBgQDLRQCGtfn6ACg3I7Ki +dXgMgPieC3bzLZ53/DPny9NZfbpkIhU/YHqYhUOZvJ3Y4UK8Czz+SOtwXXthOFNn +62bBElNrrcDfvOuaY/U2Uq6HpYuZpMQAIwDnZ6u/brzJE9FABFApSfMWeUXllWlx +OHbhDweT69Y+eLAkW7s6N7/VHwKBgQDFZLl+WqLTO5G4qfir39oIDVahdkQGCDwg +SxGIEfiUk2URr/glXCpH9kNzzqWLHqT/B+FGgxydiHuKbcQkMdYe88iTjkJTJnYT +Im2gjdRU4Wqz09wwFcUKIrNWyPBps2GeWY5Kwe6Og23CkTDRfPyT04tv1mH2ZuOv +aXj7M57+OwKBgHoKr8oxsCh9t6eDc1k/FhjLxnl9gKl4llCLx84//mEYr7Q3EnK+ +xlyUhoXjTRJODPdB+BjkRxdryQwR+WHHYCZDjnp0E/1BPGOx6CP5eHhQ2IQi/Nro +KT7Ga8PABPDlSRkafdaMY7r2jRTOpEQqFpYBpBcX3cYcSAVMXhkSJ8cZAoGAGrT1 +D+5tZ00A+04r8f04f6xmUzQwIezNTcU6WwGrc1a57vmzBkMBCXl9SNbluPvtcP/8 +79Bfd8T2ihUt24POp6NuOOCfgqaKhS48TOPDnbRd/nSkrvDTFvr47r4DIRn/FDCj +uuOgRjHsEM4aH83cUpflnr0PxgnHtnz7vGkQku8CgYBUYYD9/t/Et9AyH43XcT+M +XuA42PLk6ksrIs6AusVmbn7HuBBTwFAGhktVTb3zkhecv24y52VLYwGrSMP4EfFy +DNoQFgpgzeXs/qFqsYaNe3jH12NrwlPKuIRf3m5jthB7mkDgC/tc0Gad1A/ziKQF +Wc46d1a/0pS1g30Fe4NNcA== -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 24 (0x18) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:bd + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Dec 20 00:00:00 2017 GMT @@ -38,72 +39,72 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:a9:d4:9f:45:ba:f0:a6:7e:0a:0f:a5:49:f7:c3: - e8:95:44:1c:01:38:25:e5:67:2c:d1:71:f4:6c:88: - e7:c4:18:d9:d8:f2:01:03:36:8c:9c:70:a1:47:9e: - 3e:6b:b4:9f:e4:41:cf:48:81:c6:42:da:7a:1b:a9: - 44:9d:1c:11:21:52:32:99:6c:36:57:39:35:e5:06: - 6a:55:63:7a:b0:d1:e7:4c:83:04:bd:49:29:9a:33: - 96:b1:3d:71:2a:26:7e:ca:4a:1c:b3:10:2f:b7:aa: - ec:75:4f:e8:07:f0:30:60:c2:23:f6:aa:33:35:03: - a9:ea:7f:4f:d0:0c:39:ac:d7:9b:0a:85:92:66:f5: - 9f:cc:06:96:e9:3b:fe:33:3e:36:12:76:c0:03:bf: - db:1c:ee:ec:94:c5:19:cd:a7:73:d0:5a:ef:e1:66: - 38:20:f7:0d:2d:65:63:b3:05:a2:87:4c:72:4b:57: - ec:07:f1:fa:d1:ab:02:dd:1e:80:7e:81:22:14:7e: - 63:67:18:72:9e:e7:d8:9a:ad:68:c6:53:89:79:6f: - 89:0e:55:2f:1e:e5:d4:9f:76:f3:4b:6d:43:3c:cf: - c7:4c:bd:1a:ba:f1:f2:67:08:92:e4:aa:75:7b:71: - e8:58:9a:2f:9c:ea:21:af:0d:b9:15:cb:bb:d5:cd: - f5:a7 + 00:9c:bc:13:a5:0f:f7:9a:69:da:f9:34:1d:f7:32: + c1:b4:28:2e:54:96:47:9b:31:22:6e:ba:b7:1a:d6: + 45:07:ce:16:d9:aa:1c:42:59:31:1d:de:ea:83:6e: + d2:73:35:a6:98:2d:f7:16:a1:69:e9:d6:70:7b:3e: + 20:6d:bf:03:5a:9e:a0:2e:52:19:4e:c3:93:61:54: + 95:5d:8b:52:9e:14:69:ca:c4:ef:df:ba:95:36:d2: + d1:d1:87:dc:fc:a1:d6:ca:9c:a0:f5:4c:d8:3d:90: + a6:68:67:43:de:31:a3:0a:f0:56:1f:f6:c2:48:32: + 1a:41:a1:a9:24:43:3b:25:94:10:31:2c:ed:6d:82: + 8f:55:9a:10:60:09:a0:91:72:3e:80:ea:7a:e9:38: + ed:f1:d4:71:02:d5:0f:3a:dd:68:4c:a9:8c:32:cb: + bd:3b:4d:2c:aa:88:9d:88:a6:ed:bf:35:4c:61:0d: + e2:ff:a6:d0:fe:cc:ff:4d:57:dc:38:8a:8c:1c:df: + ce:fc:bd:02:28:af:18:d5:e3:41:61:c4:07:70:93: + 8a:21:1b:eb:8f:67:78:2a:fe:59:fc:c6:61:a0:4b: + f0:56:49:9e:64:5b:ea:a6:26:f0:d1:83:46:b7:90: + ee:53:47:58:b8:95:98:7c:a7:bb:a5:06:fa:e4:cc: + e0:25 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 41:E5:87:59:14:3F:3E:99:24:67:DF:F8:B7:59:F6:81:3D:9C:F7:14 + D1:43:15:54:E5:DE:B4:84:F3:72:A1:41:40:9C:C2:B6:16:C0:F2:5C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 39:41:78:9d:38:e1:d2:7e:92:34:7a:da:32:6c:2d:51:d6:a4: - c1:d9:84:5f:24:2e:8f:ce:a8:60:29:ba:01:01:4b:a3:e0:fe: - 56:9c:5a:0b:8b:9f:b1:b6:55:89:0e:40:8f:09:0c:10:f1:dc: - 9a:3d:85:7c:ef:83:f9:0e:42:81:89:ac:a4:11:b9:e9:fd:db: - 58:54:63:51:66:5c:0e:0e:42:68:58:d9:0e:aa:54:70:6d:e7: - 51:e5:8b:fd:d0:da:dd:7b:b9:97:55:42:42:e7:39:b4:4b:4b: - c4:89:90:d1:6e:4b:0a:fd:cc:a8:a3:a7:70:ed:d6:e8:c4:09: - 80:d7:b0:09:ae:db:d2:4b:4f:0a:ec:73:28:bf:6f:cb:61:bd: - ab:5f:9a:2d:81:5e:e0:be:8c:32:d1:24:ea:a3:83:04:b8:81: - 97:e2:26:91:a2:fa:da:18:fa:54:58:46:d9:38:9b:66:b0:80: - 1d:a3:55:5b:86:7d:77:ca:0c:ba:e1:e6:c5:8c:e3:08:73:0f: - 73:b7:8b:42:75:6b:62:6e:bf:73:2d:4c:11:07:b4:b7:a0:72: - 0d:23:08:4b:65:8e:fd:1d:61:15:e6:d0:a5:ad:31:0b:d4:35: - 3a:f7:aa:e7:50:38:a2:dc:b0:24:52:9d:86:fc:ce:1a:d8:29: - 4b:de:82:af + 47:8b:5b:f6:5e:a2:2d:fb:86:93:bf:ec:7c:53:5d:a0:8e:7d: + a2:93:1a:ae:fc:3e:e7:37:de:02:9e:fd:4e:ca:1e:06:3a:4c: + 76:2c:96:b6:a0:a8:f5:7a:0e:24:da:0d:38:d5:e9:75:f2:7d: + 5c:92:58:66:7a:65:b1:fb:15:2a:82:2c:a6:ae:19:d9:2f:15: + ac:c6:b8:04:25:a0:1d:4a:30:c1:96:b7:a2:4c:0b:58:7b:79: + ba:42:ca:41:ed:2d:70:8b:48:ae:e0:d4:4e:3d:37:29:68:fa: + af:fb:90:7b:91:eb:01:33:58:cd:c5:2c:c6:73:81:40:fe:f2: + 8b:e3:d3:13:2b:50:9c:af:a0:88:c7:18:81:cf:9d:af:45:55: + ff:fb:6c:1d:a4:db:c3:5c:d1:98:8b:91:d1:ac:05:e6:ae:a6: + ca:24:5f:85:58:3f:0a:eb:4d:b2:45:df:60:a9:0d:24:94:c5: + 8a:1a:07:11:ff:23:35:3f:bf:b8:d8:e6:36:2b:40:f8:3a:08: + 74:a7:95:77:e5:8b:18:11:25:b4:23:2a:e0:b0:73:ba:d9:1a: + 69:49:63:6e:08:5b:99:1d:a7:56:0a:9e:d1:7a:b9:45:be:35: + 2e:ea:7c:86:ef:0c:be:b7:dd:e4:88:31:f8:8c:8e:4f:18:81: + 40:26:1d:57 -----BEGIN CERTIFICATE----- -MIIDrTCCApWgAwIBAgIBGDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MTIyMDAw -MDAwMFoXDTIwMTIyMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKnUn0W68KZ+Cg+lSffD6JVEHAE4JeVnLNFx9GyI58QY2djyAQM2jJxw -oUeePmu0n+RBz0iBxkLaehupRJ0cESFSMplsNlc5NeUGalVjerDR50yDBL1JKZoz -lrE9cSomfspKHLMQL7eq7HVP6AfwMGDCI/aqMzUDqep/T9AMOazXmwqFkmb1n8wG -luk7/jM+NhJ2wAO/2xzu7JTFGc2nc9Ba7+FmOCD3DS1lY7MFoodMcktX7Afx+tGr -At0egH6BIhR+Y2cYcp7n2JqtaMZTiXlviQ5VLx7l1J9280ttQzzPx0y9Grrx8mcI -kuSqdXtx6FiaL5zqIa8NuRXLu9XN9acCAwEAAaNvMG0wDAYDVR0TAQH/BAIwADAd -BgNVHQ4EFgQUQeWHWRQ/PpkkZ9/4t1n2gT2c9xQwHwYDVR0jBBgwFoAUmyYLipip -ux25HxzjGkAz7Y4XiKswHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0G -CSqGSIb3DQEBCwUAA4IBAQA5QXidOOHSfpI0etoybC1R1qTB2YRfJC6PzqhgKboB -AUuj4P5WnFoLi5+xtlWJDkCPCQwQ8dyaPYV874P5DkKBiaykEbnp/dtYVGNRZlwO -DkJoWNkOqlRwbedR5Yv90Nrde7mXVUJC5zm0S0vEiZDRbksK/cyoo6dw7dboxAmA -17AJrtvSS08K7HMov2/LYb2rX5otgV7gvowy0STqo4MEuIGX4iaRovraGPpUWEbZ -OJtmsIAdo1Vbhn13ygy64ebFjOMIcw9zt4tCdWtibr9zLUwRB7S3oHINIwhLZY79 -HWEV5tClrTEL1DU696rnUDii3LAkUp2G/M4a2ClL3oKv +MIIDvDCCAqSgAwIBAgIQPiydvrBCyM/8mULVTUFqvTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE3MTIyMDAwMDAwMFoXDTIwMTIyMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJy8E6UP95pp2vk0HfcywbQoLlSWR5sxIm66 +txrWRQfOFtmqHEJZMR3e6oNu0nM1ppgt9xahaenWcHs+IG2/A1qeoC5SGU7Dk2FU +lV2LUp4UacrE79+6lTbS0dGH3Pyh1sqcoPVM2D2QpmhnQ94xowrwVh/2wkgyGkGh +qSRDOyWUEDEs7W2Cj1WaEGAJoJFyPoDqeuk47fHUcQLVDzrdaEypjDLLvTtNLKqI +nYim7b81TGEN4v+m0P7M/01X3DiKjBzfzvy9AiivGNXjQWHEB3CTiiEb649neCr+ +WfzGYaBL8FZJnmRb6qYm8NGDRreQ7lNHWLiVmHynu6UG+uTM4CUCAwEAAaNvMG0w +DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU0UMVVOXetITzcqFBQJzCthbA8lwwHwYD +VR0jBBgwFoAUmyYLipipux25HxzjGkAz7Y4XiKswHQYDVR0lBBYwFAYIKwYBBQUH +AwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQBHi1v2XqIt+4aTv+x8U12g +jn2ikxqu/D7nN94Cnv1Oyh4GOkx2LJa2oKj1eg4k2g041el18n1cklhmemWx+xUq +giymrhnZLxWsxrgEJaAdSjDBlreiTAtYe3m6QspB7S1wi0iu4NROPTcpaPqv+5B7 +kesBM1jNxSzGc4FA/vKL49MTK1Ccr6CIxxiBz52vRVX/+2wdpNvDXNGYi5HRrAXm +rqbKJF+FWD8K602yRd9gqQ0klMWKGgcR/yM1P7+42OY2K0D4Ogh0p5V35YsYESW0 +IyrgsHO62RppSWNuCFuZHadWCp7RerlFvjUu6nyG7wy+t93kiDH4jI5PGIFAJh1X -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/crlset_by_intermediate_serial.raw b/net/data/ssl/certificates/crlset_by_intermediate_serial.raw index 370d488..3179a08 100644 --- a/net/data/ssl/certificates/crlset_by_intermediate_serial.raw +++ b/net/data/ssl/certificates/crlset_by_intermediate_serial.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_leaf_spki.raw b/net/data/ssl/certificates/crlset_by_leaf_spki.raw index acc4c15..f585687a 100644 --- a/net/data/ssl/certificates/crlset_by_leaf_spki.raw +++ b/net/data/ssl/certificates/crlset_by_leaf_spki.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw b/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw index 3a22aa7d..c25ff3bd 100644 --- a/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw +++ b/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_root_serial.raw b/net/data/ssl/certificates/crlset_by_root_serial.raw index 31f6b462..c231d2ae 100644 --- a/net/data/ssl/certificates/crlset_by_root_serial.raw +++ b/net/data/ssl/certificates/crlset_by_root_serial.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_root_spki.raw b/net/data/ssl/certificates/crlset_by_root_spki.raw index ff6e2f45..fbdb334 100644 --- a/net/data/ssl/certificates/crlset_by_root_spki.raw +++ b/net/data/ssl/certificates/crlset_by_root_spki.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_root_subject.raw b/net/data/ssl/certificates/crlset_by_root_subject.raw index 95404126..f2734ad 100644 --- a/net/data/ssl/certificates/crlset_by_root_subject.raw +++ b/net/data/ssl/certificates/crlset_by_root_subject.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw b/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw index bc10681c..56d7bf88 100644 --- a/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw +++ b/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw Binary files differ
diff --git a/net/data/ssl/certificates/dec_2017.pem b/net/data/ssl/certificates/dec_2017.pem index e0dff79..3e5eaaea 100644 --- a/net/data/ssl/certificates/dec_2017.pem +++ b/net/data/ssl/certificates/dec_2017.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 25 (0x19) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:be + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Dec 20 00:00:00 2017 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:d0:c1:27:76:2d:56:e6:b9:e3:23:b9:b6:c3:0e: - f4:8c:cb:73:85:0e:45:ed:b8:ea:e6:21:b6:60:56: - 1d:b7:24:72:b9:51:72:68:07:22:9f:8f:fd:47:c7: - da:9b:7b:5c:ad:e8:f5:6a:72:4d:8b:e4:55:fc:c6: - 41:d8:53:5e:0a:ba:35:4e:bc:98:21:d0:c2:ae:f7: - ff:ec:8f:26:eb:a1:71:74:11:b7:21:fd:38:04:5a: - e5:42:3d:02:28:05:3a:8d:2d:9b:5e:7b:39:35:e4: - fe:59:a8:98:39:c7:6c:d1:9e:1a:d7:c3:11:78:cb: - 44:72:e4:a0:89:83:e2:f8:de:c9:46:3a:c5:71:7f: - af:ee:e5:ba:1f:fa:97:19:f0:d0:5c:32:81:d3:7d: - 80:99:70:49:2a:ba:c8:40:b0:32:51:ec:16:3b:4d: - 61:05:e2:dc:b9:24:f0:a6:6b:ad:cd:53:1d:cd:9a: - ba:bb:df:96:f1:ac:e6:5e:03:cb:98:07:da:21:6e: - 8c:ac:56:37:39:15:d4:ab:b0:43:d1:64:7a:05:59: - f8:f8:bd:4e:31:c7:8c:d6:23:e8:3d:99:ea:75:78: - 25:8d:1a:83:32:39:ec:ec:69:ef:76:cc:b6:cf:06: - 0e:1d:ca:ac:8c:b7:10:a7:d2:ec:18:86:7c:6f:20: - 9c:bf + 00:d2:eb:f5:8f:40:9e:0a:5a:c9:42:20:d0:ec:6d: + 1b:6b:2f:e6:fc:67:0d:ef:ac:4f:23:94:70:28:2d: + ca:38:47:d9:c6:7e:6d:20:90:e6:89:8c:cb:60:02: + 5c:94:06:26:12:19:36:59:f3:ba:d6:3e:7e:39:da: + 4c:ea:69:ef:21:de:ce:6d:cc:c4:29:c6:b4:2e:c8: + 13:6b:f5:bd:b7:93:92:09:cd:de:11:b7:cf:fa:04: + 6d:b7:74:88:c3:60:ff:36:f2:df:5a:3a:ee:e7:96: + 7c:43:dd:9d:2d:dd:87:b1:d7:4e:8e:a8:31:72:47: + aa:46:0b:5b:bc:54:1e:ef:c4:fb:f7:d1:66:37:75: + 56:b3:e7:19:51:7c:c4:0d:6b:ab:f1:ae:89:e1:87: + 9c:26:e6:21:f5:6a:73:8e:23:4b:86:1b:80:c5:a3: + 27:52:1c:dd:35:68:d2:fc:35:2c:0c:f0:6f:67:fb: + b4:d5:84:e8:56:4e:3d:09:ad:b9:f2:fc:f7:84:d9: + 83:7f:c9:1b:f4:3d:f3:f4:f8:03:e6:fe:bd:17:09: + 57:cf:81:b1:ed:75:09:40:0e:36:7a:96:85:1d:a1: + ae:43:86:2b:c5:ee:30:66:ff:60:05:5e:f5:76:a7: + c7:eb:1e:65:8f:e6:88:b6:42:6b:78:86:a3:c6:7a: + be:73 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 4F:62:A1:56:D4:81:D5:18:65:C6:E0:DC:91:72:07:32:58:0C:79:EE + AF:5E:73:1B:EC:71:82:4F:A6:44:B2:11:27:57:AE:91:11:A0:50:1C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - a5:16:f1:6f:8d:ab:b2:d7:c1:f6:98:98:d4:2d:8d:0f:85:09: - 65:73:f4:72:40:66:8b:28:f3:e4:d8:b8:8e:21:2b:9f:27:f2: - ab:0f:b6:e7:94:9a:1c:b1:58:9a:71:5e:79:d4:1b:9b:11:f3: - 52:ee:a2:00:85:75:d5:a0:6e:af:11:39:cd:72:f8:a8:57:09: - 09:4f:df:e7:42:26:63:08:a2:fb:19:ff:ab:97:e4:f1:01:7c: - df:e5:87:58:e7:90:e6:61:c0:f8:35:89:5f:4b:f2:f0:ae:cb: - 1a:69:3b:1f:0b:ac:38:18:28:5a:ca:92:75:fa:ee:56:69:dd: - dc:e8:c4:db:8f:84:20:d2:50:ee:34:32:e6:2f:90:aa:12:3d: - db:56:a3:38:0f:80:b7:f5:32:b6:12:b8:30:1c:14:84:83:4e: - 7b:42:49:16:ef:1e:b0:3a:f5:03:30:72:86:1f:0d:77:1a:7b: - 44:8b:60:e4:34:49:d8:b0:af:8d:a6:f1:08:70:b3:69:54:5f: - e0:2f:6d:42:2f:ff:68:07:fd:cf:c1:f7:fa:e7:5f:fe:1f:93: - ba:02:01:29:69:37:97:6a:16:03:7f:2d:0c:b2:2a:d8:43:13: - ed:cf:1b:2d:1f:b0:f3:b6:e1:98:cb:92:d3:26:5e:f4:a7:a3: - 90:de:6a:ab + b1:92:16:b1:ec:a2:8a:d2:43:e6:5e:f5:a9:91:7b:1e:82:33: + 7f:bd:ef:5d:6c:d5:75:29:02:e9:7b:dc:cf:00:05:9e:cd:2c: + ff:d3:74:d0:1d:88:b6:c6:08:11:af:90:be:d6:96:e5:1a:35: + 18:1c:c7:ff:33:52:6e:07:65:2a:8d:8e:a4:66:d4:47:d5:74: + 79:9e:9f:59:10:53:23:11:40:be:9e:ae:67:c2:cb:bd:7d:f2: + e6:f9:00:45:23:22:2b:48:82:1d:53:19:b6:7c:c9:3b:67:8a: + 70:23:c6:43:c0:20:74:38:01:9f:35:95:c9:3c:09:b8:61:d8: + 78:d2:44:0c:ea:fe:47:ff:b8:77:f6:ca:c0:ef:4f:5f:27:22: + 34:8e:d0:a7:cd:7a:70:e4:4d:d1:d8:1a:b7:a3:90:06:17:46: + 90:4f:0e:92:28:5e:64:d4:54:84:69:6f:b8:4a:e9:06:82:f3: + 58:67:80:80:45:f7:26:a8:80:3c:35:e3:cb:b5:c1:9c:46:64: + a9:d5:b6:06:a3:30:81:d0:ea:45:75:da:36:1a:d6:c6:1c:38: + a2:d9:e3:37:71:84:e9:47:ed:5e:f4:1b:a3:cc:a2:ba:19:30: + f5:c7:18:31:b3:3e:86:3d:33:41:a9:2f:91:25:63:54:fe:3a: + aa:b3:24:61 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBGTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MTIyMDAw -MDAwMFoXDTIwMTIyMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANDBJ3YtVua54yO5tsMO9IzLc4UORe246uYhtmBWHbckcrlRcmgHIp+P -/UfH2pt7XK3o9WpyTYvkVfzGQdhTXgq6NU68mCHQwq73/+yPJuuhcXQRtyH9OARa -5UI9AigFOo0tm157OTXk/lmomDnHbNGeGtfDEXjLRHLkoImD4vjeyUY6xXF/r+7l -uh/6lxnw0FwygdN9gJlwSSq6yECwMlHsFjtNYQXi3Lkk8KZrrc1THc2aurvflvGs -5l4Dy5gH2iFujKxWNzkV1KuwQ9FkegVZ+Pi9TjHHjNYj6D2Z6nV4JY0agzI57Oxp -73bMts8GDh3KrIy3EKfS7BiGfG8gnL8CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFE9ioVbUgdUYZcbg3JFyBzJYDHnuMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQClFvFvjauy18H2mJjU -LY0PhQllc/RyQGaLKPPk2LiOISufJ/KrD7bnlJocsViacV551BubEfNS7qIAhXXV -oG6vETnNcvioVwkJT9/nQiZjCKL7Gf+rl+TxAXzf5YdY55DmYcD4NYlfS/Lwrssa -aTsfC6w4GChaypJ1+u5Wad3c6MTbj4Qg0lDuNDLmL5CqEj3bVqM4D4C39TK2Ergw -HBSEg057QkkW7x6wOvUDMHKGHw13GntEi2DkNEnYsK+NpvEIcLNpVF/gL21CL/9o -B/3Pwff651/+H5O6AgEpaTeXahYDfy0MsirYQxPtzxstH7DztuGYy5LTJl70p6OQ -3mqr +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqvjANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE3MTIyMDAwMDAwMFoXDTIwMTIyMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANLr9Y9AngpayUIg0OxtG2sv5vxnDe+sTyOU +cCgtyjhH2cZ+bSCQ5omMy2ACXJQGJhIZNlnzutY+fjnaTOpp7yHezm3MxCnGtC7I +E2v1vbeTkgnN3hG3z/oEbbd0iMNg/zby31o67ueWfEPdnS3dh7HXTo6oMXJHqkYL +W7xUHu/E+/fRZjd1VrPnGVF8xA1rq/GuieGHnCbmIfVqc44jS4YbgMWjJ1Ic3TVo +0vw1LAzwb2f7tNWE6FZOPQmtufL894TZg3/JG/Q98/T4A+b+vRcJV8+Bse11CUAO +NnqWhR2hrkOGK8XuMGb/YAVe9Xanx+seZY/miLZCa3iGo8Z6vnMCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFK9ecxvscYJPpkSyESdXrpERoFAcMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQCxkhax7KKK0kPmXvWpkXsegjN/ve9dbNV1KQLpe9zPAAWezSz/03TQHYi2xggR +r5C+1pblGjUYHMf/M1JuB2UqjY6kZtRH1XR5np9ZEFMjEUC+nq5nwsu9ffLm+QBF +IyIrSIIdUxm2fMk7Z4pwI8ZDwCB0OAGfNZXJPAm4Ydh40kQM6v5H/7h39srA709f +JyI0jtCnzXpw5E3R2Bq3o5AGF0aQTw6SKF5k1FSEaW+4SukGgvNYZ4CARfcmqIA8 +NePLtcGcRmSp1bYGozCB0OpFddo2GtbGHDii2eM3cYTpR+1e9BujzKK6GTD1xxgx +sz6GPTNBqS+RJWNU/jqqsyRh -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/expired_cert.pem b/net/data/ssl/certificates/expired_cert.pem index c68dbc7c..b853430d 100644 --- a/net/data/ssl/certificates/expired_cert.pem +++ b/net/data/ssl/certificates/expired_cert.pem
@@ -1,36 +1,37 @@ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOyfwsFGz4KjJt -FmfGaisMwi3KJcI5RWUWvll6c94BNuVv643WZGaq/Yfx8bPCvKr9T5Q/1QnkXwRW -v8eRnocK5obwTQz8l1Md8PXsl81sT982C5Lk+HDBbXNrOlS56Q1W7ggNnC7Yxe09 -KHoFI/BibDgHM/qeneNFmzfUEPVm1XbUgsQmodoV3e6Ncv4UlwjJ1n+3Zy+y09OQ -MGEjsnpSWnzQkwnYJTpPi8QslnkX4AoUf4Qt+cI5QU90A9ODDTTqRdifLFOH8XD5 -OXPcqGwwdAx22SpUkpp4WHyLbbjthWOBarE4pvVlM6IG8bnOaW23EXgGiJOx0j+F -PZv8UQ25AgMBAAECggEAWZd1Y/utgo91rYGpkHNrF2oBwLU/QuTn+USbK8yLgOcx -3J2npB13xdl2TsKzaUmoo3sY9dbtJD5ueM86PcL7KyPZjr8zQzSk1DITul/Cpoys -XpQBHqbs40DyYqCxGKL6HpGed5cVTOHj+T1SMGvzuBC+7Y/9oz8wunWXaI+4YsaN -KTcahUeyw3B3nGu59iy8FtIgZE+XpXw6HmIM6fFq2qL9F1yCyOev5qpMQD+WbBVp -p6GDmt02mgatrIx4hDd//OfGAeLdnlpOHbs2Dzs2BL2j+V0UbatpzCX+9U3zb526 -EYm1n6AOkHIrFRGSiGs/6XcB+rKG1wFqNL2WGFfkCQKBgQD8o7krKl6bzTR0gssg -BDggFSab5f12o+lm5BB5f8ZcTASSV9+LvlFuTOqg00JWrj3W4ykapGiqy5DUb/TC -9SUnHMWN+gWAP1byoqrvlsPGRvaOkZZZ8BMFlgaTVdmSYm2jEL41DhiOco7uxeID -hbGl969Az1DYqk6l0B8eXhvmhwKBgQDRiiIw611fCaWuN9mPZC1WMzKOhddSVqFK -VX9avQ5RF0BDDze4QmCC3pBOVQ54iUyawk3anMysirD4WFbJSSZ/LyV+ChGbLNW+ -C3WnCOEoGnfXYRO8Anpba4uRODQD8aFSDhOwiX9cnGhn0LK+JWUsO73ubFp232id -GJp4lnQ5vwKBgQCPMNitr4kJ82fMtakdT2bkQDiu2c8sJEEQ0SjJRHOQMoHQ1D9e -vBL5Wl0NpE+QQ5fHKN9OO2sbit9emMn4ietx3KvYCaJ+iufkA/CwdRonUmdCbR/z -f8+4Nc0qStlTT7hmWQIFniSq8CE1EjFE38zNjbHmINrowrZq4qgQlTRpFwKBgH0o -Pd3sZ7wBfiW+lEOSuYW4VOVOSluTBQnqYYRoUinbcnXbnBOCCjWBDL7NDTSwBcKW -dnwylgolWSktUsEt4UGsfn93Mib2s8CtBZw8sIgMrzJFeM0eycjbRuT5phAI/quN -XvNeXWWKws3nmSv8GB9Am+TScYJ5VPoonPOUIl3vAoGBAIopah8JtNrmpWchIO5+ -z7JeELzUWelGbKOoclWOVnaC80RWYaUe9Zf+6FDifSpbEo6Muf2dGm8+uC+DmQX0 -sXscgfZafFYDLIFHjvFrL3kQH06jKhcbD6s48YHlBCHVZx5SJLGbbiVOnYtPubIS -uCQfr9VlJkIUbJCn5ekytz9K +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC3I3bZDnNngrCP +srB5V+Pbtr1g3LZ7kvqzsSGRSztLiIuoJaBQrV/5EJIkf0az7bJGlBXkbPd4inTZ +t5+MvaWe8qkMLtmVr9QntK5UzVnWEPcgPhp6/sfbTvMAwR5iitqNMkA4j6FVF4jr +CSmQDmdHuzTWEx9qLoaJh+Dpc2RPywAVx8voW+QJGJv8pCJuIJWkuV9+dSXezAf3 +2ba5hLn/+ztJqgYbDRSASovnaO59elnC9CYJ11Hh92ryoMNciJpSmpu0dfCk99OT +L1lbdDUKfX9GkVtlwfTUMXpiChvLW49zVlveaTHmKSiiFscbOR5bJ1sNhO2I01op +8cxl7qHJAgMBAAECggEAIJmNhGHQJTLcXxf91fvRMcE7wMxJJ4IoYmg7g3OS4IUz +5wCbowDZvqo2eYy2dzzuqSWfKARFoQ10c3T+T71KiBrGAMcuMDkWWOMOzUWoojRu +6Sxk5lQIG3/YPeAimoQBF3VEfU0D+POxibUd0ujddaVbaGgLBYm2pTCs1qGVz6YT +1JGXqjSeg8r+/gUENo9a00V/XXXUwvmnq9GSQklQz8JkFcPt/WV32CdyoATxUXvX +TDHnWDf0fUtATjYgRJLrBDbLZbrpPca0VUfPTBV2iiaj9Ibk6qH1X9/CczrOm8Mg +IwA+boWkAZhyjlPnY3jf5GR5YevvrrtIogwka6EdAQKBgQDpm8wFvnhFX9YN22Ih +64fosbylvOjtDha7Z7y8elY4B72xZBzkvymlYa+cifNU9Gf0Wc8i9+l+EeQgNl9V +wPyQZfOLCZwHBPS7wfQIYqIuN+LSUjwUvtcl8+Dtlwl98WSrK8FcWYxWJvJB9bCX +9WlqwGsl05gB77gG+kQNpJEh8QKBgQDIsUBdwgsadfcjU9xaDSk2hmaR7axMopKR +vglyEJTrMKd8/XhVKW3JUXF8yN0D0sdUg1HJv9RbT+1s2SsfVux4XcG2upmuzLxB +SsFLW0n1oIB41V+O28iIABvVRkz8VIzQ7BEVI5rWwqvymBGeJ5rfxaZbRMfjKClA +X3S5XLIlWQKBgC2i/QmGOzK6VTPhztr3i1Z/Gm56aDqfTPuReYKMl7lcccds2mQp +oDYpzkfTf1DyajiHLvsS2W+CiUFtvdQf3ndLI3ffCbcpVbI0YrscobhLvKj/3bLj +0V4dtaxUnEsZVGRIKP8kk1DlTOBr4fLdw5lSO9xo6MJAFYBvdcoAg0XRAoGAHBJn +DXZJ9U6Q3hkp1lLG9ACCsmDLXADVfZtWWOUm32rz0pDl1wuvdpx0wl6aQ6GlDhY8 +R3sUqh0Y+cO6u2x+MSv0H6okOwYaQwvA09iWFMx5i+1Uq3fkqdlSC1gFBrqQ49xR +W2KakvWx9YH93OBvUmOkLFoHl6eTdZSkkBT+OikCgYBxbC+jy0EwBtkFCo+22H7S +891Zq5vyztVn78PeK7/bC7MT26gZC5Pz3hsue+YDUizoutDXmzhzBZzmLKgS3yDd +ZkfyPXsvzh32VF/GCaBMf0Bv8NNDEIlvwvres6xUgEnxE5xRpTDuD6SJG5eqERwM +S1bbeuh3nNfChmUQE3+0Hg== -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a3 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jan 1 00:00:00 2006 GMT @@ -38,32 +39,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ce:c9:fc:2c:14:6c:f8:2a:32:6d:16:67:c6:6a: - 2b:0c:c2:2d:ca:25:c2:39:45:65:16:be:59:7a:73: - de:01:36:e5:6f:eb:8d:d6:64:66:aa:fd:87:f1:f1: - b3:c2:bc:aa:fd:4f:94:3f:d5:09:e4:5f:04:56:bf: - c7:91:9e:87:0a:e6:86:f0:4d:0c:fc:97:53:1d:f0: - f5:ec:97:cd:6c:4f:df:36:0b:92:e4:f8:70:c1:6d: - 73:6b:3a:54:b9:e9:0d:56:ee:08:0d:9c:2e:d8:c5: - ed:3d:28:7a:05:23:f0:62:6c:38:07:33:fa:9e:9d: - e3:45:9b:37:d4:10:f5:66:d5:76:d4:82:c4:26:a1: - da:15:dd:ee:8d:72:fe:14:97:08:c9:d6:7f:b7:67: - 2f:b2:d3:d3:90:30:61:23:b2:7a:52:5a:7c:d0:93: - 09:d8:25:3a:4f:8b:c4:2c:96:79:17:e0:0a:14:7f: - 84:2d:f9:c2:39:41:4f:74:03:d3:83:0d:34:ea:45: - d8:9f:2c:53:87:f1:70:f9:39:73:dc:a8:6c:30:74: - 0c:76:d9:2a:54:92:9a:78:58:7c:8b:6d:b8:ed:85: - 63:81:6a:b1:38:a6:f5:65:33:a2:06:f1:b9:ce:69: - 6d:b7:11:78:06:88:93:b1:d2:3f:85:3d:9b:fc:51: - 0d:b9 + 00:b7:23:76:d9:0e:73:67:82:b0:8f:b2:b0:79:57: + e3:db:b6:bd:60:dc:b6:7b:92:fa:b3:b1:21:91:4b: + 3b:4b:88:8b:a8:25:a0:50:ad:5f:f9:10:92:24:7f: + 46:b3:ed:b2:46:94:15:e4:6c:f7:78:8a:74:d9:b7: + 9f:8c:bd:a5:9e:f2:a9:0c:2e:d9:95:af:d4:27:b4: + ae:54:cd:59:d6:10:f7:20:3e:1a:7a:fe:c7:db:4e: + f3:00:c1:1e:62:8a:da:8d:32:40:38:8f:a1:55:17: + 88:eb:09:29:90:0e:67:47:bb:34:d6:13:1f:6a:2e: + 86:89:87:e0:e9:73:64:4f:cb:00:15:c7:cb:e8:5b: + e4:09:18:9b:fc:a4:22:6e:20:95:a4:b9:5f:7e:75: + 25:de:cc:07:f7:d9:b6:b9:84:b9:ff:fb:3b:49:aa: + 06:1b:0d:14:80:4a:8b:e7:68:ee:7d:7a:59:c2:f4: + 26:09:d7:51:e1:f7:6a:f2:a0:c3:5c:88:9a:52:9a: + 9b:b4:75:f0:a4:f7:d3:93:2f:59:5b:74:35:0a:7d: + 7f:46:91:5b:65:c1:f4:d4:31:7a:62:0a:1b:cb:5b: + 8f:73:56:5b:de:69:31:e6:29:28:a2:16:c7:1b:39: + 1e:5b:27:5b:0d:84:ed:88:d3:5a:29:f1:cc:65:ee: + a1:c9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - AC:97:8A:09:35:95:6A:EB:AD:D3:05:F5:A8:58:AB:E6:58:95:3A:BD + 13:95:38:F8:17:3A:90:4F:19:29:53:12:1E:4D:7B:BB:AE:D9:27:A5 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 97:9c:42:d2:b4:6f:c2:fd:d1:85:72:6f:92:9e:de:07:71:e8: - cc:6d:97:93:82:2c:0d:62:c0:4a:cd:bc:7a:55:82:08:5a:1f: - f9:aa:4a:16:35:de:19:86:25:12:93:0f:65:56:d7:bc:d3:6b: - f7:39:de:9e:fa:43:b1:39:b5:5b:d3:32:33:d9:6f:86:0c:f6: - 12:cc:0b:a7:27:54:36:55:ce:26:6c:e3:64:a2:b2:c6:a6:3e: - 94:16:ec:4e:c0:f3:cc:6f:54:ff:26:bf:ac:ae:0f:c3:69:a3: - 80:35:44:e3:28:9e:1b:7e:98:2c:a3:cc:ef:25:0e:25:3f:36: - c1:92:38:25:21:bf:d4:e5:0a:51:16:85:d6:36:ef:88:1a:56: - 2b:71:7c:88:50:c8:99:08:e2:a4:f0:50:12:c7:5f:6b:e8:01: - e8:26:06:a3:24:d0:3c:67:9e:88:96:fa:b2:26:47:08:93:94: - 74:f9:97:0f:c2:28:85:97:e1:dc:f3:1b:66:f1:71:d7:65:4e: - 34:d1:fa:56:84:be:a3:a9:8e:11:a1:03:fe:14:b8:a6:7f:ee: - 53:ce:e9:72:57:d8:3d:2d:54:0c:5a:80:1d:6a:4a:16:ab:fe: - 2b:07:05:cf:c5:a9:10:38:83:32:b5:bb:7c:81:39:a4:16:1a: - 0e:c5:1d:92 + 63:a5:49:11:ed:15:84:22:60:6d:f5:16:be:c8:1e:de:d7:99: + 55:4a:23:c3:c0:ba:be:ba:6e:95:03:5c:25:97:f8:29:ff:c0: + 95:a8:38:5e:b8:c1:b6:f9:4c:fe:e1:ef:78:5c:f3:d0:67:d4: + e4:47:57:44:9d:ce:a4:be:3f:42:ec:03:d7:3b:57:80:0b:92: + 02:b4:fd:50:06:ab:82:05:d3:62:5a:99:62:f0:ba:02:25:c7: + 88:61:20:12:ab:27:5c:ee:f8:7e:90:4a:ab:1e:6e:32:8c:49: + d8:47:e2:7e:0b:74:fe:c4:c7:2c:11:a1:c1:3c:48:89:95:aa: + 1e:55:50:69:1c:03:ea:90:50:ad:89:3e:13:7e:aa:d4:80:0a: + 3d:0c:cc:82:52:1b:c6:fd:2f:b3:25:e8:23:c2:03:01:e8:5b: + 12:5b:a3:e5:f1:1e:f9:70:49:5d:56:63:7f:8d:00:25:0a:92: + ca:73:25:db:29:52:e3:17:10:ec:95:b9:f7:03:77:ae:20:fa: + 47:e1:31:3f:af:23:eb:9d:6d:f8:14:fe:6a:be:cc:6f:25:84: + bb:92:07:8f:86:3c:ce:bf:61:d1:d0:3d:89:4a:d1:82:24:03: + 54:b8:f8:18:aa:64:7d:ef:08:fa:cb:30:8c:f4:72:60:20:c7: + fc:ae:26:38 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBAjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTA2MDEwMTAw -MDAwMFoXDTA3MDEwMTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAM7J/CwUbPgqMm0WZ8ZqKwzCLcolwjlFZRa+WXpz3gE25W/rjdZkZqr9 -h/Hxs8K8qv1PlD/VCeRfBFa/x5GehwrmhvBNDPyXUx3w9eyXzWxP3zYLkuT4cMFt -c2s6VLnpDVbuCA2cLtjF7T0oegUj8GJsOAcz+p6d40WbN9QQ9WbVdtSCxCah2hXd -7o1y/hSXCMnWf7dnL7LT05AwYSOyelJafNCTCdglOk+LxCyWeRfgChR/hC35wjlB -T3QD04MNNOpF2J8sU4fxcPk5c9yobDB0DHbZKlSSmnhYfIttuO2FY4FqsTim9WUz -ogbxuc5pbbcReAaIk7HSP4U9m/xRDbkCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFKyXigk1lWrrrdMF9ahYq+ZYlTq9MB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCXnELStG/C/dGFcm+S -nt4HcejMbZeTgiwNYsBKzbx6VYIIWh/5qkoWNd4ZhiUSkw9lVte802v3Od6e+kOx -ObVb0zIz2W+GDPYSzAunJ1Q2Vc4mbONkorLGpj6UFuxOwPPMb1T/Jr+srg/DaaOA -NUTjKJ4bfpgso8zvJQ4lPzbBkjglIb/U5QpRFoXWNu+IGlYrcXyIUMiZCOKk8FAS -x19r6AHoJgajJNA8Z56IlvqyJkcIk5R0+ZcPwiiFl+Hc8xtm8XHXZU400fpWhL6j -qY4RoQP+FLimf+5TzulyV9g9LVQMWoAdakoWq/4rBwXPxakQOIMytbt8gTmkFhoO -xR2S +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqozANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTA2MDEwMTAwMDAwMFoXDTA3MDEwMTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALcjdtkOc2eCsI+ysHlX49u2vWDctnuS+rOx +IZFLO0uIi6gloFCtX/kQkiR/RrPtskaUFeRs93iKdNm3n4y9pZ7yqQwu2ZWv1Ce0 +rlTNWdYQ9yA+Gnr+x9tO8wDBHmKK2o0yQDiPoVUXiOsJKZAOZ0e7NNYTH2ouhomH +4OlzZE/LABXHy+hb5AkYm/ykIm4glaS5X351Jd7MB/fZtrmEuf/7O0mqBhsNFIBK +i+do7n16WcL0JgnXUeH3avKgw1yImlKam7R18KT305MvWVt0NQp9f0aRW2XB9NQx +emIKG8tbj3NWW95pMeYpKKIWxxs5HlsnWw2E7YjTWinxzGXuockCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBOVOPgXOpBPGSlTEh5Ne7uu2SelMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBjpUkR7RWEImBt9Ra+yB7e15lVSiPDwLq+um6VA1wll/gp/8CVqDheuMG2+Uz+ +4e94XPPQZ9TkR1dEnc6kvj9C7APXO1eAC5ICtP1QBquCBdNiWpli8LoCJceIYSAS +qydc7vh+kEqrHm4yjEnYR+J+C3T+xMcsEaHBPEiJlaoeVVBpHAPqkFCtiT4TfqrU +gAo9DMyCUhvG/S+zJegjwgMB6FsSW6Pl8R75cEldVmN/jQAlCpLKcyXbKVLjFxDs +lbn3A3euIPpH4TE/ryPrnW34FP5qvsxvJYS7kgePhjzOv2HR0D2JStGCJANUuPgY +qmR97wj6yzCM9HJgIMf8riY4 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/intermediate_ca_cert.pem b/net/data/ssl/certificates/intermediate_ca_cert.pem index db82c408..1f081e5 100644 --- a/net/data/ssl/certificates/intermediate_ca_cert.pem +++ b/net/data/ssl/certificates/intermediate_ca_cert.pem
@@ -1,44 +1,44 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCd6b3kPUov+8L5 -5iIqQhVGHIyPR0zpxVeVH2ZwkyLwlMO7tVvvpG/Ix4mVdboMNr9Oa6k1RwhDnilq -4sP7A7cftuFRa+17Gcf5zjvcZelmx4OUxNFO7u1kS4HxGupaZBgbak6T0BNskGDK -0k63JBb4sghYnY2nM0UVNIGtLS2cYO/5K5j+edONLEjbEpH0Lvq/9SbBggWA3Uyo -cL+nvBA0dznbRwQP7USyZUYiIIhZKA/HDKK0kaWiqsoFn4qbbqPL1KToJHWdIIEi -W193PsnxHq7rijOMJ1sevm0hG0JyleOeEwN1p1jUvmgS/mOOSxF6NOeja91zrj4Z -muyRi3OvAgMBAAECggEBAJwu2gyK/fw1YqNtlS78izP7+p2fZJf2AejQ1K3VKQKP -8IOQHW0I0zLe/9oeRTPdVhtG6mVyat8N6GL6A+IZy54HcBTqzUgquJn++z/CYDWy -cRbMD0SllY/UCqIf/9gFFb7PxwX1D7EZn1Ia7ZW/kSTKWOzkb30GfXY6p2NTwr/d -psacQ5v6+o8z3RD2N44gPvrGA2d1P83YT0oIYwKAHtpu6c46CBQmf54lhjs1LdxE -UgF8w+Y8T8DZQ5WekchIWBcGZLiqBkm49+uBoGtlfrcszZkC3pnX++HoZAYE9ms4 -OCdWhEBHUyhd/os7GjaX+CGUM4nNx0LmoqeJBhBt0qkCgYEAzcsWqVYruimpnES+ -lzFIiFZXI6rYd7hkJ+semFst4UFQM51TE0gXkrzZdIu/rgmRlb05to739V1i2z0B -TxGka+WzL6j4ZtJjy2WBl35GceoeL5Iwbjs8OiJFr8TAkq9v3TT2iymuUDGSHCCz -1T9GfS4/zoLNGiqKOxp7O6ZwaC0CgYEAxHBFRtQ1eeKYL5FZwWv2JklivutDWURK -0dzbzsvKaUf40ZdZe+A6cFomckm7xubHwMckY+8Y011pgF581JWWIaRs8u8jJuWA -ajjfmFSC0L5uuk6qYHa9eWQu8LvUGmKX9SMs7Mt2h7BS+l+ZDbgr6LngoK1CWGEK -DLo0/fp7OMsCgYAi++RVUx3J3u1DcHhJ8YnYC31yxcdYytLT6mdgFRf+lADTVWpa -+8VuH4aEBoHGT0AdiXZ3L2S9pGt6w6smSuR9pyXH81yO9jMaz52xKDlHgjoxchOj -mZRKeasJD1SBWyuUGj3TOHm2jka9W13W4ZPVEfis3ZWKXjLzizPp1wiC3QKBgEMX -ESIKsiTptg5w9xWveMdEwxvvn/Xp9B/O7aeoRH5GnX1/0okTYQIkWAMqmZ5qDYkS -uqQC8himS7UTEFFOsZLV5HvoHrpXIc+lkwAkxPTkRU8ONPRzOW0vQTTpAZztVXbc -x6gsKVRYbU6jvdNItn5qlYRrCEDFC7ijFBw2I0WXAoGARVYDlmIrSvnwqZ07YzPa -QeLueBBfnHqN+7XAGTctn0MOhE96OgURw0lWVnyoGtTmUAHtdho5EeDDUxQm/n1x -whGM72yqlFlslpnodQUqAYz1Eqe+RgP9V8KXdUVz652jqZwhuqLBjtAc9e9knwR8 -MTmwsskxSp9DWTu+tCjNrwM= ------END PRIVATE KEY----- +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAnem95D1KL/vC+eYiKkIVRhyMj0dM6cVXlR9mcJMi8JTDu7Vb +76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3H7bhUWvtexnH+c473GXpZseDlMTR +Tu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW+LIIWJ2NpzNFFTSBrS0tnGDv+SuY +/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQNHc520cED+1EsmVGIiCIWSgPxwyi +tJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J8R6u64ozjCdbHr5tIRtCcpXjnhMD +dadY1L5oEv5jjksRejTno2vdc64+GZrskYtzrwIDAQABAoIBAQCcLtoMiv38NWKj +bZUu/Isz+/qdn2SX9gHo0NSt1SkCj/CDkB1tCNMy3v/aHkUz3VYbRuplcmrfDehi ++gPiGcueB3AU6s1IKriZ/vs/wmA1snEWzA9EpZWP1AqiH//YBRW+z8cF9Q+xGZ9S +Gu2Vv5Ekyljs5G99Bn12OqdjU8K/3abGnEOb+vqPM90Q9jeOID76xgNndT/N2E9K +CGMCgB7abunOOggUJn+eJYY7NS3cRFIBfMPmPE/A2UOVnpHISFgXBmS4qgZJuPfr +gaBrZX63LM2ZAt6Z1/vh6GQGBPZrODgnVoRAR1MoXf6LOxo2l/ghlDOJzcdC5qKn +iQYQbdKpAoGBAM3LFqlWK7opqZxEvpcxSIhWVyOq2He4ZCfrHphbLeFBUDOdUxNI +F5K82XSLv64JkZW9ObaO9/VdYts9AU8RpGvlsy+o+GbSY8tlgZd+RnHqHi+SMG47 +PDoiRa/EwJKvb9009osprlAxkhwgs9U/Rn0uP86CzRoqijsaezumcGgtAoGBAMRw +RUbUNXnimC+RWcFr9iZJYr7rQ1lEStHc287LymlH+NGXWXvgOnBaJnJJu8bmx8DH +JGPvGNNdaYBefNSVliGkbPLvIyblgGo435hUgtC+brpOqmB2vXlkLvC71Bpil/Uj +LOzLdoewUvpfmQ24K+i54KCtQlhhCgy6NP36ezjLAoGAIvvkVVMdyd7tQ3B4SfGJ +2At9csXHWMrS0+pnYBUX/pQA01VqWvvFbh+GhAaBxk9AHYl2dy9kvaRresOrJkrk +faclx/NcjvYzGs+dsSg5R4I6MXITo5mUSnmrCQ9UgVsrlBo90zh5to5GvVtd1uGT +1RH4rN2Vil4y84sz6dcIgt0CgYBDFxEiCrIk6bYOcPcVr3jHRMMb75/16fQfzu2n +qER+Rp19f9KJE2ECJFgDKpmeag2JErqkAvIYpku1ExBRTrGS1eR76B66VyHPpZMA +JMT05EVPDjT0czltL0E06QGc7VV23MeoLClUWG1Oo73TSLZ+apWEawhAxQu4oxQc +NiNFlwKBgEVWA5ZiK0r58KmdO2Mz2kHi7ngQX5x6jfu1wBk3LZ9DDoRPejoFEcNJ +VlZ8qBrU5lAB7XYaORHgw1MUJv59ccIRjO9sqpRZbJaZ6HUFKgGM9RKnvkYD/VfC +l3VFc+udo6mcIbqiwY7QHPXvZJ8EfDE5sLLJMUqfQ1k7vrQoza8D +-----END RSA PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a2 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:45 2017 GMT - Not After : Jun 3 17:10:45 2027 GMT + Not Before: Mar 13 20:46:16 2020 GMT + Not After : Mar 11 20:46:16 2030 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Intermediate CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: 00:9d:e9:bd:e4:3d:4a:2f:fb:c2:f9:e6:22:2a:42: 15:46:1c:8c:8f:47:4c:e9:c5:57:95:1f:66:70:93: @@ -67,39 +67,40 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 3e:f5:d7:fd:82:3b:1e:34:8c:66:a2:f3:5e:18:e1:f1:a9:75: - 9f:b5:93:e7:0a:8e:cf:0a:33:ed:49:cd:ce:ce:ca:5f:a3:1d: - 64:76:d3:84:16:fe:9d:88:ac:f4:d1:f8:36:2b:20:80:52:0a: - ef:e0:0f:64:27:55:35:a3:7b:c6:8a:7c:a5:c4:29:17:b1:fa: - d2:89:5d:13:6b:b8:03:cb:d7:12:d6:ce:24:f0:af:48:17:03: - 54:99:af:e9:cb:fd:44:44:18:23:61:90:f6:bd:55:65:06:c3: - 36:98:8d:ea:7d:0f:79:ef:b6:bb:22:28:03:a6:ec:d9:d4:1b: - 47:ac:2c:25:de:ef:1a:02:69:4c:18:bb:29:48:f4:9d:e1:52: - 42:64:6c:88:46:68:86:83:fd:24:f5:7d:05:d7:1a:7e:22:bc: - 49:75:9c:8a:4d:e8:f3:a2:eb:9b:83:70:a7:d6:dd:2f:05:2d: - aa:be:d7:ee:7b:8e:75:44:3b:da:df:85:61:bf:e9:3b:13:40: - 4e:8b:52:08:d9:e4:8c:54:da:41:db:7b:2c:05:5e:99:06:0d: - 02:8c:8e:19:8e:55:b0:3a:33:18:30:03:a7:ed:4a:e4:f8:58: - cc:12:b8:af:d6:66:55:29:ec:01:1f:92:ed:3d:4d:c3:71:3b: - e0:2f:70:90 + 00:25:9c:ba:83:ee:0f:a2:57:cc:9a:d4:50:15:d5:e0:e7:4a: + 8a:57:d1:3e:b1:de:a5:be:26:f0:22:98:35:c0:ee:f1:84:4f: + aa:8d:92:e5:5c:29:23:ad:68:fb:9a:68:d0:2c:6e:04:5e:25: + fb:a0:65:04:fc:82:0b:ec:5b:53:a9:f4:61:1e:15:0f:5e:93: + 94:ec:d3:31:82:06:a1:16:09:01:b9:cb:90:a9:f9:ac:e3:d3: + 15:4c:2c:75:1c:97:24:d3:33:33:e1:b3:53:28:4e:e3:8e:6f: + 59:06:83:20:06:bd:9b:e9:44:8a:bd:80:59:6d:c2:cd:ce:c5: + 9c:81:31:3c:72:f5:6c:bf:31:69:a9:7c:32:28:cb:0e:d3:fd: + 23:5b:30:e0:c1:e9:c8:f8:6e:21:d1:86:c6:ca:62:a6:d6:19: + e4:0b:25:88:95:74:ce:b3:c6:4c:3c:32:63:d6:6a:8b:a3:49: + 53:15:85:9d:1a:06:16:e5:62:35:f5:d2:8c:99:91:15:35:9e: + 9d:36:98:75:4d:f9:39:de:2e:74:8f:36:2b:3a:b4:51:74:26: + 7c:22:6b:c3:52:3e:03:9f:cc:31:e9:24:68:6b:49:63:b5:24: + 6f:08:79:ed:4a:c1:6b:b5:da:72:1f:d5:a4:7e:6c:9b:4d:d2: + 4d:5d:c1:2b -----BEGIN CERTIFICATE----- -MIIDizCCAnOgAwIBAgIBATANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NVoXDTI3MDYwMzE3MTA0NVowazELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIVRhyMj0dM6cVXlR9mcJMi -8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3H7bhUWvtexnH+c473GXp -ZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW+LIIWJ2NpzNFFTSBrS0t -nGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQNHc520cED+1EsmVGIiCI -WSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J8R6u64ozjCdbHr5tIRtC -cpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtzrwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyLQ0QgxN2TxcUZOzAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAD711/2COx40jGai814Y4fGp -dZ+1k+cKjs8KM+1Jzc7Oyl+jHWR204QW/p2IrPTR+DYrIIBSCu/gD2QnVTWje8aK -fKXEKRex+tKJXRNruAPL1xLWziTwr0gXA1SZr+nL/UREGCNhkPa9VWUGwzaYjep9 -D3nvtrsiKAOm7NnUG0esLCXe7xoCaUwYuylI9J3hUkJkbIhGaIaD/ST1fQXXGn4i -vEl1nIpN6POi65uDcKfW3S8FLaq+1+57jnVEO9rfhWG/6TsTQE6LUgjZ5IxU2kHb -eywFXpkGDQKMjhmOVbA6MxgwA6ftSuT4WMwSuK/WZlUp7AEfku09TcNxO+AvcJA= +MIIDmjCCAoKgAwIBAgIQPiydvrBCyM/8mULVTUFqojANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxNloXDTMwMDMxMTIwNDYxNlowazELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENB +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIV +RhyMj0dM6cVXlR9mcJMi8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3 +H7bhUWvtexnH+c473GXpZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW ++LIIWJ2NpzNFFTSBrS0tnGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQ +NHc520cED+1EsmVGIiCIWSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J +8R6u64ozjCdbHr5tIRtCcpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtz +rwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyL +Q0QgxN2TxcUZOzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAAAl +nLqD7g+iV8ya1FAV1eDnSopX0T6x3qW+JvAimDXA7vGET6qNkuVcKSOtaPuaaNAs +bgReJfugZQT8ggvsW1Op9GEeFQ9ek5Ts0zGCBqEWCQG5y5Cp+azj0xVMLHUclyTT +MzPhs1MoTuOOb1kGgyAGvZvpRIq9gFltws3OxZyBMTxy9Wy/MWmpfDIoyw7T/SNb +MODB6cj4biHRhsbKYqbWGeQLJYiVdM6zxkw8MmPWaoujSVMVhZ0aBhblYjX10oyZ +kRU1np02mHVN+TneLnSPNis6tFF0Jnwia8NSPgOfzDHpJGhrSWO1JG8Iee1KwWu1 +2nIf1aR+bJtN0k1dwSs= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/large_key.pem b/net/data/ssl/certificates/large_key.pem index 94cb0c4..c0eff466 100644 --- a/net/data/ssl/certificates/large_key.pem +++ b/net/data/ssl/certificates/large_key.pem
@@ -1,194 +1,195 @@ Certificate: Data: Version: 1 (0x0) - Serial Number: 11333387438568092375 (0x9d4847d419b9b2d7) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Serial Number: + 50:c2:40:df:15:96:ce:8b:2a:9c:9b:0b:d3:3e:69:13:fc:18:50:a9 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Validity - Not Before: Jun 5 17:10:51 2017 GMT - Not After : Jun 3 17:10:51 2027 GMT - Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Not Before: Mar 13 20:46:27 2020 GMT + Not After : Mar 11 20:46:27 2030 GMT + Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (8200 bit) + RSA Public-Key: (8200 bit) Modulus: - 00:ba:ab:d2:c8:6c:04:5e:23:61:04:38:ed:eb:c1: - ab:c7:5d:fd:21:15:49:2b:91:45:47:4e:b0:83:56: - ce:05:7f:3c:c3:6d:d5:02:2a:a3:f5:9b:0e:26:63: - a2:22:73:4c:89:a5:49:37:f4:0e:be:62:0a:fc:a7: - 31:02:a7:74:d1:c1:64:d2:d6:db:21:90:c3:a3:c9: - b6:1f:6a:f7:e9:24:8b:c5:a2:c2:cd:d4:91:16:1b: - 69:ba:c3:62:05:90:fc:2f:83:5c:6c:fe:63:c8:31: - 78:6e:27:f8:e2:25:a6:36:1d:83:4a:6d:f0:18:be: - 7c:56:12:24:d8:be:12:17:7a:f8:0e:58:5b:6d:e7: - 00:9e:2e:cc:08:94:3b:b2:71:df:df:c5:f7:b1:bb: - 45:41:40:82:c1:bd:90:63:f6:fa:98:ce:c9:83:95: - 17:30:5d:b6:4b:43:4d:ee:d9:e3:54:70:4c:87:92: - 71:39:3c:f6:53:43:96:a7:94:c7:a9:a8:62:ce:90: - 0e:d7:b3:e7:e4:0c:ef:2c:9a:48:30:d1:60:3f:b5: - 8f:6b:84:24:62:24:36:0d:3f:2e:82:15:3e:62:67: - 12:7f:d4:6e:2c:8b:a8:6d:70:da:55:5e:1f:0d:b9: - cd:55:b1:d4:88:eb:c6:24:3d:68:6e:31:75:20:70: - e2:2e:f9:cf:e8:38:93:47:f7:5a:91:50:9e:ed:c0: - 89:a6:2a:4b:04:83:e3:7f:e8:b3:89:c6:f9:3b:64: - 91:66:03:8f:3f:87:4a:0f:88:cb:1d:b4:57:cd:d1: - 35:6d:fd:33:a2:b3:f2:af:84:d6:76:81:98:c4:bb: - b1:8d:2a:fe:33:80:9a:87:3e:04:6d:aa:c8:19:04: - ea:82:86:5a:4c:d7:e6:a2:f6:cb:90:6f:d9:6b:44: - c0:aa:1f:f4:d1:8e:89:dc:00:80:16:63:18:a4:97: - 1e:1d:dd:1a:b6:26:2d:02:a5:ad:77:cd:00:d7:2f: - d2:5a:69:10:d6:7a:1d:d4:35:b4:22:67:fa:fa:d3: - c1:60:ba:6e:24:88:86:84:19:d7:db:84:f9:46:47: - f7:bd:e5:e4:80:09:5a:6c:b7:d9:b6:91:b9:78:5d: - 4a:d1:d8:a3:1a:5c:f7:22:d7:64:1d:71:cf:98:6b: - 02:20:b3:6d:a3:84:d5:52:31:e1:9c:a8:36:6c:b2: - 3b:12:f5:65:99:61:17:66:a8:fe:f7:7c:5a:db:35: - 16:66:94:2b:03:9e:c6:3b:c1:f7:f4:d8:0a:8e:af: - 64:0f:a4:d2:af:59:87:99:99:e7:4b:eb:6d:23:53: - 8b:be:a0:3c:91:85:e6:ae:5a:79:c8:5e:0a:21:1b: - 8e:a5:8b:24:fb:5d:f7:8d:78:68:f3:83:df:21:e3: - 4d:50:ab:78:f6:93:af:ae:1c:66:77:96:72:8d:6d: - 94:83:a4:f3:81:e4:a7:a2:b6:5d:5c:14:0f:bd:9b: - 26:1c:5a:4a:2f:6d:dd:b3:3b:e1:c6:79:63:04:1e: - 95:f0:41:29:1f:8d:97:7a:3c:f9:bd:11:ea:70:1b: - 3d:6e:e1:c2:1c:45:19:5f:20:e1:5d:50:21:b5:9a: - f3:ab:2f:37:59:bc:7a:33:68:28:47:ad:27:f2:dd: - e7:56:ae:53:84:06:0c:72:d2:25:76:b5:71:31:db: - c5:25:d0:46:1a:61:84:8e:3f:e4:df:0e:76:56:fc: - d1:64:08:80:b7:38:79:85:1a:ef:de:02:40:af:d8: - 2e:5b:3b:3d:e0:b2:05:05:6f:6c:53:a3:84:d4:8b: - 6c:18:61:b2:05:a3:8a:1b:82:51:7f:bd:40:28:c7: - b4:d9:84:a1:40:72:93:4a:7d:00:29:e4:f8:1a:8a: - 5e:cc:8f:f3:45:01:b3:51:31:63:03:6a:5c:cc:0c: - 21:8c:a3:33:ff:af:21:56:0f:c1:f1:09:55:ca:a4: - 50:a8:47:ee:24:ad:d5:05:4b:c0:38:11:d4:ac:84: - 06:35:f3:7c:44:3e:b2:24:a2:46:7b:31:c6:e9:7a: - 4b:36:b0:db:12:01:c3:23:b5:8c:c8:fa:f2:09:ef: - d8:6d:9f:64:cf:34:6c:c5:aa:85:d4:c3:17:90:7a: - 9d:2c:2a:23:31:1b:87:68:16:40:0f:a4:c0:3f:b2: - 4b:5e:a8:ec:28:79:55:f8:da:25:06:6c:65:7f:de: - 85:d1:f3:da:e4:14:58:fa:9f:71:35:79:4c:81:92: - fa:af:b4:f9:f3:0f:27:2c:22:8b:65:f2:38:1d:da: - c2:2e:a7:46:61:44:f3:74:8e:44:62:ab:7f:39:84: - a9:08:fa:77:f3:7b:de:79:af:ea:b9:5b:ba:4b:2e: - 2a:4b:54:d2:8b:53:33:31:c2:ab:2c:63:d6:2d:85: - 43:0d:90:aa:dc:23:b5:7a:39:e2:99:6b:03:1b:b4: - c5:86:37:76:6d:38:70:af:3c:0d:69:e5:68:91:dd: - 37:35:0f:a4:1a:fd:4c:a0:9d:f9:bd:8d:ec:12:35: - 73:60:5b:5b:62:3b:ee:fa:c5:ce:d9:86:7e:c1:00: - c5:d2:6b:86:85:af:f4:03:32:72:00:90:37:82:29: - 79:47:43:38:98:73:64:4e:bd:35:5c:a7:6e:d5:4c: - 0d:3b:e1:85:e4:0a:36:9b:00:4b:a9:ec:52:14:50: - 81:1f:a3:26:a3:b5:1d:a0:76:0a:1b:bb:d6:c5:3f: - c3:41:fa:3e:6f:85 + 00:ae:d8:ad:c5:8e:6d:af:3f:98:10:b0:86:8f:44: + b8:b2:82:db:29:39:77:a2:c1:98:da:87:02:4e:49: + 4b:29:13:70:d5:70:42:14:17:34:00:b6:ba:c0:2c: + ab:93:9d:7e:a8:b3:3e:90:d8:6e:c3:33:b3:5f:95: + 7f:12:ea:5f:2d:eb:91:cd:fd:e3:e9:79:17:67:73: + 8a:00:d7:87:ad:02:be:9e:5f:3c:13:ee:05:bb:42: + e9:2f:8e:48:0c:66:d6:1b:13:dc:84:d6:d5:24:22: + 4e:a5:d0:41:de:0a:55:4e:91:16:8a:f3:93:f6:d3: + a8:30:62:81:0f:a6:58:a5:92:a8:d9:b7:f8:10:54: + c7:55:21:fd:2d:62:d3:3c:82:54:26:8e:75:2a:8f: + 19:ce:f8:e7:cc:75:86:18:14:82:32:25:b6:6f:70: + 39:cf:59:10:1d:78:d4:ef:d2:11:31:84:82:67:a7: + fb:6d:06:10:55:d5:da:69:7f:4f:aa:6b:09:66:f8: + 96:32:90:98:34:b2:44:73:0d:17:6e:03:ff:98:fb: + 7f:cd:a4:24:05:a9:26:d4:bd:48:f0:38:5d:a5:a5: + 0f:61:4e:a1:4d:0a:72:e2:19:e1:98:2d:b9:97:d0: + 28:5c:13:84:d5:02:1c:5e:25:22:64:78:5b:dc:e0: + 07:e4:e3:95:41:e8:e7:60:51:df:43:6b:ce:2c:c2: + af:4f:d8:1b:ce:cf:47:bc:f6:17:4c:1c:f3:06:14: + 3a:6f:96:d9:95:fc:26:a2:31:b4:ae:23:a1:a5:26: + a1:f6:4f:92:41:83:c4:59:99:76:6d:01:b6:82:cc: + ec:90:09:1a:ed:cb:4b:17:51:7e:ad:c3:ed:38:9e: + 84:f1:14:aa:19:14:59:c6:8f:31:3f:a2:90:89:3f: + 4b:f8:a4:38:5f:18:fc:30:3f:e6:37:7e:db:5c:cf: + 6b:e0:0e:60:03:cc:49:db:1a:44:3a:07:b6:99:73: + 1f:2d:14:5a:13:3b:a5:2d:71:9d:a0:d8:0e:b6:eb: + c6:2a:1c:35:aa:7f:58:91:ec:df:66:de:3c:df:78: + 86:85:03:f1:f3:2c:49:bd:e4:8a:0e:fc:cb:47:85: + 94:8b:e0:92:ac:17:2d:6a:62:9c:42:d5:ed:c1:7d: + 82:e1:ec:4c:58:f9:50:c5:bd:bd:68:6d:68:79:c6: + c3:93:85:22:4f:7b:ad:9b:a5:eb:e7:2a:fe:bc:b7: + 65:db:15:92:92:fa:85:5a:f0:6f:ee:02:b7:90:89: + ec:80:05:5d:df:71:44:ab:6e:42:c2:d8:ce:b3:42: + a3:dd:a5:26:3c:1d:8d:2e:d6:8f:ef:9b:d4:9c:30: + 58:53:60:6e:d1:62:5b:bd:42:e1:d7:28:43:cc:af: + 68:2e:4b:9b:90:dc:06:88:e8:a6:9b:66:72:6c:e6: + 22:dc:fe:93:5d:0d:02:0c:d7:ad:88:a8:dc:c7:d8: + 6a:e0:4b:e0:76:ee:9c:82:e9:b2:b9:b4:fc:7c:2a: + c5:97:74:fb:e8:01:ae:56:b3:a3:fb:cf:cd:82:44: + 05:ea:ed:fb:f7:6e:64:82:e2:0b:ac:3e:de:35:74: + 26:0b:f4:91:52:1c:25:83:81:02:77:4e:cc:ac:fa: + d7:37:e0:b3:d3:b3:b3:53:eb:06:40:8b:f1:6b:32: + e4:11:37:6f:6a:d4:09:3a:12:c0:1b:53:19:b1:14: + 4e:50:c9:a6:e9:20:8d:6b:2f:5f:ab:2e:62:7c:df: + dd:bd:79:72:2f:d3:51:f7:8d:20:7d:65:67:82:8c: + e2:a3:64:d1:57:55:df:4a:1c:17:8c:fe:fe:24:2e: + 68:8f:0b:ce:11:e9:ff:c7:0c:76:f6:03:7d:d2:49: + 2a:7d:9f:0c:5b:40:f4:a8:35:ef:71:ed:b8:66:9c: + ed:11:27:85:fe:9a:82:13:e3:cc:99:b4:9f:00:a7: + 3b:7b:d8:98:d4:6e:58:7c:71:9d:93:cb:97:41:c9: + f8:5f:9f:54:ba:c1:4c:df:83:3e:31:30:63:f0:ba: + 9f:71:f1:db:24:fe:7a:22:9c:0d:88:67:5a:98:27: + 0f:4c:31:69:91:d2:97:15:8d:53:5f:26:0b:17:fc: + f1:15:aa:df:6c:13:11:e2:00:bc:4a:00:89:77:18: + ff:50:69:6d:9a:70:79:4e:48:cb:cf:f5:a8:09:52: + a5:5b:1e:07:43:a5:14:33:3c:95:c8:0c:11:a1:4c: + b5:2b:89:9d:c0:fc:ae:92:1e:44:99:e8:0b:33:18: + df:54:46:d7:ae:81:b7:c6:7b:56:cc:4a:b9:3c:83: + fd:32:38:4c:55:90:3b:8b:fe:98:5b:6c:4c:ae:47: + a9:ad:31:39:92:aa:1a:12:c8:ac:23:a5:44:a5:f8: + ce:1b:0b:33:aa:ec:32:fe:ff:96:e5:52:ad:39:6e: + 49:71:83:5b:f8:cd:61:db:d8:15:16:08:d2:db:d8: + d6:e8:56:6d:d4:55:cf:d0:06:5c:ef:58:27:64:55: + 55:1f:da:f8:4d:38:d9:c8:d0:f5:3a:2d:6a:ff:00: + c3:0f:ad:07:2a:db:9e:cb:e3:03:d3:ac:20:59:40: + f5:56:78:d6:2c:4e:92:62:90:bb:b8:7d:c4:ef:3b: + 8a:79:15:fa:4d:86:34:a0:09:59:4d:99:b8:90:49: + 73:c4:e1:96:d3:29:40:7c:dd:f2:cb:56:d5:f6:d3: + fb:0c:83:c3:4a:9d Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption - 5a:d5:96:95:b5:3b:c2:47:95:f1:f1:b0:d7:a3:05:30:7b:80: - b1:2c:ef:aa:37:6c:de:df:78:69:76:ff:f0:11:90:a5:e9:86: - 49:29:73:df:2b:82:a9:7f:d4:64:3f:ce:16:7a:2d:39:8e:be: - 09:a6:95:c8:c3:e7:9a:75:e5:ff:9f:e0:0f:eb:b2:46:eb:2d: - 7f:da:67:95:37:45:c2:af:b8:50:1d:29:ef:f7:df:65:c8:36: - 98:77:d6:e0:e4:37:51:52:75:ff:ad:61:c0:aa:31:b0:bf:46: - ec:a4:a7:77:61:ad:b7:bf:6a:47:02:ed:e4:16:52:89:65:07: - 13:ca:aa:00:2a:5d:e4:dc:40:96:69:3c:41:f1:8f:9c:6d:e3: - 5c:0b:89:f1:ec:80:08:21:0f:dd:a3:53:1d:f2:f9:1b:82:20: - 7f:bf:10:04:92:65:a8:2c:9e:3b:c1:2d:37:7c:43:03:df:f1: - d0:7b:dc:33:55:52:55:da:6e:f6:bd:71:fe:79:f7:1b:c2:b2: - 65:c0:3f:5a:72:cc:b5:64:9d:7e:28:0c:29:b7:b4:fe:fc:85: - d5:60:a0:63:ee:e6:16:58:d1:d1:0e:0f:52:66:41:22:b8:5e: - e8:4f:a2:5c:16:ab:25:ed:93:5e:95:fc:d2:9e:f1:ba:76:6d: - ab:da:90:94:72:82:4a:0a:b8:ab:32:f0:6a:f7:57:41:fc:f3: - de:1d:79:97:b2:99:d5:d0:21:7b:e8:9a:21:1b:b2:2f:59:b5: - d9:45:d8:1a:50:29:24:88:00:97:9c:99:a6:3b:df:60:de:7b: - 3a:4b:4d:a4:05:38:1f:6f:bd:55:d7:b8:0f:3b:06:36:68:9e: - 9c:68:16:b5:0a:7d:f9:a6:5b:a0:1d:a9:6e:59:e3:69:12:0d: - fd:05:58:47:b3:71:65:13:45:dc:17:72:9d:2a:aa:9d:a9:03: - d2:9a:b1:11:0f:f9:9b:46:47:9d:d2:11:3e:94:9b:ea:17:a6: - 52:73:6c:c3:a0:6a:bf:84:94:fb:28:55:3d:eb:00:0d:0a:9d: - 68:d6:19:47:82:63:88:b4:1d:c4:30:fa:80:eb:59:08:96:8e: - b7:c0:96:ce:05:bc:e7:31:39:7f:9a:c9:63:a3:50:b2:40:33: - 18:50:e3:12:95:1a:87:39:62:eb:9c:3d:aa:d5:99:77:05:e3: - e3:6d:6b:b2:9e:86:30:fd:6f:ef:52:8d:95:7e:7c:e3:0e:2d: - e4:e3:f9:d2:66:7e:00:24:3d:9d:fc:b8:88:ca:b9:04:43:79: - 2c:50:30:85:3e:3a:f1:bb:d1:8a:e3:98:1c:ec:75:21:47:4e: - d8:f4:05:f8:c7:75:e0:89:37:2f:91:01:8c:dc:30:b9:16:4a: - c7:e4:ed:36:9d:5f:54:90:b8:e6:47:6d:c3:10:9f:16:56:2f: - dd:33:e7:2d:8e:0b:d4:97:50:da:e0:83:ee:54:30:b1:d9:cd: - 71:ff:00:b7:48:4d:e4:28:ac:cf:b1:01:77:bb:a9:dd:b5:3f: - 87:53:c9:f9:a6:86:3b:8c:fd:ba:aa:75:d7:1c:ca:48:70:6c: - c5:64:7c:94:ba:58:17:75:5f:ab:e7:4c:d2:5d:37:3a:9f:cb: - b4:37:e8:af:52:3f:5f:b4:bd:99:e9:79:6c:cc:e9:a4:99:2d: - d6:98:6d:bc:f4:2d:cf:4f:af:10:df:94:22:68:2a:2a:f4:f9: - 41:dc:a9:11:05:76:ae:f6:d8:af:1a:bc:27:8f:22:95:13:92: - 78:7f:60:43:a5:79:e4:4e:85:fc:32:0e:20:79:d9:90:81:ba: - 9f:f8:05:ba:98:bb:1f:36:52:1b:6a:c1:b9:6a:cc:e6:ea:21: - 7b:8e:1a:ac:b7:9c:c8:d5:f6:f7:1c:fd:a5:44:c5:7a:02:af: - b9:81:fb:d8:7e:89:dd:8b:05:96:a0:3d:b2:6f:af:bc:62:5d: - b5:0d:04:d7:09:24:77:d9:74:90:eb:9d:ae:bb:f2:60:83:22: - 09:86:0a:66:de:69:be:bd:c9:cf:31:e3:b9:32:3b:9d:6a:57: - 99:5f:6c:ba:c0:29:c0:d8:c6:b0:2b:11:9e:0c:11:0f:8d:67: - 2e:f3:b8:14:8e:dd:c4:e8:3c:c7:f9:81:8c:6a:77:7e:7d:86: - 7f:f2:7e:bd:38:03:10:2c:2f:13:e4:69:24:d4:2e:e3:7a:d0: - 1e:ed:79:49:06:22:6d:94:20:a0:73:22:18:09:01:4d:5b:5f: - 31:bd:37:13:a7:eb:9c:0a:9a:c1:c3:37:c4:62:07:c8:74:a1: - 5c:c8:d0:7f:4f:70:4a:53:a4:78:85:50:2a:a4:3e:0e:98:82: - 4d:2c:70:a0:71:3f:0b:ea:a0:11:e7:6b:00:02:a2:b6:83:99: - f3:18:68:ed:2d:2c:ef:02:ca:ab:d0:2c:0c:78:4b:ec:f1:03: - f4:d3:b9:df:36:a2:10:6d:3b:75:53:79:4c:6d:34:ae:cc:13: - 2f:d4:81:98:cd:94:9f:65:b7:20:a9:5e:64:51:01:09:b3:89: - 2f:bc:3b:38:0f:27:bb:59:72:0e:c0:47:18:65:50:77:48:b4: - d1:a8:b6:83:3f:55:86:3f:ac:ee:20:83:38:78:d3:ef:10:48: - 52:7d:92:ea:dc:5e:ad:24:0f:37:70:4c:a0:16:a2:59:3e:78: - 56:8f:d4:74:8b:c6:88:a6:3b:17:7c:34:bf:ab:19:21:f2 + 91:bd:bb:3e:c4:ba:f8:4d:98:d0:da:bc:6c:30:da:0e:b0:e3: + 43:36:66:86:9f:ee:7b:34:83:38:e8:92:38:52:c3:9d:9b:eb: + f4:43:ab:29:5e:a1:24:04:94:c4:ff:5d:6e:35:89:b5:e0:67: + ed:b3:46:77:cf:77:c9:4c:b2:38:79:16:f0:99:86:06:30:9f: + 51:8d:98:eb:c9:30:db:80:31:31:7e:01:47:e4:95:a7:56:30: + ea:a0:54:29:9a:27:01:50:14:a1:b5:c8:ed:e1:a2:bf:73:e7: + 64:fc:08:d9:ab:07:6d:a3:94:2a:06:d5:25:59:c4:7f:be:47: + 8d:d5:0d:39:e6:1e:57:bd:40:8c:3a:b3:ef:14:58:b0:a7:c8: + 49:da:fd:66:bf:6f:f9:f0:37:9d:e5:21:a8:93:c2:d7:e4:33: + b1:87:31:04:2c:19:f5:41:78:2e:e7:c8:4b:94:73:f6:52:83: + 4a:e9:14:f9:dc:1d:7b:0a:60:16:c3:4c:1a:cf:20:1c:bb:f8: + 49:a1:27:ec:3a:a3:eb:cd:4b:52:4b:d5:71:d8:28:8f:64:b2: + 38:19:c6:a9:20:3a:cd:6f:f1:5c:5c:09:7c:57:5c:75:15:03: + 3f:c6:6b:16:91:14:1b:31:36:a3:21:93:07:1a:1d:56:0b:50: + 90:b6:de:fd:db:a4:3e:42:a5:bb:01:71:4f:9b:a1:5b:82:ba: + d6:9d:4b:21:38:c1:e9:fd:63:55:d2:ca:5c:23:22:e2:33:86: + 31:c3:70:81:68:ca:13:53:0b:11:05:97:8b:76:0f:eb:65:c9: + ac:da:c7:95:d8:51:a4:c3:70:a9:9c:6c:32:26:c2:5d:68:d4: + 8c:cf:0b:02:d2:76:3f:75:06:43:c7:47:ec:6c:33:45:73:5c: + 60:62:c7:0d:2a:8c:77:ff:bd:ca:ea:74:dc:74:20:7a:62:3d: + 61:d0:81:fc:0d:64:f2:b1:cd:37:20:f2:cf:b5:f4:37:fc:fc: + 8c:42:c6:c9:33:df:aa:b4:48:8c:82:ed:ab:23:2f:8b:97:34: + 30:75:42:4a:43:14:65:d3:20:1d:a9:ae:56:9b:1c:48:ec:67: + 43:1a:9d:5b:eb:80:a2:c7:ed:6b:96:50:0b:b0:90:38:ec:86: + 03:2a:0b:4f:33:73:07:47:81:74:01:0e:84:a7:77:17:fb:6d: + 4c:f5:4c:a3:d9:ca:36:3a:a3:93:0d:e9:6d:8e:0d:63:22:cf: + e9:43:9b:78:4b:cf:75:60:51:15:cf:8a:81:f1:93:c1:fb:3e: + d0:dd:bb:41:2d:69:99:cb:4c:43:47:6b:ab:54:24:64:4c:f3: + cf:07:39:ef:73:ae:07:41:f3:04:90:a8:3d:43:a5:7d:ec:a6: + 22:f3:c1:45:0f:0b:fc:9b:a4:7c:45:cf:be:67:e8:90:03:d0: + 05:b8:7d:31:d8:1b:b2:81:fe:4e:42:31:69:54:60:93:09:71: + 54:9f:6b:0c:e9:cb:c0:a3:42:f3:0c:b9:36:35:26:66:de:c7: + 0f:19:78:93:32:2e:3a:95:7e:3e:8e:71:82:9c:b4:6a:08:34: + ad:ee:bb:a5:a5:03:5a:c9:7a:fa:69:25:2a:bb:f3:d4:30:de: + 06:ec:d9:16:64:d2:32:dc:de:7f:21:6b:03:57:6f:1d:d5:4c: + b3:7a:c0:d1:1e:24:db:ae:cc:02:76:f3:d2:67:79:f2:b3:12: + 74:e0:2d:87:bc:1b:b2:70:9b:f5:11:65:6f:7c:0f:95:2f:67: + f8:7c:cc:52:cb:9d:74:b9:5a:22:0e:17:1d:26:4b:52:48:22: + f1:18:e2:05:15:b9:13:ed:46:42:41:0a:c7:4d:cf:f1:89:50: + fb:5b:94:03:17:bd:24:b0:5b:59:2c:9a:07:9d:c7:1e:d8:88: + f3:28:ee:fe:c3:c5:b7:c9:be:d2:63:52:76:0e:1d:94:d6:32: + c3:64:06:49:55:29:6e:30:34:20:fb:20:ec:32:bf:af:1b:0e: + ab:e1:8f:24:47:33:82:bc:7e:23:53:eb:44:28:3d:a1:47:a9: + 84:cd:6d:f1:a9:a1:e7:29:ca:1b:c6:83:43:8b:8f:90:96:2e: + b8:44:42:6e:71:ce:98:0d:7a:49:c5:e9:9b:1c:2b:97:24:00: + 1f:19:60:f0:14:2e:01:9d:b1:93:7d:13:d5:44:af:c4:0b:a6: + 64:12:4b:fa:9e:82:45:ee:79:f3:51:c5:04:71:0d:9c:82:4f: + 31:df:00:14:e4:c7:a8:f4:3e:d1:22:84:2d:c5:8f:fb:fe:11: + 33:4c:b9:a3:48:d3:fa:ac:ca:b8:66:98:c8:4a:00:c7:09:48: + 76:fd:ca:2a:d3:a8:d8:dd:58:0d:e3:30:93:cf:ae:54:8b:6a: + 0b:bc:3f:35:2a:07:98:aa:dc:b1:ed:d2:ca:db:dc:04:72:3d: + 08:ef:48:01:3d:7f:c2:b2:67:18:d3:9e:a6:b2:43:61:e5:48: + 08:75:be:f2:02:64:a4:d3:11:74:ad:04:ca:1a:26:ec:67:f2: + 1d:dc:16:22:5c:db:22:97:20:4c:cf:49:fc:1b:c2:bf:69:54: + 74:0c:6a:9d:52:a7:25:d8:4b:82:4b:35:d7:35:60:54:f6:90: + 6e:44:86:04:fc:f1:36:8c:59:1c:89:dd:9f:3d:c5:f6:59:78: + fc:5e:86:b7:4f:b3:cb:27:9e:c5:de:69:d5:66:7d:df:bb -----BEGIN CERTIFICATE----- -MIIJPjCCBSUCCQCdSEfUGbmy1zANBgkqhkiG9w0BAQsFADBgMQswCQYDVQQGEwJV -UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQ -MA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMB4XDTE3MDYwNTE3 -MTA1MVoXDTI3MDYwMzE3MTA1MVowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCBCMwDQYJKoZIhvcNAQEBBQADggQQADCC -BAsCggQCALqr0shsBF4jYQQ47evBq8dd/SEVSSuRRUdOsINWzgV/PMNt1QIqo/Wb -DiZjoiJzTImlSTf0Dr5iCvynMQKndNHBZNLW2yGQw6PJth9q9+kki8Wiws3UkRYb -abrDYgWQ/C+DXGz+Y8gxeG4n+OIlpjYdg0pt8Bi+fFYSJNi+Ehd6+A5YW23nAJ4u -zAiUO7Jx39/F97G7RUFAgsG9kGP2+pjOyYOVFzBdtktDTe7Z41RwTIeScTk89lND -lqeUx6moYs6QDtez5+QM7yyaSDDRYD+1j2uEJGIkNg0/LoIVPmJnEn/UbiyLqG1w -2lVeHw25zVWx1IjrxiQ9aG4xdSBw4i75z+g4k0f3WpFQnu3AiaYqSwSD43/os4nG -+TtkkWYDjz+HSg+Iyx20V83RNW39M6Kz8q+E1naBmMS7sY0q/jOAmoc+BG2qyBkE -6oKGWkzX5qL2y5Bv2WtEwKof9NGOidwAgBZjGKSXHh3dGrYmLQKlrXfNANcv0lpp -ENZ6HdQ1tCJn+vrTwWC6biSIhoQZ19uE+UZH973l5IAJWmy32baRuXhdStHYoxpc -9yLXZB1xz5hrAiCzbaOE1VIx4ZyoNmyyOxL1ZZlhF2ao/vd8Wts1FmaUKwOexjvB -9/TYCo6vZA+k0q9Zh5mZ50vrbSNTi76gPJGF5q5aecheCiEbjqWLJPtd9414aPOD -3yHjTVCrePaTr64cZneWco1tlIOk84Hkp6K2XVwUD72bJhxaSi9t3bM74cZ5YwQe -lfBBKR+Nl3o8+b0R6nAbPW7hwhxFGV8g4V1QIbWa86svN1m8ejNoKEetJ/Ld51au -U4QGDHLSJXa1cTHbxSXQRhphhI4/5N8Odlb80WQIgLc4eYUa794CQK/YLls7PeCy -BQVvbFOjhNSLbBhhsgWjihuCUX+9QCjHtNmEoUByk0p9ACnk+BqKXsyP80UBs1Ex -YwNqXMwMIYyjM/+vIVYPwfEJVcqkUKhH7iSt1QVLwDgR1KyEBjXzfEQ+siSiRnsx -xul6Szaw2xIBwyO1jMj68gnv2G2fZM80bMWqhdTDF5B6nSwqIzEbh2gWQA+kwD+y -S16o7Ch5VfjaJQZsZX/ehdHz2uQUWPqfcTV5TIGS+q+0+fMPJywii2XyOB3awi6n -RmFE83SORGKrfzmEqQj6d/N73nmv6rlbuksuKktU0otTMzHCqyxj1i2FQw2Qqtwj -tXo54plrAxu0xYY3dm04cK88DWnlaJHdNzUPpBr9TKCd+b2N7BI1c2BbW2I77vrF -ztmGfsEAxdJrhoWv9AMycgCQN4IpeUdDOJhzZE69NVynbtVMDTvhheQKNpsAS6ns -UhRQgR+jJqO1HaB2Chu71sU/w0H6Pm+FAgMBAAEwDQYJKoZIhvcNAQELBQADggQC -AFrVlpW1O8JHlfHxsNejBTB7gLEs76o3bN7feGl2//ARkKXphkkpc98rgql/1GQ/ -zhZ6LTmOvgmmlcjD55p15f+f4A/rskbrLX/aZ5U3RcKvuFAdKe/332XINph31uDk -N1FSdf+tYcCqMbC/Ruykp3dhrbe/akcC7eQWUollBxPKqgAqXeTcQJZpPEHxj5xt -41wLifHsgAghD92jUx3y+RuCIH+/EASSZagsnjvBLTd8QwPf8dB73DNVUlXabva9 -cf559xvCsmXAP1pyzLVknX4oDCm3tP78hdVgoGPu5hZY0dEOD1JmQSK4XuhPolwW -qyXtk16V/NKe8bp2bavakJRygkoKuKsy8Gr3V0H8894deZeymdXQIXvomiEbsi9Z -tdlF2BpQKSSIAJecmaY732DeezpLTaQFOB9vvVXXuA87BjZonpxoFrUKffmmW6Ad -qW5Z42kSDf0FWEezcWUTRdwXcp0qqp2pA9KasREP+ZtGR53SET6Um+oXplJzbMOg -ar+ElPsoVT3rAA0KnWjWGUeCY4i0HcQw+oDrWQiWjrfAls4FvOcxOX+ayWOjULJA -MxhQ4xKVGoc5YuucParVmXcF4+Nta7KehjD9b+9SjZV+fOMOLeTj+dJmfgAkPZ38 -uIjKuQRDeSxQMIU+OvG70YrjmBzsdSFHTtj0BfjHdeCJNy+RAYzcMLkWSsfk7Tad -X1SQuOZHbcMQnxZWL90z5y2OC9SXUNrgg+5UMLHZzXH/ALdITeQorM+xAXe7qd21 -P4dTyfmmhjuM/bqqddccykhwbMVkfJS6WBd1X6vnTNJdNzqfy7Q36K9SP1+0vZnp -eWzM6aSZLdaYbbz0Lc9PrxDflCJoKir0+UHcqREFdq722K8avCePIpUTknh/YEOl -eeROhfwyDiB52ZCBup/4BbqYux82UhtqwblqzObqIXuOGqy3nMjV9vcc/aVExXoC -r7mB+9h+id2LBZagPbJvr7xiXbUNBNcJJHfZdJDrna678mCDIgmGCmbeab69yc8x -47kyO51qV5lfbLrAKcDYxrArEZ4MEQ+NZy7zuBSO3cToPMf5gYxqd359hn/yfr04 -AxAsLxPkaSTULuN60B7teUkGIm2UIKBzIhgJAU1bXzG9NxOn65wKmsHDN8RiB8h0 -oVzI0H9PcEpTpHiFUCqkPg6Ygk0scKBxPwvqoBHnawACoraDmfMYaO0tLO8CyqvQ -LAx4S+zxA/TTud82ohBtO3VTeUxtNK7MEy/UgZjNlJ9ltyCpXmRRAQmziS+8OzgP -J7tZcg7ARxhlUHdItNGotoM/VYY/rO4ggzh40+8QSFJ9kurcXq0kDzdwTKAWolk+ -eFaP1HSLxoimOxd8NL+rGSHy +MIIJSTCCBTACFFDCQN8Vls6LKpybC9M+aRP8GFCpMA0GCSqGSIb3DQEBCwUAMGAx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3Vu +dGFpbiBWaWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEw +HhcNMjAwMzEzMjA0NjI3WhcNMzAwMzExMjA0NjI3WjBgMQswCQYDVQQGEwJVUzET +MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G +A1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIEIzANBgkqhkiG9w0B +AQEFAAOCBBAAMIIECwKCBAIArtitxY5trz+YELCGj0S4soLbKTl3osGY2ocCTklL +KRNw1XBCFBc0ALa6wCyrk51+qLM+kNhuwzOzX5V/EupfLeuRzf3j6XkXZ3OKANeH +rQK+nl88E+4Fu0LpL45IDGbWGxPchNbVJCJOpdBB3gpVTpEWivOT9tOoMGKBD6ZY +pZKo2bf4EFTHVSH9LWLTPIJUJo51Ko8ZzvjnzHWGGBSCMiW2b3A5z1kQHXjU79IR +MYSCZ6f7bQYQVdXaaX9PqmsJZviWMpCYNLJEcw0XbgP/mPt/zaQkBakm1L1I8Dhd +paUPYU6hTQpy4hnhmC25l9AoXBOE1QIcXiUiZHhb3OAH5OOVQejnYFHfQ2vOLMKv +T9gbzs9HvPYXTBzzBhQ6b5bZlfwmojG0riOhpSah9k+SQYPEWZl2bQG2gszskAka +7ctLF1F+rcPtOJ6E8RSqGRRZxo8xP6KQiT9L+KQ4Xxj8MD/mN37bXM9r4A5gA8xJ +2xpEOge2mXMfLRRaEzulLXGdoNgOtuvGKhw1qn9YkezfZt4833iGhQPx8yxJveSK +DvzLR4WUi+CSrBctamKcQtXtwX2C4exMWPlQxb29aG1oecbDk4UiT3utm6Xr5yr+ +vLdl2xWSkvqFWvBv7gK3kInsgAVd33FEq25CwtjOs0Kj3aUmPB2NLtaP75vUnDBY +U2Bu0WJbvULh1yhDzK9oLkubkNwGiOimm2ZybOYi3P6TXQ0CDNetiKjcx9hq4Evg +du6cgumyubT8fCrFl3T76AGuVrOj+8/NgkQF6u37925kguILrD7eNXQmC/SRUhwl +g4ECd07MrPrXN+Cz07OzU+sGQIvxazLkETdvatQJOhLAG1MZsRROUMmm6SCNay9f +qy5ifN/dvXlyL9NR940gfWVngozio2TRV1XfShwXjP7+JC5ojwvOEen/xwx29gN9 +0kkqfZ8MW0D0qDXvce24ZpztESeF/pqCE+PMmbSfAKc7e9iY1G5YfHGdk8uXQcn4 +X59UusFM34M+MTBj8LqfcfHbJP56IpwNiGdamCcPTDFpkdKXFY1TXyYLF/zxFarf +bBMR4gC8SgCJdxj/UGltmnB5TkjLz/WoCVKlWx4HQ6UUMzyVyAwRoUy1K4mdwPyu +kh5EmegLMxjfVEbXroG3xntWzEq5PIP9MjhMVZA7i/6YW2xMrkeprTE5kqoaEsis +I6VEpfjOGwszquwy/v+W5VKtOW5JcYNb+M1h29gVFgjS29jW6FZt1FXP0AZc71gn +ZFVVH9r4TTjZyND1Oi1q/wDDD60HKtuey+MD06wgWUD1VnjWLE6SYpC7uH3E7zuK +eRX6TYY0oAlZTZm4kElzxOGW0ylAfN3yy1bV9tP7DIPDSp0CAwEAATANBgkqhkiG +9w0BAQsFAAOCBAIAkb27PsS6+E2Y0Nq8bDDaDrDjQzZmhp/uezSDOOiSOFLDnZvr +9EOrKV6hJASUxP9dbjWJteBn7bNGd893yUyyOHkW8JmGBjCfUY2Y68kw24AxMX4B +R+SVp1Yw6qBUKZonAVAUobXI7eGiv3PnZPwI2asHbaOUKgbVJVnEf75HjdUNOeYe +V71AjDqz7xRYsKfISdr9Zr9v+fA3neUhqJPC1+QzsYcxBCwZ9UF4LufIS5Rz9lKD +SukU+dwdewpgFsNMGs8gHLv4SaEn7Dqj681LUkvVcdgoj2SyOBnGqSA6zW/xXFwJ +fFdcdRUDP8ZrFpEUGzE2oyGTBxodVgtQkLbe/dukPkKluwFxT5uhW4K61p1LITjB +6f1jVdLKXCMi4jOGMcNwgWjKE1MLEQWXi3YP62XJrNrHldhRpMNwqZxsMibCXWjU +jM8LAtJ2P3UGQ8dH7GwzRXNcYGLHDSqMd/+9yup03HQgemI9YdCB/A1k8rHNNyDy +z7X0N/z8jELGyTPfqrRIjILtqyMvi5c0MHVCSkMUZdMgHamuVpscSOxnQxqdW+uA +osfta5ZQC7CQOOyGAyoLTzNzB0eBdAEOhKd3F/ttTPVMo9nKNjqjkw3pbY4NYyLP +6UObeEvPdWBRFc+KgfGTwfs+0N27QS1pmctMQ0drq1QkZEzzzwc573OuB0HzBJCo +PUOlfeymIvPBRQ8L/JukfEXPvmfokAPQBbh9MdgbsoH+TkIxaVRgkwlxVJ9rDOnL +wKNC8wy5NjUmZt7HDxl4kzIuOpV+Po5xgpy0agg0re67paUDWsl6+mklKrvz1DDe +BuzZFmTSMtzefyFrA1dvHdVMs3rA0R4k267MAnbz0md58rMSdOAth7wbsnCb9RFl +b3wPlS9n+HzMUsuddLlaIg4XHSZLUkgi8RjiBRW5E+1GQkEKx03P8YlQ+1uUAxe9 +JLBbWSyaB53HHtiI8yju/sPFt8m+0mNSdg4dlNYyw2QGSVUpbjA0IPsg7DK/rxsO +q+GPJEczgrx+I1PrRCg9oUephM1t8amh5ynKG8aDQ4uPkJYuuERCbnHOmA16ScXp +mxwrlyQAHxlg8BQuAZ2xk30T1USvxAumZBJL+p6CRe5581HFBHENnIJPMd8AFOTH +qPQ+0SKELcWP+/4RM0y5o0jT+qzKuGaYyEoAxwlIdv3KKtOo2N1YDeMwk8+uVItq +C7w/NSoHmKrcse3SytvcBHI9CO9IAT1/wrJnGNOeprJDYeVICHW+8gJkpNMRdK0E +yhom7GfyHdwWIlzbIpcgTM9J/BvCv2lUdAxqnVKnJdhLgks11zVgVPaQbkSGBPzx +NoxZHIndnz3F9ll4/F6Gt0+zyyeexd5p1WZ937s= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/localhost_cert.pem b/net/data/ssl/certificates/localhost_cert.pem index 8a34ad36..4442639da 100644 --- a/net/data/ssl/certificates/localhost_cert.pem +++ b/net/data/ssl/certificates/localhost_cert.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCr/csPH2W5PnS4 -Ei02FKhBPWHuDhF4L4KkDARe+0iCU0lRMclBEgVCefaM20QfPnhNJtfrJ0MVD3nP -4/iIZHDQXlWgXRGIYpqyysmN3p4L2VBrl2zqrWKWYZqQPRZokFUGYIpujqpF1Th5 -Zz2dDWlqb58gUnPye+HswAmTHNOmEXYQjRjoASS4LKc11ZZmFmQaS6h88v+yGYK7 -+ss4kbH2oxRH0OSuiyXPWf9Pl9urA6IobaY2CPgJxl6Cn//+I98IC2heb7/Tciax -FkwrjO+SmOeb2NCQg4dxcPGIhQmPO2ZrOgw+/uttvfuQ3H80Fls4+VgPmo8EQ3VL -+a5zXo7tAgMBAAECggEAQPqJlRUPoYTvI/v6CMyVJNDEBuRZxUZt3PyNSjU1l8dP -k9Vza5obUpoxg9XzTrqTSNK8EKOsvHA0XU6LvzvzQ0Xgo82FqjlWqOXkcC0DGQbp -UzzKcX9AGACYHJZ3uNmOxfIDWvGbcvazd2qB5KwEf6ncPKHqHFqhaIjFFUd2zu56 -4+DcVFKUrMR44KvTk1qe4R00u0kDsxZTLk70fzMkRl0qcy4oyjtOSeSEEqIKgcFS -jiXv2TM1XpMZ28P2VqA98yPhpuEnZepvTFtBth2fh3Be+rs/WxUiND+1/U4b40rH -nJr9w6z7xbpQw5FD3fqBhYK5/rsS2ghALYYaRsPuIQKBgQDiP0YJpflCrY1lbFjg -pdp+oGSqfWB0Ejq1UNnN2vVqFHykyykn+y2Tg2VTC6xsH1gqruy0DRJeHgzLj57K -5/LA98+xobxBcu1QuU0sMylWlMqmppPrHqNf7+ZzTP0LafbJAzpKGqyOIGMfeb6Z -94RwVDz9ykp/VzFg/dTTRKutUwKBgQDCm/iP0x9dC0Weif8wV3QzmjOGY4Oq2RZn -d4OOTL2UIVQq/wGbMomR6X89b/Frs5TCK79VQqffTKkxMWTF+ZZlFG7IFBnUKT84 -KXhqez/jtmyq4flGJ6J6SdrJCXJkXZwt1NLnIPwZctgaugrgh5vEBIln50wTGOXN -8EgDABEKvwKBgQCzPCsxE5LPlwxQUDBs8BeTf1+gjSjva02lPML/yTno6wf/yY72 -RI/LsCmCS9ox4fcIAYI19bEabLX4QfQrjOuMogWhFJ8+PlzxOYuAu5tBIykUMx02 -BBSruTMZHuHMvAqtHmh8MnuHMPM2CU3NTgBWuPWEnVC9ZwcQbqa/JETZTwKBgQCf -Oy0yyQT1hX6OTM0vSa87daVJBW27Qerx97j9ms7XQDn1ADfZO42ShOHmbAy2GfbS -tSbVZTekHr6lEIwq7J/gzsoiDUhg7uraUhxDy9qnwCDD5Sen/lAUDQ/lxEQD2RAr -8+Io2TVMwUoO/EBgHLUXurqO+JKnYYzOZxcU1V4cUwKBgQCWUtlDJR/gg83Q/HbC -+fPPSifL7nLDuzgDgf6oUp555dsUnU/CSyVhAAGWh/bkYi2Kb0c/5L4pMXlGSHMv -N/6Ek8JA+teaRojEtHqEkEQw6l6T61BxzpImO+KYw05mk+f/I8VoaG/cQkDLr48B -k7jie9XxUXWGXk5vCuvZgtcwQg== +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDlB6n9XNFWE704 +QoakrHZP/RhqyBF9/F9pNf8PTu+5jBNFdEiqaUds/Ve1DW7UepAzQ932GMhmJ8Q9 +eDfULwNzsDp/LzOLN27Ej7/kQlk/eNlTe8dwVYMP/I8/I3XVwzfyJs4P/7kw/iVI +/iK+tqMgEjvLrGjwYAxq95/a+pvkvmiwcAzwBkP76YvfsfmmiWt5waGDv5yazqQW +Wl0+i3W6Y+rFS8ckTXTcW0d5na8v5wAWyQwUjVp1+lTLo02C0nHm37AgT8jV1yly +4rXR8Nm5v07pPikOpQdBFQblg5dBTx80SKS66yaBmu83FLjXAmG1uhGT3OOBAxwk +aZUrt4xxAgMBAAECggEAe6/M5PB4eRUF7lk3H72n04Dq69gKYlCmMkqf6WOG4Vy9 +l5e6GpXqpfiXokaT4RojwBvZxisSJuE5AL1o4SVWpua4YLFcE8YnAu5jAmG2kymv +rH8/cPItarfJoJ6E56GbGCJOzKMdH1FRT383wmkd5ZcTReZhcdddPXNnmDoZcMlC +X60CQgJolD7mCvKAwTHYFX3vAlM1MgbbF6Mq1hePXGTSKPrlD5vRlMz9BNykCfr4 +GnRjdB9w78ry+UYMQppP+AdNJiRi/6enNrwBWQBAUmnqtRCQHDMlR+0DEbdLorRG +LpiZMuqCRU8p8qFEku0Oqj9iFp3oSLxLCy8mGoe/9QKBgQD4UEGEgknY2DR/mTf+ +RBStiwVXHpRwhgMpEgfUpB6Sc/aRgFrm6AkoCVttVSsHN6XW16d4u613Z/WGW81J +Af0F8lc2jsj8WQufZHYbZrto6DOsuE8WintBg7jc8RE3kXpf+esAuy23YUI3hE2I +BgMre+4lHzreAxguhnbEG1fMewKBgQDsHpjF0Mm+q2G02a4Rx8XDxkJWYsBQdj0G +Ph62ZNcD7O5ajQ3hVqOyFwW2U0b4F9sSrwBgXz2MKYbm7SnJgXHAy/BtYKYaPEV5 +rYkjFmsblElvhgz4+l8Rxe+yYxESbjEMiw86eNaPd3rtmcWVXn4tRN68BAdMsl/9 +YbIV+clFAwKBgAZGQOGQST1peSogPQH3xm38LU5eP3H4cOwAwKHm477fn0Nd8u4S +vuh8FAtXM5cjGNWs7VZnp6J0xgd3GmDV5AbacMm4Iev+dAS7DSD0H5gvBd8/aQAw +z5yAL5Olo8G7s1PphL6n/Ce+FWZBuZPOUxYuM35Mo7goa9wBGc8qwbUxAoGAOj1t +x1UxfeM97WLH6cDRyfFMCYzADNitQq3t22VSF7jILfOe2dcJ93JwSUGPPsB7m8co +m5zCTKEtkiYraXWRPlHPUttE/TGinVmtescb0iioWGbDKmJvMq4U6nY/DsG5PXPL +ZMvLeIWq/5IvRyGQk8/p9Iw11LgmrxP63irHd0sCgYB6lOmu3b219ILbif2BTod8 +0Afd6NdELAB5i6k/L+rqloJlzYdRgsx3Csy1qJCprLVdINNLHsIflEtHsbRLbutC +ZJBEltwfEnvXZiZKDOAAfXoem31ibIeqVfhMQTjyLKXrQZHqGegACVW9ETYbvLfr +dBmaTVqHfwZ+PD2lUog7RQ== -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 7 (0x7) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a8 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ab:fd:cb:0f:1f:65:b9:3e:74:b8:12:2d:36:14: - a8:41:3d:61:ee:0e:11:78:2f:82:a4:0c:04:5e:fb: - 48:82:53:49:51:31:c9:41:12:05:42:79:f6:8c:db: - 44:1f:3e:78:4d:26:d7:eb:27:43:15:0f:79:cf:e3: - f8:88:64:70:d0:5e:55:a0:5d:11:88:62:9a:b2:ca: - c9:8d:de:9e:0b:d9:50:6b:97:6c:ea:ad:62:96:61: - 9a:90:3d:16:68:90:55:06:60:8a:6e:8e:aa:45:d5: - 38:79:67:3d:9d:0d:69:6a:6f:9f:20:52:73:f2:7b: - e1:ec:c0:09:93:1c:d3:a6:11:76:10:8d:18:e8:01: - 24:b8:2c:a7:35:d5:96:66:16:64:1a:4b:a8:7c:f2: - ff:b2:19:82:bb:fa:cb:38:91:b1:f6:a3:14:47:d0: - e4:ae:8b:25:cf:59:ff:4f:97:db:ab:03:a2:28:6d: - a6:36:08:f8:09:c6:5e:82:9f:ff:fe:23:df:08:0b: - 68:5e:6f:bf:d3:72:26:b1:16:4c:2b:8c:ef:92:98: - e7:9b:d8:d0:90:83:87:71:70:f1:88:85:09:8f:3b: - 66:6b:3a:0c:3e:fe:eb:6d:bd:fb:90:dc:7f:34:16: - 5b:38:f9:58:0f:9a:8f:04:43:75:4b:f9:ae:73:5e: - 8e:ed + 00:e5:07:a9:fd:5c:d1:56:13:bd:38:42:86:a4:ac: + 76:4f:fd:18:6a:c8:11:7d:fc:5f:69:35:ff:0f:4e: + ef:b9:8c:13:45:74:48:aa:69:47:6c:fd:57:b5:0d: + 6e:d4:7a:90:33:43:dd:f6:18:c8:66:27:c4:3d:78: + 37:d4:2f:03:73:b0:3a:7f:2f:33:8b:37:6e:c4:8f: + bf:e4:42:59:3f:78:d9:53:7b:c7:70:55:83:0f:fc: + 8f:3f:23:75:d5:c3:37:f2:26:ce:0f:ff:b9:30:fe: + 25:48:fe:22:be:b6:a3:20:12:3b:cb:ac:68:f0:60: + 0c:6a:f7:9f:da:fa:9b:e4:be:68:b0:70:0c:f0:06: + 43:fb:e9:8b:df:b1:f9:a6:89:6b:79:c1:a1:83:bf: + 9c:9a:ce:a4:16:5a:5d:3e:8b:75:ba:63:ea:c5:4b: + c7:24:4d:74:dc:5b:47:79:9d:af:2f:e7:00:16:c9: + 0c:14:8d:5a:75:fa:54:cb:a3:4d:82:d2:71:e6:df: + b0:20:4f:c8:d5:d7:29:72:e2:b5:d1:f0:d9:b9:bf: + 4e:e9:3e:29:0e:a5:07:41:15:06:e5:83:97:41:4f: + 1f:34:48:a4:ba:eb:26:81:9a:ef:37:14:b8:d7:02: + 61:b5:ba:11:93:dc:e3:81:03:1c:24:69:95:2b:b7: + 8c:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - FD:CB:18:66:1A:6B:34:2F:F7:F4:26:D0:37:12:5D:4B:70:93:87:CD + DE:5D:1D:65:FC:4D:F4:F9:7F:12:6B:EE:9C:B5:0D:9B:62:EA:4A:11 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: DNS:localhost Signature Algorithm: sha256WithRSAEncryption - 5f:9d:b6:22:48:7d:cd:6a:8e:f8:06:9f:64:98:f0:a2:66:1b: - 47:28:5d:97:8c:fd:36:38:bf:0e:ee:d9:3c:45:86:5b:af:6f: - 12:b2:be:55:10:e5:4d:b9:10:f3:1e:ed:66:ed:f3:7b:5b:c3: - e8:90:3a:57:26:db:51:89:1e:9e:cb:78:30:f9:f9:a2:40:da: - 65:ba:ed:65:c3:75:b3:45:43:be:88:e3:37:41:75:02:96:c0: - eb:49:d5:62:6a:5f:71:90:20:ad:8a:29:7e:84:56:aa:f3:24: - 7f:37:a6:81:89:56:54:e2:fb:e9:27:e7:de:ae:e1:0a:fe:b6: - 7e:cc:2e:69:9c:f8:8c:f3:64:09:a3:a2:62:99:4f:ff:1d:bb: - 5a:b3:8b:7e:8a:46:05:6c:32:1f:44:56:de:cf:b1:b7:33:0d: - b2:f9:08:76:3d:8e:4a:f4:77:1b:87:96:ae:49:a0:46:b0:97: - f8:0d:26:26:d3:70:39:9c:76:eb:6e:dc:0e:38:f6:d7:fe:c3: - fc:fe:4f:41:3f:81:3c:d2:da:8a:8a:39:70:da:04:ef:be:39: - 0f:5a:5f:d7:2e:28:dd:ae:e6:e2:52:8f:55:72:51:ad:51:c6: - 8b:48:17:bc:13:a5:19:19:f6:70:f3:12:6c:52:45:b1:6c:8c: - aa:b1:49:ee + a1:c7:70:45:63:c1:6a:22:4c:f7:23:0b:71:dd:07:5f:a9:70: + 6d:7f:46:88:18:0b:ed:c4:5d:92:f9:3f:d4:27:e2:68:fd:0e: + 19:96:1e:30:1e:65:85:cf:9c:7d:90:37:88:de:cd:60:fa:95: + 98:ff:5f:66:12:53:65:28:8e:01:19:d6:ba:a9:e0:7a:a8:b4: + a6:d9:6f:73:00:01:da:4b:ab:18:48:6a:d0:b2:bc:6b:99:8f: + fd:36:52:ab:27:ef:dc:0b:6e:a2:71:78:02:8a:c2:d0:46:30: + b3:e1:3f:65:58:84:0c:04:f0:58:74:a3:e7:ca:c0:60:7a:a0: + eb:61:1b:86:fa:7e:81:c1:9d:93:57:ba:cc:32:80:6f:11:86: + 79:82:4c:27:5e:0a:2f:d3:44:5b:79:3f:33:33:80:87:d0:b2: + dc:74:db:f0:ec:d7:fd:cb:49:4a:b6:26:31:d2:1c:9a:22:7f: + 18:b1:a7:d1:63:8d:41:c9:d0:04:17:0c:e6:71:6c:d2:45:01: + b7:f8:ac:b3:b1:a2:d3:28:bb:ff:f4:4d:63:d0:ce:c6:4a:55: + 4d:da:20:16:23:19:53:aa:1a:63:cd:51:73:97:9c:f2:df:10: + 5a:48:a2:ce:b0:39:15:1d:d2:21:28:fe:98:09:66:17:26:c5: + a4:7d:a0:04 -----BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NloXDTI3MDYwMzE3MTA0NlowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKv9yw8fZbk+dLgSLTYUqEE9Ye4OEXgvgqQMBF77SIJTSVExyUESBUJ5 -9ozbRB8+eE0m1+snQxUPec/j+IhkcNBeVaBdEYhimrLKyY3engvZUGuXbOqtYpZh -mpA9FmiQVQZgim6OqkXVOHlnPZ0NaWpvnyBSc/J74ezACZMc06YRdhCNGOgBJLgs -pzXVlmYWZBpLqHzy/7IZgrv6yziRsfajFEfQ5K6LJc9Z/0+X26sDoihtpjYI+AnG -XoKf//4j3wgLaF5vv9NyJrEWTCuM75KY55vY0JCDh3Fw8YiFCY87Zms6DD7+6229 -+5DcfzQWWzj5WA+ajwRDdUv5rnNeju0CAwEAAaOBhjCBgzAMBgNVHRMBAf8EAjAA -MB0GA1UdDgQWBBT9yxhmGms0L/f0JtA3El1LcJOHzTAfBgNVHSMEGDAWgBSbJguK -mKm7HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw -FAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQBfnbYiSH3N -ao74Bp9kmPCiZhtHKF2XjP02OL8O7tk8RYZbr28Ssr5VEOVNuRDzHu1m7fN7W8Po -kDpXJttRiR6ey3gw+fmiQNpluu1lw3WzRUO+iOM3QXUClsDrSdVial9xkCCtiil+ -hFaq8yR/N6aBiVZU4vvpJ+feruEK/rZ+zC5pnPiM82QJo6JimU//Hbtas4t+ikYF -bDIfRFbez7G3Mw2y+Qh2PY5K9Hcbh5auSaBGsJf4DSYm03A5nHbrbtwOOPbX/sP8 -/k9BP4E80tqKijlw2gTvvjkPWl/XLijdrubiUo9VclGtUcaLSBe8E6UZGfZw8xJs -UkWxbIyqsUnu +MIID1DCCArygAwIBAgIQPiydvrBCyM/8mULVTUFqqDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxN1oXDTIyMDMxMzIwNDYxN1owYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAOUHqf1c0VYTvThChqSsdk/9GGrIEX38X2k1 +/w9O77mME0V0SKppR2z9V7UNbtR6kDND3fYYyGYnxD14N9QvA3OwOn8vM4s3bsSP +v+RCWT942VN7x3BVgw/8jz8jddXDN/Imzg//uTD+JUj+Ir62oyASO8usaPBgDGr3 +n9r6m+S+aLBwDPAGQ/vpi9+x+aaJa3nBoYO/nJrOpBZaXT6Ldbpj6sVLxyRNdNxb +R3mdry/nABbJDBSNWnX6VMujTYLScebfsCBPyNXXKXLitdHw2bm/Tuk+KQ6lB0EV +BuWDl0FPHzRIpLrrJoGa7zcUuNcCYbW6EZPc44EDHCRplSu3jHECAwEAAaOBhjCB +gzAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTeXR1l/E30+X8Sa+6ctQ2bYupKETAf +BgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEF +BQcDAQYIKwYBBQUHAwIwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEB +CwUAA4IBAQChx3BFY8FqIkz3Iwtx3QdfqXBtf0aIGAvtxF2S+T/UJ+Jo/Q4Zlh4w +HmWFz5x9kDeI3s1g+pWY/19mElNlKI4BGda6qeB6qLSm2W9zAAHaS6sYSGrQsrxr +mY/9NlKrJ+/cC26icXgCisLQRjCz4T9lWIQMBPBYdKPnysBgeqDrYRuG+n6BwZ2T +V7rMMoBvEYZ5gkwnXgov00RbeT8zM4CH0LLcdNvw7Nf9y0lKtiYx0hyaIn8YsafR +Y41BydAEFwzmcWzSRQG3+KyzsaLTKLv/9E1j0M7GSlVN2iAWIxlTqhpjzVFzl5zy +3xBaSKLOsDkVHdIhKP6YCWYXJsWkfaAE -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/may_2018.pem b/net/data/ssl/certificates/may_2018.pem index 3b275fc..2257526 100644 --- a/net/data/ssl/certificates/may_2018.pem +++ b/net/data/ssl/certificates/may_2018.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 31 (0x1f) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:bf + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: May 1 00:00:00 2018 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:dc:25:f0:b1:e7:f4:9a:33:24:c7:c7:55:bf:9f: - 06:3f:3d:61:ec:6e:38:21:04:87:7b:ea:c9:37:1d: - ad:61:46:3d:0f:43:54:ea:b0:01:45:a8:5f:fc:04: - 44:36:a5:0b:0e:53:49:ad:d4:de:70:b3:0e:9a:42: - 35:17:44:c8:7b:80:6e:a3:1b:3e:16:21:1d:b3:b5: - 08:89:97:ec:83:61:c6:a1:a5:6b:e7:f1:38:96:1b: - d1:db:2d:7e:93:90:3c:07:5b:77:6b:e0:18:63:f3: - ca:42:f1:97:7f:5b:44:9d:c1:65:34:cf:e8:4d:db: - b7:b2:8f:11:f9:0d:99:97:bd:56:24:22:aa:9a:02: - cb:93:e4:b2:55:bf:2d:82:2b:49:4f:2e:69:e2:e9: - a0:a5:18:95:f4:40:90:d7:90:34:cb:ad:a9:d8:a3: - 1b:3c:a9:d9:0b:00:60:6c:43:1f:42:82:07:f0:99: - 4b:d1:a6:66:7a:4e:69:3a:2f:c6:db:20:d0:58:80: - 90:c2:dc:70:ee:22:85:fb:59:bb:25:ba:12:1a:27: - 44:d6:f0:14:1a:71:f7:f9:fc:e5:3e:a5:7d:ad:e3: - 35:9b:c8:61:f5:13:e4:b6:58:e6:8f:46:1f:f4:18: - 69:76:78:eb:f9:ad:75:90:7c:69:dc:89:39:37:d7: - fc:2f + 00:a8:20:d7:b5:53:a5:b8:d6:5a:82:8b:5c:96:c6: + 88:55:d4:0d:4b:76:b8:31:9f:c7:55:1b:fb:6c:34: + e8:4e:92:f9:bb:91:54:c8:f6:90:6a:19:c2:d5:2c: + 6c:dd:1c:74:ae:0a:be:80:38:12:54:a9:22:6a:83: + d4:b2:a0:c8:e4:45:88:36:66:b8:6d:5f:b3:26:7c: + 4a:ee:64:77:02:37:fe:2f:4b:af:78:a2:36:d9:2e: + 2b:8a:f5:36:05:83:04:d0:75:0d:65:cc:4b:95:72: + 49:b1:b4:12:9a:a4:e6:b7:98:79:34:8e:75:bd:fa: + cb:f3:02:66:bf:2d:b4:54:cb:ce:e3:f2:53:9d:41: + 31:30:47:28:72:cc:55:de:73:ea:36:c6:45:c5:66: + d2:82:03:cc:de:0e:34:4a:27:dc:31:2d:3d:8c:5f: + dc:98:da:2c:74:c8:86:04:06:ba:dc:99:57:48:c0: + ed:bc:cd:94:34:bd:a2:be:46:b6:e7:8b:c7:04:3d: + 06:27:7e:a5:f2:69:d7:75:6f:8b:0b:29:2c:1c:bd: + 7e:0e:92:34:0c:0f:9b:5f:79:4f:a0:d5:5e:37:b1: + b8:24:ab:d8:b7:59:ea:e0:37:82:bd:b6:79:f1:51: + b3:16:98:6e:92:3c:a5:e6:03:0e:55:36:99:cd:71: + 89:2b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - FE:66:FC:2C:74:C7:2C:BB:9D:03:C1:68:2F:63:DC:AA:E7:7B:5F:F3 + C5:B9:ED:68:6D:83:F9:9F:CA:5E:A1:DC:64:A5:0B:55:A3:C1:B4:D2 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 2a:c8:c1:eb:97:c0:a7:01:7e:36:67:9b:8d:fe:ce:7d:30:25: - 7c:63:9b:be:fd:b0:b8:1d:25:ef:bf:f8:3a:58:78:24:08:de: - 37:b9:a9:48:66:8e:b7:db:e3:57:49:7f:f4:09:64:72:45:83: - c2:d2:d7:0b:01:85:cc:4a:d9:1c:bc:0f:88:f2:2e:fa:e6:ee: - 3c:76:b3:f7:5d:ec:57:f1:23:be:54:18:b3:6f:95:56:c6:fe: - 29:ca:85:3f:4d:d8:d5:23:63:8f:fd:68:c0:54:d0:e0:7f:b3: - 2f:36:fb:3b:60:ec:5a:25:2a:88:0b:00:94:a5:c4:13:c6:d0: - da:a6:f2:de:00:aa:ac:11:32:c3:30:ae:52:75:86:91:e5:5c: - 6a:b3:22:8d:2f:31:91:34:d1:2f:e3:59:53:4a:95:b9:17:34: - e7:ab:15:9f:96:a0:61:e7:ad:a2:dc:ac:3b:71:65:3b:e5:a5: - 36:56:69:a3:ce:c5:fc:44:f6:28:85:72:7b:90:0e:c1:df:a5: - 36:0a:3b:d6:76:9c:1d:2c:b7:3f:9a:c0:95:93:e8:31:e7:e4: - 8b:07:67:06:20:44:56:be:a1:1f:9a:aa:24:53:93:3e:f2:0d: - e4:f4:16:47:68:c5:6d:f4:c1:a6:c0:92:97:75:4e:f4:49:77: - 08:24:5e:8a + 3c:43:c3:c6:fd:bf:4d:ed:7c:50:08:cb:ea:18:95:40:6c:32: + 9a:78:fd:90:72:64:6a:2b:95:23:2c:7e:29:6e:fd:ab:e7:22: + 5c:91:ae:cf:6a:89:d7:14:15:d9:da:b9:d1:c7:b9:ae:1b:b8: + 53:0f:aa:58:52:65:ba:24:b7:4b:b6:6e:db:12:3e:44:1f:60: + 06:49:0b:cb:5b:e1:87:4f:13:7e:3a:1f:63:70:0f:38:99:44: + 3a:49:a9:7a:ea:81:ef:94:22:88:21:3a:5b:af:5e:e4:4f:e4: + 57:3b:6c:79:87:1c:53:d6:60:e6:64:77:a5:6b:cf:8b:90:28: + 32:44:7b:6d:c3:01:ac:38:bf:2d:64:63:a5:03:c4:d0:46:8d: + 16:7c:a8:89:e6:10:5e:25:af:a4:1a:3d:8f:08:65:c6:75:f5: + e4:6e:a2:11:62:9a:03:d7:fe:f7:22:c6:c4:da:c7:83:f3:cf: + 93:c5:8c:47:30:79:16:c8:79:ea:02:96:bf:e9:26:03:a9:da: + 54:75:eb:13:85:f4:5e:53:8b:75:d1:cc:c3:22:a3:07:c1:68: + 17:de:a9:90:0c:b1:7e:72:c6:f8:02:9b:a8:d2:33:fa:c4:4e: + eb:8d:a3:49:62:2c:4c:0d:48:a0:7b:a6:98:42:dd:82:33:a8: + 1d:57:b7:32 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBHzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE4MDUwMTAw -MDAwMFoXDTIwMDgwMzAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANwl8LHn9JozJMfHVb+fBj89YexuOCEEh3vqyTcdrWFGPQ9DVOqwAUWo -X/wERDalCw5TSa3U3nCzDppCNRdEyHuAbqMbPhYhHbO1CImX7INhxqGla+fxOJYb -0dstfpOQPAdbd2vgGGPzykLxl39bRJ3BZTTP6E3bt7KPEfkNmZe9ViQiqpoCy5Pk -slW/LYIrSU8uaeLpoKUYlfRAkNeQNMutqdijGzyp2QsAYGxDH0KCB/CZS9GmZnpO -aTovxtsg0FiAkMLccO4ihftZuyW6EhonRNbwFBpx9/n85T6lfa3jNZvIYfUT5LZY -5o9GH/QYaXZ46/mtdZB8adyJOTfX/C8CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFP5m/Cx0xyy7nQPBaC9j3Krne1/zMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAqyMHrl8CnAX42Z5uN -/s59MCV8Y5u+/bC4HSXvv/g6WHgkCN43ualIZo632+NXSX/0CWRyRYPC0tcLAYXM -StkcvA+I8i765u48drP3XexX8SO+VBizb5VWxv4pyoU/TdjVI2OP/WjAVNDgf7Mv -Nvs7YOxaJSqICwCUpcQTxtDapvLeAKqsETLDMK5SdYaR5VxqsyKNLzGRNNEv41lT -SpW5FzTnqxWflqBh562i3Kw7cWU75aU2VmmjzsX8RPYohXJ7kA7B36U2CjvWdpwd -LLc/msCVk+gx5+SLB2cGIERWvqEfmqokU5M+8g3k9BZHaMVt9MGmwJKXdU70SXcI -JF6K +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqvzANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE4MDUwMTAwMDAwMFoXDTIwMDgwMzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKgg17VTpbjWWoKLXJbGiFXUDUt2uDGfx1Ub ++2w06E6S+buRVMj2kGoZwtUsbN0cdK4KvoA4ElSpImqD1LKgyORFiDZmuG1fsyZ8 +Su5kdwI3/i9Lr3iiNtkuK4r1NgWDBNB1DWXMS5VySbG0Epqk5reYeTSOdb36y/MC +Zr8ttFTLzuPyU51BMTBHKHLMVd5z6jbGRcVm0oIDzN4ONEon3DEtPYxf3JjaLHTI +hgQGutyZV0jA7bzNlDS9or5GtueLxwQ9Bid+pfJp13VviwspLBy9fg6SNAwPm195 +T6DVXjexuCSr2LdZ6uA3gr22efFRsxaYbpI8peYDDlU2mc1xiSsCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMW57Whtg/mfyl6h3GSlC1WjwbTSMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQA8Q8PG/b9N7XxQCMvqGJVAbDKaeP2QcmRqK5UjLH4pbv2r5yJcka7PaonXFBXZ +2rnRx7muG7hTD6pYUmW6JLdLtm7bEj5EH2AGSQvLW+GHTxN+Oh9jcA84mUQ6Sal6 +6oHvlCKIITpbr17kT+RXO2x5hxxT1mDmZHela8+LkCgyRHttwwGsOL8tZGOlA8TQ +Ro0WfKiJ5hBeJa+kGj2PCGXGdfXkbqIRYpoD1/73IsbE2seD88+TxYxHMHkWyHnq +Apa/6SYDqdpUdesThfReU4t10czDIqMHwWgX3qmQDLF+csb4Apuo0jP6xE7rjaNJ +YixMDUige6aYQt2CM6gdV7cy -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/name_constraint_bad.pem b/net/data/ssl/certificates/name_constraint_bad.pem index f311771..96306bc 100644 --- a/net/data/ssl/certificates/name_constraint_bad.pem +++ b/net/data/ssl/certificates/name_constraint_bad.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAECggEAXuyGumXEnl/g2oueEX0J8FKOgj4e7z0+8OQAiRLYgf9B -XmfTGZ3DcCnB6p8F6p2wCjIW2j64y0mJLZEnZAwBV/F8CuUOEErSJM2x0BnHV7Kv -JmtebDEWWTNTTcX9/gDhtF0bdQK5WMt6OKJdKZRHUITk52u+pov7jWZDw99+tG5w -InCv1RekWbAGZWLs9hyzpOpvp0tGM2O9+XCWQh/LLeLb5rJkTcH8NKv9Xh+tLeSU -i/FER+rQHsMVA4uHdBmRgPsBnPrJopcKWQImRXDGidEd5AUWLIECQdnZI8pbtmjV -0HZj+UuUlDFdALmCHX+NxR4Z+hyi+E96ZWw/J9FHwQKBgQDYX0e873Sf4tDOn0cZ -Olof3cXPri8ezKoeAD8tfY0bxLIoOwDUtJXZeGEZD3sduDJDCdvS1M/eeW04ePlx -kTmcDecaYm4t3KYzbPauudbMQEQFvsoivp8ct/synPcRtGPTHg+GUHaqWT1d4DjT -WClxx67ugD/YQYs5UY/uLjm4tQKBgQDV2lh1Uk3xBj15FZrzg/7GM7bK3L/Xcxzz -VewAksKuVEyoqHfZAo6P/xOiQkwc9kBoet43MiNyph/kYssQowE+Pg+WffB1Ve4F -kVsq6z1mwAfnYD6m4GHxfrV6VxwM3ItiX+PiKQ4YWsbyjc/vC4ZRSarLwbk8Woya -lNucr2hGmQKBgF5sdioFdaewm98Psz9XL61oYsLXCMkwF60v/mIjwEi19emIljw8 -8ogM+JKvJtM5ZvXKf5vqMyyrYPacFH9zGOj5SDlDa0GoYP9gNebaQtqv0P+Q2zV+ -aoFl6MGVrlyTlFy1aaD7zE1a1GT7TNEuUCfPNI/wd+wv7kn9RgpzMc1hAoGBAJrh -5Zkq/+olc9ZDcJMXsSkJgUURdhvrcjdGroOHx1oNEexA/3P7ZxchTa4ByDBdpS5G -drSRKp05dfWqG5o0BI140z9SfRnuH1KHAPlnoHPPdqn7ycSA1E7cT0GI33btMEIS -YvCEfYHkFRzM2qEtvp0W9o1WA/uTNSwrzZaAb8xZAoGAZZLwniPa8zkd+4WAPSN6 -LVj+1dGasfL/zftFhVxu0/KCpdggghG26Ej0ieG71k8Xg9tpZDJvo9Kj0s8Hu4Zu -TnhwwRVyUHls+Gl0t8XXV/ryRLHB8zY45k6A+Yvc/iOYQVmY2rE4kB4PDsrJ+d5P -wA1o1OPvcx28oBjHViWoWJQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmWNw2JdGmpJMI +zy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs82C3SJapHT/Sk844JmDfT +D3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsLHa3Yn0mxcvKvCN/IAqrL +8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpmw/LH/mmHL3AMG2Y3ksU/ +hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszFgVkuChsOG1lxytOQ72/K +t4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG8xkI+j/6Hkqb/LUWF4gN +OA7Dpl/VAgMBAAECggEAeqgjGDoisMHBOUmqjK1zmfcSd/1b8nWtMZWVLy6yyFIU +teoWVY3Lqdjyr5anksD7IcIvHkIIhcKbxyEoYz7m4TIzSO6dgnxhyaK+R6Dccqiq +oBPG4Bx+xJCpBLVJruUlLZcYoz/j4lM1JVWT0FDxWsN79RYASMvXO32S9ZXrfC1S +YZjVeUrjyrc7Y2Z6z/n89P9mfWUwqOuuH6fHpNHvBugteFB3pS2oclooOh3hXWIu +ZSHWOyX0wj0Rk1iuOBADqxhec/zR4nQ9IZi3nRbfNyoUYzf2qgqPcS9yROS9PZQw +rESmMXpVJ1aF9sFo0LA5KW2sT7qbVWeLwfF8nZvPgQKBgQDdoAdvu5BPTk4E2jg9 +y/VfESKiVd1BStsw5DWBZtgDGDpLHtkoezcao0hJxGKAsnWJ1EqhqViNXEJcECi6 +Xdr5EF525y9KdKCld7q9ZeQbvvg0QLHXYY0bQhPhbymosFg+qdJCHfn8Wwim8Ibc +JnjpzDdzSKEWELanUrSTEla1TQKBgQDAJe6I4CtEXaBXi06KQHnKHI+9uu1w0TBp +YuM2/3v7CVBcN/lkmK/tnM+RZqgEi/Nhy08uIfIQjWetq7FQjbLEsesy3zlqIlth +Kw4jCcdrPW3XTp/Ru7rUQUjBTWpDh/f1T41OzY4qE5X6v2MQkJP5a614Qi2kqFZ3 +neZtpfNwqQKBgASoFR/q3/ham9cMQrxBqdEqigDBLxntGbfoQ5uJbqZ5/tePOV7Z +X+oGXkF2h99OYJvZwwushDjMJHTMvh5UVIKBLorvBpZY5vszDdBm8KkIlSx744C0 +AwP8mnBVJpntwpzmco2DFbqQqxje2uaLRGUdLlkUwJW3Gi9f1H12mC3NAoGBAJOr +00HwfnAhQHxnfKn12WPCRZo8EgV1T65+qD75ZJBO3SqyfgGY8wQ7Uq7dZV1xLVBI +TwcWYZHlCvxHCpPtAqn2TtsfAWIXG4F29HtrJY6+fC9PprYqf/BmaALfez6BPciT +JfedNJgTy10VP45YftDet0fIHIoCMcnmWVSFiK1ZAoGABYToKrxvwdgzqRt22k0D +OcMTSQqpcO/WZfcpFK9leOLuKBNniow1PSYkymdVgCkSjrY3Oksxh/0V20H62oqU +bJMTvYZFpTcCQgcwSiyQD2o2PgKNxrxIfII4/9H8hjV99uXaafEWFky8ea6GEJaN +4PkKpNDj9dus6J2Hzat2c3E= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 5 (0x5) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:c3 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 17 02:31:57 2020 GMT + Not After : Mar 17 02:31:57 2022 GMT Subject: CN=Leaf certificate Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,40 +73,40 @@ X509v3 Subject Alternative Name: DNS:test.ExAmPlE.CoM, DNS:test.ExAmPlE.OrG Signature Algorithm: sha256WithRSAEncryption - 92:fd:ff:16:24:68:99:2d:98:cd:7c:63:d8:89:31:a1:5b:51: - 19:85:21:d9:2c:a0:f9:a0:40:5d:e4:a7:c5:8c:9c:fe:cd:1c: - 8d:7e:9d:22:fb:0a:66:dc:6a:3d:e9:7a:3c:b6:51:15:f9:49: - 4b:0b:53:a3:f4:91:0b:f5:0d:78:b5:aa:3b:11:8d:9c:d2:b8: - 34:e2:53:07:49:d0:97:29:62:ca:6b:25:c0:ab:af:8e:a5:7c: - 1d:7f:12:52:12:cc:00:f3:78:f8:dd:0d:a0:96:3b:7f:fd:35: - 69:2c:23:a4:3a:fd:91:3b:c3:57:46:95:d8:a1:07:15:94:22: - 4a:e8:09:ca:ab:3a:e9:81:3a:3a:3d:6d:90:2c:db:4f:ec:a1: - a3:1f:66:20:78:a8:61:55:ac:a8:f2:a5:83:1e:7f:08:98:89: - f2:b6:bd:a4:12:71:bd:8e:89:bf:c1:d5:11:a8:3f:4c:13:7a: - 36:c9:6e:89:bb:d2:20:6d:7c:f2:db:3c:e5:9e:bb:12:7e:52: - 80:fd:d2:0a:71:7a:28:ab:70:76:1c:5d:e7:22:70:1d:cf:5b: - 15:0b:df:2f:46:18:79:01:cb:a4:86:b1:0c:e9:3a:1c:ce:58: - af:b7:ad:24:e4:b7:4e:7e:06:89:b6:47:49:56:9c:a6:c1:d8: - 3a:48:e1:a7 + 5b:ab:26:a5:3c:f7:6c:4a:6b:a1:ea:8d:e3:6a:79:a7:e7:49: + 3d:25:3c:2c:a0:e9:bc:d6:7f:d9:23:fd:a1:43:93:50:18:f3: + 2f:f7:4c:8b:97:e0:2f:cb:ed:7e:15:ce:c1:28:db:e1:a5:1d: + 8d:77:6d:b8:3a:37:2f:ca:9c:83:70:a9:40:ed:8b:81:db:69: + 2a:47:c4:c0:ed:83:aa:5d:fd:99:cf:56:73:a8:db:43:75:db: + ac:46:4a:a3:a7:36:03:43:47:2a:25:5e:22:7a:0d:46:a2:ea: + 77:cb:90:5d:4f:4c:a5:59:42:0d:78:cd:a8:24:f6:2a:ff:f9: + 2a:d6:a3:14:f5:4b:b2:d6:d0:98:4b:4a:47:5a:3a:97:c7:ba: + 02:b3:e1:bc:aa:09:ad:47:d2:38:59:5e:da:0d:af:41:95:f3: + 66:65:48:68:50:bc:b5:d5:9a:26:81:94:d7:5f:df:95:97:79: + e4:ea:e3:4f:82:84:1b:6b:62:8c:3a:1a:0e:ab:84:30:ff:f9: + 22:40:76:d2:31:e5:d7:6d:5d:0d:ba:35:34:ee:51:b9:0e:f5: + e0:9d:f1:c5:c8:2a:a0:8d:06:c5:a3:11:b8:69:a1:6f:c0:18: + eb:d7:28:4a:45:16:8f:d6:e2:cf:06:59:9f:97:60:86:11:a2: + 1b:0d:91:d2 -----BEGIN CERTIFICATE----- -MIIDmTCCAoGgAwIBAgIBBTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NloXDTI3MDYwMzE3MTA0NlowGzEZMBcGA1UEAxMQTGVhZiBjZXJ0aWZpY2F0 -ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALS/0pcz5RNbd2W9cxp1 -KJtHWea3MOhGM21YW9ofCv/k5C3yHfiJ6GQu9sPN16OO1/fN59gOEMPnVtL85ebT -TuL/gk0YY4ewo97a7wo3e6y1t0PO8gc53xTpw6RBPn5oRzSbe2HEGOYTzrO0puC6 -A+7k6+eq9G2+l1uqBpdQAdB4uNaSsOTiuUOIta4UZH1ScNQFHAkl1eJPyaiC20Ex -w75EbwvU/b/B7tlivzuPtQDI0d9dShOtceRLX9HZckyD2JNAv2zNL2YOBNa5Qygk -ySX9WXD+PfKpCk7Cm8TenldeXRYl5ni2REkpnfa/dPuF1g3xZVjyK9aPEEnIAC2I -4i0CAwEAAaOBnzCBnDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTg3OAvB4h0Op/T -MKNxivnWpeWmUzAfBgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAdBgNV -HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLQYDVR0RBCYwJIIQdGVzdC5FeEFt -UGxFLkNvTYIQdGVzdC5FeEFtUGxFLk9yRzANBgkqhkiG9w0BAQsFAAOCAQEAkv3/ -FiRomS2YzXxj2IkxoVtRGYUh2Syg+aBAXeSnxYyc/s0cjX6dIvsKZtxqPel6PLZR -FflJSwtTo/SRC/UNeLWqOxGNnNK4NOJTB0nQlyliymslwKuvjqV8HX8SUhLMAPN4 -+N0NoJY7f/01aSwjpDr9kTvDV0aV2KEHFZQiSugJyqs66YE6Oj1tkCzbT+yhox9m -IHioYVWsqPKlgx5/CJiJ8ra9pBJxvY6Jv8HVEag/TBN6NsluibvSIG188ts85Z67 -En5SgP3SCnF6KKtwdhxd5yJwHc9bFQvfL0YYeQHLpIaxDOk6HM5Yr7etJOS3Tn4G -ibZHSVacpsHYOkjhpw== +MIIDqDCCApCgAwIBAgIQPiydvrBCyM/8mULVTUFqwzANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxNzAyMzE1N1oXDTIyMDMxNzAyMzE1N1owGzEZMBcGA1UEAwwQ +TGVhZiBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKZY3DYl0aakkwjPLTuGB7XORMdbf9cRplGY7IJMbDFFowRWb8F31mw42zzYLdIl +qkdP9KTzjgmYN9MPcfasKUd7CI5oq/x+EAJltoZMsCcEahUjszoZuBXzOwsdrdif +SbFy8q8I38gCqsvzKi3A/Siwl9pKqSJ0wjoLZGUqyfRl90Z/PKlhll8MKmbD8sf+ +aYcvcAwbZjeSxT+FQNjkJkUYP85TJ6CXfhGH3ErsJuv/lQ6z6i5mRQqqzMWBWS4K +Gw4bWXHK05Dvb8q3jKjKglW4+0rluil4zuvNjk+cr4Wk7wtkXj5+oODlsIbzGQj6 +P/oeSpv8tRYXiA04DsOmX9UCAwEAAaOBnzCBnDAMBgNVHRMBAf8EAjAAMB0GA1Ud +DgQWBBSBzafdUkN/33pLuvWwthCgRAzsbDAfBgNVHSMEGDAWgBSbJguKmKm7Hbkf +HOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwLQYDVR0R +BCYwJIIQdGVzdC5FeEFtUGxFLkNvTYIQdGVzdC5FeEFtUGxFLk9yRzANBgkqhkiG +9w0BAQsFAAOCAQEAW6smpTz3bEproeqN42p5p+dJPSU8LKDpvNZ/2SP9oUOTUBjz +L/dMi5fgL8vtfhXOwSjb4aUdjXdtuDo3L8qcg3CpQO2LgdtpKkfEwO2Dql39mc9W +c6jbQ3XbrEZKo6c2A0NHKiVeInoNRqLqd8uQXU9MpVlCDXjNqCT2Kv/5KtajFPVL +stbQmEtKR1o6l8e6ArPhvKoJrUfSOFle2g2vQZXzZmVIaFC8tdWaJoGU11/flZd5 +5OrjT4KEG2tijDoaDquEMP/5IkB20jHl121dDbo1NO5RuQ714J3xxcgqoI0GxaMR +uGmhb8AY69coSkUWj9bizwZZn5dghhGiGw2R0g== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/name_constraint_good.pem b/net/data/ssl/certificates/name_constraint_good.pem index 3aae4c9..a062e800 100644 --- a/net/data/ssl/certificates/name_constraint_good.pem +++ b/net/data/ssl/certificates/name_constraint_good.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAECggEAXuyGumXEnl/g2oueEX0J8FKOgj4e7z0+8OQAiRLYgf9B -XmfTGZ3DcCnB6p8F6p2wCjIW2j64y0mJLZEnZAwBV/F8CuUOEErSJM2x0BnHV7Kv -JmtebDEWWTNTTcX9/gDhtF0bdQK5WMt6OKJdKZRHUITk52u+pov7jWZDw99+tG5w -InCv1RekWbAGZWLs9hyzpOpvp0tGM2O9+XCWQh/LLeLb5rJkTcH8NKv9Xh+tLeSU -i/FER+rQHsMVA4uHdBmRgPsBnPrJopcKWQImRXDGidEd5AUWLIECQdnZI8pbtmjV -0HZj+UuUlDFdALmCHX+NxR4Z+hyi+E96ZWw/J9FHwQKBgQDYX0e873Sf4tDOn0cZ -Olof3cXPri8ezKoeAD8tfY0bxLIoOwDUtJXZeGEZD3sduDJDCdvS1M/eeW04ePlx -kTmcDecaYm4t3KYzbPauudbMQEQFvsoivp8ct/synPcRtGPTHg+GUHaqWT1d4DjT -WClxx67ugD/YQYs5UY/uLjm4tQKBgQDV2lh1Uk3xBj15FZrzg/7GM7bK3L/Xcxzz -VewAksKuVEyoqHfZAo6P/xOiQkwc9kBoet43MiNyph/kYssQowE+Pg+WffB1Ve4F -kVsq6z1mwAfnYD6m4GHxfrV6VxwM3ItiX+PiKQ4YWsbyjc/vC4ZRSarLwbk8Woya -lNucr2hGmQKBgF5sdioFdaewm98Psz9XL61oYsLXCMkwF60v/mIjwEi19emIljw8 -8ogM+JKvJtM5ZvXKf5vqMyyrYPacFH9zGOj5SDlDa0GoYP9gNebaQtqv0P+Q2zV+ -aoFl6MGVrlyTlFy1aaD7zE1a1GT7TNEuUCfPNI/wd+wv7kn9RgpzMc1hAoGBAJrh -5Zkq/+olc9ZDcJMXsSkJgUURdhvrcjdGroOHx1oNEexA/3P7ZxchTa4ByDBdpS5G -drSRKp05dfWqG5o0BI140z9SfRnuH1KHAPlnoHPPdqn7ycSA1E7cT0GI33btMEIS -YvCEfYHkFRzM2qEtvp0W9o1WA/uTNSwrzZaAb8xZAoGAZZLwniPa8zkd+4WAPSN6 -LVj+1dGasfL/zftFhVxu0/KCpdggghG26Ej0ieG71k8Xg9tpZDJvo9Kj0s8Hu4Zu -TnhwwRVyUHls+Gl0t8XXV/ryRLHB8zY45k6A+Yvc/iOYQVmY2rE4kB4PDsrJ+d5P -wA1o1OPvcx28oBjHViWoWJQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmWNw2JdGmpJMI +zy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs82C3SJapHT/Sk844JmDfT +D3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsLHa3Yn0mxcvKvCN/IAqrL +8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpmw/LH/mmHL3AMG2Y3ksU/ +hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszFgVkuChsOG1lxytOQ72/K +t4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG8xkI+j/6Hkqb/LUWF4gN +OA7Dpl/VAgMBAAECggEAeqgjGDoisMHBOUmqjK1zmfcSd/1b8nWtMZWVLy6yyFIU +teoWVY3Lqdjyr5anksD7IcIvHkIIhcKbxyEoYz7m4TIzSO6dgnxhyaK+R6Dccqiq +oBPG4Bx+xJCpBLVJruUlLZcYoz/j4lM1JVWT0FDxWsN79RYASMvXO32S9ZXrfC1S +YZjVeUrjyrc7Y2Z6z/n89P9mfWUwqOuuH6fHpNHvBugteFB3pS2oclooOh3hXWIu +ZSHWOyX0wj0Rk1iuOBADqxhec/zR4nQ9IZi3nRbfNyoUYzf2qgqPcS9yROS9PZQw +rESmMXpVJ1aF9sFo0LA5KW2sT7qbVWeLwfF8nZvPgQKBgQDdoAdvu5BPTk4E2jg9 +y/VfESKiVd1BStsw5DWBZtgDGDpLHtkoezcao0hJxGKAsnWJ1EqhqViNXEJcECi6 +Xdr5EF525y9KdKCld7q9ZeQbvvg0QLHXYY0bQhPhbymosFg+qdJCHfn8Wwim8Ibc +JnjpzDdzSKEWELanUrSTEla1TQKBgQDAJe6I4CtEXaBXi06KQHnKHI+9uu1w0TBp +YuM2/3v7CVBcN/lkmK/tnM+RZqgEi/Nhy08uIfIQjWetq7FQjbLEsesy3zlqIlth +Kw4jCcdrPW3XTp/Ru7rUQUjBTWpDh/f1T41OzY4qE5X6v2MQkJP5a614Qi2kqFZ3 +neZtpfNwqQKBgASoFR/q3/ham9cMQrxBqdEqigDBLxntGbfoQ5uJbqZ5/tePOV7Z +X+oGXkF2h99OYJvZwwushDjMJHTMvh5UVIKBLorvBpZY5vszDdBm8KkIlSx744C0 +AwP8mnBVJpntwpzmco2DFbqQqxje2uaLRGUdLlkUwJW3Gi9f1H12mC3NAoGBAJOr +00HwfnAhQHxnfKn12WPCRZo8EgV1T65+qD75ZJBO3SqyfgGY8wQ7Uq7dZV1xLVBI +TwcWYZHlCvxHCpPtAqn2TtsfAWIXG4F29HtrJY6+fC9PprYqf/BmaALfez6BPciT +JfedNJgTy10VP45YftDet0fIHIoCMcnmWVSFiK1ZAoGABYToKrxvwdgzqRt22k0D +OcMTSQqpcO/WZfcpFK9leOLuKBNniow1PSYkymdVgCkSjrY3Oksxh/0V20H62oqU +bJMTvYZFpTcCQgcwSiyQD2o2PgKNxrxIfII4/9H8hjV99uXaafEWFky8ea6GEJaN +4PkKpNDj9dus6J2Hzat2c3E= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 6 (0x6) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:c4 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 17 02:32:34 2020 GMT + Not After : Mar 17 02:32:34 2022 GMT Subject: CN=Leaf Certificate Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: DNS:test.ExAmPlE.CoM, DNS:example.notarealtld, DNS:*.test2.ExAmPlE.CoM, DNS:*.example2.notarealtld Signature Algorithm: sha256WithRSAEncryption - 0e:29:bf:01:d0:62:9a:8d:ca:d5:3b:2a:9e:58:06:70:87:61: - 96:bc:0e:82:15:4d:98:82:b6:09:0a:22:91:29:ba:7a:17:78: - 9b:5d:fb:4b:d6:2d:75:4c:bb:75:ea:3f:23:0c:01:43:2c:26: - 75:22:05:cc:ac:36:8b:53:b3:ac:f1:4a:08:f5:da:d4:4a:4c: - 35:ae:10:f2:85:12:0f:60:b0:f3:25:8d:30:04:36:59:3e:66: - c9:dc:f9:36:4f:dc:71:c5:bb:f3:0b:7a:8b:1c:a8:38:45:fb: - cf:46:8c:df:f5:18:92:c0:4f:ac:f3:8c:30:81:a9:05:63:b1: - 2a:64:d9:25:01:61:53:24:09:0e:51:6b:6e:0c:85:03:b4:23: - 95:1e:5a:9c:a9:f3:83:c0:2a:8b:a2:97:03:be:ff:6d:4d:9b: - c4:8a:e2:d8:88:58:d4:73:32:3e:6a:33:69:2c:5d:d7:b5:97: - bb:71:df:5f:1d:d7:1a:8b:e6:00:c8:38:65:f0:ad:24:47:5a: - d3:b5:fd:23:e3:61:8a:89:05:7f:07:95:b3:41:61:41:b0:38: - c8:a8:ef:90:5b:34:00:81:86:13:e1:4d:1f:f7:29:f2:25:4d: - 4d:1b:2b:8e:58:75:c6:54:3b:5f:eb:13:09:56:f0:42:cc:16: - d2:12:d7:e5 + 25:98:e6:42:e1:a2:e1:f6:73:bc:b8:df:62:55:71:46:e1:5d: + 51:d0:87:3f:97:39:55:04:45:6a:d9:ba:54:f6:ab:1d:e4:1f: + 3f:70:bb:58:38:7c:5c:8b:3a:d2:9e:f0:21:a1:e3:a6:1b:8d: + 24:37:d3:d3:9e:e1:0f:70:2a:36:06:96:1b:95:13:25:64:46: + fb:e1:bf:b3:3d:0b:9f:55:8f:01:e1:7c:ba:2b:72:b3:55:48: + fb:50:0b:83:cd:21:2c:a0:9b:f1:de:66:68:e7:42:62:4a:ea: + d3:d0:d5:ff:b1:46:01:50:e1:94:69:ac:db:c4:7b:9d:6c:96: + 18:02:d3:35:14:2b:7e:8d:7d:7d:61:27:12:f0:0a:23:5a:6a: + 86:d7:9a:10:a6:8b:ca:92:24:d9:9b:d0:da:7b:e4:0e:b7:fa: + 84:db:0b:4b:a8:f4:45:5b:f4:84:0b:87:f6:33:3e:4b:1b:ef: + 1b:a7:39:69:b3:f2:c8:54:50:21:7a:5a:d4:82:a3:23:4b:b8: + 74:81:35:60:54:c2:37:f1:ea:79:17:9d:a7:6b:4b:21:73:16: + 5c:08:43:e7:25:94:f9:9a:cd:c5:7f:fa:5f:f0:93:53:59:2b: + ed:83:ef:69:42:51:9a:89:ea:bf:4c:16:f5:f7:b1:b5:d8:1c: + 70:35:9a:3d -----BEGIN CERTIFICATE----- -MIIDyTCCArGgAwIBAgIBBjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NloXDTI3MDYwMzE3MTA0NlowGzEZMBcGA1UEAxMQTGVhZiBDZXJ0aWZpY2F0 -ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALS/0pcz5RNbd2W9cxp1 -KJtHWea3MOhGM21YW9ofCv/k5C3yHfiJ6GQu9sPN16OO1/fN59gOEMPnVtL85ebT -TuL/gk0YY4ewo97a7wo3e6y1t0PO8gc53xTpw6RBPn5oRzSbe2HEGOYTzrO0puC6 -A+7k6+eq9G2+l1uqBpdQAdB4uNaSsOTiuUOIta4UZH1ScNQFHAkl1eJPyaiC20Ex -w75EbwvU/b/B7tlivzuPtQDI0d9dShOtceRLX9HZckyD2JNAv2zNL2YOBNa5Qygk -ySX9WXD+PfKpCk7Cm8TenldeXRYl5ni2REkpnfa/dPuF1g3xZVjyK9aPEEnIAC2I -4i0CAwEAAaOBzzCBzDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTg3OAvB4h0Op/T -MKNxivnWpeWmUzAfBgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAdBgNV -HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwXQYDVR0RBFYwVIIQdGVzdC5FeEFt -UGxFLkNvTYITZXhhbXBsZS5ub3RhcmVhbHRsZIITKi50ZXN0Mi5FeEFtUGxFLkNv -TYIWKi5leGFtcGxlMi5ub3RhcmVhbHRsZDANBgkqhkiG9w0BAQsFAAOCAQEADim/ -AdBimo3K1TsqnlgGcIdhlrwOghVNmIK2CQoikSm6ehd4m137S9YtdUy7deo/IwwB -QywmdSIFzKw2i1OzrPFKCPXa1EpMNa4Q8oUSD2Cw8yWNMAQ2WT5mydz5Nk/cccW7 -8wt6ixyoOEX7z0aM3/UYksBPrPOMMIGpBWOxKmTZJQFhUyQJDlFrbgyFA7QjlR5a -nKnzg8Aqi6KXA77/bU2bxIri2IhY1HMyPmozaSxd17WXu3HfXx3XGovmAMg4ZfCt -JEda07X9I+NhiokFfweVs0FhQbA4yKjvkFs0AIGGE+FNH/cp8iVNTRsrjlh1xlQ7 -X+sTCVbwQswW0hLX5Q== +MIID2DCCAsCgAwIBAgIQPiydvrBCyM/8mULVTUFqxDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxNzAyMzIzNFoXDTIyMDMxNzAyMzIzNFowGzEZMBcGA1UEAwwQ +TGVhZiBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKZY3DYl0aakkwjPLTuGB7XORMdbf9cRplGY7IJMbDFFowRWb8F31mw42zzYLdIl +qkdP9KTzjgmYN9MPcfasKUd7CI5oq/x+EAJltoZMsCcEahUjszoZuBXzOwsdrdif +SbFy8q8I38gCqsvzKi3A/Siwl9pKqSJ0wjoLZGUqyfRl90Z/PKlhll8MKmbD8sf+ +aYcvcAwbZjeSxT+FQNjkJkUYP85TJ6CXfhGH3ErsJuv/lQ6z6i5mRQqqzMWBWS4K +Gw4bWXHK05Dvb8q3jKjKglW4+0rluil4zuvNjk+cr4Wk7wtkXj5+oODlsIbzGQj6 +P/oeSpv8tRYXiA04DsOmX9UCAwEAAaOBzzCBzDAMBgNVHRMBAf8EAjAAMB0GA1Ud +DgQWBBSBzafdUkN/33pLuvWwthCgRAzsbDAfBgNVHSMEGDAWgBSbJguKmKm7Hbkf +HOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwXQYDVR0R +BFYwVIIQdGVzdC5FeEFtUGxFLkNvTYITZXhhbXBsZS5ub3RhcmVhbHRsZIITKi50 +ZXN0Mi5FeEFtUGxFLkNvTYIWKi5leGFtcGxlMi5ub3RhcmVhbHRsZDANBgkqhkiG +9w0BAQsFAAOCAQEAJZjmQuGi4fZzvLjfYlVxRuFdUdCHP5c5VQRFatm6VParHeQf +P3C7WDh8XIs60p7wIaHjphuNJDfT057hD3AqNgaWG5UTJWRG++G/sz0Ln1WPAeF8 +uitys1VI+1ALg80hLKCb8d5maOdCYkrq09DV/7FGAVDhlGms28R7nWyWGALTNRQr +fo19fWEnEvAKI1pqhteaEKaLypIk2ZvQ2nvkDrf6hNsLS6j0RVv0hAuH9jM+Sxvv +G6c5abPyyFRQIXpa1IKjI0u4dIE1YFTCN/HqeRedp2tLIXMWXAhD5yWU+ZrNxX/6 +X/CTU1kr7YPvaUJRmonqv0wW9fextdgccDWaPQ== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/ok_cert.pem b/net/data/ssl/certificates/ok_cert.pem index a594b8e..23df9d3 100644 --- a/net/data/ssl/certificates/ok_cert.pem +++ b/net/data/ssl/certificates/ok_cert.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAECggEAXuyGumXEnl/g2oueEX0J8FKOgj4e7z0+8OQAiRLYgf9B -XmfTGZ3DcCnB6p8F6p2wCjIW2j64y0mJLZEnZAwBV/F8CuUOEErSJM2x0BnHV7Kv -JmtebDEWWTNTTcX9/gDhtF0bdQK5WMt6OKJdKZRHUITk52u+pov7jWZDw99+tG5w -InCv1RekWbAGZWLs9hyzpOpvp0tGM2O9+XCWQh/LLeLb5rJkTcH8NKv9Xh+tLeSU -i/FER+rQHsMVA4uHdBmRgPsBnPrJopcKWQImRXDGidEd5AUWLIECQdnZI8pbtmjV -0HZj+UuUlDFdALmCHX+NxR4Z+hyi+E96ZWw/J9FHwQKBgQDYX0e873Sf4tDOn0cZ -Olof3cXPri8ezKoeAD8tfY0bxLIoOwDUtJXZeGEZD3sduDJDCdvS1M/eeW04ePlx -kTmcDecaYm4t3KYzbPauudbMQEQFvsoivp8ct/synPcRtGPTHg+GUHaqWT1d4DjT -WClxx67ugD/YQYs5UY/uLjm4tQKBgQDV2lh1Uk3xBj15FZrzg/7GM7bK3L/Xcxzz -VewAksKuVEyoqHfZAo6P/xOiQkwc9kBoet43MiNyph/kYssQowE+Pg+WffB1Ve4F -kVsq6z1mwAfnYD6m4GHxfrV6VxwM3ItiX+PiKQ4YWsbyjc/vC4ZRSarLwbk8Woya -lNucr2hGmQKBgF5sdioFdaewm98Psz9XL61oYsLXCMkwF60v/mIjwEi19emIljw8 -8ogM+JKvJtM5ZvXKf5vqMyyrYPacFH9zGOj5SDlDa0GoYP9gNebaQtqv0P+Q2zV+ -aoFl6MGVrlyTlFy1aaD7zE1a1GT7TNEuUCfPNI/wd+wv7kn9RgpzMc1hAoGBAJrh -5Zkq/+olc9ZDcJMXsSkJgUURdhvrcjdGroOHx1oNEexA/3P7ZxchTa4ByDBdpS5G -drSRKp05dfWqG5o0BI140z9SfRnuH1KHAPlnoHPPdqn7ycSA1E7cT0GI33btMEIS -YvCEfYHkFRzM2qEtvp0W9o1WA/uTNSwrzZaAb8xZAoGAZZLwniPa8zkd+4WAPSN6 -LVj+1dGasfL/zftFhVxu0/KCpdggghG26Ej0ieG71k8Xg9tpZDJvo9Kj0s8Hu4Zu -TnhwwRVyUHls+Gl0t8XXV/ryRLHB8zY45k6A+Yvc/iOYQVmY2rE4kB4PDsrJ+d5P -wA1o1OPvcx28oBjHViWoWJQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmWNw2JdGmpJMI +zy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs82C3SJapHT/Sk844JmDfT +D3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsLHa3Yn0mxcvKvCN/IAqrL +8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpmw/LH/mmHL3AMG2Y3ksU/ +hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszFgVkuChsOG1lxytOQ72/K +t4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG8xkI+j/6Hkqb/LUWF4gN +OA7Dpl/VAgMBAAECggEAeqgjGDoisMHBOUmqjK1zmfcSd/1b8nWtMZWVLy6yyFIU +teoWVY3Lqdjyr5anksD7IcIvHkIIhcKbxyEoYz7m4TIzSO6dgnxhyaK+R6Dccqiq +oBPG4Bx+xJCpBLVJruUlLZcYoz/j4lM1JVWT0FDxWsN79RYASMvXO32S9ZXrfC1S +YZjVeUrjyrc7Y2Z6z/n89P9mfWUwqOuuH6fHpNHvBugteFB3pS2oclooOh3hXWIu +ZSHWOyX0wj0Rk1iuOBADqxhec/zR4nQ9IZi3nRbfNyoUYzf2qgqPcS9yROS9PZQw +rESmMXpVJ1aF9sFo0LA5KW2sT7qbVWeLwfF8nZvPgQKBgQDdoAdvu5BPTk4E2jg9 +y/VfESKiVd1BStsw5DWBZtgDGDpLHtkoezcao0hJxGKAsnWJ1EqhqViNXEJcECi6 +Xdr5EF525y9KdKCld7q9ZeQbvvg0QLHXYY0bQhPhbymosFg+qdJCHfn8Wwim8Ibc +JnjpzDdzSKEWELanUrSTEla1TQKBgQDAJe6I4CtEXaBXi06KQHnKHI+9uu1w0TBp +YuM2/3v7CVBcN/lkmK/tnM+RZqgEi/Nhy08uIfIQjWetq7FQjbLEsesy3zlqIlth +Kw4jCcdrPW3XTp/Ru7rUQUjBTWpDh/f1T41OzY4qE5X6v2MQkJP5a614Qi2kqFZ3 +neZtpfNwqQKBgASoFR/q3/ham9cMQrxBqdEqigDBLxntGbfoQ5uJbqZ5/tePOV7Z +X+oGXkF2h99OYJvZwwushDjMJHTMvh5UVIKBLorvBpZY5vszDdBm8KkIlSx744C0 +AwP8mnBVJpntwpzmco2DFbqQqxje2uaLRGUdLlkUwJW3Gi9f1H12mC3NAoGBAJOr +00HwfnAhQHxnfKn12WPCRZo8EgV1T65+qD75ZJBO3SqyfgGY8wQ7Uq7dZV1xLVBI +TwcWYZHlCvxHCpPtAqn2TtsfAWIXG4F29HtrJY6+fC9PprYqf/BmaALfez6BPciT +JfedNJgTy10VP45YftDet0fIHIoCMcnmWVSFiK1ZAoGABYToKrxvwdgzqRt22k0D +OcMTSQqpcO/WZfcpFK9leOLuKBNniow1PSYkymdVgCkSjrY3Oksxh/0V20H62oqU +bJMTvYZFpTcCQgcwSiyQD2o2PgKNxrxIfII4/9H8hjV99uXaafEWFky8ea6GEJaN +4PkKpNDj9dus6J2Hzat2c3E= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 3 (0x3) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a4 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 7a:14:44:2e:50:34:5c:0b:98:e4:5f:76:99:ba:e4:de:64:4a: - 8c:54:be:c9:5e:0b:e0:16:ac:d7:b0:f6:fc:cc:87:66:c6:bf: - ed:10:37:f0:5f:1d:aa:0d:fd:83:a7:1b:6c:ec:5a:b8:be:a5: - 30:8a:62:b8:a9:5d:ca:ee:17:8b:9d:65:76:f8:50:6f:57:57: - 9e:49:f6:7b:01:08:fe:49:44:64:76:5c:a8:e3:6a:f8:d7:eb: - 75:dd:05:1f:f9:9d:1f:b5:1f:76:eb:a2:d2:58:b2:ab:ba:47: - 88:33:19:3b:de:13:a4:9b:fb:bc:7a:78:53:77:4d:1d:cb:f1: - 4d:f5:d3:85:04:51:ec:79:53:2c:a5:63:71:22:47:51:20:b8: - 0e:9a:2c:9f:40:d4:60:c4:d6:1d:39:fd:1e:11:f1:0b:47:c1: - e7:e9:68:d9:f3:00:1b:bc:ee:29:ed:14:eb:ce:ed:5c:fd:16: - 74:33:e3:4b:90:80:f9:e8:1a:db:97:bd:06:0b:68:79:eb:cd: - 4b:3f:00:0e:69:9e:ff:99:64:39:91:e9:12:c8:98:e6:2d:f1: - 75:d9:bf:a1:f5:15:40:b7:93:2b:5d:98:24:da:f3:6e:8e:cb: - 20:19:fe:27:6d:68:78:29:9c:90:ea:aa:ec:ef:bf:19:74:32: - e6:c9:f5:27 + 4d:09:77:89:44:9c:ce:11:6a:a6:e3:4d:9f:1d:ea:0b:55:bb: + 39:19:90:ec:1e:f7:4e:5d:39:ac:b8:b8:3d:1a:7a:64:53:5a: + 0f:c6:c3:fc:16:2c:a1:f9:2a:51:55:65:07:87:98:ea:3d:c9: + 4f:9e:0c:d2:18:1f:08:26:78:f0:e0:dc:10:dd:66:f5:4a:83: + 66:5c:f9:7f:57:e3:d3:30:9b:91:f9:1b:ad:58:4e:88:e9:f6: + b9:11:f7:cf:9a:f6:6a:63:87:84:3c:7d:93:f9:06:51:83:d1: + be:d6:90:1b:b0:67:8c:c5:93:61:20:f7:91:c0:50:4a:e9:87: + a0:6b:8f:f7:99:f2:2e:81:cd:41:8a:24:f7:f7:a2:cf:20:79: + 44:7a:8b:7c:06:df:09:93:9b:29:0a:66:7d:72:cd:ad:3c:d7: + 31:66:c6:84:6c:01:20:ca:f4:b2:5a:f6:2f:e8:8f:9c:9c:92: + 58:1a:3f:4a:59:d4:e8:0f:c1:84:b4:a9:be:89:a3:7f:0b:2a: + b4:b2:00:8a:7a:49:44:92:5b:cb:1b:2d:f7:e6:2a:9a:a9:a5: + 0f:18:d8:71:1a:1d:2a:94:26:6c:40:db:2e:11:51:d9:c7:13: + a4:4a:31:65:1b:6a:5d:d2:8d:3a:de:58:3c:08:f9:be:be:95: + 34:70:a3:07 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBAzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NloXDTI3MDYwMzE3MTA0NlowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALS/0pcz5RNbd2W9cxp1KJtHWea3MOhGM21YW9ofCv/k5C3yHfiJ6GQu -9sPN16OO1/fN59gOEMPnVtL85ebTTuL/gk0YY4ewo97a7wo3e6y1t0PO8gc53xTp -w6RBPn5oRzSbe2HEGOYTzrO0puC6A+7k6+eq9G2+l1uqBpdQAdB4uNaSsOTiuUOI -ta4UZH1ScNQFHAkl1eJPyaiC20Exw75EbwvU/b/B7tlivzuPtQDI0d9dShOtceRL -X9HZckyD2JNAv2zNL2YOBNa5QygkySX9WXD+PfKpCk7Cm8TenldeXRYl5ni2REkp -nfa/dPuF1g3xZVjyK9aPEEnIAC2I4i0CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFODc4C8HiHQ6n9Mwo3GK+dal5aZTMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQB6FEQuUDRcC5jkX3aZ -uuTeZEqMVL7JXgvgFqzXsPb8zIdmxr/tEDfwXx2qDf2Dpxts7Fq4vqUwimK4qV3K -7heLnWV2+FBvV1eeSfZ7AQj+SURkdlyo42r41+t13QUf+Z0ftR9266LSWLKrukeI -Mxk73hOkm/u8enhTd00dy/FN9dOFBFHseVMspWNxIkdRILgOmiyfQNRgxNYdOf0e -EfELR8Hn6WjZ8wAbvO4p7RTrzu1c/RZ0M+NLkID56Brbl70GC2h5681LPwAOaZ7/ -mWQ5kekSyJjmLfF12b+h9RVAt5MrXZgk2vNujssgGf4nbWh4KZyQ6qrs778ZdDLm -yfUn +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqpDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxN1oXDTIyMDMxMzIwNDYxN1owYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKZY3DYl0aakkwjPLTuGB7XORMdbf9cRplGY +7IJMbDFFowRWb8F31mw42zzYLdIlqkdP9KTzjgmYN9MPcfasKUd7CI5oq/x+EAJl +toZMsCcEahUjszoZuBXzOwsdrdifSbFy8q8I38gCqsvzKi3A/Siwl9pKqSJ0wjoL +ZGUqyfRl90Z/PKlhll8MKmbD8sf+aYcvcAwbZjeSxT+FQNjkJkUYP85TJ6CXfhGH +3ErsJuv/lQ6z6i5mRQqqzMWBWS4KGw4bWXHK05Dvb8q3jKjKglW4+0rluil4zuvN +jk+cr4Wk7wtkXj5+oODlsIbzGQj6P/oeSpv8tRYXiA04DsOmX9UCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIHNp91SQ3/feku69bC2EKBEDOxsMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBNCXeJRJzOEWqm402fHeoLVbs5GZDsHvdOXTmsuLg9GnpkU1oPxsP8Fiyh+SpR +VWUHh5jqPclPngzSGB8IJnjw4NwQ3Wb1SoNmXPl/V+PTMJuR+RutWE6I6fa5EffP +mvZqY4eEPH2T+QZRg9G+1pAbsGeMxZNhIPeRwFBK6Yega4/3mfIugc1BiiT396LP +IHlEeot8Bt8Jk5spCmZ9cs2tPNcxZsaEbAEgyvSyWvYv6I+cnJJYGj9KWdToD8GE +tKm+iaN/Cyq0sgCKeklEklvLGy335iqaqaUPGNhxGh0qlCZsQNsuEVHZxxOkSjFl +G2pd0o063lg8CPm+vpU0cKMH -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/ok_cert_by_intermediate.pem b/net/data/ssl/certificates/ok_cert_by_intermediate.pem index 5cd3cc1..2cdbda2 100644 --- a/net/data/ssl/certificates/ok_cert_by_intermediate.pem +++ b/net/data/ssl/certificates/ok_cert_by_intermediate.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0v9KXM+UTW3dl -vXMadSibR1nmtzDoRjNtWFvaHwr/5OQt8h34iehkLvbDzdejjtf3zefYDhDD51bS -/OXm007i/4JNGGOHsKPe2u8KN3ustbdDzvIHOd8U6cOkQT5+aEc0m3thxBjmE86z -tKbgugPu5OvnqvRtvpdbqgaXUAHQeLjWkrDk4rlDiLWuFGR9UnDUBRwJJdXiT8mo -gttBMcO+RG8L1P2/we7ZYr87j7UAyNHfXUoTrXHkS1/R2XJMg9iTQL9szS9mDgTW -uUMoJMkl/Vlw/j3yqQpOwpvE3p5XXl0WJeZ4tkRJKZ32v3T7hdYN8WVY8ivWjxBJ -yAAtiOItAgMBAAECggEAXuyGumXEnl/g2oueEX0J8FKOgj4e7z0+8OQAiRLYgf9B -XmfTGZ3DcCnB6p8F6p2wCjIW2j64y0mJLZEnZAwBV/F8CuUOEErSJM2x0BnHV7Kv -JmtebDEWWTNTTcX9/gDhtF0bdQK5WMt6OKJdKZRHUITk52u+pov7jWZDw99+tG5w -InCv1RekWbAGZWLs9hyzpOpvp0tGM2O9+XCWQh/LLeLb5rJkTcH8NKv9Xh+tLeSU -i/FER+rQHsMVA4uHdBmRgPsBnPrJopcKWQImRXDGidEd5AUWLIECQdnZI8pbtmjV -0HZj+UuUlDFdALmCHX+NxR4Z+hyi+E96ZWw/J9FHwQKBgQDYX0e873Sf4tDOn0cZ -Olof3cXPri8ezKoeAD8tfY0bxLIoOwDUtJXZeGEZD3sduDJDCdvS1M/eeW04ePlx -kTmcDecaYm4t3KYzbPauudbMQEQFvsoivp8ct/synPcRtGPTHg+GUHaqWT1d4DjT -WClxx67ugD/YQYs5UY/uLjm4tQKBgQDV2lh1Uk3xBj15FZrzg/7GM7bK3L/Xcxzz -VewAksKuVEyoqHfZAo6P/xOiQkwc9kBoet43MiNyph/kYssQowE+Pg+WffB1Ve4F -kVsq6z1mwAfnYD6m4GHxfrV6VxwM3ItiX+PiKQ4YWsbyjc/vC4ZRSarLwbk8Woya -lNucr2hGmQKBgF5sdioFdaewm98Psz9XL61oYsLXCMkwF60v/mIjwEi19emIljw8 -8ogM+JKvJtM5ZvXKf5vqMyyrYPacFH9zGOj5SDlDa0GoYP9gNebaQtqv0P+Q2zV+ -aoFl6MGVrlyTlFy1aaD7zE1a1GT7TNEuUCfPNI/wd+wv7kn9RgpzMc1hAoGBAJrh -5Zkq/+olc9ZDcJMXsSkJgUURdhvrcjdGroOHx1oNEexA/3P7ZxchTa4ByDBdpS5G -drSRKp05dfWqG5o0BI140z9SfRnuH1KHAPlnoHPPdqn7ycSA1E7cT0GI33btMEIS -YvCEfYHkFRzM2qEtvp0W9o1WA/uTNSwrzZaAb8xZAoGAZZLwniPa8zkd+4WAPSN6 -LVj+1dGasfL/zftFhVxu0/KCpdggghG26Ej0ieG71k8Xg9tpZDJvo9Kj0s8Hu4Zu -TnhwwRVyUHls+Gl0t8XXV/ryRLHB8zY45k6A+Yvc/iOYQVmY2rE4kB4PDsrJ+d5P -wA1o1OPvcx28oBjHViWoWJQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmWNw2JdGmpJMI +zy07hge1zkTHW3/XEaZRmOyCTGwxRaMEVm/Bd9ZsONs82C3SJapHT/Sk844JmDfT +D3H2rClHewiOaKv8fhACZbaGTLAnBGoVI7M6GbgV8zsLHa3Yn0mxcvKvCN/IAqrL +8yotwP0osJfaSqkidMI6C2RlKsn0ZfdGfzypYZZfDCpmw/LH/mmHL3AMG2Y3ksU/ +hUDY5CZFGD/OUyegl34Rh9xK7Cbr/5UOs+ouZkUKqszFgVkuChsOG1lxytOQ72/K +t4yoyoJVuPtK5bopeM7rzY5PnK+FpO8LZF4+fqDg5bCG8xkI+j/6Hkqb/LUWF4gN +OA7Dpl/VAgMBAAECggEAeqgjGDoisMHBOUmqjK1zmfcSd/1b8nWtMZWVLy6yyFIU +teoWVY3Lqdjyr5anksD7IcIvHkIIhcKbxyEoYz7m4TIzSO6dgnxhyaK+R6Dccqiq +oBPG4Bx+xJCpBLVJruUlLZcYoz/j4lM1JVWT0FDxWsN79RYASMvXO32S9ZXrfC1S +YZjVeUrjyrc7Y2Z6z/n89P9mfWUwqOuuH6fHpNHvBugteFB3pS2oclooOh3hXWIu +ZSHWOyX0wj0Rk1iuOBADqxhec/zR4nQ9IZi3nRbfNyoUYzf2qgqPcS9yROS9PZQw +rESmMXpVJ1aF9sFo0LA5KW2sT7qbVWeLwfF8nZvPgQKBgQDdoAdvu5BPTk4E2jg9 +y/VfESKiVd1BStsw5DWBZtgDGDpLHtkoezcao0hJxGKAsnWJ1EqhqViNXEJcECi6 +Xdr5EF525y9KdKCld7q9ZeQbvvg0QLHXYY0bQhPhbymosFg+qdJCHfn8Wwim8Ibc +JnjpzDdzSKEWELanUrSTEla1TQKBgQDAJe6I4CtEXaBXi06KQHnKHI+9uu1w0TBp +YuM2/3v7CVBcN/lkmK/tnM+RZqgEi/Nhy08uIfIQjWetq7FQjbLEsesy3zlqIlth +Kw4jCcdrPW3XTp/Ru7rUQUjBTWpDh/f1T41OzY4qE5X6v2MQkJP5a614Qi2kqFZ3 +neZtpfNwqQKBgASoFR/q3/ham9cMQrxBqdEqigDBLxntGbfoQ5uJbqZ5/tePOV7Z +X+oGXkF2h99OYJvZwwushDjMJHTMvh5UVIKBLorvBpZY5vszDdBm8KkIlSx744C0 +AwP8mnBVJpntwpzmco2DFbqQqxje2uaLRGUdLlkUwJW3Gi9f1H12mC3NAoGBAJOr +00HwfnAhQHxnfKn12WPCRZo8EgV1T65+qD75ZJBO3SqyfgGY8wQ7Uq7dZV1xLVBI +TwcWYZHlCvxHCpPtAqn2TtsfAWIXG4F29HtrJY6+fC9PprYqf/BmaALfez6BPciT +JfedNJgTy10VP45YftDet0fIHIoCMcnmWVSFiK1ZAoGABYToKrxvwdgzqRt22k0D +OcMTSQqpcO/WZfcpFK9leOLuKBNniow1PSYkymdVgCkSjrY3Oksxh/0V20H62oqU +bJMTvYZFpTcCQgcwSiyQD2o2PgKNxrxIfII4/9H8hjV99uXaafEWFky8ea6GEJaN +4PkKpNDj9dus6J2Hzat2c3E= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + db:15:0b:57:64:f6:dc:4a:c0:6e:e7:ea:5d:c9:c5:cd + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Intermediate CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:17:5C:45:F3:D0:AC:1C:10:4C:8B:43:44:20:C4:DD:93:C5:C5:19:3B @@ -72,57 +73,58 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 43:f7:63:38:a3:30:3f:ab:e6:6c:42:a1:dd:ff:8d:f6:ad:b2: - eb:b6:9e:4b:bd:90:fc:d8:f4:f0:5a:42:fc:be:5b:cc:c7:24: - 2f:91:48:a6:a1:bb:a2:b7:19:61:21:ac:d3:81:ee:6e:bb:04: - 2d:16:b5:7e:cb:e6:a3:17:8f:3e:65:4d:1d:8d:c1:da:3d:3b: - ad:a1:b3:e8:f5:e3:16:13:17:0a:a3:45:e0:cf:84:b2:3d:e8: - 38:69:31:46:e8:8c:10:63:0f:5e:6b:f4:10:25:23:98:b8:5c: - d9:06:78:83:18:70:09:a6:ef:8f:e9:f5:ff:b3:44:85:35:f6: - 69:61:0b:2a:8d:de:87:1c:ec:dc:50:c7:67:ef:88:2c:28:de: - c0:db:6e:21:20:00:c5:5b:5d:ef:36:c6:0a:e9:06:a3:25:3e: - 4d:13:fa:f0:3f:bc:fe:9c:68:48:ff:ec:1b:e7:2c:39:ac:88: - 2b:a0:88:96:11:3e:f0:20:e2:29:fc:bd:d3:d3:ca:24:63:58: - 17:15:c3:ac:19:21:cb:21:29:fc:53:e7:3b:cf:c2:0a:5e:f4: - ce:f1:9e:77:38:d4:c6:90:4e:94:fe:2e:97:cb:1a:94:2a:1e: - 8c:3b:db:36:65:c6:19:ba:d7:0b:03:22:e5:92:e2:f6:3e:df: - 99:ce:6b:49 + 80:2c:94:86:a4:69:32:38:0e:41:73:db:0a:42:e9:1c:05:81: + fa:80:cc:c2:c3:2b:3d:7e:46:b1:19:32:ff:97:fe:fc:be:c2: + 32:7c:e2:db:fe:27:0a:75:26:6a:b8:6f:9f:0f:37:0c:bc:02: + 2d:6c:04:63:4a:45:50:75:b7:3e:90:49:85:50:3d:85:52:57: + 1d:2e:d5:b9:75:c1:84:56:9a:cb:92:e8:9b:28:38:bd:20:c5: + 6d:8c:53:70:37:9a:f5:64:5e:d5:11:e4:28:6b:08:9c:8b:0f: + 2a:f7:a1:59:00:15:58:6b:11:91:11:27:c3:6e:e2:54:52:f7: + fe:e6:3d:27:d5:0f:b6:91:ab:39:12:9d:c5:dc:f3:02:e4:87: + 48:c7:e8:93:c0:85:69:5c:97:8b:d8:5f:bf:d4:a1:f2:c4:5a: + 69:88:b0:3c:75:86:30:09:b4:84:0a:17:56:2c:6f:d4:c6:10: + f9:23:1c:5e:77:8c:29:5c:db:41:36:33:c7:3a:00:85:f9:a0: + f5:e3:71:9a:55:b7:0b:45:45:30:07:a7:78:6f:b2:2b:4e:e5: + 84:2f:bc:49:d7:80:07:ed:d1:44:c8:c3:5a:ec:3c:65:05:a0: + 78:e3:a3:8b:1c:b2:2e:b0:64:f5:9e:7b:08:8d:bd:4a:07:4f: + 29:50:74:e8 -----BEGIN CERTIFICATE----- -MIIDxzCCAq+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEdMBsGA1UEAwwUVGVzdCBJbnRlcm1lZGlhdGUgQ0EwHhcN -MTcwNjA1MTcxMDQ2WhcNMjcwNjAzMTcxMDQ2WjBgMQswCQYDVQQGEwJVUzETMBEG -A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UE -CgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtL/SlzPlE1t3Zb1zGnUom0dZ5rcw6EYzbVhb2h8K/+Tk -LfId+InoZC72w83Xo47X983n2A4Qw+dW0vzl5tNO4v+CTRhjh7Cj3trvCjd7rLW3 -Q87yBznfFOnDpEE+fmhHNJt7YcQY5hPOs7Sm4LoD7uTr56r0bb6XW6oGl1AB0Hi4 -1pKw5OK5Q4i1rhRkfVJw1AUcCSXV4k/JqILbQTHDvkRvC9T9v8Hu2WK/O4+1AMjR -311KE61x5Etf0dlyTIPYk0C/bM0vZg4E1rlDKCTJJf1ZcP498qkKTsKbxN6eV15d -FiXmeLZESSmd9r90+4XWDfFlWPIr1o8QScgALYjiLQIDAQABo4GAMH4wDAYDVR0T -AQH/BAIwADAdBgNVHQ4EFgQU4NzgLweIdDqf0zCjcYr51qXlplMwHwYDVR0jBBgw -FoAUF1xF89CsHBBMi0NEIMTdk8XFGTswHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG -AQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggEBAEP3Yzij -MD+r5mxCod3/jfatsuu2nku9kPzY9PBaQvy+W8zHJC+RSKahu6K3GWEhrNOB7m67 -BC0WtX7L5qMXjz5lTR2Nwdo9O62hs+j14xYTFwqjReDPhLI96DhpMUbojBBjD15r -9BAlI5i4XNkGeIMYcAmm74/p9f+zRIU19mlhCyqN3occ7NxQx2fviCwo3sDbbiEg -AMVbXe82xgrpBqMlPk0T+vA/vP6caEj/7BvnLDmsiCugiJYRPvAg4in8vdPTyiRj -WBcVw6wZIcshKfxT5zvPwgpe9M7xnnc41MaQTpT+LpfLGpQqHow72zZlxhm61wsD -IuWS4vY+35nOa0k= +MIID1zCCAr+gAwIBAgIRANsVC1dk9txKwG7n6l3Jxc0wDQYJKoZIhvcNAQELBQAw +azELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1v +dW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExHTAbBgNVBAMMFFRlc3QgSW50 +ZXJtZWRpYXRlIENBMB4XDTIwMDMxMzIwNDYxN1oXDTIyMDMxMzIwNDYxN1owYDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50 +YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKZY3DYl0aakkwjPLTuGB7XO +RMdbf9cRplGY7IJMbDFFowRWb8F31mw42zzYLdIlqkdP9KTzjgmYN9MPcfasKUd7 +CI5oq/x+EAJltoZMsCcEahUjszoZuBXzOwsdrdifSbFy8q8I38gCqsvzKi3A/Siw +l9pKqSJ0wjoLZGUqyfRl90Z/PKlhll8MKmbD8sf+aYcvcAwbZjeSxT+FQNjkJkUY +P85TJ6CXfhGH3ErsJuv/lQ6z6i5mRQqqzMWBWS4KGw4bWXHK05Dvb8q3jKjKglW4 ++0rluil4zuvNjk+cr4Wk7wtkXj5+oODlsIbzGQj6P/oeSpv8tRYXiA04DsOmX9UC +AwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIHNp91SQ3/feku69bC2 +EKBEDOxsMB8GA1UdIwQYMBaAFBdcRfPQrBwQTItDRCDE3ZPFxRk7MB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3 +DQEBCwUAA4IBAQCALJSGpGkyOA5Bc9sKQukcBYH6gMzCwys9fkaxGTL/l/78vsIy +fOLb/icKdSZquG+fDzcMvAItbARjSkVQdbc+kEmFUD2FUlcdLtW5dcGEVprLkuib +KDi9IMVtjFNwN5r1ZF7VEeQoawiciw8q96FZABVYaxGRESfDbuJUUvf+5j0n1Q+2 +kas5Ep3F3PMC5IdIx+iTwIVpXJeL2F+/1KHyxFppiLA8dYYwCbSEChdWLG/UxhD5 +Ixxed4wpXNtBNjPHOgCF+aD143GaVbcLRUUwB6d4b7IrTuWEL7xJ14AH7dFEyMNa +7DxlBaB446OLHLIusGT1nnsIjb1KB08pUHTo -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a2 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:45 2017 GMT - Not After : Jun 3 17:10:45 2027 GMT + Not Before: Mar 13 20:46:16 2020 GMT + Not After : Mar 11 20:46:16 2030 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Intermediate CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: 00:9d:e9:bd:e4:3d:4a:2f:fb:c2:f9:e6:22:2a:42: 15:46:1c:8c:8f:47:4c:e9:c5:57:95:1f:66:70:93: @@ -151,39 +153,40 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 3e:f5:d7:fd:82:3b:1e:34:8c:66:a2:f3:5e:18:e1:f1:a9:75: - 9f:b5:93:e7:0a:8e:cf:0a:33:ed:49:cd:ce:ce:ca:5f:a3:1d: - 64:76:d3:84:16:fe:9d:88:ac:f4:d1:f8:36:2b:20:80:52:0a: - ef:e0:0f:64:27:55:35:a3:7b:c6:8a:7c:a5:c4:29:17:b1:fa: - d2:89:5d:13:6b:b8:03:cb:d7:12:d6:ce:24:f0:af:48:17:03: - 54:99:af:e9:cb:fd:44:44:18:23:61:90:f6:bd:55:65:06:c3: - 36:98:8d:ea:7d:0f:79:ef:b6:bb:22:28:03:a6:ec:d9:d4:1b: - 47:ac:2c:25:de:ef:1a:02:69:4c:18:bb:29:48:f4:9d:e1:52: - 42:64:6c:88:46:68:86:83:fd:24:f5:7d:05:d7:1a:7e:22:bc: - 49:75:9c:8a:4d:e8:f3:a2:eb:9b:83:70:a7:d6:dd:2f:05:2d: - aa:be:d7:ee:7b:8e:75:44:3b:da:df:85:61:bf:e9:3b:13:40: - 4e:8b:52:08:d9:e4:8c:54:da:41:db:7b:2c:05:5e:99:06:0d: - 02:8c:8e:19:8e:55:b0:3a:33:18:30:03:a7:ed:4a:e4:f8:58: - cc:12:b8:af:d6:66:55:29:ec:01:1f:92:ed:3d:4d:c3:71:3b: - e0:2f:70:90 + 00:25:9c:ba:83:ee:0f:a2:57:cc:9a:d4:50:15:d5:e0:e7:4a: + 8a:57:d1:3e:b1:de:a5:be:26:f0:22:98:35:c0:ee:f1:84:4f: + aa:8d:92:e5:5c:29:23:ad:68:fb:9a:68:d0:2c:6e:04:5e:25: + fb:a0:65:04:fc:82:0b:ec:5b:53:a9:f4:61:1e:15:0f:5e:93: + 94:ec:d3:31:82:06:a1:16:09:01:b9:cb:90:a9:f9:ac:e3:d3: + 15:4c:2c:75:1c:97:24:d3:33:33:e1:b3:53:28:4e:e3:8e:6f: + 59:06:83:20:06:bd:9b:e9:44:8a:bd:80:59:6d:c2:cd:ce:c5: + 9c:81:31:3c:72:f5:6c:bf:31:69:a9:7c:32:28:cb:0e:d3:fd: + 23:5b:30:e0:c1:e9:c8:f8:6e:21:d1:86:c6:ca:62:a6:d6:19: + e4:0b:25:88:95:74:ce:b3:c6:4c:3c:32:63:d6:6a:8b:a3:49: + 53:15:85:9d:1a:06:16:e5:62:35:f5:d2:8c:99:91:15:35:9e: + 9d:36:98:75:4d:f9:39:de:2e:74:8f:36:2b:3a:b4:51:74:26: + 7c:22:6b:c3:52:3e:03:9f:cc:31:e9:24:68:6b:49:63:b5:24: + 6f:08:79:ed:4a:c1:6b:b5:da:72:1f:d5:a4:7e:6c:9b:4d:d2: + 4d:5d:c1:2b -----BEGIN CERTIFICATE----- -MIIDizCCAnOgAwIBAgIBATANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NVoXDTI3MDYwMzE3MTA0NVowazELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIVRhyMj0dM6cVXlR9mcJMi -8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3H7bhUWvtexnH+c473GXp -ZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW+LIIWJ2NpzNFFTSBrS0t -nGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQNHc520cED+1EsmVGIiCI -WSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J8R6u64ozjCdbHr5tIRtC -cpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtzrwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyLQ0QgxN2TxcUZOzAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAD711/2COx40jGai814Y4fGp -dZ+1k+cKjs8KM+1Jzc7Oyl+jHWR204QW/p2IrPTR+DYrIIBSCu/gD2QnVTWje8aK -fKXEKRex+tKJXRNruAPL1xLWziTwr0gXA1SZr+nL/UREGCNhkPa9VWUGwzaYjep9 -D3nvtrsiKAOm7NnUG0esLCXe7xoCaUwYuylI9J3hUkJkbIhGaIaD/ST1fQXXGn4i -vEl1nIpN6POi65uDcKfW3S8FLaq+1+57jnVEO9rfhWG/6TsTQE6LUgjZ5IxU2kHb -eywFXpkGDQKMjhmOVbA6MxgwA6ftSuT4WMwSuK/WZlUp7AEfku09TcNxO+AvcJA= +MIIDmjCCAoKgAwIBAgIQPiydvrBCyM/8mULVTUFqojANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxNloXDTMwMDMxMTIwNDYxNlowazELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENB +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIV +RhyMj0dM6cVXlR9mcJMi8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3 +H7bhUWvtexnH+c473GXpZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW ++LIIWJ2NpzNFFTSBrS0tnGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQ +NHc520cED+1EsmVGIiCIWSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J +8R6u64ozjCdbHr5tIRtCcpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtz +rwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyL +Q0QgxN2TxcUZOzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAAAl +nLqD7g+iV8ya1FAV1eDnSopX0T6x3qW+JvAimDXA7vGET6qNkuVcKSOtaPuaaNAs +bgReJfugZQT8ggvsW1Op9GEeFQ9ek5Ts0zGCBqEWCQG5y5Cp+azj0xVMLHUclyTT +MzPhs1MoTuOOb1kGgyAGvZvpRIq9gFltws3OxZyBMTxy9Wy/MWmpfDIoyw7T/SNb +MODB6cj4biHRhsbKYqbWGeQLJYiVdM6zxkw8MmPWaoujSVMVhZ0aBhblYjX10oyZ +kRU1np02mHVN+TneLnSPNis6tFF0Jnwia8NSPgOfzDHpJGhrSWO1JG8Iee1KwWu1 +2nIf1aR+bJtN0k1dwSs= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/post_june_2016.pem b/net/data/ssl/certificates/post_june_2016.pem index 0c10c1e..b614413d 100644 --- a/net/data/ssl/certificates/post_june_2016.pem +++ b/net/data/ssl/certificates/post_june_2016.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 23 (0x17) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:bb + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jun 1 00:00:00 2016 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:cc:24:fe:ba:05:d1:11:43:16:d3:95:5f:fa:79: - 1a:22:55:fc:43:d5:03:e2:c9:d3:32:53:bc:72:e3: - b6:b9:04:bd:3c:b4:04:55:64:a7:77:ef:ee:00:6e: - 5e:14:d5:a8:97:42:33:37:54:43:34:10:85:cd:10: - ad:b4:18:49:9c:a9:63:27:c4:bd:53:4a:39:45:ec: - 8b:88:8d:bf:b4:5f:fe:3e:1b:d5:ac:d1:23:fd:0c: - bd:09:3d:0c:8b:79:a0:89:b7:d6:16:73:07:b5:90: - 18:49:09:ed:80:26:19:e4:06:fb:71:16:97:f4:16: - 53:84:1b:33:92:22:08:c6:43:82:f5:02:d1:a1:4f: - a8:c8:97:46:e0:39:64:6d:b3:4c:e4:45:87:50:5f: - 37:aa:7a:de:00:58:bf:b3:68:31:5c:5d:5c:ab:e9: - 26:b7:06:4c:25:2f:42:63:d7:5a:ed:0f:45:59:8d: - fc:8a:ef:4f:16:b9:60:b4:bf:c6:a7:1a:50:53:3e: - 3b:0f:af:de:eb:12:da:80:c3:ca:bb:8f:03:74:d3: - fc:8a:e4:b2:7e:9a:d5:eb:74:9c:eb:c7:d5:79:6f: - 13:0e:ea:b9:5a:90:04:6b:e7:a0:39:fa:e0:ad:29: - 6d:2a:c7:3d:e6:06:70:a6:99:f7:4d:02:10:39:51: - 4a:13 + 00:ea:28:87:52:f7:ef:f0:75:d4:d1:50:fb:fa:d4: + c4:c1:92:75:50:b9:c2:95:8c:14:07:10:aa:a0:d8: + fa:f7:7a:b3:f2:b3:5f:c8:f6:8e:db:73:1a:dc:3f: + b9:4e:99:fe:ac:48:6e:45:72:0b:ad:11:f6:56:62: + 6a:a4:2b:87:b2:57:bf:62:ec:5e:94:cd:d1:18:b3: + 88:62:ec:95:b5:b9:34:af:c8:d6:82:bb:f2:aa:e8: + ad:da:dd:9c:f0:5a:23:9c:1a:0b:80:c1:3e:43:78: + 00:f4:a1:c2:7c:0d:8f:d8:47:a7:db:02:69:b3:99: + 29:ad:f1:75:72:9d:27:7a:c6:24:ff:4a:f5:07:0f: + 64:21:1c:45:7f:7c:53:4f:76:52:79:b1:7b:96:14: + 0e:24:00:92:5c:17:89:d4:f3:bc:ad:1b:c2:0f:5a: + 48:b9:a1:fc:f9:98:c1:8b:86:c4:4d:cc:7c:c4:ca: + de:c9:cf:0d:48:f1:3b:a0:d2:27:3a:87:2e:d2:e0: + 3b:d1:a3:4d:a3:65:fd:90:d1:69:41:e1:bd:73:2b: + 09:e1:6c:c3:e0:66:ae:fb:87:c0:37:ef:6a:5f:2b: + 8b:6e:9a:39:12:78:63:1a:bc:68:08:b4:9a:b9:06: + a0:3c:0f:0f:94:15:84:7a:56:d2:fb:3e:5d:32:33: + f4:cb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E3:14:30:A9:76:2F:F9:DE:0D:D7:82:DF:8A:8B:5A:FE:84:EF:65:49 + 5D:9D:AA:CB:E9:50:66:BA:68:B5:C4:63:09:40:F7:2A:EB:EF:A0:88 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,114 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 6a:ca:b3:de:fd:7e:b9:3c:8a:ad:4e:e6:a3:40:f1:c4:10:5e: - d5:72:9f:ca:6b:ea:de:c3:d6:48:38:59:72:cc:77:b9:c1:9e: - 7f:a4:02:4f:57:ad:bd:4f:d5:66:a7:82:f3:85:ea:6a:b5:e8: - eb:21:a5:bc:cd:89:43:97:50:54:44:5e:b4:e8:98:98:0d:b1: - 12:69:d3:62:ae:77:0e:1b:3c:02:93:29:49:96:e2:7b:9f:c8: - 58:84:f3:a0:bb:26:99:71:80:c6:2e:99:4c:00:4f:90:08:e2: - e3:cf:9d:f1:71:40:a0:78:8f:dd:e1:ea:28:74:4e:83:3e:60: - 20:45:d4:68:28:cc:55:0d:d7:4e:7e:48:a7:aa:f4:fa:20:b8: - 74:76:f5:49:f6:e3:2c:e8:3f:f3:2e:84:a9:81:ce:4e:b9:87: - 5f:2e:fd:12:8a:ca:fb:53:46:b5:2d:16:57:fd:ca:64:5e:77: - 26:48:f6:52:29:70:a1:67:c2:5c:10:13:07:5a:1b:d5:9f:38: - 19:5c:d8:a1:e3:1b:09:3b:ff:56:fd:7d:57:74:5f:9c:14:92: - b3:3e:8f:f6:0b:f0:f5:25:4f:0b:05:de:ad:87:9a:4f:e4:b7: - b4:2d:de:31:2c:14:49:bf:ef:0a:0c:b6:4f:1e:53:d4:50:23: - c7:b4:78:66 + b0:38:e3:e3:17:c8:0d:35:cc:a7:fa:1a:ce:2f:08:70:b7:ff: + b4:e1:69:1e:76:67:56:24:93:dc:86:bb:32:a7:67:4b:65:67: + e4:0d:6e:32:16:1b:c9:73:53:39:9b:3e:1d:89:16:c5:f8:f0: + 1a:7c:9f:d3:6c:1a:2b:50:6f:4a:00:3e:69:74:72:94:47:8f: + 86:2d:85:ae:55:ae:f9:bd:97:d0:d9:08:95:67:e9:31:0e:0e: + 2f:ea:38:1a:1b:d1:c2:b1:e8:3d:ee:6b:9f:8f:40:a4:02:4b: + 9d:56:20:c3:7f:bd:00:da:61:98:68:33:75:65:a8:9d:21:bf: + 20:be:7d:f3:7e:82:51:88:a2:2d:4e:10:e9:59:44:63:88:0a: + 34:f3:4c:0d:d1:cb:79:0a:0b:52:4d:d2:b3:86:4c:99:e8:93: + e4:49:8b:92:a4:11:b0:f9:4a:1f:dd:2d:cf:e7:65:c3:84:9f: + 8a:9a:8d:bc:ec:37:d5:b2:5c:28:50:6b:67:38:8d:e5:21:78: + 75:18:5c:0d:5d:1a:87:1e:47:5b:74:0d:96:72:fa:85:9e:6c: + 8e:e9:a5:11:cc:6f:e0:52:b6:36:b2:8e:47:1d:4b:f8:55:88: + ab:9a:b9:47:40:ab:d1:19:78:d2:81:b5:57:25:a3:4e:6f:9f: + 41:f4:a3:56 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBFzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE2MDYwMTAw -MDAwMFoXDTE3MDcwMzAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAMwk/roF0RFDFtOVX/p5GiJV/EPVA+LJ0zJTvHLjtrkEvTy0BFVkp3fv -7gBuXhTVqJdCMzdUQzQQhc0QrbQYSZypYyfEvVNKOUXsi4iNv7Rf/j4b1azRI/0M -vQk9DIt5oIm31hZzB7WQGEkJ7YAmGeQG+3EWl/QWU4QbM5IiCMZDgvUC0aFPqMiX -RuA5ZG2zTORFh1BfN6p63gBYv7NoMVxdXKvpJrcGTCUvQmPXWu0PRVmN/IrvTxa5 -YLS/xqcaUFM+Ow+v3usS2oDDyruPA3TT/Irksn6a1et0nOvH1XlvEw7quVqQBGvn -oDn64K0pbSrHPeYGcKaZ900CEDlRShMCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFOMUMKl2L/neDdeC34qLWv6E72VJMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBqyrPe/X65PIqtTuaj -QPHEEF7Vcp/Ka+rew9ZIOFlyzHe5wZ5/pAJPV629T9Vmp4LzhepqtejrIaW8zYlD -l1BURF606JiYDbESadNirncOGzwCkylJluJ7n8hYhPOguyaZcYDGLplMAE+QCOLj -z53xcUCgeI/d4eoodE6DPmAgRdRoKMxVDddOfkinqvT6ILh0dvVJ9uMs6D/zLoSp -gc5OuYdfLv0Sisr7U0a1LRZX/cpkXncmSPZSKXChZ8JcEBMHWhvVnzgZXNih4xsJ -O/9W/X1XdF+cFJKzPo/2C/D1JU8LBd6th5pP5Le0Ld4xLBRJv+8KDLZPHlPUUCPH -tHhm +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFquzANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE2MDYwMTAwMDAwMFoXDTE3MDcwMzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAOooh1L37/B11NFQ+/rUxMGSdVC5wpWMFAcQ +qqDY+vd6s/KzX8j2jttzGtw/uU6Z/qxIbkVyC60R9lZiaqQrh7JXv2LsXpTN0Riz +iGLslbW5NK/I1oK78qrordrdnPBaI5waC4DBPkN4APShwnwNj9hHp9sCabOZKa3x +dXKdJ3rGJP9K9QcPZCEcRX98U092Unmxe5YUDiQAklwXidTzvK0bwg9aSLmh/PmY +wYuGxE3MfMTK3snPDUjxO6DSJzqHLtLgO9GjTaNl/ZDRaUHhvXMrCeFsw+BmrvuH +wDfval8ri26aORJ4Yxq8aAi0mrkGoDwPD5QVhHpW0vs+XTIz9MsCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFF2dqsvpUGa6aLXEYwlA9yrr76CIMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQCwOOPjF8gNNcyn+hrOLwhwt/+04WkedmdWJJPchrsyp2dLZWfkDW4yFhvJc1M5 +mz4diRbF+PAafJ/TbBorUG9KAD5pdHKUR4+GLYWuVa75vZfQ2QiVZ+kxDg4v6jga +G9HCseg97mufj0CkAkudViDDf70A2mGYaDN1ZaidIb8gvn3zfoJRiKItThDpWURj +iAo080wN0ct5CgtSTdKzhkyZ6JPkSYuSpBGw+Uof3S3P52XDhJ+Kmo287DfVslwo +UGtnOI3lIXh1GFwNXRqHHkdbdA2WcvqFnmyO6aURzG/gUrY2so5HHUv4VYirmrlH +QKvRGXjSgbVXJaNOb59B9KNW -----END CERTIFICATE----- - -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 903804111 (0x35def4cf) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority - Validity - Not Before: Aug 22 16:41:51 1998 GMT - Not After : Aug 22 16:41:51 2018 GMT - Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (1024 bit) - Modulus: - 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: - 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: - d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: - 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: - 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: - 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: - 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: - af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: - 3a:88:e7:bf:14:fd:e0:c7:b9 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 CRL Distribution Points: - - Full Name: - DirName: C = US, O = Equifax, OU = Equifax Secure Certificate Authority, CN = CRL1 - - X509v3 Private Key Usage Period: - Not After: Aug 22 16:41:51 2018 GMT - X509v3 Key Usage: - Certificate Sign, CRL Sign - X509v3 Authority Key Identifier: - keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 - - X509v3 Subject Key Identifier: - 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 - X509v3 Basic Constraints: - CA:TRUE - 1.2.840.113533.7.65.0: - 0...V3.0c.... - Signature Algorithm: sha1WithRSAEncryption - 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: - 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: - 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: - 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: - a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: - 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: - 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: - 77:38 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- -
diff --git a/net/data/ssl/certificates/pre_br_validity_bad_121.pem b/net/data/ssl/certificates/pre_br_validity_bad_121.pem index 2bf5369b..f420236 100644 --- a/net/data/ssl/certificates/pre_br_validity_bad_121.pem +++ b/net/data/ssl/certificates/pre_br_validity_bad_121.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 20 (0x14) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b5 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jan 1 00:00:00 2008 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:9f:eb:e4:9c:a0:87:13:91:5c:dd:4b:ca:0d:15: - 66:ba:86:05:e4:f7:32:b3:ea:9b:57:9f:77:a6:52: - 39:7d:62:4f:c8:f4:24:c9:47:8d:1f:0a:a2:ce:13: - 90:a1:27:ab:4d:7d:ca:66:64:44:7b:5c:82:00:b0: - 3a:2f:da:ab:d3:f8:c1:22:09:49:3d:26:96:59:25: - ec:58:9f:2e:82:82:63:6e:dc:4a:87:ad:fd:c1:ef: - 44:34:a5:9d:d2:48:25:ca:f5:20:3f:e3:2b:6d:9a: - b7:d1:c5:e9:53:7f:f0:ab:b0:29:5a:1e:a1:8b:fb: - 6a:b8:99:5b:61:7f:ca:4d:5c:b9:50:5d:f2:52:de: - ec:06:62:e3:ff:95:2c:51:04:2c:95:6c:56:cf:a1: - 2d:78:be:7c:a2:a7:53:1f:52:96:e1:a2:cc:72:c2: - e6:a4:62:da:e8:94:2a:3b:e0:25:f0:6c:d2:a5:16: - ba:1f:75:52:8a:5e:7b:4d:0a:79:c9:14:bf:dc:ac: - 8c:d3:03:01:fe:05:8b:00:e8:17:f7:11:9b:ca:f8: - d4:80:58:7f:77:4b:f4:17:87:5f:f4:98:a4:1b:3c: - 8c:c8:a4:1d:26:02:4a:24:b5:e8:7c:e0:38:bc:e8: - 90:d5:fa:91:6a:3d:97:7c:ed:f5:22:f3:29:3d:3d: - c5:33 + 00:f6:17:41:ab:0e:a4:ff:81:84:4e:7d:ff:d7:2a: + 5e:ac:67:30:a5:29:04:c6:0b:00:76:6d:ab:27:63: + 7d:31:39:a5:22:06:2e:df:c0:78:75:9c:29:e3:84: + 53:8b:3d:40:9b:82:cd:24:75:44:68:60:24:ed:be: + 9d:22:75:b4:01:54:97:c5:00:3d:95:9e:36:89:75: + ba:cf:70:8d:a0:cc:77:b7:4b:b5:04:55:b4:3f:75: + 2f:21:5a:d1:1d:35:77:08:c3:d0:14:89:5e:e5:41: + ce:7e:3d:9c:f6:4f:83:2c:39:d2:d9:3f:33:4c:36: + eb:4f:d8:37:ba:be:fb:08:12:f4:32:4d:2a:cc:43: + 1d:b4:8e:2a:d1:d0:6c:59:2a:de:ad:3e:34:e0:a6: + e3:94:72:e5:93:4e:08:c1:19:20:68:25:9d:da:75: + 03:99:b4:94:9f:ea:76:2d:93:b7:6d:45:36:3a:05: + 71:b2:68:1d:ab:58:c8:78:ef:b3:16:bc:d3:8d:68: + 0e:18:5e:0b:8f:49:e4:b9:a0:18:c2:9b:e7:85:95: + a8:65:2c:9c:48:29:99:31:36:07:7d:63:3d:3f:b5: + 2f:4e:9f:95:07:e5:c7:dd:86:56:8e:11:aa:cc:1b: + f6:aa:e1:d6:19:a2:53:69:06:c0:b2:45:a1:ad:6e: + 7e:35 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 09:3A:F7:03:5A:79:7A:04:12:F8:DA:B6:8D:5F:90:7F:FD:9D:EE:67 + BC:BA:0C:C8:CE:15:C4:E4:E7:AC:E7:E8:E4:B9:39:22:FF:D3:64:F6 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 38:14:a7:3c:63:ee:dd:f9:f5:9e:55:09:97:55:fc:3e:2d:09: - f8:45:20:c0:05:9c:cd:96:87:f6:2d:d6:e0:9b:34:b8:16:03: - 40:39:1c:a5:02:c9:01:9d:2d:bb:52:f2:65:45:94:49:43:a0: - 1a:2f:26:c3:5d:cf:41:66:be:02:0b:37:0b:4e:66:3b:66:13: - 7f:10:8e:8b:6a:84:4e:50:ec:f0:0c:26:4d:dc:4d:2e:93:4b: - 19:98:18:12:2d:80:dd:55:12:d4:41:6c:53:50:2f:d7:4e:da: - fd:0c:5a:fc:f6:fc:02:30:3f:72:8c:2a:34:1e:9c:0c:96:3f: - 1f:54:79:97:d4:97:7b:81:bc:5b:22:42:0c:dd:6b:3a:04:30: - 7b:71:35:df:9b:32:95:86:07:2d:15:ef:a7:1e:8b:ec:fc:27: - 49:29:fd:a1:7f:01:88:13:6f:5d:8f:6b:be:21:57:2d:5a:c3: - cd:30:46:f6:5e:2b:ca:ce:48:f8:5b:ba:f6:40:97:31:c6:c3: - ea:31:55:64:9a:8b:93:6c:cb:e5:0e:f7:3d:f2:13:8e:bb:1e: - 39:09:3e:62:0a:d7:2c:c9:5c:35:db:8b:d7:e6:c8:27:f3:09: - e0:3f:e4:98:8d:e5:db:2c:d6:8b:9f:85:24:4f:15:98:af:86: - 85:b6:13:1f + 91:a2:96:56:82:4d:e1:c6:c8:60:ed:c3:c9:30:c9:0b:64:ce: + ce:4a:5d:28:54:ed:52:a6:b2:c0:6a:8f:a3:ed:03:e2:26:9c: + 57:84:e2:27:27:54:7d:e3:64:b9:20:6a:75:4a:93:2b:00:ea: + 89:ad:12:eb:06:5a:ab:67:e2:c2:08:0f:a2:0c:1d:82:ab:37: + 2d:d4:d9:d3:df:69:1b:34:7d:1a:61:fe:26:eb:b8:d9:53:b0: + a7:d6:f6:32:83:ed:03:c5:9c:22:5c:1b:2b:8f:e1:af:15:ba: + 57:0f:bc:a0:f4:78:0a:10:39:93:b1:0c:79:47:8f:08:18:78: + 45:9b:b6:76:9b:c5:27:2c:de:80:4e:c6:5b:d0:c5:2c:f5:35: + 3c:a1:1b:5c:f7:d4:38:5b:ea:dd:3e:05:84:9f:71:c6:56:33: + 34:ad:df:2b:dd:e1:b7:a4:a5:9d:59:c9:06:33:2d:95:86:2e: + e4:8c:08:36:19:32:05:50:8d:40:27:e9:d0:b2:fe:e1:e5:45: + 70:e9:1a:b3:c7:81:ae:e0:0c:72:30:b6:2b:72:0e:73:32:96: + 75:63:e1:18:6c:0d:23:4b:ff:d6:d3:92:91:70:0d:0c:52:26: + 7d:3d:35:5f:26:3c:1d:7e:36:4e:b9:57:2e:0c:91:2f:8c:6c: + 11:dc:80:95 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBFDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTA4MDEwMTAw -MDAwMFoXDTE4MDUwMTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAJ/r5JyghxORXN1Lyg0VZrqGBeT3MrPqm1efd6ZSOX1iT8j0JMlHjR8K -os4TkKEnq019ymZkRHtcggCwOi/aq9P4wSIJST0mllkl7FifLoKCY27cSoet/cHv -RDSlndJIJcr1ID/jK22at9HF6VN/8KuwKVoeoYv7ariZW2F/yk1cuVBd8lLe7AZi -4/+VLFEELJVsVs+hLXi+fKKnUx9SluGizHLC5qRi2uiUKjvgJfBs0qUWuh91Uope -e00KeckUv9ysjNMDAf4FiwDoF/cRm8r41IBYf3dL9BeHX/SYpBs8jMikHSYCSiS1 -6HzgOLzokNX6kWo9l3zt9SLzKT09xTMCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFAk69wNaeXoEEvjato1fkH/9ne5nMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQA4FKc8Y+7d+fWeVQmX -Vfw+LQn4RSDABZzNlof2LdbgmzS4FgNAORylAskBnS27UvJlRZRJQ6AaLybDXc9B -Zr4CCzcLTmY7ZhN/EI6LaoROUOzwDCZN3E0uk0sZmBgSLYDdVRLUQWxTUC/XTtr9 -DFr89vwCMD9yjCo0HpwMlj8fVHmX1Jd7gbxbIkIM3Ws6BDB7cTXfmzKVhgctFe+n -Hovs/CdJKf2hfwGIE29dj2u+IVctWsPNMEb2XivKzkj4W7r2QJcxxsPqMVVkmouT -bMvlDvc98hOOux45CT5iCtcsyVw124vX5sgn8wngP+SYjeXbLNaLn4UkTxWYr4aF -thMf +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqtTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTA4MDEwMTAwMDAwMFoXDTE4MDUwMTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAPYXQasOpP+BhE59/9cqXqxnMKUpBMYLAHZt +qydjfTE5pSIGLt/AeHWcKeOEU4s9QJuCzSR1RGhgJO2+nSJ1tAFUl8UAPZWeNol1 +us9wjaDMd7dLtQRVtD91LyFa0R01dwjD0BSJXuVBzn49nPZPgyw50tk/M0w260/Y +N7q++wgS9DJNKsxDHbSOKtHQbFkq3q0+NOCm45Ry5ZNOCMEZIGglndp1A5m0lJ/q +di2Tt21FNjoFcbJoHatYyHjvsxa8041oDhheC49J5LmgGMKb54WVqGUsnEgpmTE2 +B31jPT+1L06flQflx92GVo4Rqswb9qrh1hmiU2kGwLJFoa1ufjUCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLy6DMjOFcTk56zn6OS5OSL/02T2MB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQCRopZWgk3hxshg7cPJMMkLZM7OSl0oVO1SprLAao+j7QPiJpxXhOInJ1R942S5 +IGp1SpMrAOqJrRLrBlqrZ+LCCA+iDB2Cqzct1NnT32kbNH0aYf4m67jZU7Cn1vYy +g+0DxZwiXBsrj+GvFbpXD7yg9HgKEDmTsQx5R48IGHhFm7Z2m8UnLN6ATsZb0MUs +9TU8oRtc99Q4W+rdPgWEn3HGVjM0rd8r3eG3pKWdWckGMy2Vhi7kjAg2GTIFUI1A +J+nQsv7h5UVw6Rqzx4Gu4AxyMLYrcg5zMpZ1Y+EYbA0jS//W05KRcA0MUiZ9PTVf +JjwdfjZOuVcuDJEvjGwR3ICV -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/pre_br_validity_bad_2020.pem b/net/data/ssl/certificates/pre_br_validity_bad_2020.pem index 10a08549..cc65e31 100644 --- a/net/data/ssl/certificates/pre_br_validity_bad_2020.pem +++ b/net/data/ssl/certificates/pre_br_validity_bad_2020.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 21 (0x15) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b6 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: May 1 00:00:00 2012 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:e8:84:db:5e:7d:ea:ce:7c:36:6f:2c:8b:48:0a: - c4:c3:48:44:4a:75:7d:85:c0:86:c3:77:ed:55:4b: - 0d:0c:62:9f:90:5b:56:8f:db:80:a5:64:4c:b9:fa: - 64:9f:93:1e:bd:b5:bf:94:04:52:fa:9a:db:87:d1: - 9a:19:da:d4:5e:47:36:31:24:3e:62:60:34:34:d9: - 17:6e:89:14:04:f2:98:32:19:70:f4:5a:2a:a0:26: - 90:26:f6:5a:e4:a7:ad:23:d8:18:a3:bd:a0:a3:d5: - e0:de:fb:81:28:39:c4:b9:65:f7:5c:6e:ae:82:ef: - cd:14:75:53:45:31:de:1f:dd:61:de:ff:2d:11:7e: - 23:b6:bc:c1:d8:71:71:0c:14:af:d2:03:b2:38:35: - 83:39:48:d3:c4:a2:0c:76:c2:93:a7:de:78:56:db: - 27:67:92:a1:29:d7:aa:ed:25:27:9e:3e:17:aa:10: - 2a:10:d4:e2:db:43:cc:64:99:78:63:85:78:f6:e1: - 1e:c7:9a:a2:e2:98:8f:e9:10:93:3e:06:db:14:70: - fb:21:7f:6d:16:a6:13:e2:54:59:eb:66:75:26:e6: - 60:12:c1:51:6c:63:7a:1a:cf:18:52:dc:db:a0:7d: - 2d:92:ad:f1:4f:e5:2c:1c:14:81:1a:db:63:6a:2f: - 75:b1 + 00:ce:2b:2e:c2:3a:b0:fc:49:d7:4a:2c:e5:e1:50: + f1:71:bf:85:60:74:59:7d:f3:b8:3e:f1:a7:87:97: + 73:d3:a1:5a:bc:fc:f4:6d:33:2f:97:5c:2b:e6:9a: + 6a:5e:ff:33:c4:a7:ee:7c:74:55:05:77:63:a0:79: + d9:62:8c:fc:87:dc:5b:3d:44:6b:e7:42:03:4e:ca: + b6:0c:b6:8a:68:88:8f:57:09:17:0f:39:c1:35:5c: + e7:7c:db:0b:c8:c9:e4:0a:67:05:cd:99:ae:7a:ab: + ff:1f:55:ac:43:43:70:aa:d9:2a:6d:fe:53:03:d3: + c2:eb:f1:30:7a:25:d6:98:59:9c:7b:4a:a1:30:d8: + fe:79:42:dc:4d:c5:16:b6:3f:be:ea:5b:92:c2:f4: + ab:f6:d9:ee:f1:eb:19:ca:7b:01:7f:80:2f:b2:cc: + a4:73:9a:4a:8f:2f:35:07:3f:12:15:d3:14:77:8d: + 0e:b7:7d:ba:9b:b5:60:df:0a:a9:75:10:bf:af:66: + 3c:9b:4b:dc:d9:32:ac:94:2d:dc:e4:fb:cc:21:0d: + fb:cb:48:e7:f0:60:36:39:2d:12:cc:f4:f6:dd:28: + ef:36:a5:5d:8b:18:4b:d4:d2:d0:cd:95:1f:3b:b6: + 6d:d7:a0:6a:72:75:dc:7b:21:df:e7:71:ce:df:b3: + d8:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - A6:5C:B0:9B:17:D4:01:25:77:C5:1A:B6:E6:A2:D8:53:1D:18:93:6C + 34:90:01:F4:6C:53:72:1C:B4:D6:9B:53:1C:55:3A:E2:9F:BC:24:1B X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 47:a5:c1:c8:64:68:17:77:f1:42:e1:2a:ae:0d:0a:6d:17:04: - a8:72:aa:7b:0a:46:ee:62:f1:61:28:f5:84:c5:f7:d0:fd:81: - 41:dc:77:b9:80:2d:24:35:c3:2f:86:ba:74:3b:48:3f:be:59: - 60:92:11:e8:57:0d:fa:7b:ef:a8:21:20:0d:77:27:c7:5d:51: - b3:03:06:a0:9b:5a:12:67:49:65:64:9c:b2:68:fe:1a:50:2e: - a9:f6:dd:d2:a5:07:a8:b1:24:65:71:1b:d6:1b:23:c6:7c:28: - 24:5e:df:1c:56:1d:0b:c5:dd:bb:07:5a:d2:86:55:df:76:95: - 19:b7:72:53:cb:1d:97:42:3b:7e:c5:98:24:46:73:4e:6d:81: - c8:b5:3e:8c:12:ec:6e:a5:51:a5:fa:0d:10:b8:39:4a:dd:26: - 51:b1:7d:4d:c6:c7:a7:6d:8d:aa:d8:19:da:c0:a0:d7:6d:5f: - 71:97:8e:16:1f:2a:6f:0b:3d:73:2d:60:1d:9f:07:4f:17:65: - 26:d9:c5:d6:9d:04:d9:b0:b9:b0:02:48:63:4e:fd:43:ac:7b: - 5c:87:80:e8:14:9d:59:fc:f8:a6:af:87:30:52:6d:c9:ab:23: - b7:88:9a:19:0f:38:a1:fe:78:90:34:1c:a4:19:48:c7:55:01: - 65:28:69:1b + 1e:93:77:b2:0d:68:43:76:30:8f:ca:33:5e:b8:d2:9d:89:69: + 2d:4e:8b:be:a9:14:b5:96:5c:95:e9:91:43:4f:11:19:f1:f0: + 48:c3:31:e8:91:b6:11:97:87:c7:fd:b6:8b:95:77:bd:6d:ed: + f0:03:dd:25:e8:33:27:c2:60:cd:0f:83:13:f8:58:7e:e7:d8: + c4:b5:d7:72:e0:7d:3a:ce:66:52:eb:56:f3:3a:2e:9f:f8:8d: + aa:b0:69:16:70:52:16:76:7c:35:ea:a6:2d:56:7e:29:39:1b: + f7:01:f5:41:a3:81:c1:d7:ce:c8:5a:04:30:93:30:d0:c7:04: + 7b:5a:63:86:ee:64:86:eb:9e:13:3a:f7:13:ad:46:48:c1:b3: + c5:5d:29:04:ed:cf:dd:68:fa:77:55:12:38:44:0c:55:cf:99: + b5:c1:31:48:4f:db:e6:ce:99:fb:4b:28:a4:76:24:2b:57:4b: + 79:91:28:77:18:d6:51:05:a9:54:35:8f:c3:dd:83:e6:91:37: + 35:3a:3d:d1:af:f4:61:c7:2a:9a:27:39:c9:05:2f:dc:d9:8e: + cf:08:9e:eb:f2:db:6d:ae:ea:4d:f0:25:5b:7e:a7:e4:13:3d: + 79:1c:b6:a3:83:24:b0:d9:e7:ff:cc:58:3c:f7:2c:00:87:0d: + ff:a5:bd:7d -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBFTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTEyMDUwMTAw -MDAwMFoXDTE5MDcwMzAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAOiE21596s58Nm8si0gKxMNIREp1fYXAhsN37VVLDQxin5BbVo/bgKVk -TLn6ZJ+THr21v5QEUvqa24fRmhna1F5HNjEkPmJgNDTZF26JFATymDIZcPRaKqAm -kCb2WuSnrSPYGKO9oKPV4N77gSg5xLll91xuroLvzRR1U0Ux3h/dYd7/LRF+I7a8 -wdhxcQwUr9IDsjg1gzlI08SiDHbCk6feeFbbJ2eSoSnXqu0lJ54+F6oQKhDU4ttD -zGSZeGOFePbhHseaouKYj+kQkz4G2xRw+yF/bRamE+JUWetmdSbmYBLBUWxjehrP -GFLc26B9LZKt8U/lLBwUgRrbY2ovdbECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFKZcsJsX1AEld8Uatuai2FMdGJNsMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBHpcHIZGgXd/FC4Squ -DQptFwSocqp7CkbuYvFhKPWExffQ/YFB3He5gC0kNcMvhrp0O0g/vllgkhHoVw36 -e++oISANdyfHXVGzAwagm1oSZ0llZJyyaP4aUC6p9t3SpQeosSRlcRvWGyPGfCgk -Xt8cVh0Lxd27B1rShlXfdpUZt3JTyx2XQjt+xZgkRnNObYHItT6MEuxupVGl+g0Q -uDlK3SZRsX1NxsenbY2q2BnawKDXbV9xl44WHypvCz1zLWAdnwdPF2Um2cXWnQTZ -sLmwAkhjTv1DrHtch4DoFJ1Z/Pimr4cwUm3JqyO3iJoZDzih/niQNBykGUjHVQFl -KGkb +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqtjANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTEyMDUwMTAwMDAwMFoXDTE5MDcwMzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAM4rLsI6sPxJ10os5eFQ8XG/hWB0WX3zuD7x +p4eXc9OhWrz89G0zL5dcK+aaal7/M8Sn7nx0VQV3Y6B52WKM/IfcWz1Ea+dCA07K +tgy2imiIj1cJFw85wTVc53zbC8jJ5ApnBc2Zrnqr/x9VrENDcKrZKm3+UwPTwuvx +MHol1phZnHtKoTDY/nlC3E3FFrY/vupbksL0q/bZ7vHrGcp7AX+AL7LMpHOaSo8v +NQc/EhXTFHeNDrd9upu1YN8KqXUQv69mPJtL3NkyrJQt3OT7zCEN+8tI5/BgNjkt +Esz09t0o7zalXYsYS9TS0M2VHzu2bdeganJ13Hsh3+dxzt+z2K0CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDSQAfRsU3IctNabUxxVOuKfvCQbMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQAek3eyDWhDdjCPyjNeuNKdiWktTou+qRS1llyV6ZFDTxEZ8fBIwzHokbYRl4fH +/baLlXe9be3wA90l6DMnwmDND4MT+Fh+59jEtddy4H06zmZS61bzOi6f+I2qsGkW +cFIWdnw16qYtVn4pORv3AfVBo4HB187IWgQwkzDQxwR7WmOG7mSG654TOvcTrUZI +wbPFXSkE7c/daPp3VRI4RAxVz5m1wTFIT9vmzpn7SyikdiQrV0t5kSh3GNZRBalU +NY/D3YPmkTc1Oj3Rr/RhxyqaJznJBS/c2Y7PCJ7r8tttrupN8CVbfqfkEz15HLaj +gySw2ef/zFg89ywAhw3/pb19 -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/pre_br_validity_ok.pem b/net/data/ssl/certificates/pre_br_validity_ok.pem index cac2a9f0..7583759b 100644 --- a/net/data/ssl/certificates/pre_br_validity_ok.pem +++ b/net/data/ssl/certificates/pre_br_validity_ok.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 19 (0x13) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b4 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Jan 1 00:00:00 2008 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:c9:a8:08:1a:b3:09:5d:20:f4:ee:7b:73:0d:56: - 82:3d:da:d7:f3:e4:94:34:04:1f:d1:bf:8f:7b:ac: - d8:ec:4b:b3:d2:da:ba:47:3d:19:12:cb:1d:12:ff: - dd:64:8b:d3:97:9f:56:80:b5:35:00:fa:fb:56:20: - 2c:96:d6:e5:73:87:30:72:98:11:ea:87:fa:35:cd: - 70:a9:f5:a2:16:b0:6d:64:d6:68:3e:4d:a5:fc:b8: - ec:d7:6e:9a:33:84:88:d7:50:ab:7f:2e:37:52:c4: - 21:80:6b:8e:4c:dc:95:c5:9e:a5:dd:46:c6:f0:6d: - bd:d6:03:d0:8b:5a:3c:4b:07:61:90:bb:4e:0b:58: - e5:be:1d:96:e7:66:03:12:96:6c:e7:e4:73:49:10: - 20:db:74:3d:ca:bd:c2:4d:47:46:4e:2f:1e:cc:09: - b7:0a:61:14:a0:b7:7a:0c:f1:5e:15:e8:87:4a:b8: - 3f:42:a3:73:8e:00:f5:81:e2:b9:1e:6a:b3:11:3e: - f9:84:0e:e8:59:17:fd:dd:8e:af:e2:88:09:88:43: - f6:89:15:af:91:36:b4:f8:b9:9f:a5:75:a1:39:21: - ad:03:fd:c0:60:c5:e7:aa:e3:4e:c3:bf:01:f8:e7: - 6b:dd:f7:7a:da:26:12:3c:d7:64:28:2e:da:36:d6: - fa:0b + 00:c2:f2:38:19:75:99:d8:05:a9:04:32:c1:24:b8: + f1:fa:83:46:aa:71:7a:70:46:51:00:3b:9d:f7:94: + 08:81:8a:44:6b:30:b1:b8:7b:f8:43:0d:3b:b5:35: + 5c:fa:5d:55:01:ab:af:73:60:32:02:8a:90:59:5b: + 1c:a0:ee:c5:0f:7b:4a:67:66:a0:3a:b6:5f:53:e0: + 14:17:45:af:2f:c8:ae:63:af:d4:64:ed:c3:f7:a0: + ef:df:5e:87:11:3b:1a:ee:0d:54:a9:dd:2a:35:26: + c0:3d:21:3d:dc:81:56:80:10:dc:11:1e:b9:3b:58: + f4:e9:0f:fc:d8:0a:b5:dc:20:d2:9f:c4:a6:95:b4: + 22:02:75:7b:40:6f:ed:9d:a4:63:87:38:9c:62:b6: + ef:dd:af:1e:11:6a:61:18:a1:87:f5:dc:b1:02:a2: + 9a:fb:0d:d9:5a:f9:83:d3:a1:6d:d6:17:cc:36:12: + 74:e2:00:14:bd:3d:4e:e7:cc:b1:73:cb:92:90:5b: + 0d:66:c9:ea:65:64:9d:68:40:1f:4d:19:8b:5e:e1: + d4:17:3f:27:81:55:75:b8:47:46:4b:87:6c:b4:5c: + 0a:ea:06:ae:6c:30:e8:41:46:49:bb:fe:09:ab:a6: + 35:e1:0a:40:e6:e5:ee:27:ee:92:4b:1f:a9:1c:4a: + 0d:2d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - FB:DF:D4:89:A2:A9:E0:BE:B0:E3:FC:AD:C9:F9:80:85:3C:30:B5:81 + D3:E2:DE:A9:CC:A9:BA:B8:09:17:9C:CB:DF:72:6A:D6:21:E8:31:22 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 4f:9f:49:7d:21:55:a4:d8:63:0c:79:2f:4a:62:cf:31:b9:94: - 18:e8:27:e3:de:73:53:19:0b:c0:cd:d0:35:89:40:a9:29:4c: - 64:2f:ae:77:4a:2d:b7:7a:1c:d7:8b:40:8b:5a:44:98:db:83: - 22:28:e7:4b:cc:4b:6d:49:a3:e4:23:ee:ae:73:c9:37:06:7b: - 12:c9:83:ef:50:64:bd:71:5b:01:9c:ff:5e:e9:86:91:51:a3: - f4:6e:15:07:4f:23:46:82:d7:11:95:79:e7:9c:9c:bb:10:90: - f5:da:9a:4e:6f:2a:b5:f5:68:ed:6c:a5:f1:69:6d:f6:aa:6d: - 02:df:10:c2:b1:7b:35:1d:20:9f:61:85:cb:81:9f:e7:aa:36: - 12:7a:f0:a3:31:29:a7:b4:a9:62:66:d6:2d:4d:3f:d8:9f:5c: - 1b:e2:06:31:37:92:51:a7:3f:5d:91:1b:45:c5:4b:be:b2:d8: - b9:59:f6:4d:45:52:af:d4:d0:db:f2:85:01:9b:fa:cf:1b:54: - 85:7c:79:3a:3f:f5:a8:b1:e9:d7:41:21:0b:d0:48:03:d0:ba: - ee:4d:cf:1e:df:f5:57:25:d9:1f:dc:34:4f:7b:f7:68:b3:65: - aa:e3:0f:50:e8:1f:0e:50:1a:c8:48:22:6b:bc:a1:ae:cc:b3: - 72:94:c2:24 + 4f:f3:66:42:14:a0:d3:74:04:f4:b2:09:ce:03:25:2d:e7:f9: + 21:40:0c:93:0c:ed:c3:f4:26:d7:0e:42:ee:d9:0e:ea:e4:fd: + d5:d4:c0:64:e1:ae:3e:8d:0d:ae:43:5e:29:35:cf:38:66:b2: + 1f:e7:33:92:4f:60:b5:7c:b6:39:26:66:da:27:ef:02:c3:d4: + a2:bd:75:51:c3:f3:2b:d7:5e:53:ff:71:66:31:ce:20:d5:49: + 78:fa:6d:47:75:f2:61:01:60:d7:2a:61:15:37:84:00:80:f3: + 65:ca:8b:2e:de:ad:54:04:94:8f:7d:c8:64:9f:b3:94:34:93: + c8:8c:23:f8:a1:10:1e:ba:e0:00:f1:8a:e3:49:98:cd:f4:2f: + 5e:e0:e0:e7:31:25:ca:bf:ae:68:e9:53:91:76:97:d0:d1:de: + 53:5f:73:df:c9:d0:94:20:e9:6e:d8:ef:cb:53:85:1d:93:59: + 91:57:6e:62:c4:cc:6a:90:27:c9:59:8b:c7:b3:fa:8d:90:84: + a0:a6:ef:e7:2e:94:95:83:3e:9d:f8:c1:a6:83:57:d1:ee:d9: + 29:aa:30:9f:f3:a2:71:82:96:1b:d7:c4:f4:e9:74:1b:27:48: + f6:87:96:77:f5:d8:95:21:e9:17:15:23:a3:21:76:f7:d9:f6: + 28:2e:91:24 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBEzANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTA4MDEwMTAw -MDAwMFoXDTE1MDEwMTAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAMmoCBqzCV0g9O57cw1Wgj3a1/PklDQEH9G/j3us2OxLs9Laukc9GRLL -HRL/3WSL05efVoC1NQD6+1YgLJbW5XOHMHKYEeqH+jXNcKn1ohawbWTWaD5Npfy4 -7NdumjOEiNdQq38uN1LEIYBrjkzclcWepd1GxvBtvdYD0ItaPEsHYZC7TgtY5b4d -ludmAxKWbOfkc0kQINt0Pcq9wk1HRk4vHswJtwphFKC3egzxXhXoh0q4P0Kjc44A -9YHiuR5qsxE++YQO6FkX/d2Or+KICYhD9okVr5E2tPi5n6V1oTkhrQP9wGDF56rj -TsO/Afjna933etomEjzXZCgu2jbW+gsCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFPvf1ImiqeC+sOP8rcn5gIU8MLWBMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBPn0l9IVWk2GMMeS9K -Ys8xuZQY6Cfj3nNTGQvAzdA1iUCpKUxkL653Si23ehzXi0CLWkSY24MiKOdLzEtt -SaPkI+6uc8k3BnsSyYPvUGS9cVsBnP9e6YaRUaP0bhUHTyNGgtcRlXnnnJy7EJD1 -2ppObyq19WjtbKXxaW32qm0C3xDCsXs1HSCfYYXLgZ/nqjYSevCjMSmntKliZtYt -TT/Yn1wb4gYxN5JRpz9dkRtFxUu+sti5WfZNRVKv1NDb8oUBm/rPG1SFfHk6P/Wo -senXQSEL0EgD0LruTc8e3/VXJdkf3DRPe/dos2Wq4w9Q6B8OUBrISCJrvKGuzLNy -lMIk +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqtDANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTA4MDEwMTAwMDAwMFoXDTE1MDEwMTAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMLyOBl1mdgFqQQywSS48fqDRqpxenBGUQA7 +nfeUCIGKRGswsbh7+EMNO7U1XPpdVQGrr3NgMgKKkFlbHKDuxQ97SmdmoDq2X1Pg +FBdFry/IrmOv1GTtw/eg799ehxE7Gu4NVKndKjUmwD0hPdyBVoAQ3BEeuTtY9OkP +/NgKtdwg0p/EppW0IgJ1e0Bv7Z2kY4c4nGK2792vHhFqYRihh/XcsQKimvsN2Vr5 +g9OhbdYXzDYSdOIAFL09TufMsXPLkpBbDWbJ6mVknWhAH00Zi17h1Bc/J4FVdbhH +RkuHbLRcCuoGrmww6EFGSbv+CaumNeEKQObl7ifukksfqRxKDS0CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNPi3qnMqbq4CRecy99yatYh6DEiMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBP82ZCFKDTdAT0sgnOAyUt5/khQAyTDO3D9CbXDkLu2Q7q5P3V1MBk4a4+jQ2u +Q14pNc84ZrIf5zOST2C1fLY5JmbaJ+8Cw9SivXVRw/Mr115T/3FmMc4g1Ul4+m1H +dfJhAWDXKmEVN4QAgPNlyosu3q1UBJSPfchkn7OUNJPIjCP4oRAeuuAA8YrjSZjN +9C9e4ODnMSXKv65o6VORdpfQ0d5TX3PfydCUIOlu2O/LU4Udk1mRV25ixMxqkCfJ +WYvHs/qNkISgpu/nLpSVgz6d+MGmg1fR7tkpqjCf86JxgpYb18T06XQbJ0j2h5Z3 +9diVIekXFSOjIXb32fYoLpEk -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/pre_june_2016.pem b/net/data/ssl/certificates/pre_june_2016.pem index 766f3e9..03eba7a9 100644 --- a/net/data/ssl/certificates/pre_june_2016.pem +++ b/net/data/ssl/certificates/pre_june_2016.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 22 (0x16) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:ba + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: May 1 00:00:00 2016 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b7:cf:66:d4:a6:c7:91:a5:b9:1e:8a:91:cf:51: - 54:07:f4:c2:a9:8e:ca:88:1f:51:cf:70:e2:93:07: - ff:17:9b:cf:ae:88:85:3d:ab:f6:66:be:ac:d5:ea: - 61:d7:54:86:36:12:dd:98:8c:bc:3a:86:54:f0:08: - d3:84:18:ab:ed:11:1a:41:1c:9f:cd:ec:97:8f:22: - 5a:f1:cb:d3:c0:bb:c2:ac:45:d4:bd:aa:ab:b3:ac: - ea:5b:da:20:24:e7:9e:03:97:3e:a4:c6:c1:ba:b4: - c4:69:6f:9d:7e:81:3d:58:96:80:0c:91:de:71:9f: - d8:24:73:8e:8b:f0:64:be:4e:9b:c4:3a:c1:9c:ef: - 3c:05:06:c7:a7:ba:34:1b:ff:d7:87:96:00:30:db: - 6d:74:f2:ae:f4:cb:a6:9e:b9:42:8a:58:6d:3e:e7: - 54:11:2e:b8:12:5a:c9:c1:21:d4:a1:c7:ce:5e:3e: - c5:75:03:38:7a:8d:20:13:ef:d8:f8:a4:9c:1e:04: - 7b:28:b0:d1:24:e1:14:d3:ff:18:2a:de:a0:c8:00: - 47:80:9a:86:c9:3d:0a:48:d8:0c:63:df:7b:1b:f3: - b6:d5:b8:14:1d:7a:40:eb:06:7c:23:b1:77:ab:1a: - 60:a2:36:7f:0a:e3:9b:75:01:11:7d:af:29:5b:7b: - f8:21 + 00:b3:61:e1:cd:72:d2:67:ac:82:e3:0a:2f:0e:71: + 84:8b:48:a0:3c:eb:3f:1f:5d:de:95:63:c0:8b:53: + 6a:b3:29:53:30:a8:d9:48:97:88:5f:6c:de:d3:1c: + 69:e5:99:54:e0:32:85:7e:be:37:07:9d:ee:e2:fb: + 01:3c:44:f4:2c:b1:e2:d7:73:61:e3:1f:69:25:00: + 0b:90:75:74:7d:b5:8c:be:02:ee:ee:f5:e9:4f:f5: + d3:1f:cf:17:aa:a9:d0:ef:85:f2:45:c4:6e:f5:d4: + 71:3f:f2:fc:40:e6:a8:b0:43:a3:d6:7f:d6:4a:a9: + c0:66:e1:1c:1c:ad:11:bf:bc:c8:c0:d7:a5:ee:e1: + 02:4c:0f:cc:da:3c:91:12:a5:13:c6:22:80:7e:73: + 9b:21:2e:71:81:cd:07:20:f8:60:31:9d:3f:5a:be: + 02:17:6b:7b:5d:b4:c1:af:3d:f3:5c:d8:e0:8d:a6: + db:6e:16:5e:87:06:ce:c3:c2:1e:1e:2d:3c:21:d6: + 65:f3:f4:94:6a:bc:b1:6b:3a:ea:72:13:40:03:b2: + 5c:dd:31:4a:78:41:c0:29:ee:3a:b6:32:64:42:07: + 06:ad:79:09:93:36:5c:d6:ec:2b:87:d2:09:f9:15: + 05:e1:45:48:2a:92:9f:8f:1f:b0:c2:d9:9d:28:11: + ec:05 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - D5:17:E7:68:DB:E1:51:CE:A3:7C:B7:76:EE:CD:89:C1:33:1E:98:86 + 4E:EF:47:10:DD:E7:5D:A3:A5:CB:F7:26:3E:7F:2C:BD:63:3E:00:ED X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,114 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 94:67:c8:ba:c7:18:21:a5:11:8c:39:e6:d2:17:47:a5:ac:04: - ce:88:a4:86:9d:a7:a9:3f:e2:fc:54:13:28:b3:4d:a4:04:96: - 21:cc:d1:3f:d2:94:fe:d3:bb:99:49:41:4d:2b:fc:61:be:a1: - 3c:01:88:03:1b:62:c6:5f:f8:ae:20:70:ba:82:65:50:10:ef: - f3:1e:7b:cd:76:c3:a2:77:b9:6f:28:13:3e:6e:76:57:2b:8a: - eb:4e:21:86:9d:f2:98:c9:89:f0:bd:c4:2c:62:e9:bd:3b:1f: - 50:ee:0f:94:65:9f:16:04:1f:27:18:a4:fc:7b:7c:b5:16:72: - 56:a2:dc:6c:6a:04:e8:45:03:82:d6:f5:54:9e:b2:59:f8:a2: - 8a:8b:77:ef:a3:ab:b2:b9:2b:a3:a6:40:45:b0:f3:48:3f:4b: - 18:d2:8d:49:45:ab:a8:34:46:c9:70:9d:02:75:3b:7e:27:9f: - 11:69:0a:fa:46:25:3e:e0:17:24:32:12:c2:2a:a9:4a:a2:d5: - 8e:62:b9:2d:3e:75:f9:d0:84:cd:e3:cb:45:16:81:3b:5a:80: - 7c:d9:96:78:76:9f:df:ae:93:61:8e:b8:31:28:d6:a2:6c:80: - 86:67:06:33:1b:71:7d:73:62:df:fc:e1:6c:01:b4:6d:73:19: - 50:fe:1e:47 + bb:89:18:9e:99:ff:ac:70:9f:2f:f0:d4:67:34:a3:09:0e:00: + 0b:88:0a:1b:b8:24:0f:17:0e:5f:11:f9:9c:5d:d3:b1:20:c4: + 73:1b:cd:58:89:d6:4f:cd:1b:66:5f:c6:03:14:38:c3:ca:98: + d9:0b:83:7f:e4:99:63:80:31:08:95:66:9e:63:a0:7a:27:47: + fa:dd:b1:05:bc:e7:fc:8b:1a:2f:42:1d:62:46:e7:c9:c7:eb: + 5f:cb:5f:85:2d:10:6e:f1:45:a3:54:66:5a:bc:5b:26:10:f9: + c9:4e:55:0d:16:d1:7c:60:bd:70:76:f9:75:c8:5d:6e:26:df: + 3f:46:06:eb:5e:f6:c7:60:e8:60:4f:57:36:50:6a:f6:57:e7: + 7e:3d:6d:1b:90:59:dd:d4:11:f4:d0:fe:ed:18:7a:95:80:8b: + 9f:0a:3b:4d:9d:64:73:1d:6b:b0:1c:f4:df:af:68:39:1d:14: + 11:54:fd:79:6f:6c:56:fa:d6:72:93:0d:e9:7a:b6:7a:f8:11: + 1a:24:ad:6b:c4:fe:4f:42:c0:de:11:57:5e:be:6f:44:fd:d9: + e1:ba:f9:72:e0:27:ae:ca:15:74:40:71:1d:6e:68:f9:3a:b0: + f8:da:71:30:9c:ea:28:9c:48:08:81:55:59:27:20:98:c1:3e: + 4a:a1:1b:ba -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBFjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE2MDUwMTAw -MDAwMFoXDTE3MDcwMzAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALfPZtSmx5GluR6Kkc9RVAf0wqmOyogfUc9w4pMH/xebz66IhT2r9ma+ -rNXqYddUhjYS3ZiMvDqGVPAI04QYq+0RGkEcn83sl48iWvHL08C7wqxF1L2qq7Os -6lvaICTnngOXPqTGwbq0xGlvnX6BPViWgAyR3nGf2CRzjovwZL5Om8Q6wZzvPAUG -x6e6NBv/14eWADDbbXTyrvTLpp65QopYbT7nVBEuuBJaycEh1KHHzl4+xXUDOHqN -IBPv2PiknB4Eeyiw0SThFNP/GCreoMgAR4Cahsk9CkjYDGPfexvzttW4FB16QOsG -fCOxd6saYKI2fwrjm3UBEX2vKVt7+CECAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFNUX52jb4VHOo3y3du7NicEzHpiGMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCUZ8i6xxghpRGMOebS -F0elrATOiKSGnaepP+L8VBMos02kBJYhzNE/0pT+07uZSUFNK/xhvqE8AYgDG2LG -X/iuIHC6gmVQEO/zHnvNdsOid7lvKBM+bnZXK4rrTiGGnfKYyYnwvcQsYum9Ox9Q -7g+UZZ8WBB8nGKT8e3y1FnJWotxsagToRQOC1vVUnrJZ+KKKi3fvo6uyuSujpkBF -sPNIP0sY0o1JRauoNEbJcJ0CdTt+J58RaQr6RiU+4BckMhLCKqlKotWOYrktPnX5 -0ITN48tFFoE7WoB82ZZ4dp/frpNhjrgxKNaibICGZwYzG3F9c2Lf/OFsAbRtcxlQ -/h5H +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqujANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE2MDUwMTAwMDAwMFoXDTE3MDcwMzAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALNh4c1y0mesguMKLw5xhItIoDzrPx9d3pVj +wItTarMpUzCo2UiXiF9s3tMcaeWZVOAyhX6+Nwed7uL7ATxE9Cyx4tdzYeMfaSUA +C5B1dH21jL4C7u716U/10x/PF6qp0O+F8kXEbvXUcT/y/EDmqLBDo9Z/1kqpwGbh +HBytEb+8yMDXpe7hAkwPzNo8kRKlE8YigH5zmyEucYHNByD4YDGdP1q+Ahdre120 +wa8981zY4I2m224WXocGzsPCHh4tPCHWZfP0lGq8sWs66nITQAOyXN0xSnhBwCnu +OrYyZEIHBq15CZM2XNbsK4fSCfkVBeFFSCqSn48fsMLZnSgR7AUCAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFE7vRxDd512jpcv3Jj5/LL1jPgDtMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQC7iRiemf+scJ8v8NRnNKMJDgALiAobuCQPFw5fEfmcXdOxIMRzG81YidZPzRtm +X8YDFDjDypjZC4N/5JljgDEIlWaeY6B6J0f63bEFvOf8ixovQh1iRufJx+tfy1+F +LRBu8UWjVGZavFsmEPnJTlUNFtF8YL1wdvl1yF1uJt8/RgbrXvbHYOhgT1c2UGr2 +V+d+PW0bkFnd1BH00P7tGHqVgIufCjtNnWRzHWuwHPTfr2g5HRQRVP15b2xW+tZy +kw3perZ6+BEaJK1rxP5PQsDeEVdevm9E/dnhuvly4CeuyhV0QHEdbmj5OrD42nEw +nOoonEgIgVVZJyCYwT5KoRu6 -----END CERTIFICATE----- - -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 903804111 (0x35def4cf) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority - Validity - Not Before: Aug 22 16:41:51 1998 GMT - Not After : Aug 22 16:41:51 2018 GMT - Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (1024 bit) - Modulus: - 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: - 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: - d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: - 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: - 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: - 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: - 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: - af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: - 3a:88:e7:bf:14:fd:e0:c7:b9 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 CRL Distribution Points: - - Full Name: - DirName: C = US, O = Equifax, OU = Equifax Secure Certificate Authority, CN = CRL1 - - X509v3 Private Key Usage Period: - Not After: Aug 22 16:41:51 2018 GMT - X509v3 Key Usage: - Certificate Sign, CRL Sign - X509v3 Authority Key Identifier: - keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 - - X509v3 Subject Key Identifier: - 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 - X509v3 Basic Constraints: - CA:TRUE - 1.2.840.113533.7.65.0: - 0...V3.0c.... - Signature Algorithm: sha1WithRSAEncryption - 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: - 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: - 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: - 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: - a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: - 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: - 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: - 77:38 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- -
diff --git a/net/data/ssl/certificates/punycodetest.pem b/net/data/ssl/certificates/punycodetest.pem index 8b7fe73..395d3f7 100644 --- a/net/data/ssl/certificates/punycodetest.pem +++ b/net/data/ssl/certificates/punycodetest.pem
@@ -1,35 +1,36 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 10431067552074120060 (0x90c298ac257b3b7c) - Signature Algorithm: sha256WithRSAEncryption - Issuer: CN=xn--wgv71a119e.com + Serial Number: + 04:cd:5c:46:2c:7b:65:5b:b6:d2:f4:4b:44:90:ea:c1:c9:a1:3b:43 + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN = xn--wgv71a119e.com Validity - Not Before: Jun 5 17:10:47 2017 GMT - Not After : Jun 3 17:10:47 2027 GMT - Subject: CN=xn--wgv71a119e.com + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 11 20:46:17 2030 GMT + Subject: CN = xn--wgv71a119e.com Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:c7:8e:c3:54:a1:02:4a:e0:97:7a:13:a3:42:57: - 03:9e:f5:1e:61:69:35:f3:be:f8:92:2d:fe:47:5e: - 0d:dc:7d:b8:79:bb:ce:7d:dd:ce:45:82:ff:ce:23: - 56:0d:b3:08:ef:ab:67:02:50:6d:e6:dc:83:e1:9e: - a9:ac:5b:6a:6d:bd:b1:ef:78:d5:5c:4d:1f:d0:47: - d9:b3:d8:d0:5c:ad:fc:76:ac:7f:f7:33:b3:a0:bc: - 99:3f:b7:8b:e1:ca:d7:98:78:d4:aa:10:1a:9a:1a: - 84:f8:a9:fe:34:96:75:66:1c:36:5f:2d:8d:12:bf: - 7e:24:7c:87:b3:d5:f4:07:73:d6:b8:e2:a0:f1:11: - fe:6b:37:0a:cb:0f:e4:23:b3:67:77:3c:16:72:af: - c5:11:62:18:1d:9e:be:f9:ce:62:29:91:2e:7f:2f: - c5:ee:de:98:ef:f8:43:97:cc:65:92:87:4f:70:5d: - 62:23:f2:22:dc:48:e1:7c:9e:97:e5:d3:84:27:93: - 37:d6:45:ea:e3:1d:de:9f:06:b5:99:2d:2a:70:ab: - 76:34:95:7d:3d:43:9f:c8:35:5b:06:cf:94:d9:7c: - ed:cf:a3:b3:0b:f1:ad:b6:9d:cd:44:17:61:c8:97: - 7a:26:10:4b:fd:ae:6d:11:a9:87:cc:14:eb:24:32: - eb:9d + 00:bc:b7:6b:11:ab:e6:14:5a:73:0e:f1:c6:f1:8a: + 33:4e:5d:96:1a:d9:be:fa:47:a7:0a:8d:2a:30:c5: + fe:65:ab:24:a5:15:c1:b7:55:b2:3b:8a:bc:8c:d2: + 18:d8:82:e9:95:2d:84:36:a5:d5:53:9a:03:cb:fb: + 35:4c:22:f3:0f:fb:b6:23:ba:54:d0:ef:64:f8:85: + 8f:c3:8d:a8:a6:ec:5f:1a:ca:d7:d5:1f:3d:55:66: + 44:9a:35:54:1a:be:7a:40:03:7c:e4:98:cd:2a:e1: + 4d:49:0f:af:c0:6e:6a:e1:36:72:1a:a2:db:c7:db: + 94:bd:0e:b4:2e:ba:c6:f4:7b:39:bc:c3:2a:55:ca: + b3:80:dd:f9:e7:99:7c:69:05:28:eb:84:d6:48:cf: + ad:81:91:70:7e:54:ae:f4:79:31:03:3a:7d:7c:b7: + 7f:9b:31:83:65:2d:cf:dc:55:18:c0:09:96:a8:1e: + 1b:a5:2a:14:da:47:e7:a7:7a:77:9e:80:f0:b5:b1: + 02:08:a7:49:66:68:86:ef:1f:cb:14:a4:cb:33:df: + 36:35:fd:f6:0b:91:c4:11:4a:c3:d4:d0:c1:93:c6: + 74:d3:ae:dc:27:eb:cf:e3:f7:4c:d7:69:8b:28:99: + 7b:26:fb:84:14:cc:25:29:c1:aa:20:95:68:5b:7e: + a1:01 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,37 +38,37 @@ X509v3 Subject Alternative Name: DNS:xn--wgv71a119e.com, DNS:*.xn--wgv71a119e.com, DNS:blahblahblahblah.com Signature Algorithm: sha256WithRSAEncryption - c4:81:b1:91:37:f7:df:1e:a4:56:f6:03:95:4c:67:2d:b9:a3: - ed:e0:2c:37:2d:bd:d1:6a:9e:a2:c4:66:3b:f8:7c:5a:cb:ec: - 57:64:e6:1d:20:85:cc:24:99:33:9c:cd:38:0e:03:c4:13:f6: - b4:c6:d1:ea:6c:bd:34:1b:71:24:15:35:20:be:87:a0:97:0e: - 32:42:24:18:b8:8b:0f:15:da:73:42:0e:d7:fa:b9:7a:1b:a9: - 3e:71:64:a0:12:36:91:1f:5f:ae:0d:c4:26:22:fb:19:11:b6: - 75:92:1e:f4:ef:79:68:ef:9b:fc:3a:a6:11:9d:aa:9e:11:64: - 74:54:ba:80:a0:b9:3b:28:f9:3d:54:95:25:da:54:8e:38:47: - 6a:b0:d5:ec:33:a6:3c:b7:60:86:c9:03:ee:7d:5e:3f:c5:f1: - e8:4c:1d:4a:20:be:02:43:bd:e2:cc:4c:c6:13:2a:4a:b8:80: - 67:98:7b:5f:ae:3b:48:16:ba:46:da:a1:0e:88:22:85:f9:48: - 1b:04:64:0f:09:a5:89:1e:4f:ca:ce:39:60:27:f3:ea:ee:29: - ff:27:58:88:ad:eb:1d:ac:6a:46:a5:66:a3:43:e9:7f:ce:01: - 8a:33:31:a2:fc:64:26:9b:e9:0e:a9:af:76:be:b7:d9:59:6a: - 71:15:b4:fb + 83:3a:94:b3:f4:0d:82:b3:62:9f:a6:0e:34:5d:f6:d2:d7:4b: + 4e:23:4a:a6:10:9b:70:54:a3:b2:68:79:1b:4e:a7:05:75:bd: + 2d:14:b3:21:5a:3f:e6:9c:1b:f5:0b:5f:c0:36:cf:81:74:e3: + 4a:81:f6:54:e3:c2:6a:da:c8:7e:d8:59:7f:cb:6b:dd:40:88: + 47:bb:4a:22:7c:33:33:38:21:b1:60:33:67:84:b7:d2:2c:ad: + 26:ea:a2:22:2a:96:07:37:23:c1:94:9f:36:98:a9:9d:fd:72: + ba:f0:f1:ad:ae:3b:bc:cd:e7:25:c8:c1:11:df:23:f6:89:9a: + 0b:0d:c1:2f:e0:f4:35:8f:51:0d:b9:b9:06:37:d1:3b:7c:eb: + 5b:48:3b:0e:0f:90:01:56:d8:94:7e:38:1b:08:b5:f2:a9:2a: + e5:83:0d:84:3f:78:62:45:eb:25:24:69:c8:c4:20:7b:2f:bb: + 3d:0d:fb:27:84:7f:9f:cd:61:62:8b:dc:a0:93:8e:66:a9:61: + 28:4e:3a:5b:4d:8b:1e:34:4f:31:10:3d:fc:dd:68:ce:99:2f: + a9:36:57:f5:31:e9:d4:96:cd:d3:3d:ed:9a:ce:5a:df:95:64: + 0a:62:69:3e:59:6b:98:ca:ed:34:e0:6d:9e:0b:5e:70:50:a8: + 30:69:1b:ca -----BEGIN CERTIFICATE----- -MIIDGzCCAgOgAwIBAgIJAJDCmKwlezt8MA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNV -BAMMEnhuLS13Z3Y3MWExMTllLmNvbTAeFw0xNzA2MDUxNzEwNDdaFw0yNzA2MDMx -NzEwNDdaMB0xGzAZBgNVBAMMEnhuLS13Z3Y3MWExMTllLmNvbTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMeOw1ShAkrgl3oTo0JXA571HmFpNfO++JIt -/kdeDdx9uHm7zn3dzkWC/84jVg2zCO+rZwJQbebcg+Geqaxbam29se941VxNH9BH -2bPY0Fyt/Hasf/czs6C8mT+3i+HK15h41KoQGpoahPip/jSWdWYcNl8tjRK/fiR8 -h7PV9Adz1rjioPER/ms3CssP5COzZ3c8FnKvxRFiGB2evvnOYimRLn8vxe7emO/4 -Q5fMZZKHT3BdYiPyItxI4Xyel+XThCeTN9ZF6uMd3p8GtZktKnCrdjSVfT1Dn8g1 -WwbPlNl87c+jswvxrbadzUQXYciXeiYQS/2ubRGph8wU6yQy650CAwEAAaNeMFww -DwYDVR0TAQH/BAUwAwEB/zBJBgNVHREEQjBAghJ4bi0td2d2NzFhMTE5ZS5jb22C -FCoueG4tLXdndjcxYTExOWUuY29tghRibGFoYmxhaGJsYWhibGFoLmNvbTANBgkq -hkiG9w0BAQsFAAOCAQEAxIGxkTf33x6kVvYDlUxnLbmj7eAsNy290WqeosRmO/h8 -WsvsV2TmHSCFzCSZM5zNOA4DxBP2tMbR6my9NBtxJBU1IL6HoJcOMkIkGLiLDxXa -c0IO1/q5ehupPnFkoBI2kR9frg3EJiL7GRG2dZIe9O95aO+b/DqmEZ2qnhFkdFS6 -gKC5Oyj5PVSVJdpUjjhHarDV7DOmPLdghskD7n1eP8Xx6EwdSiC+AkO94sxMxhMq -SriAZ5h7X647SBa6RtqhDogihflIGwRkDwmliR5Pys45YCfz6u4p/ydYiK3rHaxq -RqVmo0Ppf84BijMxovxkJpvpDqmvdr632VlqcRW0+w== +MIIDJjCCAg6gAwIBAgIUBM1cRix7ZVu20vRLRJDqwcmhO0MwDQYJKoZIhvcNAQEL +BQAwHTEbMBkGA1UEAwwSeG4tLXdndjcxYTExOWUuY29tMB4XDTIwMDMxMzIwNDYx +N1oXDTMwMDMxMTIwNDYxN1owHTEbMBkGA1UEAwwSeG4tLXdndjcxYTExOWUuY29t +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvLdrEavmFFpzDvHG8Yoz +Tl2WGtm++kenCo0qMMX+ZaskpRXBt1WyO4q8jNIY2ILplS2ENqXVU5oDy/s1TCLz +D/u2I7pU0O9k+IWPw42opuxfGsrX1R89VWZEmjVUGr56QAN85JjNKuFNSQ+vwG5q +4TZyGqLbx9uUvQ60LrrG9Hs5vMMqVcqzgN3555l8aQUo64TWSM+tgZFwflSu9Hkx +Azp9fLd/mzGDZS3P3FUYwAmWqB4bpSoU2kfnp3p3noDwtbECCKdJZmiG7x/LFKTL +M982Nf32C5HEEUrD1NDBk8Z0067cJ+vP4/dM12mLKJl7JvuEFMwlKcGqIJVoW36h +AQIDAQABo14wXDAPBgNVHRMBAf8EBTADAQH/MEkGA1UdEQRCMECCEnhuLS13Z3Y3 +MWExMTllLmNvbYIUKi54bi0td2d2NzFhMTE5ZS5jb22CFGJsYWhibGFoYmxhaGJs +YWguY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCDOpSz9A2Cs2Kfpg40XfbS10tOI0qm +EJtwVKOyaHkbTqcFdb0tFLMhWj/mnBv1C1/ANs+BdONKgfZU48Jq2sh+2Fl/y2vd +QIhHu0oifDMzOCGxYDNnhLfSLK0m6qIiKpYHNyPBlJ82mKmd/XK68PGtrju8zecl +yMER3yP2iZoLDcEv4PQ1j1ENubkGN9E7fOtbSDsOD5ABVtiUfjgbCLXyqSrlgw2E +P3hiReslJGnIxCB7L7s9DfsnhH+fzWFii9ygk45mqWEoTjpbTYseNE8xED383WjO +mS+pNlf1MenUls3TPe2azlrflWQKYmk+WWuYyu004G2eC15wUKgwaRvK -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/reject_intranet_hosts.pem b/net/data/ssl/certificates/reject_intranet_hosts.pem index a6b3f64fae..7b6dc4b 100644 --- a/net/data/ssl/certificates/reject_intranet_hosts.pem +++ b/net/data/ssl/certificates/reject_intranet_hosts.pem
@@ -1,69 +1,70 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 15572396188146182397 (0xd81c43d3b819a8fd) - Signature Algorithm: sha256WithRSAEncryption - Issuer: CN=webmail + Serial Number: + 6c:1d:7a:e2:b9:1c:2d:09:02:53:44:45:4e:95:06:dc:d5:64:0b:1d + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN = webmail Validity - Not Before: Jun 5 17:10:47 2017 GMT - Not After : Jun 4 17:10:47 2020 GMT - Subject: CN=webmail + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT + Subject: CN = webmail Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ea:65:9e:eb:22:3a:b0:1c:eb:57:da:85:42:7e: - 2a:3d:f7:a7:54:b5:81:19:71:c3:b5:ae:ee:7e:85: - 1a:7a:23:61:76:3b:4e:bc:a6:a6:7f:e7:3d:b5:4b: - b8:d3:c9:df:d2:a2:36:11:9f:9f:bc:36:19:87:4c: - 43:89:c1:b3:0e:2c:bd:36:d7:d3:a4:00:52:06:01: - fb:a8:99:49:5c:46:bc:2b:9c:52:6e:b6:d0:e8:7d: - 4a:e6:a3:d3:e0:d9:f4:cf:e5:67:e7:37:51:fc:d5: - 5f:03:70:9c:b0:4b:c9:f4:db:91:42:86:40:60:73: - d8:7d:38:f1:e4:a8:16:93:e2:83:0f:03:52:9b:9c: - d0:d0:6d:3d:be:04:9c:14:21:b0:e5:97:c9:02:9e: - 92:34:2d:02:70:0a:74:21:91:1d:f7:cd:27:49:7f: - 93:48:5d:7a:02:d9:00:bd:3f:ab:ce:0c:96:3f:a5: - b0:04:93:b9:14:62:5b:c4:8d:ee:3e:bc:2d:aa:a7: - b5:ca:54:58:98:3f:a3:41:d4:e8:87:08:02:7d:89: - bf:2a:83:ae:ba:92:22:8e:19:3c:55:6b:f8:f4:53: - c3:03:e9:14:1d:5c:80:e1:71:5f:6a:2e:51:cf:d2: - 2d:2a:5d:50:58:03:06:70:be:1e:6e:d5:e0:2b:b2: - 7d:9d + 00:af:63:3b:72:45:a9:9e:9a:ea:4d:00:50:51:b0: + 94:52:a1:41:21:fa:cd:20:bd:2d:e8:05:16:5f:41: + 7c:58:4a:cb:af:f1:d3:23:af:d2:4f:2e:52:f3:f7: + df:4b:57:27:ab:43:01:5f:01:2f:c0:5d:a3:a2:15: + ff:78:f5:c2:df:50:41:f6:c4:7b:0f:b4:7f:a3:fe: + d1:7b:58:4f:92:28:8b:11:12:9d:d5:24:7d:ed:08: + 60:aa:1a:09:9d:e5:57:d2:ae:fe:01:02:a9:91:7b: + e5:42:a6:58:d6:f8:56:3d:9f:59:38:de:ed:d2:05: + 8f:26:2a:2d:b1:c9:bf:16:2b:55:20:cc:d9:66:50: + 45:f6:c0:ad:7a:19:19:aa:06:17:ad:41:79:1b:f1: + 9c:fc:ee:04:63:e4:0b:c7:b9:ad:89:4b:a2:b5:f7: + 75:1d:73:06:c8:cd:82:0d:1b:d0:be:fb:0d:e9:34: + 3f:4c:09:cc:31:eb:cd:a5:fa:a7:d9:01:0b:d4:c8: + 58:f0:1f:e4:cd:ed:77:f8:d3:08:14:3f:30:d7:6f: + ba:e8:ee:fd:27:09:8a:96:03:0e:3f:5d:59:d3:c8: + 97:19:e7:0e:0b:9d:34:9d:0c:06:7d:38:66:3e:52: + 59:58:4b:53:8f:ed:eb:36:5b:81:16:62:74:8e:71: + b8:3b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:webmail Signature Algorithm: sha256WithRSAEncryption - 69:b0:cd:3e:65:2f:da:f6:0f:13:e8:ba:91:0d:c6:1a:4c:71: - 5a:4f:b6:2a:4d:87:29:53:7b:9d:53:c1:fb:bc:46:be:13:34: - 68:0f:57:6d:85:85:93:5f:69:74:ea:3d:34:8c:bc:c2:64:8e: - 59:e0:53:d8:ac:35:64:c3:77:19:d6:dd:4d:cc:b9:f3:9e:fb: - d7:d8:78:7b:5a:d2:aa:01:72:89:73:a1:a5:b2:75:01:ba:04: - 33:65:4f:eb:37:d4:41:3b:9c:3f:7a:d6:22:61:e6:fe:8d:92: - cf:f1:e0:70:ad:58:2f:5c:37:0c:69:1c:bf:05:f7:ec:9b:cb: - 87:eb:bd:8d:13:45:bf:ac:3c:80:d7:e4:f1:bd:40:50:dc:25: - 98:4f:50:13:8c:65:bc:c9:5f:62:33:c3:b6:13:34:22:d2:18: - c5:80:77:bb:46:44:68:33:b3:50:f2:dc:de:5a:03:b3:9c:e9: - f5:15:65:29:55:56:10:cd:bd:c7:54:59:9e:4a:1a:3b:9c:64: - d5:1e:fb:fa:26:d7:ba:5d:14:59:3a:3a:8e:61:98:4e:41:24: - 4c:c3:a0:25:26:f8:16:ba:d9:22:51:54:69:1e:a4:cf:d9:21: - 30:de:3a:09:31:55:d5:bd:3d:ab:2f:c0:37:c6:78:54:df:38: - 8c:02:bb:70 + 5a:7a:bd:21:d7:17:c0:4c:2c:20:cf:88:a3:c9:10:46:33:0b: + 97:b4:41:c2:a2:3a:f8:1d:f5:f7:b6:9d:f3:60:21:60:61:d9: + ef:17:a4:89:f1:31:d0:f7:47:75:89:22:da:78:ae:78:c4:6f: + f2:f0:1c:ab:b7:1e:12:45:e6:3d:e6:75:27:40:33:03:12:71: + 96:23:a3:e6:2a:8f:5e:82:42:43:aa:41:cf:63:f7:d6:53:32: + 38:09:5b:38:b3:97:ea:ae:1e:e5:e4:03:1c:32:67:9f:d5:87: + 07:ec:8d:17:c0:c6:7e:c1:45:9a:4e:06:04:b8:34:66:06:cf: + 68:4e:00:a8:a9:d7:7d:15:d5:1f:53:6f:23:d5:b1:b4:d7:8a: + 2e:ea:39:88:b3:a8:44:a0:3b:29:52:78:55:b0:74:9c:cf:17: + 32:2d:20:ed:ae:51:5f:7d:3b:02:56:14:36:e0:21:db:5a:c7: + dc:1f:ec:94:45:84:e2:9b:4c:b5:45:5a:06:f1:d7:8b:63:fe: + f0:cf:3d:ae:0e:cf:f2:e0:73:75:ab:07:31:47:a5:02:9c:b0: + 4c:46:bd:13:b7:59:27:82:a0:9d:7c:a3:0a:6b:6b:82:ef:5f: + bd:5f:42:fd:b4:f5:67:67:b9:48:b8:7d:76:25:49:20:c1:0e: + f5:6b:56:d8 -----BEGIN CERTIFICATE----- -MIICvTCCAaWgAwIBAgIJANgcQ9O4Gaj9MA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV -BAMMB3dlYm1haWwwHhcNMTcwNjA1MTcxMDQ3WhcNMjAwNjA0MTcxMDQ3WjASMRAw -DgYDVQQDDAd3ZWJtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -6mWe6yI6sBzrV9qFQn4qPfenVLWBGXHDta7ufoUaeiNhdjtOvKamf+c9tUu408nf -0qI2EZ+fvDYZh0xDicGzDiy9NtfTpABSBgH7qJlJXEa8K5xSbrbQ6H1K5qPT4Nn0 -z+Vn5zdR/NVfA3CcsEvJ9NuRQoZAYHPYfTjx5KgWk+KDDwNSm5zQ0G09vgScFCGw -5ZfJAp6SNC0CcAp0IZEd980nSX+TSF16AtkAvT+rzgyWP6WwBJO5FGJbxI3uPrwt -qqe1ylRYmD+jQdTohwgCfYm/KoOuupIijhk8VWv49FPDA+kUHVyA4XFfai5Rz9It -Kl1QWAMGcL4ebtXgK7J9nQIDAQABoxYwFDASBgNVHREECzAJggd3ZWJtYWlsMA0G -CSqGSIb3DQEBCwUAA4IBAQBpsM0+ZS/a9g8T6LqRDcYaTHFaT7YqTYcpU3udU8H7 -vEa+EzRoD1dthYWTX2l06j00jLzCZI5Z4FPYrDVkw3cZ1t1NzLnznvvX2Hh7WtKq -AXKJc6GlsnUBugQzZU/rN9RBO5w/etYiYeb+jZLP8eBwrVgvXDcMaRy/Bffsm8uH -672NE0W/rDyA1+TxvUBQ3CWYT1ATjGW8yV9iM8O2EzQi0hjFgHe7RkRoM7NQ8tze -WgOznOn1FWUpVVYQzb3HVFmeSho7nGTVHvv6Jte6XRRZOjqOYZhOQSRMw6AlJvgW -utkiUVRpHqTP2SEw3joJMVXVvT2rL8A3xnhU3ziMArtw +MIICyDCCAbCgAwIBAgIUbB164rkcLQkCU0RFTpUG3NVkCx0wDQYJKoZIhvcNAQEL +BQAwEjEQMA4GA1UEAwwHd2VibWFpbDAeFw0yMDAzMTMyMDQ2MTdaFw0yMjAzMTMy +MDQ2MTdaMBIxEDAOBgNVBAMMB3dlYm1haWwwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCvYztyRamemupNAFBRsJRSoUEh+s0gvS3oBRZfQXxYSsuv8dMj +r9JPLlLz999LVyerQwFfAS/AXaOiFf949cLfUEH2xHsPtH+j/tF7WE+SKIsREp3V +JH3tCGCqGgmd5VfSrv4BAqmRe+VCpljW+FY9n1k43u3SBY8mKi2xyb8WK1UgzNlm +UEX2wK16GRmqBhetQXkb8Zz87gRj5AvHua2JS6K193UdcwbIzYING9C++w3pND9M +Ccwx682l+qfZAQvUyFjwH+TN7Xf40wgUPzDXb7ro7v0nCYqWAw4/XVnTyJcZ5w4L +nTSdDAZ9OGY+UllYS1OP7es2W4EWYnSOcbg7AgMBAAGjFjAUMBIGA1UdEQQLMAmC +B3dlYm1haWwwDQYJKoZIhvcNAQELBQADggEBAFp6vSHXF8BMLCDPiKPJEEYzC5e0 +QcKiOvgd9fe2nfNgIWBh2e8XpInxMdD3R3WJItp4rnjEb/LwHKu3HhJF5j3mdSdA +MwMScZYjo+Yqj16CQkOqQc9j99ZTMjgJWzizl+quHuXkAxwyZ5/VhwfsjRfAxn7B +RZpOBgS4NGYGz2hOAKip130V1R9TbyPVsbTXii7qOYizqESgOylSeFWwdJzPFzIt +IO2uUV99OwJWFDbgIdtax9wf7JRFhOKbTLVFWgbx14tj/vDPPa4Oz/Lgc3WrBzFH +pQKcsExGvRO3WSeCoJ18owpra4LvX71fQv209WdnuUi4fXYlSSDBDvVrVtg= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/root_ca_cert.pem b/net/data/ssl/certificates/root_ca_cert.pem index 73172139..e7e99ed 100644 --- a/net/data/ssl/certificates/root_ca_cert.pem +++ b/net/data/ssl/certificates/root_ca_cert.pem
@@ -28,16 +28,17 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 10687961985666567129 (0x945344cc7888cbd9) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA + Serial Number: + 2f:25:f3:ce:3c:5e:72:d0:33:29:f6:09:1f:5d:5f:53:d9:ac:23:bb + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = Test Root CA Validity - Not Before: Jun 5 17:10:44 2017 GMT - Not After : Jun 3 17:10:44 2027 GMT - Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA + Not Before: Mar 13 20:46:16 2020 GMT + Not After : Mar 11 20:46:16 2030 GMT + Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = Test Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: 00:c6:81:1f:92:73:b6:58:85:d9:8d:ac:b7:20:fd: c7:bf:40:b2:ea:fa:e5:0b:52:01:8f:9a:c1:eb:7a: @@ -66,39 +67,40 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 5b:53:ff:6d:d5:0a:43:a5:0f:d4:7d:c6:5d:88:e3:98:9d:67: - eb:32:82:b3:0f:f5:c1:78:f8:05:4a:bf:bc:21:05:ee:21:08: - 2c:b2:15:a1:b8:b2:f6:a3:15:61:e4:c1:ad:84:a4:a7:40:0c: - 87:09:5f:2b:1b:f9:4d:6c:92:7d:cb:7e:2b:b0:01:0a:ed:40: - e5:4e:af:1a:f1:0d:ec:1d:9e:96:c7:d4:61:64:39:23:fa:5f: - 29:c4:2a:3a:b8:ed:8a:72:50:6a:ac:45:04:76:09:a8:3d:57: - d7:f0:4b:ae:46:b4:83:c1:14:50:2a:19:59:53:b2:4d:ae:fc: - 2f:40:49:c8:ad:4d:9d:c8:22:8d:8c:01:db:31:33:5a:f4:bc: - 4c:9b:ed:d7:e3:43:d9:e8:1d:53:8b:30:d8:81:9e:72:ab:9e: - ce:b8:f5:83:93:f2:72:db:de:cd:b0:52:9a:45:4d:cf:e7:21: - d8:ce:16:64:8f:42:af:c1:87:a8:f9:d5:e2:03:dd:ba:6b:1b: - 7c:7d:a0:38:33:61:39:b4:dd:5c:69:17:79:02:3a:ec:1d:6f: - 5e:bb:13:fb:a6:82:5d:07:20:fc:86:fe:6e:8b:ac:e1:c2:18: - a2:fe:3f:95:66:d3:69:8a:00:06:2c:56:37:34:b9:b6:31:de: - 0f:f6:44:39 + b1:b1:83:61:af:db:ed:98:cf:3d:43:5f:a7:42:b8:6d:94:36: + 57:bb:ab:04:ee:dd:3b:b7:6d:ec:78:7d:46:59:b1:e6:2a:c3: + aa:a5:70:a7:e1:0c:fa:65:37:c6:cb:7d:a1:37:35:a1:ff:f0: + dd:ce:b6:a4:2c:12:d4:46:a9:9c:a2:91:3a:b0:95:55:97:55: + e6:0a:da:63:60:24:19:ac:20:c9:b1:94:40:e9:99:b1:f5:c3: + ed:61:5d:de:4c:e4:eb:d9:0e:ac:3a:0a:fc:44:7d:0f:77:a6: + b6:da:28:d4:ed:ea:3a:bc:57:23:9c:72:2b:2d:b0:5d:11:02: + 4d:c5:bc:b0:d6:7e:00:8e:f7:e7:f5:19:3a:23:df:33:02:aa: + 4b:bf:81:f4:5a:99:ee:74:20:f3:77:a1:f0:85:1e:a8:d6:cc: + a4:cb:31:fa:73:24:a2:0e:dd:9f:6f:82:38:5f:85:ac:8d:76: + bd:d8:f2:69:73:e3:46:44:42:e3:5e:f3:aa:5e:44:13:51:ea: + 0b:78:91:77:96:ee:73:fe:2a:b5:88:c1:38:8d:8d:a8:19:76: + 94:05:02:cf:d4:6f:eb:e6:07:f5:9d:52:24:b8:50:a3:0e:c4: + 45:a6:09:b4:06:2d:3e:14:a5:3f:1c:1a:bc:da:b8:40:3e:c1: + 1c:f6:3c:05 -----BEGIN CERTIFICATE----- -MIIDizCCAnOgAwIBAgIJAJRTRMx4iMvZMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV +MIIDljCCAn6gAwIBAgIULyXzzjxectAzKfYJH11fU9msI7swDQYJKoZIhvcNAQEL +BQAwYzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExFTATBgNVBAMMDFRlc3Qg +Um9vdCBDQTAeFw0yMDAzMTMyMDQ2MTZaFw0zMDAzMTEyMDQ2MTZaMGMxCzAJBgNV BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwHhcN -MTcwNjA1MTcxMDQ0WhcNMjcwNjAzMTcxMDQ0WjBjMQswCQYDVQQGEwJVUzETMBEG -A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UE -CgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAxoEfknO2WIXZjay3IP3Hv0Cy6vrlC1IBj5rB63qA -wfOJpD7VG2HMtc+AsRrbuyXgGL+SaSZQzec//w08tB8UEqtnN94HA2wSdII2rMPU -02Sfke1b9ql6pJyY6GVslOHLVXOu+B1QsHjldP+xNyzLGT2kjOd2ToZcP9+z7UUj -T1SbM8aJXhMd3X1ZpQc0KIYnH/qeU08qtkKtNxJi9XI2tgISQET+x56ViUNRXrRu -x2eAWEO+zAcovVn/HEyNkEL0z/1UAE9IcivhZzyEF2iVv8oHe9+GnVbjMuNwh7f4 -OvfjbmUUfLt2txfxQoxvKjRkEDUUjIX2V7/zXFWdrQMQ8wIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBSbJguKmKm7HbkfHOMaQDPtjheIqzAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAFtT/23VCkOlD9R9xl2I45id -Z+sygrMP9cF4+AVKv7whBe4hCCyyFaG4svajFWHkwa2EpKdADIcJXysb+U1skn3L -fiuwAQrtQOVOrxrxDewdnpbH1GFkOSP6XynEKjq47YpyUGqsRQR2Cag9V9fwS65G -tIPBFFAqGVlTsk2u/C9AScitTZ3IIo2MAdsxM1r0vEyb7dfjQ9noHVOLMNiBnnKr -ns649YOT8nLb3s2wUppFTc/nIdjOFmSPQq/Bh6j51eID3bprG3x9oDgzYTm03Vxp -F3kCOuwdb167E/umgl0HIPyG/m6LrOHCGKL+P5Vm02mKAAYsVjc0ubYx3g/2RDk= +aWV3MRAwDgYDVQQKDAdUZXN0IENBMRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGgR+Sc7ZYhdmNrLcg/ce/QLLq ++uULUgGPmsHreoDB84mkPtUbYcy1z4CxGtu7JeAYv5JpJlDN5z//DTy0HxQSq2c3 +3gcDbBJ0gjasw9TTZJ+R7Vv2qXqknJjoZWyU4ctVc674HVCweOV0/7E3LMsZPaSM +53ZOhlw/37PtRSNPVJszxoleEx3dfVmlBzQohicf+p5TTyq2Qq03EmL1cja2AhJA +RP7HnpWJQ1FetG7HZ4BYQ77MByi9Wf8cTI2QQvTP/VQAT0hyK+FnPIQXaJW/ygd7 +34adVuMy43CHt/g69+NuZRR8u3a3F/FCjG8qNGQQNRSMhfZXv/NcVZ2tAxDzAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJsmC4qYqbsduR8c4xpA +M+2OF4irMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAsbGDYa/b +7ZjPPUNfp0K4bZQ2V7urBO7dO7dt7Hh9Rlmx5irDqqVwp+EM+mU3xst9oTc1of/w +3c62pCwS1EapnKKROrCVVZdV5graY2AkGawgybGUQOmZsfXD7WFd3kzk69kOrDoK +/ER9D3emttoo1O3qOrxXI5xyKy2wXRECTcW8sNZ+AI735/UZOiPfMwKqS7+B9FqZ +7nQg83eh8IUeqNbMpMsx+nMkog7dn2+COF+FrI12vdjyaXPjRkRC417zql5EE1Hq +C3iRd5buc/4qtYjBOI2NqBl2lAUCz9Rv6+YH9Z1SJLhQow7ERaYJtAYtPhSlPxwa +vNq4QD7BHPY8BQ== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/sha1_2016.pem b/net/data/ssl/certificates/sha1_2016.pem index 434febf..2c2f383 100644 --- a/net/data/ssl/certificates/sha1_2016.pem +++ b/net/data/ssl/certificates/sha1_2016.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 9 (0x9) - Signature Algorithm: sha1WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:ab + Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Oct 30 00:00:00 2008 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b6:97:a0:79:d1:5c:5f:c1:13:33:6e:21:f8:2b: - e2:55:d6:bd:bb:2e:4e:78:cf:3d:fc:32:02:69:f7: - 1e:57:26:5d:38:18:bd:60:4e:c9:9b:7d:48:47:8e: - e0:b8:7f:de:9e:48:6a:e2:b7:fc:58:aa:38:a5:4d: - ab:b1:6d:ab:ed:f8:ae:7d:9b:2c:e0:cb:af:7b:2d: - 10:f8:97:8d:d7:8d:9f:8c:48:32:df:30:69:2a:de: - cc:1f:81:f1:6d:14:2f:56:ac:64:20:9e:90:6b:5a: - 63:da:0a:08:f2:c6:89:01:44:15:c7:bb:02:fe:4b: - c5:68:18:7f:47:4c:91:c0:59:bd:72:47:69:28:47: - b8:6d:2a:3b:57:74:59:68:9e:e7:35:1d:a4:a9:3b: - 51:9a:74:82:3b:9e:7c:49:d5:f8:d9:72:9b:20:b1: - 53:1f:30:9d:20:a0:26:b9:2f:57:18:a4:63:be:8b: - 3b:03:31:fd:11:8a:d5:2d:13:67:51:88:c1:9f:2b: - 65:da:ea:d3:29:25:3a:60:0f:7f:fc:a0:61:8d:dd: - 8e:4f:45:b3:0f:da:ba:a4:1a:13:87:0d:1f:27:31: - c2:37:1a:a6:fc:49:1c:02:82:ff:f8:a8:7f:4d:66: - 6e:46:38:4d:37:63:fd:bc:b3:d1:29:cc:de:4c:a5: - c8:5b + 00:a2:e9:0f:5b:9f:f4:5c:f2:e2:d1:92:95:72:25: + be:a0:ac:97:d1:7a:8d:7b:0f:a0:52:bb:b3:b3:c0: + 76:ec:02:f8:3a:32:8a:31:67:be:d7:86:f0:7b:4c: + 8c:c9:f3:d0:d1:f2:b0:0b:6c:20:1a:41:bd:ab:40: + 4f:c2:bd:ba:cb:31:83:76:79:2c:9d:58:b3:af:fd: + 90:d7:59:cd:33:93:c5:de:e1:2e:f6:29:00:54:99: + f4:fe:ac:51:a0:d1:17:5a:aa:1f:2c:ee:bb:81:22: + fa:58:61:81:d0:c5:d8:38:8f:6f:08:8a:53:9b:ea: + 0a:24:38:af:09:fe:57:7b:1d:3a:61:cb:fc:07:d8: + 54:16:c4:06:8a:83:f0:24:27:c4:ac:14:c9:2c:64: + de:97:b8:8c:6e:3b:85:64:4d:59:17:c1:a2:fb:28: + e8:ab:24:8f:cf:b0:46:ea:2b:64:7f:9d:04:fe:22: + 15:94:16:0b:4f:a4:8e:6e:d2:34:9b:f2:8f:61:ef: + 87:f8:a8:fa:ce:d7:f2:6b:ae:5c:9a:fd:f4:19:ad: + 79:47:9b:4e:d7:41:91:ab:55:bd:b1:2d:97:fc:82: + ae:6b:c1:3c:62:9a:f6:c9:cf:e7:3e:74:12:0c:ae: + 39:99:c6:e9:69:36:23:00:30:6e:e0:ea:11:9b:5f: + af:a1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 3C:CC:C9:4A:92:DF:8A:05:12:74:8D:AA:B3:40:EE:69:E4:52:77:62 + E0:52:8D:C0:78:60:88:97:8F:FA:E5:1D:19:1F:30:23:3A:FB:47:90 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha1WithRSAEncryption - 61:42:bd:ce:3e:8a:ca:a0:bc:61:5f:0a:30:cb:86:02:e3:d3: - 22:a2:c2:d7:b9:b8:79:9b:53:b5:60:14:0a:7f:98:3f:bd:a6: - 09:03:fc:05:bd:b8:24:00:aa:85:ca:ea:36:c0:58:a7:6e:25: - 8f:64:a6:9a:77:35:53:f2:c1:be:04:95:c3:2b:dc:1a:9f:42: - 31:af:5f:1d:06:4d:bb:08:bb:18:b5:48:eb:4a:03:85:be:12: - 7f:bc:62:d5:44:25:0e:75:a8:7a:63:86:0b:c9:af:0f:03:4c: - 14:ac:de:50:c1:0b:d9:cd:17:1e:56:e4:43:18:a7:0f:cc:fc: - 58:e9:d9:7a:62:f7:8b:64:ae:0d:e0:a3:78:75:87:aa:e9:d0: - ce:f4:a2:60:46:41:48:eb:04:89:74:55:d6:f1:1f:f0:ed:32: - df:fc:cc:86:68:c9:b0:36:4f:9f:db:f0:cf:51:a2:9a:89:43: - 65:b1:6c:a1:1a:4f:ef:35:ca:d7:c1:d6:c7:96:f5:4e:0a:f6: - 1d:d1:8f:59:4c:77:20:73:4a:fe:0f:fc:a9:c8:e4:11:d9:3e: - 71:7e:84:b8:ed:e0:fb:00:5d:1e:7b:7b:c9:5b:2d:51:44:7c: - 0b:60:f1:13:7a:ff:7b:fa:0b:74:47:bb:99:89:ef:fe:cc:9f: - f7:a3:e3:20 + 25:c9:57:a0:28:e2:eb:e6:5a:eb:c6:c4:3a:85:77:55:8c:78: + 89:14:56:d5:53:36:75:a4:8c:90:49:eb:56:16:81:c9:45:65: + 98:17:cd:27:bf:82:81:30:ac:31:26:7c:13:8a:87:45:47:3d: + ab:4a:b3:6e:e6:a2:de:24:52:46:89:ef:44:a5:95:62:60:9e: + 62:f4:bf:df:54:ef:91:58:98:f1:44:9e:a4:45:3a:ca:d6:23: + 03:43:b8:4a:29:ff:87:97:64:58:50:cd:29:1a:64:cf:73:56: + 64:9a:2e:87:45:19:4a:99:ef:3e:f5:81:bc:21:08:8a:ac:2b: + f5:be:a6:8a:bf:f3:43:85:8f:2a:1d:3f:58:01:ef:e0:d4:53: + 20:4d:f7:a2:bc:67:cb:cb:48:a5:8b:7a:73:20:cd:c6:91:10: + 78:fc:d4:67:33:1b:d0:00:69:db:39:f6:ab:62:da:51:e2:e1: + 83:4c:10:80:09:f8:15:60:f0:61:7a:3a:7f:19:a1:91:2e:52: + 3c:9a:98:53:06:25:90:5f:0b:f1:a1:b5:ee:de:9d:0d:13:01: + 52:9a:31:07:2d:86:7f:5b:c1:5a:0a:22:8a:46:2f:6a:64:cf: + 59:af:2d:e7:e7:91:89:ff:bb:6a:c7:17:6f:cb:8e:c7:df:d8: + 2c:39:a4:98 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBCTANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTA4MTAzMDAw -MDAwMFoXDTE2MTIzMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALaXoHnRXF/BEzNuIfgr4lXWvbsuTnjPPfwyAmn3HlcmXTgYvWBOyZt9 -SEeO4Lh/3p5IauK3/FiqOKVNq7Ftq+34rn2bLODLr3stEPiXjdeNn4xIMt8waSre -zB+B8W0UL1asZCCekGtaY9oKCPLGiQFEFce7Av5LxWgYf0dMkcBZvXJHaShHuG0q -O1d0WWie5zUdpKk7UZp0gjuefEnV+NlymyCxUx8wnSCgJrkvVxikY76LOwMx/RGK -1S0TZ1GIwZ8rZdrq0yklOmAPf/ygYY3djk9Fsw/auqQaE4cNHycxwjcapvxJHAKC -//iof01mbkY4TTdj/byz0SnM3kylyFsCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFDzMyUqS34oFEnSNqrNA7mnkUndiMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQBhQr3OPorKoLxhXwow -y4YC49MiosLXubh5m1O1YBQKf5g/vaYJA/wFvbgkAKqFyuo2wFinbiWPZKaadzVT -8sG+BJXDK9wan0Ixr18dBk27CLsYtUjrSgOFvhJ/vGLVRCUOdah6Y4YLya8PA0wU -rN5QwQvZzRceVuRDGKcPzPxY6dl6YveLZK4N4KN4dYeq6dDO9KJgRkFI6wSJdFXW -8R/w7TLf/MyGaMmwNk+f2/DPUaKaiUNlsWyhGk/vNcrXwdbHlvVOCvYd0Y9ZTHcg -c0r+D/ypyOQR2T5xfoS47eD7AF0ee3vJWy1RRHwLYPETev97+gt0R7uZie/+zJ/3 -o+Mg +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqqzANBgkqhkiG9w0BAQUFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTA4MTAzMDAwMDAwMFoXDTE2MTIzMDAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKLpD1uf9Fzy4tGSlXIlvqCsl9F6jXsPoFK7 +s7PAduwC+DoyijFnvteG8HtMjMnz0NHysAtsIBpBvatAT8K9ussxg3Z5LJ1Ys6/9 +kNdZzTOTxd7hLvYpAFSZ9P6sUaDRF1qqHyzuu4Ei+lhhgdDF2DiPbwiKU5vqCiQ4 +rwn+V3sdOmHL/AfYVBbEBoqD8CQnxKwUySxk3pe4jG47hWRNWRfBovso6Kskj8+w +RuorZH+dBP4iFZQWC0+kjm7SNJvyj2Hvh/io+s7X8muuXJr99BmteUebTtdBkatV +vbEtl/yCrmvBPGKa9snP5z50EgyuOZnG6Wk2IwAwbuDqEZtfr6ECAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOBSjcB4YIiXj/rlHRkfMCM6+0eQMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IB +AQAlyVegKOLr5lrrxsQ6hXdVjHiJFFbVUzZ1pIyQSetWFoHJRWWYF80nv4KBMKwx +JnwTiodFRz2rSrNu5qLeJFJGie9EpZViYJ5i9L/fVO+RWJjxRJ6kRTrK1iMDQ7hK +Kf+Hl2RYUM0pGmTPc1Zkmi6HRRlKme8+9YG8IQiKrCv1vqaKv/NDhY8qHT9YAe/g +1FMgTfeivGfLy0ili3pzIM3GkRB4/NRnMxvQAGnbOfarYtpR4uGDTBCACfgVYPBh +ejp/GaGRLlI8mphTBiWQXwvxobXu3p0NEwFSmjEHLYZ/W8FaCiKKRi9qZM9Zry3n +55GJ/7tqxxdvy47H39gsOaSY -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/sha1_leaf.pem b/net/data/ssl/certificates/sha1_leaf.pem index 598b48d..ea8df85 100644 --- a/net/data/ssl/certificates/sha1_leaf.pem +++ b/net/data/ssl/certificates/sha1_leaf.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCt5Mpt4Jw+UG9v -qfdbenxHoJJ8YcG9PZssBRhmA4GIwNGoYqG5D50gMxppUybpdZtQus+FF/lS8v2R -0+my4D3cgLo+eIebg2oqhz/x5QLQlWsGvcjcn6bTg0INuK9vn9HNqeMQkDotxK9X -zvcbKazzxzV1K81PGgocpjhj10qdOZoboDu+eTN8bFe13uRNFG13l1nQmU0B6R6n -BreDtxggA/C9H0x9YjRVyDamxwXe5c1yrye2HZXdxJneEEm+CMUSjKXlpK1it/+U -1mafGMtrSdl++aspmO3lZ61TUNdSqdSUBGL8azw7AzewvRj48KN8V4EPG7WUvu4a -CrZpy3O1AgMBAAECggEAcz5ibcliouWZxK4m0YhuXuXqzuXWiP0QHm9OCSWfrirj -h62+MjBH2LQld9H0wtn/UdRMfY8y3CdPp1qC0dpNBRqG06n7bTP9oyu5VC2K3QN5 -R6F1QcnIvPqLRx6znc2UNLG3Wx3KgNSNxCrUlzradUD7i6i4ywid1PjP/FMNDv6q -k07xSxc0VpWwkUC0j3uau0qewfnjP3+Toe7au4vHhy+Opyudsu4WETlbhkZq2mlD -bgUS8/06FOjlf/2tfnElysL2NPvj0sFpm1yUckxZVjiepJ8QfqU46zsxUTqKrtca -b6kYiJmB30wSxwnsweBhJ6w7UOOV6kmB6scc5OD2IQKBgQDgZESH7yLkqBdY1qFE -AfWvyMfIe/buB8UNLcicGuSPkjdtCzsXoDgzXxt37RSLFMsPTDBM51KPAzJkWaeM -Jksbivw/+bEFTyY/AaYreiRHrpIXvLM/mNJFZ514ImZ+mY8YU7nuTZRMn7Ysfs9c -kHc7r3ET65KOcnXtPVGk6h2rHQKBgQDGY4dc0vWHktGLLqmgIJZHVcojj4NLuX67 -KCj1/DhNFpJhq24MKucxmaOlXXXPgEGTA/JwWnolo1fcT2Vv4LrlgL75SYVHOF71 -2PTIrlM3w6lOJNyzyD3Sjh2wZ87u993P2z6Z/qDWOMTdfD/jvyoU/k1uq6rTxJzy -SktzfqRveQKBgBwI6vcAzZ870Q7sYeGZTRTVRQCrXEKI/fmTisjWI1A8uGgLSyq8 -fckNTOVC3Zoy0tvqbO5uyEXN5HHdMa206xVZ3AIyNAexx9l/Xz93VykNinskvFBp -y3uYYngr9BpFHTew3j4Du0+HdL9CaK3r7rmqRbpzaDAb5NfrHVQ5W9ORAoGASfSq -bnkaHKsnwFnp1A6x1u/tRepnCKCi1MQ42NJobpxef1h30sNfokbjEW9QzsTCLTsI -csfXxxYoV7GlX9qH8axYBPhaXd1u0PlK71DFJwGiqMXnHIImQcrG2I8qPj1ai/Tw -VlnsvU82XFbIPm9yEZdnaD1Ill8yHsSBchGg3QkCgYEAxZcgtHjspR9TTzuyl8qm -gciF8YDwYIIHqOPnVKoC6+EQJf/BJnTU5naf56sa4aMg9eqqNA5eG0aohM1uZJAJ -TaxkXZ8wTCwFoIh6O05+SD4bHDWvr7Sur1z0HeasYH2OPf/H/N0Xuq10rphCr7dx -HYbEecCcSPrbEtOR7++xRvA= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3FUBTWsYvyZ6x +lkfEONK6U2oqeuFWPuE8cLh9H7u6t19m4uhRGHnMnOtiqUeuUlI9HPOk76+H2PhK +M4BS2yIzd2JIItxrgqm8cOoVM6R4Na9nUfWM9jpymJlwBy2HsktvHyblVfgpXVTe +W0Sz+oy5yJgvxcnQHEZWE8U87zJ6wzqNp0D/mvZAye91wEsBWH0iIrPok3x7SAvT +wnZJN1qYooPQBS3W8ji0Y6ZS7Z/KAPHnVe653VDRvjlRJl/O012Z02cuSn53BoAJ +u8EhCuybSDn3FXvgbCan5Vwtl4gwTMTYq9rn5aZ0lmmKceMs/XuL1bFMc1oPHtZX +s/JjmPP/AgMBAAECggEBAJn+UgDKlXCUkdqloO+3K+h1SRM6EFdOxHzmAwebrXe7 +zY7oxKeRgsFMK+DsqdJCg9HLjFPrFyWYph8jeog2sWnAvPYX/HahjMtn3jy/F1PV +NBgfo/5RDZBeMpE8OFuu6Cwrc7fqu7VvP3dYJU2NLNkHlJp6LunRHohAUOKT/02p +gzm5djM+9mTYAmvUQ5jx9SgltQL/eUOf+WKUQKVLaLsdgVFn8//kWfIiUxsGFe4q +Dx7SKcCkLFI7V3l6dJiiRpmd9ZonV03w/EGrxhn/afUrGwdsnXxHuQEBNSb5HXh7 +yjHmE/N3NsKmHp3FH8SBENOdAMABPz1cWb5eXQvm48ECgYEA6mioSARwtIDtJ+21 +ZBGh+YAL+k/nAs3V/dmAPxRu9vr+0rDLoUMJSlVyQIsGig8/rC82K6cohfmIBRtK +oqwBgzfpDpioZ3ssRF+VSJi2aqidFt/GXMJ/YkiajivTMft8469FmOM+PnAY0OEV +ScOuC984crfHV1dGvLnaTiO8mkcCgYEAx/JV0S/42tZwpnKhVeyVvF+9T9aWFvLc +AlZCbHBNDTlo7tsnw9yPZ0XAksQzUU1zupjkL2Wj9S/3vhRy/vmC44XD3Axn2KeD +xM0Xl578dMZNqQOxs6YaJJzYAwEWcSJvKKwxpCZMq1kVP1QihcmIGzknbo8D9E80 +q4CSy1eQfIkCgYAxRQQx9vT1i6/NV7JrsSUZeyeJWmgU98zFyYSiPZpBQWp0QILc +h2mZfTJBjLc4J5Jbj6TUMhNbbaKAaEccwAilWwgacE3dSk94o5qOIsMc0goKt8hK +0PrTXq1VurJubAzJEpsPUpxPpWIh7V17Hq0jg6yquCQnIIoWuv2+tNY8mwKBgHnx +wIkeeuXs1zOMwf0Hl6MVuP4SX+OLJsd+GHDOZQ/lravPmYcI46UWk4ZvhuTVGfn5 ++WE22jJVmQEis6fyQPPGx1dTcZpfQCws8XCVlF8b+o1UJXLtoRAnYE8kwK0rVSQ3 +MOduPGBcqmq/Q3bZHNuNlhEFxGGiVPssJVtDAmoRAoGALtnaRmr0YvIcxQ921pM/ +Suup3Hm6CcQ4ygl9cBZVcaJxdg5uOxgO0jNx3l+tSSV1eHVuZgW54aZyxg5t8kdv +laV1oKHmzCeRJkipB7LvWu6Aqa6nB+ARdsaKPaRamwRkZ+zlVZfp9Xjc72PTwndZ +pyfGQC1mOGLErTWa2HQQYlI= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 23 (0x17) - Signature Algorithm: sha1WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:bc + Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Dec 20 00:00:00 2017 GMT - Not After : Dec 20 00:00:00 2020 GMT + Not Before: Mar 13 20:46:30 2020 GMT + Not After : Mar 13 20:46:30 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:ad:e4:ca:6d:e0:9c:3e:50:6f:6f:a9:f7:5b:7a: - 7c:47:a0:92:7c:61:c1:bd:3d:9b:2c:05:18:66:03: - 81:88:c0:d1:a8:62:a1:b9:0f:9d:20:33:1a:69:53: - 26:e9:75:9b:50:ba:cf:85:17:f9:52:f2:fd:91:d3: - e9:b2:e0:3d:dc:80:ba:3e:78:87:9b:83:6a:2a:87: - 3f:f1:e5:02:d0:95:6b:06:bd:c8:dc:9f:a6:d3:83: - 42:0d:b8:af:6f:9f:d1:cd:a9:e3:10:90:3a:2d:c4: - af:57:ce:f7:1b:29:ac:f3:c7:35:75:2b:cd:4f:1a: - 0a:1c:a6:38:63:d7:4a:9d:39:9a:1b:a0:3b:be:79: - 33:7c:6c:57:b5:de:e4:4d:14:6d:77:97:59:d0:99: - 4d:01:e9:1e:a7:06:b7:83:b7:18:20:03:f0:bd:1f: - 4c:7d:62:34:55:c8:36:a6:c7:05:de:e5:cd:72:af: - 27:b6:1d:95:dd:c4:99:de:10:49:be:08:c5:12:8c: - a5:e5:a4:ad:62:b7:ff:94:d6:66:9f:18:cb:6b:49: - d9:7e:f9:ab:29:98:ed:e5:67:ad:53:50:d7:52:a9: - d4:94:04:62:fc:6b:3c:3b:03:37:b0:bd:18:f8:f0: - a3:7c:57:81:0f:1b:b5:94:be:ee:1a:0a:b6:69:cb: - 73:b5 + 00:b7:15:40:53:5a:c6:2f:c9:9e:b1:96:47:c4:38: + d2:ba:53:6a:2a:7a:e1:56:3e:e1:3c:70:b8:7d:1f: + bb:ba:b7:5f:66:e2:e8:51:18:79:cc:9c:eb:62:a9: + 47:ae:52:52:3d:1c:f3:a4:ef:af:87:d8:f8:4a:33: + 80:52:db:22:33:77:62:48:22:dc:6b:82:a9:bc:70: + ea:15:33:a4:78:35:af:67:51:f5:8c:f6:3a:72:98: + 99:70:07:2d:87:b2:4b:6f:1f:26:e5:55:f8:29:5d: + 54:de:5b:44:b3:fa:8c:b9:c8:98:2f:c5:c9:d0:1c: + 46:56:13:c5:3c:ef:32:7a:c3:3a:8d:a7:40:ff:9a: + f6:40:c9:ef:75:c0:4b:01:58:7d:22:22:b3:e8:93: + 7c:7b:48:0b:d3:c2:76:49:37:5a:98:a2:83:d0:05: + 2d:d6:f2:38:b4:63:a6:52:ed:9f:ca:00:f1:e7:55: + ee:b9:dd:50:d1:be:39:51:26:5f:ce:d3:5d:99:d3: + 67:2e:4a:7e:77:06:80:09:bb:c1:21:0a:ec:9b:48: + 39:f7:15:7b:e0:6c:26:a7:e5:5c:2d:97:88:30:4c: + c4:d8:ab:da:e7:e5:a6:74:96:69:8a:71:e3:2c:fd: + 7b:8b:d5:b1:4c:73:5a:0f:1e:d6:57:b3:f2:63:98: + f3:ff Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 18:9A:76:1E:86:4C:EF:67:5D:20:7F:24:4C:DC:3F:AE:B5:B5:5C:A1 + 65:7D:5B:06:08:D8:9C:CE:3E:A7:E8:60:32:66:25:AE:B7:AD:EB:D4 X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha1WithRSAEncryption - a0:b6:c2:65:a0:9b:25:b7:c9:81:9a:dc:63:aa:ae:6e:f3:8a: - 62:92:66:6e:ad:3d:a7:fd:26:d4:ea:7b:7c:00:80:2b:73:db: - 36:86:fe:b1:b5:8a:05:40:d3:3c:6f:1d:11:1b:b2:a0:0d:f6: - 26:aa:ac:63:62:61:c0:7e:b0:7d:da:73:2c:14:71:41:fd:93: - f5:76:cd:21:13:42:df:e5:b0:26:e8:d0:ec:a2:e4:26:b8:ba: - e8:bd:49:f9:38:7f:92:1c:a2:7e:8f:b3:d3:e6:0a:51:60:88: - c4:ab:08:65:14:53:fd:c3:70:8a:6f:49:99:d7:09:38:00:20: - b5:3d:3c:f1:7c:2c:ab:67:4d:df:1d:c2:1e:24:d3:31:60:71: - be:b3:85:7e:a7:1e:ce:41:1f:21:58:63:83:3c:e5:91:4a:18: - 4d:6c:97:13:d5:df:34:c7:22:0a:92:3a:fb:03:3a:b8:62:2b: - 7e:be:03:fb:39:74:03:1d:f3:c7:55:28:e7:ed:cd:28:75:2b: - 75:c5:38:b7:fd:da:98:60:61:0a:aa:eb:17:1a:26:e1:74:7e: - 84:e8:76:bf:15:18:e3:b2:4e:25:41:cb:2b:19:c9:63:6f:aa: - 8a:58:c7:01:2a:cd:fc:04:ea:63:7f:b3:ed:5d:96:a2:b0:26: - 63:8d:0d:3f + a8:f5:cd:7e:9f:43:7f:03:6b:1e:ad:83:ef:1d:9a:f2:f4:79: + 54:36:36:f7:50:76:75:5a:e3:ba:3e:94:a1:a0:9b:34:fa:5d: + dd:fd:89:f5:c6:9d:47:6c:27:38:71:0e:43:0d:29:70:00:f8: + 26:33:99:a2:5f:69:31:97:22:14:b2:a9:07:e7:c5:90:21:8b: + de:a2:65:71:d3:5c:d8:79:cf:38:bb:30:57:c6:2f:1a:8b:aa: + 87:85:d0:4c:27:20:4f:96:88:58:5c:2d:28:16:8b:86:e0:78: + 0b:7e:1b:37:0e:ff:e6:47:4e:11:8f:54:2a:29:55:ea:91:bc: + d8:f0:be:2f:2d:d9:da:a4:eb:46:84:34:cd:43:3e:c2:f0:78: + db:0c:44:a9:0c:9d:ed:da:8f:ce:48:f6:2a:e9:f6:6b:97:b3: + 08:73:40:2f:20:e9:de:39:c2:4b:f2:f4:95:6f:b8:60:10:2e: + a7:f6:03:c6:5a:f3:8d:08:48:72:0e:70:7a:70:e8:a9:61:59: + 00:c4:4f:d7:43:d8:b5:16:a3:f7:ae:42:47:fe:09:95:58:2f: + 03:14:a1:59:39:63:8c:98:bc:a3:2a:f8:be:c1:0f:30:f6:82: + 99:b2:bf:37:91:45:be:ed:04:7c:37:17:e0:10:62:1a:e3:7e: + 07:46:99:4a -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBFzANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MTIyMDAw -MDAwMFoXDTIwMTIyMDAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAK3kym3gnD5Qb2+p91t6fEegknxhwb09mywFGGYDgYjA0ahiobkPnSAz -GmlTJul1m1C6z4UX+VLy/ZHT6bLgPdyAuj54h5uDaiqHP/HlAtCVawa9yNyfptOD -Qg24r2+f0c2p4xCQOi3Er1fO9xsprPPHNXUrzU8aChymOGPXSp05mhugO755M3xs -V7Xe5E0UbXeXWdCZTQHpHqcGt4O3GCAD8L0fTH1iNFXINqbHBd7lzXKvJ7Ydld3E -md4QSb4IxRKMpeWkrWK3/5TWZp8Yy2tJ2X75qymY7eVnrVNQ11Kp1JQEYvxrPDsD -N7C9GPjwo3xXgQ8btZS+7hoKtmnLc7UCAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFBiadh6GTO9nXSB/JEzcP661tVyhMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQCgtsJloJslt8mBmtxj -qq5u84pikmZurT2n/SbU6nt8AIArc9s2hv6xtYoFQNM8bx0RG7KgDfYmqqxjYmHA -frB92nMsFHFB/ZP1ds0hE0Lf5bAm6NDsouQmuLrovUn5OH+SHKJ+j7PT5gpRYIjE -qwhlFFP9w3CKb0mZ1wk4ACC1PTzxfCyrZ03fHcIeJNMxYHG+s4V+px7OQR8hWGOD -POWRShhNbJcT1d80xyIKkjr7Azq4Yit+vgP7OXQDHfPHVSjn7c0odSt1xTi3/dqY -YGEKqusXGibhdH6E6Ha/FRjjsk4lQcsrGcljb6qKWMcBKs38BOpjf7PtXZaisCZj -jQ0/ +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqvDANBgkqhkiG9w0BAQUFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYzMFoXDTIyMDMxMzIwNDYzMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALcVQFNaxi/JnrGWR8Q40rpTaip64VY+4Txw +uH0fu7q3X2bi6FEYecyc62KpR65SUj0c86Tvr4fY+EozgFLbIjN3Ykgi3GuCqbxw +6hUzpHg1r2dR9Yz2OnKYmXAHLYeyS28fJuVV+CldVN5bRLP6jLnImC/FydAcRlYT +xTzvMnrDOo2nQP+a9kDJ73XASwFYfSIis+iTfHtIC9PCdkk3Wpiig9AFLdbyOLRj +plLtn8oA8edV7rndUNG+OVEmX87TXZnTZy5KfncGgAm7wSEK7JtIOfcVe+BsJqfl +XC2XiDBMxNir2uflpnSWaYpx4yz9e4vVsUxzWg8e1lez8mOY8/8CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFGV9WwYI2JzOPqfoYDJmJa63revUMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBBQUAA4IB +AQCo9c1+n0N/A2serYPvHZry9HlUNjb3UHZ1WuO6PpShoJs0+l3d/Yn1xp1HbCc4 +cQ5DDSlwAPgmM5miX2kxlyIUsqkH58WQIYveomVx01zYec84uzBXxi8ai6qHhdBM +JyBPlohYXC0oFouG4HgLfhs3Dv/mR04Rj1QqKVXqkbzY8L4vLdnapOtGhDTNQz7C +8HjbDESpDJ3t2o/OSPYq6fZrl7MIc0AvIOneOcJL8vSVb7hgEC6n9gPGWvONCEhy +DnB6cOipYVkAxE/XQ9i1FqP3rkJH/gmVWC8DFKFZOWOMmLyjKvi+wQ8w9oKZsr83 +kUW+7QR8NxfgEGIa434HRplK -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/spdy_pooling.pem b/net/data/ssl/certificates/spdy_pooling.pem index baed434..5f67d6eb 100644 --- a/net/data/ssl/certificates/spdy_pooling.pem +++ b/net/data/ssl/certificates/spdy_pooling.pem
@@ -2,74 +2,74 @@ Data: Version: 3 (0x2) Serial Number: - c0:31:6d:a9:8d:46:62:c5 - Signature Algorithm: sha256WithRSAEncryption + 11:48:7c:ad:94:b7:50:ec:24:70:a5:6e:36:47:98:71:bc:1b:56:82 + Signature Algorithm: sha256WithRSAEncryption Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Validity - Not Before: Jun 19 18:00:00 2018 GMT - Not After : Jun 16 18:00:00 2028 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 11 20:46:17 2030 GMT Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:bc:75:b7:7b:11:4b:73:c5:b8:f8:2f:4e:46:fd: - e8:f1:cf:af:a5:e1:37:03:04:0f:af:17:43:03:57: - 6b:ea:84:e1:91:53:26:d7:9a:d8:14:c6:fe:1f:17: - 1a:ac:95:a6:06:be:1b:fd:9a:ea:e1:db:10:d1:06: - 10:63:85:7c:04:69:e2:df:fe:44:ac:31:cd:6e:ec: - bf:ff:5c:2e:af:c6:d1:5f:08:d5:84:b1:0a:b0:3c: - 70:80:8e:09:23:ca:49:d2:6b:b8:5c:c3:07:de:13: - 41:6f:84:1b:48:d8:8d:06:57:29:89:23:2a:fc:3d: - 97:3d:31:d4:38:0c:a5:64:7e:59:7c:22:92:a2:02: - fc:68:a8:23:db:d7:da:f6:9e:a7:34:9a:ce:92:ad: - 78:b4:71:08:31:25:ea:d9:a6:fa:52:9f:49:ab:76: - 74:78:f2:11:8f:7c:34:37:5c:5b:19:d1:83:f7:b3: - f3:55:ed:88:f2:05:65:2f:a2:ce:a8:91:bb:cd:dd: - 1f:5c:9a:e0:0a:35:ec:45:b6:9f:b0:ce:fa:f3:05: - 38:ab:34:38:88:6a:d0:f7:b2:0d:11:79:cd:b2:00: - 9c:c0:9b:15:f6:86:df:fe:53:89:8f:86:5a:ed:ac: - 3a:8d:bd:ff:9e:d9:a7:e2:65:6f:ae:85:6c:68:82: - 80:09 + 00:b4:7d:d7:03:66:20:ad:5d:37:5a:43:fe:a2:a4: + 3d:eb:ea:26:ab:43:ee:42:9c:d7:5d:ab:f5:89:37: + aa:ca:c7:ec:b6:02:21:27:84:4c:d3:ab:bb:56:16: + 21:e0:6e:df:f5:dd:02:f7:f0:08:b7:59:e0:1e:d3: + c3:74:5c:67:91:1e:9c:f4:9f:b4:6b:29:58:bd:67: + 66:5c:d5:bc:6f:85:22:c4:34:5d:88:0a:b4:69:50: + 24:06:b9:fc:d2:bf:b7:20:0b:e3:a5:ea:b0:42:b6: + df:fa:a6:e2:66:13:ac:27:ee:c4:6b:6e:cb:1a:5b: + 15:47:d9:cd:06:f1:e5:68:11:03:c2:9e:11:67:e5: + 8a:d8:d9:77:fd:8d:ab:0f:d6:f1:28:41:ea:63:ca: + 98:30:87:da:a3:5b:a6:44:a6:e9:69:67:1d:b1:31: + 15:75:eb:7c:b8:72:52:8c:ea:78:12:65:b3:c4:73: + ee:85:74:35:0d:3d:4a:89:07:20:57:3e:3c:e7:53: + 5e:af:29:f8:2c:36:7f:df:ee:c2:b3:ea:18:33:34: + 54:0b:de:18:fe:75:c4:cc:9a:0c:13:49:de:8b:6e: + bf:96:85:9f:62:52:21:42:33:34:bc:37:39:a9:a2: + cd:09:0a:17:1b:77:69:d7:29:da:38:76:30:68:4e: + 29:a5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:www.example.org, DNS:mail.example.org, DNS:mail.example.com, DNS:example.test Signature Algorithm: sha256WithRSAEncryption - 64:42:12:b1:84:3b:d6:93:d7:43:61:e6:b6:7a:ec:c1:43:14: - f0:94:24:60:d0:53:ee:90:1e:4a:c4:d8:79:3f:10:eb:a5:e3: - 34:e2:bf:9c:ea:c2:a7:dc:8a:1e:f4:71:bc:34:4f:99:a6:58: - 6c:74:fd:85:2b:6a:ee:32:bf:50:22:72:23:e7:1f:12:60:c5: - 21:c1:c6:b6:62:a0:75:77:50:35:aa:b7:f3:2b:e7:27:ea:d2: - 2e:c7:91:2b:ae:fb:31:3f:c0:d8:d1:a4:7d:d1:80:39:a8:46: - df:89:70:84:2b:6a:39:5b:44:2d:cb:73:76:de:8e:dc:97:35: - 2c:75:6a:42:a7:07:a0:4c:64:07:e1:1f:9a:a0:fa:89:18:5a: - 37:90:72:8c:21:ae:0e:fc:28:c7:a4:2a:c6:50:8c:5d:68:ae: - 4b:86:64:ca:56:49:05:55:8a:86:36:9f:99:34:5d:29:f7:1b: - 5d:7f:39:44:03:3e:94:c9:d7:7d:1a:2d:5f:fd:ca:b5:70:2e: - 44:35:fc:56:3d:9f:80:b7:f0:c0:dc:09:63:c6:11:b0:9c:99: - c0:88:46:d8:14:92:1d:3d:3f:48:de:ed:a9:a2:19:af:e4:d2: - 52:d1:9c:b7:05:1f:d3:82:73:0a:3e:c4:21:88:90:9d:77:a9: - 97:d5:c2:d3 + 17:5f:6d:ae:7b:82:7b:dc:5f:18:d2:27:bf:07:a0:8a:b4:5b: + 32:a9:38:f3:d1:18:fd:bd:68:b8:58:58:c7:d4:53:25:82:14: + f4:79:f3:31:83:e9:91:8b:33:87:0a:fe:95:ad:74:52:b3:91: + 4b:dd:82:10:d4:0a:a0:7a:ab:d6:32:b9:07:73:b5:4a:85:35: + 35:66:4b:f1:75:b8:93:07:3c:6a:7f:67:11:e6:9c:bc:bc:e8: + 83:dc:c1:85:11:28:c4:a2:08:25:57:30:6e:96:f6:fd:c5:76: + c9:ea:8a:c6:30:d7:46:49:6a:ca:84:4c:52:22:71:c7:ce:6a: + 43:bc:19:1d:70:d9:4c:4b:48:79:a0:ca:98:dc:53:84:c0:0e: + d5:68:57:5f:a6:d0:13:e4:81:2e:31:1b:d0:f3:32:a0:e3:4f: + de:2c:6c:e0:55:01:77:5b:6d:5b:b0:8a:6d:3e:d4:d1:ca:cc: + 93:1a:0c:73:80:fe:3e:8e:e3:d0:53:cd:d5:29:62:57:f0:97: + 1d:e4:93:ff:2e:ba:92:29:19:12:d1:82:28:8b:9a:8a:e7:ca: + c0:e4:a0:96:99:4a:cd:ad:45:9f:03:17:ca:35:1d:34:83:a1: + 3a:c3:77:ad:91:a3:e6:4b:d7:14:60:a0:5f:aa:35:72:64:c6: + 1f:0f:9f:ca -----BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIJAMAxbamNRmLFMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTgw -NjE5MTgwMDAwWhcNMjgwNjE2MTgwMDAwWjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAvHW3exFLc8W4+C9ORv3o8c+vpeE3AwQPrxdDA1dr6oThkVMm -15rYFMb+HxcarJWmBr4b/Zrq4dsQ0QYQY4V8BGni3/5ErDHNbuy//1wur8bRXwjV -hLEKsDxwgI4JI8pJ0mu4XMMH3hNBb4QbSNiNBlcpiSMq/D2XPTHUOAylZH5ZfCKS -ogL8aKgj29fa9p6nNJrOkq14tHEIMSXq2ab6Up9Jq3Z0ePIRj3w0N1xbGdGD97Pz -Ve2I8gVlL6LOqJG7zd0fXJrgCjXsRbafsM768wU4qzQ4iGrQ97INEXnNsgCcwJsV -9obf/lOJj4Za7aw6jb3/ntmn4mVvroVsaIKACQIDAQABo1AwTjBMBgNVHREERTBD -gg93d3cuZXhhbXBsZS5vcmeCEG1haWwuZXhhbXBsZS5vcmeCEG1haWwuZXhhbXBs -ZS5jb22CDGV4YW1wbGUudGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAZEISsYQ71pPX -Q2HmtnrswUMU8JQkYNBT7pAeSsTYeT8Q66XjNOK/nOrCp9yKHvRxvDRPmaZYbHT9 -hStq7jK/UCJyI+cfEmDFIcHGtmKgdXdQNaq38yvnJ+rSLseRK677MT/A2NGkfdGA -OahG34lwhCtqOVtELctzdt6O3Jc1LHVqQqcHoExkB+EfmqD6iRhaN5ByjCGuDvwo -x6QqxlCMXWiuS4ZkylZJBVWKhjafmTRdKfcbXX85RAM+lMnXfRotX/3KtXAuRDX8 -Vj2fgLfwwNwJY8YRsJyZwIhG2BSSHT0/SN7tqaIZr+TSUtGctwUf04JzCj7EIYiQ -nXepl9XC0w== +MIIDnjCCAoagAwIBAgIUEUh8rZS3UOwkcKVuNkeYcbwbVoIwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MTdaFw0zMDAzMTEyMDQ2MTdaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0fdcDZiCtXTdaQ/6ipD3r6iarQ+5CnNdd +q/WJN6rKx+y2AiEnhEzTq7tWFiHgbt/13QL38Ai3WeAe08N0XGeRHpz0n7RrKVi9 +Z2Zc1bxvhSLENF2ICrRpUCQGufzSv7cgC+Ol6rBCtt/6puJmE6wn7sRrbssaWxVH +2c0G8eVoEQPCnhFn5YrY2Xf9jasP1vEoQepjypgwh9qjW6ZEpulpZx2xMRV163y4 +clKM6ngSZbPEc+6FdDUNPUqJByBXPjznU16vKfgsNn/f7sKz6hgzNFQL3hj+dcTM +mgwTSd6Lbr+WhZ9iUiFCMzS8Nzmpos0JChcbd2nXKdo4djBoTimlAgMBAAGjUDBO +MEwGA1UdEQRFMEOCD3d3dy5leGFtcGxlLm9yZ4IQbWFpbC5leGFtcGxlLm9yZ4IQ +bWFpbC5leGFtcGxlLmNvbYIMZXhhbXBsZS50ZXN0MA0GCSqGSIb3DQEBCwUAA4IB +AQAXX22ue4J73F8Y0ie/B6CKtFsyqTjz0Rj9vWi4WFjH1FMlghT0efMxg+mRizOH +Cv6VrXRSs5FL3YIQ1AqgeqvWMrkHc7VKhTU1ZkvxdbiTBzxqf2cR5py8vOiD3MGF +ESjEogglVzBulvb9xXbJ6orGMNdGSWrKhExSInHHzmpDvBkdcNlMS0h5oMqY3FOE +wA7VaFdfptAT5IEuMRvQ8zKg40/eLGzgVQF3W21bsIptPtTRysyTGgxzgP4+juPQ +U83VKWJX8Jcd5JP/LrqSKRkS0YIoi5qK58rA5KCWmUrNrUWfAxfKNR00g6E6w3et +kaPmS9cUYKBfqjVyZMYfD5/K -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/start_after_expiry.pem b/net/data/ssl/certificates/start_after_expiry.pem index 06164e85..26a1328 100644 --- a/net/data/ssl/certificates/start_after_expiry.pem +++ b/net/data/ssl/certificates/start_after_expiry.pem
@@ -1,8 +1,9 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 18 (0x12) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:b3 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity Not Before: Sep 1 00:00:00 2018 GMT @@ -10,32 +11,32 @@ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:9a:5a:33:cc:a1:02:df:a5:c4:bc:57:68:1b:03: - 11:b3:58:58:8e:78:63:8a:02:0e:8a:ec:5d:96:a6: - 3b:3f:98:db:3e:ba:d6:56:48:8b:2b:00:3c:ef:e2: - 93:08:67:46:68:93:05:2c:63:4c:07:d2:01:6f:36: - 72:cb:d1:40:a4:7f:a2:53:0f:ae:72:92:2f:c9:8a: - 37:96:7b:a6:a9:a0:32:68:39:5b:03:d1:7b:be:fd: - 7c:9d:19:87:87:83:08:f4:66:5b:d4:f5:89:f7:52: - 93:16:6a:6c:70:41:d8:0a:4d:fd:3f:08:e1:3a:d5: - 26:b5:12:09:d0:0d:3b:6c:34:ae:56:46:0f:12:ab: - 39:f9:df:d9:a7:b6:95:ba:d3:96:de:64:42:44:83: - 6a:21:9a:2d:a3:5c:eb:ea:d6:9b:63:80:77:0a:12: - b3:12:1e:31:f1:b3:ac:b2:69:ca:01:51:4a:92:0a: - e5:7f:b5:d5:3f:17:d8:b3:e0:d2:14:c7:b1:3d:0a: - be:e2:ef:4f:25:94:0d:d3:39:2b:1e:fd:ff:69:89: - a8:1e:18:38:1e:2f:6b:8b:9d:e5:2e:1c:ce:f0:9f: - c2:f5:d9:14:31:2a:c5:f2:5f:04:d9:dc:ec:80:48: - 50:5f:b0:be:b7:50:57:22:40:f1:53:40:8e:97:5f: - 66:1d + 00:9e:37:74:a3:d3:a1:6d:c2:c9:55:30:78:ec:e8: + fa:e6:9e:20:e5:be:f0:3e:02:86:84:b4:8f:4c:94: + 94:66:04:19:68:26:ce:23:93:ac:aa:19:dc:87:6d: + bc:8e:10:bb:6f:ac:09:23:e8:1a:16:ae:3e:41:a0: + 67:e7:ad:8c:ef:42:f8:2f:ad:6d:d4:ed:37:8c:9f: + e3:d7:a3:3e:0d:62:2d:65:68:b8:d8:05:7a:4f:e3: + 3f:f1:c7:9b:8a:85:57:48:47:26:8d:d4:c8:84:2c: + 87:cc:59:ec:dd:93:83:a5:88:78:a1:35:09:0e:32: + 66:d0:6e:e9:2e:bc:4a:37:09:db:22:19:e2:83:5d: + 68:89:71:53:b4:b7:6c:06:47:bb:6c:4b:a2:ec:20: + f5:f9:85:a0:f4:08:a5:af:25:4c:19:40:0a:29:f4: + 57:72:bd:4a:9a:3a:8e:a5:18:29:75:e6:25:69:c4: + 12:3a:18:f1:b2:04:08:a2:12:a6:59:44:97:71:03: + ef:c0:e1:22:32:34:b9:90:6a:ba:45:98:e9:8d:2b: + 46:a8:05:7c:be:29:24:ad:ab:be:a8:95:ab:90:c4: + 3d:2f:e5:56:c4:9a:7b:d4:41:b9:31:3d:32:1c:e4: + e9:da:e6:59:6e:10:1b:a1:b0:27:53:a9:07:84:53: + 26:ed Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E8:35:95:5F:B1:76:85:86:C1:35:20:30:76:70:AC:2B:AE:6E:48:DA + 51:9E:6E:30:68:EA:D4:89:70:13:8E:2F:AA:12:27:5F:55:FA:FC:1A X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -44,41 +45,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - a2:76:a0:fc:72:5c:0c:48:59:8e:fb:06:02:1d:de:e6:cd:eb: - 58:97:0c:4e:b8:f3:d2:af:f5:4c:35:36:fc:17:57:58:cc:f0: - fe:67:57:b0:26:f1:07:8f:01:72:62:d9:a0:a4:1f:95:d7:dc: - ea:48:0c:47:a2:57:dd:0b:0d:21:81:24:8f:15:0e:c3:7b:6c: - 3a:46:13:47:4f:fb:bf:b8:f1:74:04:ca:dd:17:40:ed:f4:a9: - 86:82:9a:b3:a5:1b:0e:2b:e2:f2:1b:c1:30:c9:aa:51:c5:f9: - 33:58:33:25:21:d1:10:34:6a:4d:89:9d:9e:ef:ef:cf:ed:3b: - 08:67:47:17:62:3b:5f:f7:81:14:57:86:c7:3c:fc:30:6b:20: - 8d:26:bc:b6:95:83:8d:84:2a:3a:12:25:02:22:c5:0c:11:cc: - eb:61:46:d4:01:f6:65:e0:b9:8d:6c:3e:7b:66:56:d8:c4:2d: - b5:c1:46:9f:b6:19:ae:ba:45:47:86:34:77:2d:3f:4d:66:4f: - fc:84:83:7a:98:c1:cc:b8:79:4f:21:d6:14:45:27:f1:c9:df: - 2d:db:b1:45:28:45:c9:73:a6:e6:6c:50:a5:9a:5a:dc:4b:87: - 9f:7c:fe:29:ed:50:c3:dd:6b:ad:2f:2e:97:1a:02:33:28:6d: - 68:72:7d:31 + 69:0c:89:81:df:db:3c:80:58:6f:8d:59:fc:d2:a0:c2:f2:3a: + 83:60:a6:d8:a0:96:40:61:32:ec:e2:4c:44:ef:fa:20:98:48: + d9:91:f9:40:43:ef:81:58:90:02:78:bc:0b:bf:bd:7e:67:08: + 85:3c:88:e2:d9:38:9c:a8:51:45:43:eb:f1:77:97:47:f1:38: + d8:f1:74:4e:d5:17:a1:a6:dc:1f:f7:62:15:e8:fd:36:1c:3a: + cb:4c:1b:55:1f:62:36:e2:31:89:e0:84:02:5a:04:79:58:66: + 68:f9:d7:44:0d:25:29:f8:68:21:7b:c9:c8:d8:c6:21:9e:cd: + 1a:0b:7d:d6:30:0f:86:f8:7c:e0:e2:e5:b6:e3:ef:9e:c3:21: + 81:1e:f1:92:23:d6:87:b9:0e:90:b1:95:10:f1:20:ba:cf:0f: + 99:6d:bb:69:91:85:3c:ba:73:89:07:2f:e8:b0:9e:ca:94:0e: + b7:0a:95:99:63:df:a9:52:9d:96:84:dd:f5:75:af:ca:72:b3: + 6e:4a:3d:50:23:54:1c:b7:0c:e0:53:55:f2:5d:79:89:72:80: + b0:90:b7:2c:c9:8d:de:cf:ee:0a:ae:12:db:ba:a7:32:57:d3: + d7:64:0d:2e:87:c3:2e:0c:51:f3:84:36:ba:a2:4d:f3:98:ff: + eb:d1:06:d0 -----BEGIN CERTIFICATE----- -MIIDvzCCAqegAwIBAgIBEjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE4MDkwMTAw -MDAwMFoXDTE1MDQwMjAwMDAwMFowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAJpaM8yhAt+lxLxXaBsDEbNYWI54Y4oCDorsXZamOz+Y2z661lZIiysA -PO/ikwhnRmiTBSxjTAfSAW82csvRQKR/olMPrnKSL8mKN5Z7pqmgMmg5WwPRe779 -fJ0Zh4eDCPRmW9T1ifdSkxZqbHBB2ApN/T8I4TrVJrUSCdANO2w0rlZGDxKrOfnf -2ae2lbrTlt5kQkSDaiGaLaNc6+rWm2OAdwoSsxIeMfGzrLJpygFRSpIK5X+11T8X -2LPg0hTHsT0KvuLvTyWUDdM5Kx79/2mJqB4YOB4va4ud5S4czvCfwvXZFDEqxfJf -BNnc7IBIUF+wvrdQVyJA8VNAjpdfZh0CAwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAw -HQYDVR0OBBYEFOg1lV+xdoWGwTUgMHZwrCuubkjaMB8GA1UdIwQYMBaAFJsmC4qY -qbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAP -BgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQCidqD8clwMSFmO+wYC -Hd7mzetYlwxOuPPSr/VMNTb8F1dYzPD+Z1ewJvEHjwFyYtmgpB+V19zqSAxHolfd -Cw0hgSSPFQ7De2w6RhNHT/u/uPF0BMrdF0Dt9KmGgpqzpRsOK+LyG8EwyapRxfkz -WDMlIdEQNGpNiZ2e7+/P7TsIZ0cXYjtf94EUV4bHPPwwayCNJry2lYONhCo6EiUC -IsUMEczrYUbUAfZl4LmNbD57ZlbYxC21wUafthmuukVHhjR3LT9NZk/8hIN6mMHM -uHlPIdYURSfxyd8t27FFKEXJc6bmbFClmlrcS4effP4p7VDD3WutLy6XGgIzKG1o -cn0x +MIIDzjCCAragAwIBAgIQPiydvrBCyM/8mULVTUFqszANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTE4MDkwMTAwMDAwMFoXDTE1MDQwMjAwMDAwMFowYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJ43dKPToW3CyVUweOzo+uaeIOW+8D4ChoS0 +j0yUlGYEGWgmziOTrKoZ3IdtvI4Qu2+sCSPoGhauPkGgZ+etjO9C+C+tbdTtN4yf +49ejPg1iLWVouNgFek/jP/HHm4qFV0hHJo3UyIQsh8xZ7N2Tg6WIeKE1CQ4yZtBu +6S68SjcJ2yIZ4oNdaIlxU7S3bAZHu2xLouwg9fmFoPQIpa8lTBlACin0V3K9Spo6 +jqUYKXXmJWnEEjoY8bIECKISpllEl3ED78DhIjI0uZBqukWY6Y0rRqgFfL4pJK2r +vqiVq5DEPS/lVsSae9RBuTE9Mhzk6drmWW4QG6GwJ1OpB4RTJu0CAwEAAaOBgDB+ +MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFGebjBo6tSJcBOOL6oSJ19V+vwaMB8G +A1UdIwQYMBaAFJsmC4qYqbsduR8c4xpAM+2OF4irMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEBCwUAA4IB +AQBpDImB39s8gFhvjVn80qDC8jqDYKbYoJZAYTLs4kxE7/ogmEjZkflAQ++BWJAC +eLwLv71+ZwiFPIji2TicqFFFQ+vxd5dH8TjY8XRO1Rehptwf92IV6P02HDrLTBtV +H2I24jGJ4IQCWgR5WGZo+ddEDSUp+Gghe8nI2MYhns0aC33WMA+G+Hzg4uW24++e +wyGBHvGSI9aHuQ6QsZUQ8SC6zw+ZbbtpkYU8unOJBy/osJ7KlA63CpWZY9+pUp2W +hN31da/KcrNuSj1QI1QctwzgU1XyXXmJcoCwkLcsyY3ez+4KrhLbuqcyV9PXZA0u +h8MuDFHzhDa6ok3zmP/r0QbQ -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/subjectAltName_sanity_check.pem b/net/data/ssl/certificates/subjectAltName_sanity_check.pem index 5ed3a9b3..d25a217 100644 --- a/net/data/ssl/certificates/subjectAltName_sanity_check.pem +++ b/net/data/ssl/certificates/subjectAltName_sanity_check.pem
@@ -1,35 +1,36 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 16251326626457629923 (0xe1884f76aadab4e3) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Serial Number: + 7f:9a:03:34:c6:e4:ba:e0:92:bb:a0:cb:9a:c4:a6:2a:89:38:57:b5 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT - Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 11 20:46:17 2030 GMT + Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:be:1b:08:be:be:01:88:90:32:54:37:9f:95:fc: - 22:04:22:e1:ef:a8:28:b5:20:a8:dd:f9:ff:4e:3b: - ca:ca:e2:05:43:a0:6e:bb:db:0c:6c:e8:59:05:83: - 2a:65:14:32:83:9b:af:04:61:ab:2b:35:c7:1f:3a: - 59:6b:24:3c:91:f1:0e:18:33:23:0a:13:63:80:59: - 1e:4d:65:e8:60:67:1e:07:8f:70:19:f5:59:5f:b6: - 8b:54:83:c6:a4:33:e8:91:56:9d:f6:90:ab:3d:eb: - 6f:e9:91:07:d2:60:5c:d7:4c:36:97:7e:b4:ff:ac: - f0:8a:41:8f:50:fb:c6:bd:ee:d9:00:ac:d9:f6:4f: - c8:49:fc:1c:b5:3e:f6:74:4d:8e:cc:74:cb:4f:af: - f9:a6:42:dc:9f:e1:4b:0e:bb:82:4f:46:06:3d:6a: - 68:d6:45:96:3e:9c:c6:60:ac:c6:7e:ed:d7:39:16: - 85:c6:91:97:12:6f:74:2a:60:bf:2e:d7:ff:91:d8: - 81:46:d4:e9:33:19:5a:04:35:34:96:c2:de:9d:a8: - 54:75:ed:91:da:94:ed:91:f5:1d:2a:5e:66:b3:4b: - 0f:2f:1f:97:81:83:c4:5e:34:d5:e6:cf:df:e0:a2: - d1:93:e5:64:64:6f:50:5c:7d:bc:4d:1c:2e:93:6a: - ad:65 + 00:b5:46:69:81:43:dc:81:89:0a:bb:45:9a:68:5b: + 13:7c:e9:7c:b1:0f:ef:94:58:cd:ae:6d:fb:07:03: + 0d:10:a9:3e:3e:8b:a2:a4:18:00:aa:ed:47:be:b2: + 13:b9:be:f7:52:68:32:0a:17:06:8f:55:2f:b1:31: + 43:7b:08:db:18:3b:43:b4:55:c1:89:1f:46:58:71: + 55:8f:33:3d:e4:ef:77:1f:e6:f0:ba:10:b4:1a:d4: + 08:7d:34:35:a9:66:76:5c:ab:2c:86:5e:15:5c:53: + 6e:08:92:d5:94:48:49:83:41:c5:ff:18:e4:81:2b: + d9:65:22:8f:90:96:b8:b0:82:40:61:d5:e5:2f:c3: + 9d:c2:95:fa:a7:64:e2:a9:aa:02:19:67:07:b5:cf: + 7c:96:14:0c:37:99:df:10:2f:23:b5:5a:bf:2b:a0: + 8a:f9:fb:72:86:db:db:51:ae:4d:c0:35:da:bb:ce: + 98:f8:1c:28:a6:04:4e:eb:1d:87:83:ac:70:bb:0b: + 17:d2:1d:df:1c:f7:b1:a0:f8:85:5f:31:25:ce:37: + c5:65:09:d4:53:47:a0:fb:ab:cc:95:1a:8e:4c:e5: + bd:a0:dc:c4:32:24:aa:10:10:4e:01:68:b7:df:2a: + fc:64:e5:88:de:bb:dd:60:ac:ea:df:56:a2:11:1f: + f8:73 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,41 +38,41 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.2, IP Address:FE80:0:0:0:0:0:0:1, DNS:test.example, email:test@test.example, othername:<unsupported>, DirName:/CN=127.0.0.3 Signature Algorithm: sha256WithRSAEncryption - 27:c1:5a:11:e6:f9:3b:69:a1:61:a9:af:83:21:3c:d0:60:43: - b2:e4:27:b7:46:67:d8:ae:dc:b7:51:85:53:25:b8:d8:48:d9: - ce:2d:f4:17:2c:75:a1:2d:ad:fe:73:a6:1e:0b:3f:4a:1a:df: - 85:99:db:57:b0:cc:8d:3d:01:74:11:2e:51:81:c4:4b:2d:ee: - bd:05:84:59:ce:a5:40:c5:3d:fa:19:d7:48:32:22:ca:49:d6: - e3:74:8f:fb:02:0e:d1:73:76:7a:3d:ca:e8:96:7e:0d:2e:df: - 79:44:ce:aa:f6:ea:c2:61:d6:54:11:c9:38:85:72:4f:9f:94: - b0:f9:d1:84:43:05:5a:8a:37:d4:ce:d7:e9:16:23:7e:10:67: - 8b:61:00:54:c6:13:da:03:e3:ed:4f:46:eb:44:af:5c:65:e7: - 93:1d:2e:ab:d3:8e:35:e5:4e:d1:56:ef:09:1b:74:b3:a4:ca: - 00:83:ea:e0:95:ed:ef:f3:cd:8a:1e:da:71:6d:40:e7:36:56: - 26:50:9f:5a:86:7f:45:4a:d4:0c:6b:40:68:78:fe:57:0a:e7: - 96:8c:ec:38:57:ac:89:58:54:e0:14:76:4c:93:40:7d:2e:d7: - 36:1d:71:5a:ac:73:f8:ad:80:d3:52:48:b4:68:f3:06:ab:b7: - 5a:b4:2c:1a + 5c:86:b6:d7:42:d1:91:3e:27:16:38:23:1b:58:96:1a:56:26: + d3:c0:2a:62:5b:d2:bb:1b:cf:72:5e:9c:70:40:61:0f:05:0b: + d9:2d:f8:67:de:b2:d5:6b:55:e2:48:b2:08:8f:b5:a0:36:32: + 63:3a:4b:08:12:de:54:e8:a8:bb:e2:4a:0b:76:0c:89:5e:d2: + 22:3d:42:06:23:64:85:17:0e:cf:56:91:ce:cc:ce:68:0a:55: + 87:fa:e0:f9:ad:63:ad:1b:fa:ca:d0:93:91:e6:76:8e:29:8e: + db:9c:1b:39:a6:dc:ed:dd:46:f7:e4:3b:d7:87:d6:73:21:27: + c4:cf:02:18:88:3f:99:ac:ba:63:ab:68:5d:ab:52:d7:1c:9b: + 2f:b9:1f:e8:59:57:ef:c2:f2:6b:2e:58:4d:e1:aa:85:da:8e: + 60:c7:1d:c6:ad:35:8a:07:ab:c5:11:60:84:71:fe:f6:ca:78: + 7b:ce:be:ba:41:c4:5b:b6:3e:da:82:8f:4a:93:b8:7e:2c:9d: + 46:85:5d:4c:66:e1:71:6f:13:12:af:a6:26:5a:48:d0:09:1e: + dd:71:25:9d:06:bc:2b:81:b6:c2:6d:d1:c0:17:a6:98:09:dc: + 0d:e2:74:d6:a8:e9:de:e0:7f:06:86:ef:f8:48:f2:b7:b4:e9: + ba:46:c3:68 -----BEGIN CERTIFICATE----- -MIIDyDCCArCgAwIBAgIJAOGIT3aq2rTjMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTcw -NjA1MTcxMDQ2WhcNMjcwNjAzMTcxMDQ2WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAvhsIvr4BiJAyVDeflfwiBCLh76gotSCo3fn/TjvKyuIFQ6Bu -u9sMbOhZBYMqZRQyg5uvBGGrKzXHHzpZayQ8kfEOGDMjChNjgFkeTWXoYGceB49w -GfVZX7aLVIPGpDPokVad9pCrPetv6ZEH0mBc10w2l360/6zwikGPUPvGve7ZAKzZ -9k/ISfwctT72dE2OzHTLT6/5pkLcn+FLDruCT0YGPWpo1kWWPpzGYKzGfu3XORaF -xpGXEm90KmC/Ltf/kdiBRtTpMxlaBDU0lsLenahUde2R2pTtkfUdKl5ms0sPLx+X -gYPEXjTV5s/f4KLRk+VkZG9QXH28TRwuk2qtZQIDAQABo4GEMIGBMA8GA1UdEwEB -/wQFMAMBAf8wbgYDVR0RBGcwZYcEfwAAAocQ/oAAAAAAAAAAAAAAAAAAAYIMdGVz -dC5leGFtcGxlgRF0ZXN0QHRlc3QuZXhhbXBsZaASBgMqAwSgCwwJaWdub3JlIG1l -pBYwFDESMBAGA1UEAwwJMTI3LjAuMC4zMA0GCSqGSIb3DQEBCwUAA4IBAQAnwVoR -5vk7aaFhqa+DITzQYEOy5Ce3RmfYrty3UYVTJbjYSNnOLfQXLHWhLa3+c6YeCz9K -Gt+FmdtXsMyNPQF0ES5RgcRLLe69BYRZzqVAxT36GddIMiLKSdbjdI/7Ag7Rc3Z6 -Pcroln4NLt95RM6q9urCYdZUEck4hXJPn5Sw+dGEQwVaijfUztfpFiN+EGeLYQBU -xhPaA+PtT0brRK9cZeeTHS6r04415U7RVu8JG3SzpMoAg+rgle3v882KHtpxbUDn -NlYmUJ9ahn9FStQMa0BoeP5XCueWjOw4V6yJWFTgFHZMk0B9Ltc2HXFarHP4rYDT -Uki0aPMGq7datCwa +MIID0zCCArugAwIBAgIUf5oDNMbkuuCSu6DLmsSmKok4V7UwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MTdaFw0zMDAzMTEyMDQ2MTdaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1RmmBQ9yBiQq7RZpoWxN86XyxD++UWM2u +bfsHAw0QqT4+i6KkGACq7Ue+shO5vvdSaDIKFwaPVS+xMUN7CNsYO0O0VcGJH0ZY +cVWPMz3k73cf5vC6ELQa1Ah9NDWpZnZcqyyGXhVcU24IktWUSEmDQcX/GOSBK9ll +Io+QlriwgkBh1eUvw53ClfqnZOKpqgIZZwe1z3yWFAw3md8QLyO1Wr8roIr5+3KG +29tRrk3ANdq7zpj4HCimBE7rHYeDrHC7CxfSHd8c97Gg+IVfMSXON8VlCdRTR6D7 +q8yVGo5M5b2g3MQyJKoQEE4BaLffKvxk5Yjeu91grOrfVqIRH/hzAgMBAAGjgYQw +gYEwDwYDVR0TAQH/BAUwAwEB/zBuBgNVHREEZzBlhwR/AAAChxD+gAAAAAAAAAAA +AAAAAAABggx0ZXN0LmV4YW1wbGWBEXRlc3RAdGVzdC5leGFtcGxloBIGAyoDBKAL +DAlpZ25vcmUgbWWkFjAUMRIwEAYDVQQDDAkxMjcuMC4wLjMwDQYJKoZIhvcNAQEL +BQADggEBAFyGttdC0ZE+JxY4IxtYlhpWJtPAKmJb0rsbz3JenHBAYQ8FC9kt+Gfe +stVrVeJIsgiPtaA2MmM6SwgS3lToqLviSgt2DIle0iI9QgYjZIUXDs9Wkc7MzmgK +VYf64PmtY60b+srQk5Hmdo4pjtucGzmm3O3dRvfkO9eH1nMhJ8TPAhiIP5msumOr +aF2rUtccmy+5H+hZV+/C8msuWE3hqoXajmDHHcatNYoHq8URYIRx/vbKeHvOvrpB +xFu2PtqCj0qTuH4snUaFXUxm4XFvExKvpiZaSNAJHt1xJZ0GvCuBtsJt0cAXppgJ +3A3idNao6d7gfwaG7/hI8re06bpGw2g= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/subjectAltName_www_example_com.pem b/net/data/ssl/certificates/subjectAltName_www_example_com.pem index f08f3fde..fc97459c 100644 --- a/net/data/ssl/certificates/subjectAltName_www_example_com.pem +++ b/net/data/ssl/certificates/subjectAltName_www_example_com.pem
@@ -1,35 +1,36 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 9226305053301513866 (0x800a6b901b6d9e8a) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Serial Number: + 64:b2:04:2e:6b:94:d9:cd:c7:69:39:a8:9c:54:ee:0f:0b:a8:1f:93 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT - Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 11 20:46:17 2030 GMT + Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = 127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:c2:db:bc:7e:99:b1:50:d8:bf:22:12:80:24:5b: - ab:6d:bb:75:86:e1:14:17:9b:e4:c8:f2:99:ef:aa: - be:8f:4a:74:29:a1:ce:24:55:aa:f1:b5:e9:9a:c7: - 01:04:e1:87:c9:38:32:ff:fe:f1:26:e4:36:74:62: - 84:a7:13:1b:44:b5:4c:9f:41:86:f2:28:7c:d1:24: - 3e:c0:f4:4e:0b:81:e8:f1:f7:54:bf:b0:87:2f:19: - 17:92:aa:f7:fd:86:b3:bf:2c:5b:23:da:9b:13:ae: - 0d:32:4d:b4:94:72:c6:08:05:95:c4:1d:b7:e2:34: - 35:6e:44:44:c1:5d:d5:61:78:b9:e9:70:55:e6:a0: - cf:08:1d:7e:85:48:3e:51:33:6b:15:c2:11:f9:37: - db:cf:8b:6a:f0:cc:f7:cc:41:3a:ef:e6:78:3d:03: - 9f:ab:79:3f:aa:6f:e5:68:07:21:f0:62:5b:cd:2d: - d6:fb:fc:9f:71:a4:14:34:d7:3d:a3:27:ee:89:4c: - 6c:06:62:ab:1a:6e:7b:a4:1a:57:0f:93:2d:e5:c0: - 83:43:6d:e8:e3:72:53:58:2d:0f:57:f4:2a:37:84: - bf:d7:7f:f9:4f:5d:9a:96:ce:92:54:86:b4:6c:20: - 0e:fe:9a:f1:74:e3:65:3c:03:09:61:ea:6d:00:9a: - 70:df + 00:b2:74:1b:cb:70:e0:fb:16:f6:9e:e2:fb:1f:53: + d8:40:2a:b7:c0:58:41:8c:cd:97:95:9a:4c:a4:b4: + e8:ce:ac:e0:f3:cb:9c:4c:87:7a:35:0a:32:82:65: + b4:14:8a:e7:8b:d6:ac:37:1c:4e:68:f6:aa:88:17: + f8:e7:bb:c6:2f:73:38:15:ca:32:93:88:54:d8:0a: + da:69:da:51:0f:0c:24:1d:5c:69:e9:3e:cf:20:29: + 7f:c5:e0:99:8f:9a:b0:f2:94:3d:36:49:2a:d3:5f: + 1d:31:57:9f:ac:32:c7:8f:37:cd:26:9f:39:ca:e8: + c7:38:13:87:b6:81:e6:d5:66:5f:6d:28:a2:c3:22: + 4f:e2:38:ac:4b:13:87:aa:7c:03:0e:1e:96:2f:ef: + c3:96:f9:d5:73:34:16:0b:d6:18:0b:7a:95:c4:4a: + b5:ab:79:06:2b:01:8a:36:15:4e:66:c6:2b:ac:bb: + 1e:ea:5e:f5:c1:87:07:c2:88:58:6b:87:a4:ec:c4: + f8:9b:30:a8:34:f7:0d:5f:0c:e5:3f:e2:89:68:32: + 94:29:a5:3c:c3:f0:c5:5c:81:f3:72:a2:a8:d0:26: + f8:0a:95:b0:9f:d8:b1:70:b6:f1:4d:c4:91:0b:1e: + d9:3d:70:38:5c:69:bb:d8:f7:0b:57:01:b4:60:12: + 18:c3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical @@ -37,39 +38,39 @@ X509v3 Subject Alternative Name: DNS:www.example.com Signature Algorithm: sha256WithRSAEncryption - c1:24:33:a1:13:e3:3d:7a:aa:1c:d7:7e:02:27:b3:af:3b:f7: - 88:de:6a:97:11:28:07:ea:39:3b:11:89:9d:07:e5:7c:0e:b1: - 0e:5f:0f:6a:5a:b6:e4:35:ed:45:55:2c:b2:ed:c8:5a:af:69: - 86:87:b6:4e:11:3e:4d:82:a1:f5:11:ce:3c:fb:18:4a:1a:be: - e0:31:4c:bb:0d:2b:90:49:58:a7:1a:33:f3:16:84:d1:f4:ec: - c9:7a:eb:65:04:ac:03:3e:17:97:ac:fb:db:3a:52:bf:af:22: - f7:10:00:a8:ad:d6:0f:a3:c1:f1:6a:9e:78:30:de:0d:03:ad: - f6:8e:f6:6f:4b:af:5f:f4:76:ec:23:fa:d1:a0:1f:40:7f:e4: - 7d:84:cd:5f:42:c3:4c:7d:0e:89:3a:3e:ae:34:18:18:31:45: - 44:2f:d0:1f:e9:46:f0:ee:f2:c4:c7:a8:4d:f3:2d:c6:66:a5: - 02:01:a5:0b:7c:3f:91:d0:38:41:ad:d6:3d:0c:0c:3e:43:81: - cb:7e:87:95:b2:ae:7e:ff:67:11:ea:98:66:b4:3e:87:95:e3: - 37:09:e8:de:22:bb:7b:02:00:40:1b:77:a6:09:65:75:45:a0: - 0a:49:23:32:4e:b1:b5:c3:fb:a2:5b:d5:88:7d:35:04:7d:5b: - 79:53:f5:a0 + 1f:17:5c:2b:99:43:7c:47:03:e4:af:a7:03:2d:32:f0:5a:99: + 64:c2:b2:c2:4e:e5:43:f4:dd:11:f9:0a:7d:53:8d:0e:d1:a0: + 3b:c1:9e:43:5d:73:aa:60:a6:34:05:4d:cb:11:e1:5e:d7:c4: + 2b:f7:b9:a0:b3:5d:07:c8:36:f9:91:bc:f0:62:19:11:ff:86: + 21:40:be:25:ce:cd:90:c1:99:d8:46:4d:e8:e2:40:a6:db:4d: + 26:fc:7a:e1:e6:1f:78:52:39:b5:d7:b2:75:aa:8a:77:3b:20: + 42:6c:4b:8d:9f:34:4d:51:af:f9:46:2b:81:51:7e:21:2f:38: + b0:96:84:92:05:18:3b:ca:b2:64:23:cc:17:48:40:f1:38:d3: + 70:1e:ba:06:84:9c:32:2d:97:f7:ee:2b:43:00:89:f7:ae:8b: + 74:63:70:fc:14:c2:c1:de:9c:e0:49:4f:2e:3e:6f:4b:8b:d5: + aa:94:d1:50:35:99:56:cb:6a:3d:7c:a2:44:29:2f:df:f4:1b: + aa:41:75:9a:e6:fe:b9:13:a7:86:86:a1:2b:77:31:3a:fe:32: + 55:63:a0:81:da:3e:c4:3f:2d:aa:4b:c9:3c:48:f2:fb:a2:46: + ab:ef:22:07:41:29:67:1f:ab:68:e5:9f:bb:d1:17:61:a8:13: + 7e:a9:32:eb -----BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIJAIAKa5AbbZ6KMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTcw -NjA1MTcxMDQ2WhcNMjcwNjAzMTcxMDQ2WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAwtu8fpmxUNi/IhKAJFurbbt1huEUF5vkyPKZ76q+j0p0KaHO -JFWq8bXpmscBBOGHyTgy//7xJuQ2dGKEpxMbRLVMn0GG8ih80SQ+wPROC4Ho8fdU -v7CHLxkXkqr3/YazvyxbI9qbE64NMk20lHLGCAWVxB234jQ1bkREwV3VYXi56XBV -5qDPCB1+hUg+UTNrFcIR+Tfbz4tq8Mz3zEE67+Z4PQOfq3k/qm/laAch8GJbzS3W -+/yfcaQUNNc9oyfuiUxsBmKrGm57pBpXD5Mt5cCDQ23o43JTWC0PV/QqN4S/13/5 -T12als6SVIa0bCAO/prxdONlPAMJYeptAJpw3wIDAQABoy8wLTAPBgNVHRMBAf8E -BTADAQH/MBoGA1UdEQQTMBGCD3d3dy5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsF -AAOCAQEAwSQzoRPjPXqqHNd+Aiezrzv3iN5qlxEoB+o5OxGJnQflfA6xDl8Palq2 -5DXtRVUssu3IWq9phoe2ThE+TYKh9RHOPPsYShq+4DFMuw0rkElYpxoz8xaE0fTs -yXrrZQSsAz4Xl6z72zpSv68i9xAAqK3WD6PB8WqeeDDeDQOt9o72b0uvX/R27CP6 -0aAfQH/kfYTNX0LDTH0OiTo+rjQYGDFFRC/QH+lG8O7yxMeoTfMtxmalAgGlC3w/ -kdA4Qa3WPQwMPkOBy36HlbKufv9nEeqYZrQ+h5XjNwno3iK7ewIAQBt3pglldUWg -CkkjMk6xtcP7olvViH01BH1beVP1oA== +MIIDfTCCAmWgAwIBAgIUZLIELmuU2c3HaTmonFTuDwuoH5MwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MTdaFw0zMDAzMTEyMDQ2MTdaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCydBvLcOD7Fvae4vsfU9hAKrfAWEGMzZeV +mkyktOjOrODzy5xMh3o1CjKCZbQUiueL1qw3HE5o9qqIF/jnu8YvczgVyjKTiFTY +Ctpp2lEPDCQdXGnpPs8gKX/F4JmPmrDylD02SSrTXx0xV5+sMsePN80mnznK6Mc4 +E4e2gebVZl9tKKLDIk/iOKxLE4eqfAMOHpYv78OW+dVzNBYL1hgLepXESrWreQYr +AYo2FU5mxiusux7qXvXBhwfCiFhrh6TsxPibMKg09w1fDOU/4oloMpQppTzD8MVc +gfNyoqjQJvgKlbCf2LFwtvFNxJELHtk9cDhcabvY9wtXAbRgEhjDAgMBAAGjLzAt +MA8GA1UdEwEB/wQFMAMBAf8wGgYDVR0RBBMwEYIPd3d3LmV4YW1wbGUuY29tMA0G +CSqGSIb3DQEBCwUAA4IBAQAfF1wrmUN8RwPkr6cDLTLwWplkwrLCTuVD9N0R+Qp9 +U40O0aA7wZ5DXXOqYKY0BU3LEeFe18Qr97mgs10HyDb5kbzwYhkR/4YhQL4lzs2Q +wZnYRk3o4kCm200m/Hrh5h94Ujm117J1qop3OyBCbEuNnzRNUa/5RiuBUX4hLziw +loSSBRg7yrJkI8wXSEDxONNwHroGhJwyLZf37itDAIn3rot0Y3D8FMLB3pzgSU8u +Pm9Li9WqlNFQNZlWy2o9fKJEKS/f9BuqQXWa5v65E6eGhqErdzE6/jJVY6CB2j7E +Py2qS8k8SPL7okar7yIHQSlnH6to5Z+70RdhqBN+qTLr -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/test_names.pem b/net/data/ssl/certificates/test_names.pem index 95ff8975a..82067fdb 100644 --- a/net/data/ssl/certificates/test_names.pem +++ b/net/data/ssl/certificates/test_names.pem
@@ -1,70 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCr56DO++8VlWy3 -9XXdRKtmLymKfGU8mfUnv4ByKKnZu05BCLrkskcHn0KjferLmUvsuTr88H+icNbP -px1ZvJ58G4lesVcFx+rotsVaBFKPBt+BXlUxDhReet2Vb56/1F8clTeYz+IWQYzt -OpABrO/dxQRq0xmVG0pHXUI6Dk11Vo4Zd62c526kDFCyozvdxYyi62ZuRGI8nMVD -vymk5BvR88zSaRNFeA71GGTxInxi+3/UwVR3hcdhZ1CGRx/52pF3XDrTtKYuhwJL -OZOoUDY+CR9skbEBLvrCemL5PFwl/6upBuLWWxzYqGNrMd6WgEd0XcgAvJplqmeW -wzSgm/27AgMBAAECggEAf5zMsLsvihtKAOoUHDVc89dxBCBCWxGDf4VXCegL5tl4 -Ryj+7MU3m33rz0irY4ciaNI86wZyCZmwrahGTpaKJGGgwY3upxj41tbPfHqW+xxE -EVqA7ZChKF4XXlblR0yVareO9T7lfFYfEwCVZNkHm98k31Rkul7u7jlZ75UshTyL -esQcX8mlEZQXbBVEQ2ojoknWhq+jjRmZzAEZpXLJGIjLe20JT/p+QaNDclFimt6R -thxJ42bnx8G2Pxhl7wXgLmy+Pu6kDrs7gUa9iKqFoMswxifZODMD+iqUct5vgRV2 -e1+1XskeJJn+AKnMymCNujHiSS4iLL/LamMXtWElEQKBgQDS+alLOCzhNSnhFre/ -d4TkPWVLJcafMQ0Embmj1I8JOnpGx7KWuI+f3I8ut1G8kbNichD4yHui0fDlfqRT -pKWZE44K0GZGq5rzA/c3NfFCndHV7lkofS1I8AYVaUnl3oKVg7lhkg0pAr9cC2vE -+k9+iV2Fwq1L3qoiuJF5O1AsWQKBgQDQl2hZSnHxflk9nTtS7njnGI9Q5QSlW8eJ -BrN+6D7lVPK+U/Tqd7QHXwnRsrnOuSuiS0HiFM/7OAmjLRDxCGjUxnkVDAqm0Htj -oVp06FKofRElNb/up8wbFjhjEMrSWF0qGD3WDjmFSHp3ZznO7mw752CnzabD7tid -LF+4mrdoMwKBgDaESynjxz0exsaiXzL7yHxOHSmxBkVGoI2Kx7y9BYUl9kjp+40U -/hAaJ2mz90wZ/le3EAmpjMFDLNOwyPfQOPZ4ZiEHPxaN64lWggBjUQeczodQgvuC -dTw+weOwhGcA+491LWc4HWx2iEpZrSyGXhpdlqwk5TEQxbgZJ4ZDPHFpAoGAVHZK -eYVsd/XKWumUwPLxH9pRBdeGNxLfy/tbqTKPbTslg63pSRupWSbBihjNpghSw8en -aM02ninFtT4lUwQttqKbGsuicIOQwvnt79K2zaS+0YtfKVrmib1IncyJ4/yF1Oq1 -9zwRTIfZlwnEXacrSmJZP/lE4qePLK1wIQb85wMCgYBR6l2B8Cf/MlOlsqfP24ZU -AOm63+CWFarTh0m/pi/SVByLrS8LD3l1jZjaH6Gjw8Xfm6c7iVDJYCe7QWOxvb3c -QbafGkVB+EPmqL6wtnqpxLjtuhe19/L6qlTuM9oqODqqESzhU+bworovVtV8ZH00 -q+99H/JlBoMr13sYXsZYFw== +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0qJb6OLzVG3DP +5EHtczqgmUFVcglIs0kjL+tQHR7rmMFCxp6/MHAcubCms7tlMkSW8qUEQsmRJVF3 +1jXgV063zgrXMTFbuTHmSnLK/9Ff25wyCOkWCYzhz7N+MIgALsSpLUCnmnfZxckU +u2HZnjBoRmU6Zh2lGbhGjFOr4hNINodwVmwh+BzgBqaf1m2ItXIU3oE9+lfyW0GU +aWDTOUZUCPfvSf/UPpLzrWDNdWGlqNjRWqgupyUwKxTg5ewfUhGNV6Mjrc3uKIJn +n4lwYeXHzTvEujsmzt4tlWZvihZijrXF+rBNIFxRZza8RNw2A7zVpecPWZ+ZSwCD +nrCfLkRtAgMBAAECggEAe3N5OCPtZfMKdAWWx5wmQ/h2HN2AWp2pLNJiCqzbpEMO +TYNMl3mSIw8BF+lZ9R0UodHN0cuR0g2eTjWjO1puAExcPBDxmaxD3QqixvVpLgf0 +BHzySozcKLK2BVVEmltbKAA0XlO/8qCld/VUOFFQ4vC32+BMAbZBpnPd+WbTplP2 +uj3KE6yU2Gn6z+cv8NhhhYgHBdgLtojsPu/Ezs/uKqsIomvzSIabzaYd7hk+RxY3 +a2kfVMt5o4mxhax21hwoZUq5bRRHLzNLJlFjHI6/ALJMn0MfJzt0J2/KeWue36z5 +QPW0nGt9DghvARPQtwrCTADSb9lpQoH0CSdLqf6AAQKBgQDfQ6bUcQazMGurrx0e +kUunwtMzxmMs9YOJpasGThFMmt2INP6zF4DePRTAP25wdQH8+quT1Uvws1g6MCa8 +Da8hhxphsDD8gA6bMw4p+mE3PxranAZyjd2P1HcgxfJlJBEG+Hjm5Hw2SqgzbW9G +pAShBTMBUPwJFu2ycynbwF7GAQKBgQDPJbWDSXZZSSzvFdh/ZR6BEmyLrEcJ+nAr +IPqDgL0qgMbm0yU4IgYG6Z7fLoAmJOtHwOm8d3oJUtLqsyLmhPO01zXayXlo3ri2 +T2LD5aqM+IvjwbfojLe2O0eCnU1JdmXCqWK/4neNgYwWAM1ARDBaVcgOiA+zzNde +R+iYCo/2bQKBgQDNZyonLM0jMhr82qCJrNbTwtQYQB6iEEYx7u7HYC9eMOQ7GbZy +Ad+Xls5uiG0MnTl1CxGrcoLpMbar4fzg6h4DVI6a7UREKXRGqNQRHr8t2qrUENOF +tKrwVmI7DqIRFvtrVFG26uKz+D+DAN1tOhzgHy5ruZwGqMeKc5VBDVykAQKBgBFK +5Zc7J70WZcDjwvoHl/9QaW1TiW6k0H5ZN3CI68HDlFcqoz3HYVdsY03gVORaSqXn +zdtk4fQrTN447B3wVWPwX1ePYCpIBYV6pRUTdCRmj08JGfA45xE4a6TUuuH6F06j +01GPd0mB2g7wLDJEPwEbjiLgaucon4YIXLtsjk4VAoGAeH9+EOKh6zvb/nhQ4X9f ++hldkbHhra9WPxRT8wB8mfOXaNVkJruJ6HDyXDb+bqlSaTgakw+VnAa0dSoyYIVB +wy8PWm+0pNjR3QZ01GbL2GVikr0dE805XwabFWHCMigbWvYxla+Kz5iQ9+bUrMAx +jo90xzuvy7tuwUDzXJU97Uc= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: - f3:16:df:45:2e:03:f3:bc:17:7c:99:0e:a4:e5:25:5a + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:aa Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Nov 27 22:36:24 2019 GMT - Not After : Nov 24 22:36:24 2029 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: - 00:ab:e7:a0:ce:fb:ef:15:95:6c:b7:f5:75:dd:44: - ab:66:2f:29:8a:7c:65:3c:99:f5:27:bf:80:72:28: - a9:d9:bb:4e:41:08:ba:e4:b2:47:07:9f:42:a3:7d: - ea:cb:99:4b:ec:b9:3a:fc:f0:7f:a2:70:d6:cf:a7: - 1d:59:bc:9e:7c:1b:89:5e:b1:57:05:c7:ea:e8:b6: - c5:5a:04:52:8f:06:df:81:5e:55:31:0e:14:5e:7a: - dd:95:6f:9e:bf:d4:5f:1c:95:37:98:cf:e2:16:41: - 8c:ed:3a:90:01:ac:ef:dd:c5:04:6a:d3:19:95:1b: - 4a:47:5d:42:3a:0e:4d:75:56:8e:19:77:ad:9c:e7: - 6e:a4:0c:50:b2:a3:3b:dd:c5:8c:a2:eb:66:6e:44: - 62:3c:9c:c5:43:bf:29:a4:e4:1b:d1:f3:cc:d2:69: - 13:45:78:0e:f5:18:64:f1:22:7c:62:fb:7f:d4:c1: - 54:77:85:c7:61:67:50:86:47:1f:f9:da:91:77:5c: - 3a:d3:b4:a6:2e:87:02:4b:39:93:a8:50:36:3e:09: - 1f:6c:91:b1:01:2e:fa:c2:7a:62:f9:3c:5c:25:ff: - ab:a9:06:e2:d6:5b:1c:d8:a8:63:6b:31:de:96:80: - 47:74:5d:c8:00:bc:9a:65:aa:67:96:c3:34:a0:9b: - fd:bb + 00:b4:a8:96:fa:38:bc:d5:1b:70:cf:e4:41:ed:73: + 3a:a0:99:41:55:72:09:48:b3:49:23:2f:eb:50:1d: + 1e:eb:98:c1:42:c6:9e:bf:30:70:1c:b9:b0:a6:b3: + bb:65:32:44:96:f2:a5:04:42:c9:91:25:51:77:d6: + 35:e0:57:4e:b7:ce:0a:d7:31:31:5b:b9:31:e6:4a: + 72:ca:ff:d1:5f:db:9c:32:08:e9:16:09:8c:e1:cf: + b3:7e:30:88:00:2e:c4:a9:2d:40:a7:9a:77:d9:c5: + c9:14:bb:61:d9:9e:30:68:46:65:3a:66:1d:a5:19: + b8:46:8c:53:ab:e2:13:48:36:87:70:56:6c:21:f8: + 1c:e0:06:a6:9f:d6:6d:88:b5:72:14:de:81:3d:fa: + 57:f2:5b:41:94:69:60:d3:39:46:54:08:f7:ef:49: + ff:d4:3e:92:f3:ad:60:cd:75:61:a5:a8:d8:d1:5a: + a8:2e:a7:25:30:2b:14:e0:e5:ec:1f:52:11:8d:57: + a3:23:ad:cd:ee:28:82:67:9f:89:70:61:e5:c7:cd: + 3b:c4:ba:3b:26:ce:de:2d:95:66:6f:8a:16:62:8e: + b5:c5:fa:b0:4d:20:5c:51:67:36:bc:44:dc:36:03: + bc:d5:a5:e7:0f:59:9f:99:4b:00:83:9e:b0:9f:2e: + 44:6d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 72:93:A0:82:75:3D:83:80:E7:FA:7F:34:7B:30:F3:E8:7A:1B:D4:B1 + 4B:85:5B:1B:4D:92:DC:E2:FB:DF:82:21:95:D4:9A:3C:7A:81:D7:EF X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -73,42 +73,42 @@ X509v3 Subject Alternative Name: DNS:a.test, DNS:*.a.test, DNS:b.test, DNS:*.b.test, DNS:c.test, DNS:*.c.test, DNS:d.test, DNS:*.d.test Signature Algorithm: sha256WithRSAEncryption - 9a:cf:6b:2b:2e:00:74:2e:70:a1:eb:a2:4e:b3:46:b6:03:ed: - ea:94:51:66:a2:9b:53:f0:a3:2a:8f:62:24:b4:2b:9b:68:3c: - f1:0f:fd:79:23:94:4d:6d:e6:06:2a:dd:88:d0:47:e8:f6:10: - b6:15:29:32:83:73:a8:7e:65:d5:46:36:d6:50:41:dd:0a:c3: - b5:45:92:8b:59:c8:1c:43:4d:77:78:9b:39:23:16:f4:6c:a5: - a7:1d:82:32:38:6f:d2:8d:d2:2c:97:3b:d7:f1:ed:18:0b:6c: - c3:e1:45:d1:39:96:ca:fb:71:7e:71:2e:0c:0e:0b:c2:18:53: - 72:c0:cf:2f:ec:b2:f1:4c:84:ea:9e:b7:18:e5:f0:ac:57:0d: - 64:3f:ff:6c:c2:18:10:5f:0a:30:d9:3a:a2:04:90:c4:96:c4: - c5:75:d1:13:b6:e3:53:6e:38:f0:ba:a3:42:3d:8d:6c:e8:cf: - 84:79:24:60:b9:63:88:e2:f7:59:7b:5d:4a:cb:cd:aa:bd:b3: - 04:7f:1f:2d:d3:60:de:20:c2:9f:89:0d:96:4c:c6:66:08:1e: - 64:c5:0e:17:89:b7:f1:5a:a6:90:74:b0:c7:aa:5e:a7:03:15: - d5:f8:a4:ef:9e:b3:a5:19:f8:0c:82:b6:bc:89:10:cb:5d:8b: - 3d:f8:ec:88 + 33:8f:42:7b:56:29:7a:dd:85:99:3b:24:21:28:80:8b:92:ab: + bf:9e:4c:d2:23:c6:8d:5a:be:25:8c:b1:ce:ca:4d:ba:a2:a5: + d8:b4:cd:e5:31:3e:6e:73:40:81:30:bf:7e:8f:c6:45:92:74: + 9d:d6:60:4f:7b:b5:4e:06:d4:ad:5f:e7:64:39:2f:7d:68:da: + b8:e6:bc:52:fe:31:39:c8:d0:be:d4:3b:27:64:a3:f4:c0:1b: + 63:c8:12:35:97:4f:be:0e:db:ba:0a:ba:8c:c2:32:ac:a8:5b: + aa:39:4b:1e:62:30:be:8b:f4:02:b7:2a:12:f4:01:76:35:6a: + c3:00:20:72:a1:c8:a8:f8:c2:96:da:af:91:47:87:31:1f:6b: + b7:c1:f8:2a:d9:ed:80:c0:fb:16:06:7a:68:69:77:59:f0:97: + 35:23:30:7e:08:db:79:f1:03:6b:ca:b8:24:27:cd:20:6f:31: + 52:90:d3:f5:0e:b0:3a:19:6a:d4:c8:0f:37:ff:64:88:e7:ce: + b2:f0:c1:7f:a1:9c:f2:97:99:14:a9:db:bc:93:85:de:55:ff: + 8b:1a:a6:e4:cf:7e:f0:0d:b2:f9:ad:ae:09:38:b5:bf:71:a6: + 0e:16:93:d0:0c:ef:2d:db:3d:26:97:79:71:7d:c4:9d:50:59: + ed:4b:5d:91 -----BEGIN CERTIFICATE----- -MIIEEjCCAvqgAwIBAgIRAPMW30UuA/O8F3yZDqTlJVowDQYJKoZIhvcNAQELBQAw -YzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1v -dW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExFTATBgNVBAMMDFRlc3QgUm9v -dCBDQTAeFw0xOTExMjcyMjM2MjRaFw0yOTExMjQyMjM2MjRaMGAxCzAJBgNVBAYT -AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 -MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCr56DO++8VlWy39XXdRKtmLymKfGU8mfUn -v4ByKKnZu05BCLrkskcHn0KjferLmUvsuTr88H+icNbPpx1ZvJ58G4lesVcFx+ro -tsVaBFKPBt+BXlUxDhReet2Vb56/1F8clTeYz+IWQYztOpABrO/dxQRq0xmVG0pH -XUI6Dk11Vo4Zd62c526kDFCyozvdxYyi62ZuRGI8nMVDvymk5BvR88zSaRNFeA71 -GGTxInxi+3/UwVR3hcdhZ1CGRx/52pF3XDrTtKYuhwJLOZOoUDY+CR9skbEBLvrC -emL5PFwl/6upBuLWWxzYqGNrMd6WgEd0XcgAvJplqmeWwzSgm/27AgMBAAGjgcMw -gcAwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUcpOggnU9g4Dn+n80ezDz6Hob1LEw -HwYDVR0jBBgwFoAUmyYLipipux25HxzjGkAz7Y4XiKswHQYDVR0lBBYwFAYIKwYB -BQUHAwEGCCsGAQUFBwMCMFEGA1UdEQRKMEiCBmEudGVzdIIIKi5hLnRlc3SCBmIu -dGVzdIIIKi5iLnRlc3SCBmMudGVzdIIIKi5jLnRlc3SCBmQudGVzdIIIKi5kLnRl -c3QwDQYJKoZIhvcNAQELBQADggEBAJrPaysuAHQucKHrok6zRrYD7eqUUWaim1Pw -oyqPYiS0K5toPPEP/XkjlE1t5gYq3YjQR+j2ELYVKTKDc6h+ZdVGNtZQQd0Kw7VF -kotZyBxDTXd4mzkjFvRspacdgjI4b9KN0iyXO9fx7RgLbMPhRdE5lsr7cX5xLgwO -C8IYU3LAzy/ssvFMhOqetxjl8KxXDWQ//2zCGBBfCjDZOqIEkMSWxMV10RO241Nu -OPC6o0I9jWzoz4R5JGC5Y4ji91l7XUrLzaq9swR/Hy3TYN4gwp+JDZZMxmYIHmTF -DheJt/FappB0sMeqXqcDFdX4pO+es6UZ+AyCtryJEMtdiz347Ig= +MIIEETCCAvmgAwIBAgIQPiydvrBCyM/8mULVTUFqqjANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxN1oXDTIyMDMxMzIwNDYxN1owYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALSolvo4vNUbcM/kQe1zOqCZQVVyCUizSSMv +61AdHuuYwULGnr8wcBy5sKazu2UyRJbypQRCyZElUXfWNeBXTrfOCtcxMVu5MeZK +csr/0V/bnDII6RYJjOHPs34wiAAuxKktQKead9nFyRS7YdmeMGhGZTpmHaUZuEaM +U6viE0g2h3BWbCH4HOAGpp/WbYi1chTegT36V/JbQZRpYNM5RlQI9+9J/9Q+kvOt +YM11YaWo2NFaqC6nJTArFODl7B9SEY1XoyOtze4ogmefiXBh5cfNO8S6OybO3i2V +Zm+KFmKOtcX6sE0gXFFnNrxE3DYDvNWl5w9Zn5lLAIOesJ8uRG0CAwEAAaOBwzCB +wDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRLhVsbTZLc4vvfgiGV1Jo8eoHX7zAf +BgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEF +BQcDAQYIKwYBBQUHAwIwUQYDVR0RBEowSIIGYS50ZXN0gggqLmEudGVzdIIGYi50 +ZXN0gggqLmIudGVzdIIGYy50ZXN0gggqLmMudGVzdIIGZC50ZXN0gggqLmQudGVz +dDANBgkqhkiG9w0BAQsFAAOCAQEAM49Ce1Ypet2FmTskISiAi5Krv55M0iPGjVq+ +JYyxzspNuqKl2LTN5TE+bnNAgTC/fo/GRZJ0ndZgT3u1TgbUrV/nZDkvfWjauOa8 +Uv4xOcjQvtQ7J2Sj9MAbY8gSNZdPvg7bugq6jMIyrKhbqjlLHmIwvov0ArcqEvQB +djVqwwAgcqHIqPjCltqvkUeHMR9rt8H4KtntgMD7FgZ6aGl3WfCXNSMwfgjbefED +a8q4JCfNIG8xUpDT9Q6wOhlq1MgPN/9kiOfOsvDBf6Gc8peZFKnbvJOF3lX/ixqm +5M9+8A2y+a2uCTi1v3GmDhaT0AzvLds9Jpd5cX3EnVBZ7UtdkQ== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/tls_feature_extension.pem b/net/data/ssl/certificates/tls_feature_extension.pem index 67841a93..1c4ca74 100644 --- a/net/data/ssl/certificates/tls_feature_extension.pem +++ b/net/data/ssl/certificates/tls_feature_extension.pem
@@ -1,21 +1,21 @@ -----BEGIN CERTIFICATE----- -MIIDaTCCAlGgAwIBAgIJAIeI+/LexiCJMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTcw -NjA1MTcxMDU0WhcNMTgwNjA1MTcxMDU0WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE -CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH -VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA8bX3pOpg4m3dEhcMVi7zWkxAStqH6FDJB2K5VfACCP13MZV3 -VO6rGcQyBd2NXQUCO+Ui0Jbiw1D2NfOD8bO0sJzlHjLjeHhDG8odpd6MZxApdCNu -Gn8TDtpKGadGCwq7PnlbaYu/Oj3keQfS2ACtY/nLOU8O8+zl8cnVR4gR77fhxJqa -gz3Z/LC8kbMrOQAbDaA6ZAO6uLsnp8ixjrbEjCUJMqSC1L/0VbIZ8wsPKZYAjB0I -fIWuQlWPwZxCzqmjhE3r9sqw1CgukgXdnt/5yxN5MVfN0QcTLYlJQCq2SfkQQNLv -GNoAqiW7rK6C5b1LuAdpuiHpNwvg7loAvbZ+wwIDAQABoyYwJDAPBgNVHREECDAG -hwR/AAABMBEGCCsGAQUFBwEYBAUwAwIBBTANBgkqhkiG9w0BAQsFAAOCAQEA2tLO -/fXAqNgpstCZPTCt+Wu+jYXf8fqpJJNw4TQln9LswxKZZ2oQnF84GskypCBbMZx3 -g5QjF/t/9BBVBdl71uaOxW4FkvWA4YUXonJgtsa6O97jB/56orNG3bAMqraHkZQx -ZoRzbWkEC/y6IYTnlD1kMubISiS7uMQFf3ntvpGl6s8YDIlloeV2RsosTx5bfheY -dkclVi0jtDuctUYdGfBQGiTbt+dorSuQGgmtKNK0zRKYtePS5m6JHHDn5K9TVPjs -wE65POtysB8hydH6Req+i+VSYunmeztb6VNJkDkPRUNcKDXKnMPNwI8u6GBZsSfR -Q8XktPLV77UFTMTBoA== +MIIDdDCCAlygAwIBAgIUJwmcYO+T9T2JBKctB7Hr9z8JYQkwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4w +LjAuMTAeFw0yMDAzMTMyMDQ2MzBaFw0yMTAzMTMyMDQ2MzBaMGAxCzAJBgNVBAYT +AlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3 +MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnwt5EwSjyWlEhaudw3LB+7RCxSZlWN3Qg +Zzies6ybXadr3ehNEUg4pYK2PBSpH+Sdr5fn0goKZem7SwuT4ps0Q7qp+HKnjIcQ +jpaNSXEf53UGiG50ghNK2n8AUKGquWcZiW8MSJbp741ufmptRcsBd+bQnX+3gJ45 +Kk9HE1XO5SLzvmpKJB04RekoVJU1tMaLYtHtKGRmnZENZ2uMmUz8RGRU5s0onNPH +7mlYpy/o5brHNh4PmMSyduSO+EMb239CSEDDZ3iCWFxJ1VgLPTfrlgcOKLlLBd2Y +hXELRivCh+Jff9JadNXhjNjh6MKMFsdHUlrx5kdF5+5PTc7qRwwpAgMBAAGjJjAk +MA8GA1UdEQQIMAaHBH8AAAEwEQYIKwYBBQUHARgEBTADAgEFMA0GCSqGSIb3DQEB +CwUAA4IBAQBsNox5WKzNjWyEO00++6vFlfUjtomdvl4elEkgIeZOqXr9ZBWFJhKY +154+20R4JwUVYeLPEoHu8WMuejMyWotzmtsppTekmvAIpUwQgaW2TIH43PDI4ONZ +s3AFtSMSQV+y4urRRye6LxlyxcpmxACLaoKpOHQom616UTPfUcO+bT81yW2mccM4 +zTADJGkAG1bZJIPk7FQAFPSyBz5R2WUdKBomx6RSXvx6ck0c3vIF3izIMr2pxZ8X +Xdlxq1b5PXULZPYj2oHxDy8FDDt12OQmBMPCxt2np1NiLU5EHt0zyokivUM+MGX5 +x16Y5fSKJl0C3YTSh5W/oOaIcElP8Cms -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/wildcard.pem b/net/data/ssl/certificates/wildcard.pem index 34500b2..ee33b86 100644 --- a/net/data/ssl/certificates/wildcard.pem +++ b/net/data/ssl/certificates/wildcard.pem
@@ -1,69 +1,70 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTlB8ztLsVMnd6 -2FAK6t96JVwtDdQGDTNMBU41KlKxJS4l+PPuYREZBoRsAvFRuWa/9icP8LWqy4g4 -4Njnz3cMjKd0uzAU4L11mffPTFB6cem9HFjNvfIjoP1XopzKYRSw3zwxxVme0Vwa -n5OjBi4SORoL6KKGMNo1Jj/npZ6IsyC/zgdPLCGK2gFa8GrKEXfsjpsr0J88N5mT -SqVo3l+zYWQoNpxvAfLu/GoMAGFVrqR5yUthsIS88tfQMVPx5miPZMsjBpkbW0Wd -K6AsjAzoBBHFlEmDUT99yi4t9bimKjkm5b85gu5AO5OcnGt1V5YKoOIJ46/bWzjM -zHKXqnmjAgMBAAECggEAT1Cfwcpmt7OLhsnAd9dEn42R2HHuobYhHMaAYv3SsgW2 -HxYMm7hXqIIA8lzIClLuadflHNynvbc/AdOIfJ4RiurPe7sQc0MswwFNHLEHGl/J -t9MAl2A1fZXEYy3aiSOLliKZdi79QcRKOtDHj72pV7uAQCadhqCZrIMCQdycabHO -c30AI3cPKdC4ProHhP9bh0cGrIE31wBJx/6aiLWV94FgiIkj46ZSRvtGd13c7cIx -soyGbl4ZuLM4K6A5t8cmfyVv5rqS07rCopNFF1Sam7voBTEpDqXoe4WbY0GCMQi7 -96Q6napbgjCZUCN3vYtljmtOL3DhN+P21am+qauPQQKBgQDuGtsvmDYYJo1Ss/CN -d0YrxB4gIAA1B712HTkW5tH5bpRasAwnHaUplaDl4lE6j4uoih7OyTdgekPBuVO/ -bNdKEPg0oZZuUrL7630JrWh3aq31l9669zLbfjgGqb9TV/oZmuxNTazBNTO1FTjs -48jL401diqZhNz+iw4gtMmPwBQKBgQDjeuYiUUUI90PobUpS3y9TF1LotjQ8RWXf -r6qp234zSE8UM/WlHefvzmvMU1G+M8PKyZa4VbzUVI4RBDBNKcUyRJ1HxRnfcZIh -isZEBqpbjPC0YiFxijZS+lbQJUwYllkASF30Rvss/uaSab7xLb4bKTwLmIHn7tP+ -Iu+IIbr7hwKBgCNdbczF6NLxdvAftcztOEjr2iWfWyiFO8i9UmtqYSmRGQvXNhbh -OlTQ2pMKaFIwW+fui+De1hDIWCP/6MZ33gosNxFqJrPAKMFuGqZDUU7bU3c01Woj -qTQcrSmgMMCqQoVnE03wCYaw5jsxKcFVm89ctXL9UvUBhbwhGqrL3zgZAoGBAMQz -5nbG/fJDwxCf4zEjSyAxx9LsBJXPjZSnYV3r8SeuQHa+ciseZkRSGGw9mQ2ifEdW -JGeNm7bPz1Eh+b80Pd+jiryyZiRxQocnuOZHkXwxThNnaE0T1tMvFN2mrcGvO8ig -oljlOBORL7Is/wHqYEPxBtdBjRpMxhA2db9GyI3VAoGAE3QAcl8LZPQJ32TwPLb5 -oCOS9DYz7PgwR6CYfTNINePN0lnt7J6XQyA10nIKYiv7j1LcJjjmEHcYDYqHamuY -cQDoHD4rZwu3/cpqtldKifopP3mYE5E5wcYVklCZfXl2JohaFt9lQxmgcsRTjLxc -RaOLpZHusNcyPfIqHZQjD/Q= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCdXn3erLvkrUMc +iNA7fuk/Y+9sTYdtHY5qStRE6O1CBB4hQWeaeUHxJm1tyP21xgfeplSEaA+nLLDc +76hGv+hb6hA6NtlNbi234h3FxtBqXgyUSqoR4uCydadAh7Q4BHBPALPue4ySPH/0 +iIb2f7UThbJTaGpqnSx2VfMSoPkE53w1itSwTJZGJKiAhD0ieZgY/ubr6OL1zWiR +U5o4Yykcbgzgds012CRoBBBY6HlbddJ+hczElnEFAbrcOgkRnKC7w0wpKvnuc+WL +4IVVAxWGm1FrCD22H/aO2a+s+CDw6NelX39BobIcKP9KDAbdNxhzGMbKKRLckkPj +K12fXTJjAgMBAAECggEALFzV6O8S7M03LRUYdp05TchzVzmn4sfBPQ+pNV/georE +n6Vben2SbFPj514Qv6x6zXZgPw9C0mLT3QSmkINLEpYySubpbV2Q/9R7hiSc3k9z +Bl7iALbPlx95rcRTtrLxoiPVlXY404TAoYPXYCfyOPWopsC5tyJlxVpHcsn0SUAz +ZVqTRxbxYMSRiMaa1uMQZF3zBShDjxfA1VWr2KLc9a/glz1GnRNbWX6lDvg6zMcc +OS0XsuKTfZbxn3Jb9gqOaoTpxN5feeTOeExl/JVn5xQ0OYNkCD8qxK3PD3mnwJj3 +zoL6TV5lqL7JeXcTgVBlhhsx2u4MVWM3hAg0sPz86QKBgQDKYOHkJwaHPKCj8FwZ +6jCydJyy/8g90h7I4o3tUQN5MYBrWb5rSa0TjcfloUOHtrXMPyTzdzikIQQ7mvNr +xuK67s5coMQqQeGPkf60YlD3Y2RYzhDI+b9bREJldthhZu0TtTozauJuv51SYEDF +baHEhyaf5OqzKmMFKlofLV4WFwKBgQDHEKxP1RuKUrFk1XALa9w3VZ5Adgm3Zbtm +iXonlea2DGv8MCj/MIz/hR0+xe0q4omqQ4RdbML2QAiJrv4KvUVtSf5sZbd3KyW8 +ptr7IK4l4/jOcAyJwuMfEcVk79HbeGdCTaOPUMWtpznuunrjURKQ0HVYri3TTyTh +swsECYXBlQKBgD3Obs6N+Jlus6S9sHMdqbemk4C7Sz1OIaa6QhwbJNNrgcvHQbdk +bd5N66G+qXAWJdl142QTohHGH5PQk8zzlaT/b7isRJyfODLvpHkUmaOkEC5q6Ido +dr95zklMjXLZy0e8jkTLvNGT5YkV6lIhVEk/+VTVxbPoGwulzpY89cILAoGAYbbz +fnSTgkC5R0/mIhUeEiN6/RV0C4xqgxi0172jdHWAhFh3p1yDueHzyx6JHuX4wZVG +4j1DLnGcP0mg9lCWReFufHMprduGOKaHE4KlOYBAX8VswiriJhwpEzUNhHgD5+4I +fY8emfFeZKsxK2hefqt1DsThRbqx1gB3RdIO0EkCgYEAgZppkUS5wU+zK0OeAy3d +pjP6Hphwgg8JwPSjfi0M4RD42+8qxrj7UYoKCMRMv4g4JVccqws2PMtt9ncT18QQ +ok2ctwQGFbd7/g3YBgyKbusmQc56UNs3a+dHRQr1TjBAXap1nVdGMDHyE+CbiZXX +KxK+iwca19IXy6RqYHFwLqI= -----END PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) - Serial Number: 4 (0x4) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a5 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 11 20:46:17 2030 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:d3:94:1f:33:b4:bb:15:32:77:7a:d8:50:0a:ea: - df:7a:25:5c:2d:0d:d4:06:0d:33:4c:05:4e:35:2a: - 52:b1:25:2e:25:f8:f3:ee:61:11:19:06:84:6c:02: - f1:51:b9:66:bf:f6:27:0f:f0:b5:aa:cb:88:38:e0: - d8:e7:cf:77:0c:8c:a7:74:bb:30:14:e0:bd:75:99: - f7:cf:4c:50:7a:71:e9:bd:1c:58:cd:bd:f2:23:a0: - fd:57:a2:9c:ca:61:14:b0:df:3c:31:c5:59:9e:d1: - 5c:1a:9f:93:a3:06:2e:12:39:1a:0b:e8:a2:86:30: - da:35:26:3f:e7:a5:9e:88:b3:20:bf:ce:07:4f:2c: - 21:8a:da:01:5a:f0:6a:ca:11:77:ec:8e:9b:2b:d0: - 9f:3c:37:99:93:4a:a5:68:de:5f:b3:61:64:28:36: - 9c:6f:01:f2:ee:fc:6a:0c:00:61:55:ae:a4:79:c9: - 4b:61:b0:84:bc:f2:d7:d0:31:53:f1:e6:68:8f:64: - cb:23:06:99:1b:5b:45:9d:2b:a0:2c:8c:0c:e8:04: - 11:c5:94:49:83:51:3f:7d:ca:2e:2d:f5:b8:a6:2a: - 39:26:e5:bf:39:82:ee:40:3b:93:9c:9c:6b:75:57: - 96:0a:a0:e2:09:e3:af:db:5b:38:cc:cc:72:97:aa: - 79:a3 + 00:9d:5e:7d:de:ac:bb:e4:ad:43:1c:88:d0:3b:7e: + e9:3f:63:ef:6c:4d:87:6d:1d:8e:6a:4a:d4:44:e8: + ed:42:04:1e:21:41:67:9a:79:41:f1:26:6d:6d:c8: + fd:b5:c6:07:de:a6:54:84:68:0f:a7:2c:b0:dc:ef: + a8:46:bf:e8:5b:ea:10:3a:36:d9:4d:6e:2d:b7:e2: + 1d:c5:c6:d0:6a:5e:0c:94:4a:aa:11:e2:e0:b2:75: + a7:40:87:b4:38:04:70:4f:00:b3:ee:7b:8c:92:3c: + 7f:f4:88:86:f6:7f:b5:13:85:b2:53:68:6a:6a:9d: + 2c:76:55:f3:12:a0:f9:04:e7:7c:35:8a:d4:b0:4c: + 96:46:24:a8:80:84:3d:22:79:98:18:fe:e6:eb:e8: + e2:f5:cd:68:91:53:9a:38:63:29:1c:6e:0c:e0:76: + cd:35:d8:24:68:04:10:58:e8:79:5b:75:d2:7e:85: + cc:c4:96:71:05:01:ba:dc:3a:09:11:9c:a0:bb:c3: + 4c:29:2a:f9:ee:73:e5:8b:e0:85:55:03:15:86:9b: + 51:6b:08:3d:b6:1f:f6:8e:d9:af:ac:f8:20:f0:e8: + d7:a5:5f:7f:41:a1:b2:1c:28:ff:4a:0c:06:dd:37: + 18:73:18:c6:ca:29:12:dc:92:43:e3:2b:5d:9f:5d: + 32:63 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 18:0C:EB:51:B9:D3:36:A9:C9:04:AF:F9:2F:14:F0:99:66:D2:76:D4 + 83:F7:3F:C1:5B:0E:56:28:9B:CF:2C:01:99:48:94:D3:A2:2D:C4:2A X509v3 Authority Key Identifier: keyid:9B:26:0B:8A:98:A9:BB:1D:B9:1F:1C:E3:1A:40:33:ED:8E:17:88:AB @@ -72,41 +73,41 @@ X509v3 Subject Alternative Name: DNS:*.example.org Signature Algorithm: sha256WithRSAEncryption - bd:72:b4:50:5d:7d:8b:b2:64:49:27:68:99:0c:01:d7:c5:91: - 15:a2:86:f1:56:69:48:5b:0a:6c:41:02:3d:11:e8:c6:4b:4c: - 97:f3:dd:d3:8c:24:f9:6d:1f:64:5a:b8:df:78:f7:e0:3f:9c: - 8d:30:7a:3b:10:15:74:f2:0f:49:ec:7c:53:8d:1f:60:c9:7d: - 0b:5d:ca:d6:d7:a3:7f:8a:3f:fa:b7:0b:c4:40:dd:55:fb:fb: - 3d:49:28:82:b9:62:5f:34:84:30:26:1d:71:3c:2b:b9:5e:e1: - 8c:2d:bf:21:bd:2d:fe:47:71:6e:54:6d:e1:d0:f6:23:58:dd: - 9e:db:05:cb:f5:5f:11:3f:e6:d0:9d:aa:46:12:56:95:f6:04: - cc:21:5e:1e:7f:07:fc:f6:48:88:8b:2c:a3:9a:66:d9:1a:1d: - 4e:a8:bd:c3:8f:fe:d6:bf:18:c9:f9:a4:f1:31:7e:12:85:83: - 62:d6:d9:f9:27:20:b4:21:f9:7e:57:52:fa:89:c8:84:78:23: - cf:fb:67:8a:a8:db:63:43:11:16:bf:59:c6:ba:21:9a:d8:0e: - 04:eb:d1:38:42:87:d3:a7:3d:da:83:a6:8f:66:a1:c8:5a:4c: - ff:25:3d:3c:bf:c9:bc:d9:85:49:a3:16:d5:e3:b3:8c:77:a6: - 21:62:93:33 + bd:bf:81:f6:36:d4:6f:66:db:0f:82:e4:de:46:bd:d5:bb:f9: + c1:34:22:f8:05:69:50:2d:0a:53:0e:0a:16:b4:66:8b:e8:82: + 78:cd:05:9f:7d:5b:60:33:67:8b:64:38:0b:cc:99:50:f3:e9: + 60:14:99:88:54:10:53:9b:0a:5f:1a:6b:b8:f2:00:17:21:fa: + 8a:0c:7b:d9:c3:77:1e:39:03:8c:2b:c2:f7:eb:3e:ec:59:12: + 79:51:69:43:a4:b2:df:8b:73:91:66:66:df:9f:f7:6f:dd:16: + 5b:23:e0:6f:ed:27:64:d8:19:1e:6e:8b:5b:c3:bc:d9:13:c6: + 20:79:42:8a:81:0f:89:d8:86:90:13:12:37:64:18:d3:c5:8f: + 64:31:bc:ef:fb:41:81:0b:43:3c:44:a6:8c:89:f6:7f:b4:3e: + 02:bb:a4:55:73:b7:a4:ee:c3:b9:b6:02:a7:4d:77:70:6a:b5: + 17:79:cd:12:28:90:e8:1a:da:44:f5:3b:cc:f7:43:1b:83:6b: + 3c:c2:b0:9f:9b:0d:fc:23:f5:fd:13:02:4c:de:23:95:76:0a: + 6b:0f:56:2a:06:16:7b:5e:a8:46:e2:8c:64:ec:a8:34:13:3c: + 73:5d:45:65:df:1e:8a:60:f4:37:9f:71:16:be:75:3e:18:0e: + 1e:53:d1:9e -----BEGIN CERTIFICATE----- -MIIDyTCCArGgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NloXDTI3MDYwMzE3MTA0NlowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANOUHzO0uxUyd3rYUArq33olXC0N1AYNM0wFTjUqUrElLiX48+5hERkG -hGwC8VG5Zr/2Jw/wtarLiDjg2OfPdwyMp3S7MBTgvXWZ989MUHpx6b0cWM298iOg -/VeinMphFLDfPDHFWZ7RXBqfk6MGLhI5GgvoooYw2jUmP+elnoizIL/OB08sIYra -AVrwasoRd+yOmyvQnzw3mZNKpWjeX7NhZCg2nG8B8u78agwAYVWupHnJS2GwhLzy -19AxU/HmaI9kyyMGmRtbRZ0roCyMDOgEEcWUSYNRP33KLi31uKYqOSblvzmC7kA7 -k5yca3VXlgqg4gnjr9tbOMzMcpeqeaMCAwEAAaOBijCBhzAMBgNVHRMBAf8EAjAA -MB0GA1UdDgQWBBQYDOtRudM2qckEr/kvFPCZZtJ21DAfBgNVHSMEGDAWgBSbJguK -mKm7HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw -GAYDVR0RBBEwD4INKi5leGFtcGxlLm9yZzANBgkqhkiG9w0BAQsFAAOCAQEAvXK0 -UF19i7JkSSdomQwB18WRFaKG8VZpSFsKbEECPRHoxktMl/Pd04wk+W0fZFq433j3 -4D+cjTB6OxAVdPIPSex8U40fYMl9C13K1tejf4o/+rcLxEDdVfv7PUkogrliXzSE -MCYdcTwruV7hjC2/Ib0t/kdxblRt4dD2I1jdntsFy/VfET/m0J2qRhJWlfYEzCFe -Hn8H/PZIiIsso5pm2RodTqi9w4/+1r8Yyfmk8TF+EoWDYtbZ+ScgtCH5fldS+onI -hHgjz/tniqjbY0MRFr9ZxrohmtgOBOvROEKH06c92oOmj2ahyFpM/yU9PL/JvNmF -SaMW1eOzjHemIWKTMw== +MIID2DCCAsCgAwIBAgIQPiydvrBCyM/8mULVTUFqpTANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxN1oXDTMwMDMxMTIwNDYxN1owYDELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJ1efd6su+StQxyI0Dt+6T9j72xNh20djmpK +1ETo7UIEHiFBZ5p5QfEmbW3I/bXGB96mVIRoD6cssNzvqEa/6FvqEDo22U1uLbfi +HcXG0GpeDJRKqhHi4LJ1p0CHtDgEcE8As+57jJI8f/SIhvZ/tROFslNoamqdLHZV +8xKg+QTnfDWK1LBMlkYkqICEPSJ5mBj+5uvo4vXNaJFTmjhjKRxuDOB2zTXYJGgE +EFjoeVt10n6FzMSWcQUButw6CRGcoLvDTCkq+e5z5YvghVUDFYabUWsIPbYf9o7Z +r6z4IPDo16Vff0Ghshwo/0oMBt03GHMYxsopEtySQ+MrXZ9dMmMCAwEAAaOBijCB +hzAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSD9z/BWw5WKJvPLAGZSJTToi3EKjAf +BgNVHSMEGDAWgBSbJguKmKm7HbkfHOMaQDPtjheIqzAdBgNVHSUEFjAUBggrBgEF +BQcDAQYIKwYBBQUHAwIwGAYDVR0RBBEwD4INKi5leGFtcGxlLm9yZzANBgkqhkiG +9w0BAQsFAAOCAQEAvb+B9jbUb2bbD4Lk3ka91bv5wTQi+AVpUC0KUw4KFrRmi+iC +eM0Fn31bYDNni2Q4C8yZUPPpYBSZiFQQU5sKXxpruPIAFyH6igx72cN3HjkDjCvC +9+s+7FkSeVFpQ6Sy34tzkWZm35/3b90WWyPgb+0nZNgZHm6LW8O82RPGIHlCioEP +idiGkBMSN2QY08WPZDG87/tBgQtDPESmjIn2f7Q+ArukVXO3pO7DubYCp013cGq1 +F3nNEiiQ6BraRPU7zPdDG4NrPMKwn5sN/CP1/RMCTN4jlXYKaw9WKgYWe16oRuKM +ZOyoNBM8c11FZd8eimD0N59xFr51PhgOHlPRng== -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/x509_verify_results.chain.pem b/net/data/ssl/certificates/x509_verify_results.chain.pem index 84acc63..16f3314 100644 --- a/net/data/ssl/certificates/x509_verify_results.chain.pem +++ b/net/data/ssl/certificates/x509_verify_results.chain.pem
@@ -1,41 +1,42 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + db:15:0b:57:64:f6:dc:4a:c0:6e:e7:ea:5d:c9:c5:cd + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Intermediate CA Validity - Not Before: Jun 5 17:10:46 2017 GMT - Not After : Jun 3 17:10:46 2027 GMT + Not Before: Mar 13 20:46:17 2020 GMT + Not After : Mar 13 20:46:17 2022 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:b4:bf:d2:97:33:e5:13:5b:77:65:bd:73:1a:75: - 28:9b:47:59:e6:b7:30:e8:46:33:6d:58:5b:da:1f: - 0a:ff:e4:e4:2d:f2:1d:f8:89:e8:64:2e:f6:c3:cd: - d7:a3:8e:d7:f7:cd:e7:d8:0e:10:c3:e7:56:d2:fc: - e5:e6:d3:4e:e2:ff:82:4d:18:63:87:b0:a3:de:da: - ef:0a:37:7b:ac:b5:b7:43:ce:f2:07:39:df:14:e9: - c3:a4:41:3e:7e:68:47:34:9b:7b:61:c4:18:e6:13: - ce:b3:b4:a6:e0:ba:03:ee:e4:eb:e7:aa:f4:6d:be: - 97:5b:aa:06:97:50:01:d0:78:b8:d6:92:b0:e4:e2: - b9:43:88:b5:ae:14:64:7d:52:70:d4:05:1c:09:25: - d5:e2:4f:c9:a8:82:db:41:31:c3:be:44:6f:0b:d4: - fd:bf:c1:ee:d9:62:bf:3b:8f:b5:00:c8:d1:df:5d: - 4a:13:ad:71:e4:4b:5f:d1:d9:72:4c:83:d8:93:40: - bf:6c:cd:2f:66:0e:04:d6:b9:43:28:24:c9:25:fd: - 59:70:fe:3d:f2:a9:0a:4e:c2:9b:c4:de:9e:57:5e: - 5d:16:25:e6:78:b6:44:49:29:9d:f6:bf:74:fb:85: - d6:0d:f1:65:58:f2:2b:d6:8f:10:49:c8:00:2d:88: - e2:2d + 00:a6:58:dc:36:25:d1:a6:a4:93:08:cf:2d:3b:86: + 07:b5:ce:44:c7:5b:7f:d7:11:a6:51:98:ec:82:4c: + 6c:31:45:a3:04:56:6f:c1:77:d6:6c:38:db:3c:d8: + 2d:d2:25:aa:47:4f:f4:a4:f3:8e:09:98:37:d3:0f: + 71:f6:ac:29:47:7b:08:8e:68:ab:fc:7e:10:02:65: + b6:86:4c:b0:27:04:6a:15:23:b3:3a:19:b8:15:f3: + 3b:0b:1d:ad:d8:9f:49:b1:72:f2:af:08:df:c8:02: + aa:cb:f3:2a:2d:c0:fd:28:b0:97:da:4a:a9:22:74: + c2:3a:0b:64:65:2a:c9:f4:65:f7:46:7f:3c:a9:61: + 96:5f:0c:2a:66:c3:f2:c7:fe:69:87:2f:70:0c:1b: + 66:37:92:c5:3f:85:40:d8:e4:26:45:18:3f:ce:53: + 27:a0:97:7e:11:87:dc:4a:ec:26:eb:ff:95:0e:b3: + ea:2e:66:45:0a:aa:cc:c5:81:59:2e:0a:1b:0e:1b: + 59:71:ca:d3:90:ef:6f:ca:b7:8c:a8:ca:82:55:b8: + fb:4a:e5:ba:29:78:ce:eb:cd:8e:4f:9c:af:85:a4: + ef:0b:64:5e:3e:7e:a0:e0:e5:b0:86:f3:19:08:fa: + 3f:fa:1e:4a:9b:fc:b5:16:17:88:0d:38:0e:c3:a6: + 5f:d5 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - E0:DC:E0:2F:07:88:74:3A:9F:D3:30:A3:71:8A:F9:D6:A5:E5:A6:53 + 81:CD:A7:DD:52:43:7F:DF:7A:4B:BA:F5:B0:B6:10:A0:44:0C:EC:6C X509v3 Authority Key Identifier: keyid:17:5C:45:F3:D0:AC:1C:10:4C:8B:43:44:20:C4:DD:93:C5:C5:19:3B @@ -44,57 +45,58 @@ X509v3 Subject Alternative Name: IP Address:127.0.0.1 Signature Algorithm: sha256WithRSAEncryption - 43:f7:63:38:a3:30:3f:ab:e6:6c:42:a1:dd:ff:8d:f6:ad:b2: - eb:b6:9e:4b:bd:90:fc:d8:f4:f0:5a:42:fc:be:5b:cc:c7:24: - 2f:91:48:a6:a1:bb:a2:b7:19:61:21:ac:d3:81:ee:6e:bb:04: - 2d:16:b5:7e:cb:e6:a3:17:8f:3e:65:4d:1d:8d:c1:da:3d:3b: - ad:a1:b3:e8:f5:e3:16:13:17:0a:a3:45:e0:cf:84:b2:3d:e8: - 38:69:31:46:e8:8c:10:63:0f:5e:6b:f4:10:25:23:98:b8:5c: - d9:06:78:83:18:70:09:a6:ef:8f:e9:f5:ff:b3:44:85:35:f6: - 69:61:0b:2a:8d:de:87:1c:ec:dc:50:c7:67:ef:88:2c:28:de: - c0:db:6e:21:20:00:c5:5b:5d:ef:36:c6:0a:e9:06:a3:25:3e: - 4d:13:fa:f0:3f:bc:fe:9c:68:48:ff:ec:1b:e7:2c:39:ac:88: - 2b:a0:88:96:11:3e:f0:20:e2:29:fc:bd:d3:d3:ca:24:63:58: - 17:15:c3:ac:19:21:cb:21:29:fc:53:e7:3b:cf:c2:0a:5e:f4: - ce:f1:9e:77:38:d4:c6:90:4e:94:fe:2e:97:cb:1a:94:2a:1e: - 8c:3b:db:36:65:c6:19:ba:d7:0b:03:22:e5:92:e2:f6:3e:df: - 99:ce:6b:49 + 80:2c:94:86:a4:69:32:38:0e:41:73:db:0a:42:e9:1c:05:81: + fa:80:cc:c2:c3:2b:3d:7e:46:b1:19:32:ff:97:fe:fc:be:c2: + 32:7c:e2:db:fe:27:0a:75:26:6a:b8:6f:9f:0f:37:0c:bc:02: + 2d:6c:04:63:4a:45:50:75:b7:3e:90:49:85:50:3d:85:52:57: + 1d:2e:d5:b9:75:c1:84:56:9a:cb:92:e8:9b:28:38:bd:20:c5: + 6d:8c:53:70:37:9a:f5:64:5e:d5:11:e4:28:6b:08:9c:8b:0f: + 2a:f7:a1:59:00:15:58:6b:11:91:11:27:c3:6e:e2:54:52:f7: + fe:e6:3d:27:d5:0f:b6:91:ab:39:12:9d:c5:dc:f3:02:e4:87: + 48:c7:e8:93:c0:85:69:5c:97:8b:d8:5f:bf:d4:a1:f2:c4:5a: + 69:88:b0:3c:75:86:30:09:b4:84:0a:17:56:2c:6f:d4:c6:10: + f9:23:1c:5e:77:8c:29:5c:db:41:36:33:c7:3a:00:85:f9:a0: + f5:e3:71:9a:55:b7:0b:45:45:30:07:a7:78:6f:b2:2b:4e:e5: + 84:2f:bc:49:d7:80:07:ed:d1:44:c8:c3:5a:ec:3c:65:05:a0: + 78:e3:a3:8b:1c:b2:2e:b0:64:f5:9e:7b:08:8d:bd:4a:07:4f: + 29:50:74:e8 -----BEGIN CERTIFICATE----- -MIIDxzCCAq+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEdMBsGA1UEAwwUVGVzdCBJbnRlcm1lZGlhdGUgQ0EwHhcN -MTcwNjA1MTcxMDQ2WhcNMjcwNjAzMTcxMDQ2WjBgMQswCQYDVQQGEwJVUzETMBEG -A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UE -CgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtL/SlzPlE1t3Zb1zGnUom0dZ5rcw6EYzbVhb2h8K/+Tk -LfId+InoZC72w83Xo47X983n2A4Qw+dW0vzl5tNO4v+CTRhjh7Cj3trvCjd7rLW3 -Q87yBznfFOnDpEE+fmhHNJt7YcQY5hPOs7Sm4LoD7uTr56r0bb6XW6oGl1AB0Hi4 -1pKw5OK5Q4i1rhRkfVJw1AUcCSXV4k/JqILbQTHDvkRvC9T9v8Hu2WK/O4+1AMjR -311KE61x5Etf0dlyTIPYk0C/bM0vZg4E1rlDKCTJJf1ZcP498qkKTsKbxN6eV15d -FiXmeLZESSmd9r90+4XWDfFlWPIr1o8QScgALYjiLQIDAQABo4GAMH4wDAYDVR0T -AQH/BAIwADAdBgNVHQ4EFgQU4NzgLweIdDqf0zCjcYr51qXlplMwHwYDVR0jBBgw -FoAUF1xF89CsHBBMi0NEIMTdk8XFGTswHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG -AQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQELBQADggEBAEP3Yzij -MD+r5mxCod3/jfatsuu2nku9kPzY9PBaQvy+W8zHJC+RSKahu6K3GWEhrNOB7m67 -BC0WtX7L5qMXjz5lTR2Nwdo9O62hs+j14xYTFwqjReDPhLI96DhpMUbojBBjD15r -9BAlI5i4XNkGeIMYcAmm74/p9f+zRIU19mlhCyqN3occ7NxQx2fviCwo3sDbbiEg -AMVbXe82xgrpBqMlPk0T+vA/vP6caEj/7BvnLDmsiCugiJYRPvAg4in8vdPTyiRj -WBcVw6wZIcshKfxT5zvPwgpe9M7xnnc41MaQTpT+LpfLGpQqHow72zZlxhm61wsD -IuWS4vY+35nOa0k= +MIID1zCCAr+gAwIBAgIRANsVC1dk9txKwG7n6l3Jxc0wDQYJKoZIhvcNAQELBQAw +azELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1v +dW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExHTAbBgNVBAMMFFRlc3QgSW50 +ZXJtZWRpYXRlIENBMB4XDTIwMDMxMzIwNDYxN1oXDTIyMDMxMzIwNDYxN1owYDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50 +YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKZY3DYl0aakkwjPLTuGB7XO +RMdbf9cRplGY7IJMbDFFowRWb8F31mw42zzYLdIlqkdP9KTzjgmYN9MPcfasKUd7 +CI5oq/x+EAJltoZMsCcEahUjszoZuBXzOwsdrdifSbFy8q8I38gCqsvzKi3A/Siw +l9pKqSJ0wjoLZGUqyfRl90Z/PKlhll8MKmbD8sf+aYcvcAwbZjeSxT+FQNjkJkUY +P85TJ6CXfhGH3ErsJuv/lQ6z6i5mRQqqzMWBWS4KGw4bWXHK05Dvb8q3jKjKglW4 ++0rluil4zuvNjk+cr4Wk7wtkXj5+oODlsIbzGQj6P/oeSpv8tRYXiA04DsOmX9UC +AwEAAaOBgDB+MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIHNp91SQ3/feku69bC2 +EKBEDOxsMB8GA1UdIwQYMBaAFBdcRfPQrBwQTItDRCDE3ZPFxRk7MB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3 +DQEBCwUAA4IBAQCALJSGpGkyOA5Bc9sKQukcBYH6gMzCwys9fkaxGTL/l/78vsIy +fOLb/icKdSZquG+fDzcMvAItbARjSkVQdbc+kEmFUD2FUlcdLtW5dcGEVprLkuib +KDi9IMVtjFNwN5r1ZF7VEeQoawiciw8q96FZABVYaxGRESfDbuJUUvf+5j0n1Q+2 +kas5Ep3F3PMC5IdIx+iTwIVpXJeL2F+/1KHyxFppiLA8dYYwCbSEChdWLG/UxhD5 +Ixxed4wpXNtBNjPHOgCF+aD143GaVbcLRUUwB6d4b7IrTuWEL7xJ14AH7dFEyMNa +7DxlBaB446OLHLIusGT1nnsIjb1KB08pUHTo -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: + 3e:2c:9d:be:b0:42:c8:cf:fc:99:42:d5:4d:41:6a:a2 + Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA Validity - Not Before: Jun 5 17:10:45 2017 GMT - Not After : Jun 3 17:10:45 2027 GMT + Not Before: Mar 13 20:46:16 2020 GMT + Not After : Mar 11 20:46:16 2030 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Intermediate CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: 00:9d:e9:bd:e4:3d:4a:2f:fb:c2:f9:e6:22:2a:42: 15:46:1c:8c:8f:47:4c:e9:c5:57:95:1f:66:70:93: @@ -123,55 +125,57 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 3e:f5:d7:fd:82:3b:1e:34:8c:66:a2:f3:5e:18:e1:f1:a9:75: - 9f:b5:93:e7:0a:8e:cf:0a:33:ed:49:cd:ce:ce:ca:5f:a3:1d: - 64:76:d3:84:16:fe:9d:88:ac:f4:d1:f8:36:2b:20:80:52:0a: - ef:e0:0f:64:27:55:35:a3:7b:c6:8a:7c:a5:c4:29:17:b1:fa: - d2:89:5d:13:6b:b8:03:cb:d7:12:d6:ce:24:f0:af:48:17:03: - 54:99:af:e9:cb:fd:44:44:18:23:61:90:f6:bd:55:65:06:c3: - 36:98:8d:ea:7d:0f:79:ef:b6:bb:22:28:03:a6:ec:d9:d4:1b: - 47:ac:2c:25:de:ef:1a:02:69:4c:18:bb:29:48:f4:9d:e1:52: - 42:64:6c:88:46:68:86:83:fd:24:f5:7d:05:d7:1a:7e:22:bc: - 49:75:9c:8a:4d:e8:f3:a2:eb:9b:83:70:a7:d6:dd:2f:05:2d: - aa:be:d7:ee:7b:8e:75:44:3b:da:df:85:61:bf:e9:3b:13:40: - 4e:8b:52:08:d9:e4:8c:54:da:41:db:7b:2c:05:5e:99:06:0d: - 02:8c:8e:19:8e:55:b0:3a:33:18:30:03:a7:ed:4a:e4:f8:58: - cc:12:b8:af:d6:66:55:29:ec:01:1f:92:ed:3d:4d:c3:71:3b: - e0:2f:70:90 + 00:25:9c:ba:83:ee:0f:a2:57:cc:9a:d4:50:15:d5:e0:e7:4a: + 8a:57:d1:3e:b1:de:a5:be:26:f0:22:98:35:c0:ee:f1:84:4f: + aa:8d:92:e5:5c:29:23:ad:68:fb:9a:68:d0:2c:6e:04:5e:25: + fb:a0:65:04:fc:82:0b:ec:5b:53:a9:f4:61:1e:15:0f:5e:93: + 94:ec:d3:31:82:06:a1:16:09:01:b9:cb:90:a9:f9:ac:e3:d3: + 15:4c:2c:75:1c:97:24:d3:33:33:e1:b3:53:28:4e:e3:8e:6f: + 59:06:83:20:06:bd:9b:e9:44:8a:bd:80:59:6d:c2:cd:ce:c5: + 9c:81:31:3c:72:f5:6c:bf:31:69:a9:7c:32:28:cb:0e:d3:fd: + 23:5b:30:e0:c1:e9:c8:f8:6e:21:d1:86:c6:ca:62:a6:d6:19: + e4:0b:25:88:95:74:ce:b3:c6:4c:3c:32:63:d6:6a:8b:a3:49: + 53:15:85:9d:1a:06:16:e5:62:35:f5:d2:8c:99:91:15:35:9e: + 9d:36:98:75:4d:f9:39:de:2e:74:8f:36:2b:3a:b4:51:74:26: + 7c:22:6b:c3:52:3e:03:9f:cc:31:e9:24:68:6b:49:63:b5:24: + 6f:08:79:ed:4a:c1:6b:b5:da:72:1f:d5:a4:7e:6c:9b:4d:d2: + 4d:5d:c1:2b -----BEGIN CERTIFICATE----- -MIIDizCCAnOgAwIBAgIBATANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzET -MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G -A1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTE3MDYwNTE3 -MTA0NVoXDTI3MDYwMzE3MTA0NVowazELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh -bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg -Q0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIVRhyMj0dM6cVXlR9mcJMi -8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3H7bhUWvtexnH+c473GXp -ZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW+LIIWJ2NpzNFFTSBrS0t -nGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQNHc520cED+1EsmVGIiCI -WSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J8R6u64ozjCdbHr5tIRtC -cpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtzrwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyLQ0QgxN2TxcUZOzAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAD711/2COx40jGai814Y4fGp -dZ+1k+cKjs8KM+1Jzc7Oyl+jHWR204QW/p2IrPTR+DYrIIBSCu/gD2QnVTWje8aK -fKXEKRex+tKJXRNruAPL1xLWziTwr0gXA1SZr+nL/UREGCNhkPa9VWUGwzaYjep9 -D3nvtrsiKAOm7NnUG0esLCXe7xoCaUwYuylI9J3hUkJkbIhGaIaD/ST1fQXXGn4i -vEl1nIpN6POi65uDcKfW3S8FLaq+1+57jnVEO9rfhWG/6TsTQE6LUgjZ5IxU2kHb -eywFXpkGDQKMjhmOVbA6MxgwA6ftSuT4WMwSuK/WZlUp7AEfku09TcNxO+AvcJA= +MIIDmjCCAoKgAwIBAgIQPiydvrBCyM/8mULVTUFqojANBgkqhkiG9w0BAQsFADBj +MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEQMA4GA1UECgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290 +IENBMB4XDTIwMDMxMzIwNDYxNloXDTMwMDMxMTIwNDYxNlowazELMAkGA1UEBhMC +VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx +EDAOBgNVBAoMB1Rlc3QgQ0ExHTAbBgNVBAMMFFRlc3QgSW50ZXJtZWRpYXRlIENB +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnem95D1KL/vC+eYiKkIV +RhyMj0dM6cVXlR9mcJMi8JTDu7Vb76RvyMeJlXW6DDa/TmupNUcIQ54pauLD+wO3 +H7bhUWvtexnH+c473GXpZseDlMTRTu7tZEuB8RrqWmQYG2pOk9ATbJBgytJOtyQW ++LIIWJ2NpzNFFTSBrS0tnGDv+SuY/nnTjSxI2xKR9C76v/UmwYIFgN1MqHC/p7wQ +NHc520cED+1EsmVGIiCIWSgPxwyitJGloqrKBZ+Km26jy9Sk6CR1nSCBIltfdz7J +8R6u64ozjCdbHr5tIRtCcpXjnhMDdadY1L5oEv5jjksRejTno2vdc64+GZrskYtz +rwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXXEXz0KwcEEyL +Q0QgxN2TxcUZOzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAAAl +nLqD7g+iV8ya1FAV1eDnSopX0T6x3qW+JvAimDXA7vGET6qNkuVcKSOtaPuaaNAs +bgReJfugZQT8ggvsW1Op9GEeFQ9ek5Ts0zGCBqEWCQG5y5Cp+azj0xVMLHUclyTT +MzPhs1MoTuOOb1kGgyAGvZvpRIq9gFltws3OxZyBMTxy9Wy/MWmpfDIoyw7T/SNb +MODB6cj4biHRhsbKYqbWGeQLJYiVdM6zxkw8MmPWaoujSVMVhZ0aBhblYjX10oyZ +kRU1np02mHVN+TneLnSPNis6tFF0Jnwia8NSPgOfzDHpJGhrSWO1JG8Iee1KwWu1 +2nIf1aR+bJtN0k1dwSs= -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) - Serial Number: 10687961985666567129 (0x945344cc7888cbd9) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA + Serial Number: + 2f:25:f3:ce:3c:5e:72:d0:33:29:f6:09:1f:5d:5f:53:d9:ac:23:bb + Signature Algorithm: sha256WithRSAEncryption + Issuer: C = US, ST = California, L = Mountain View, O = Test CA, CN = Test Root CA Validity - Not Before: Jun 5 17:10:44 2017 GMT - Not After : Jun 3 17:10:44 2027 GMT - Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=Test Root CA + Not Before: Mar 13 20:46:16 2020 GMT + Not After : Mar 11 20:46:16 2030 GMT + Subject: C = US, ST = California, L = Mountain View, O = Test CA, CN = Test Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: 00:c6:81:1f:92:73:b6:58:85:d9:8d:ac:b7:20:fd: c7:bf:40:b2:ea:fa:e5:0b:52:01:8f:9a:c1:eb:7a: @@ -200,39 +204,40 @@ X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 5b:53:ff:6d:d5:0a:43:a5:0f:d4:7d:c6:5d:88:e3:98:9d:67: - eb:32:82:b3:0f:f5:c1:78:f8:05:4a:bf:bc:21:05:ee:21:08: - 2c:b2:15:a1:b8:b2:f6:a3:15:61:e4:c1:ad:84:a4:a7:40:0c: - 87:09:5f:2b:1b:f9:4d:6c:92:7d:cb:7e:2b:b0:01:0a:ed:40: - e5:4e:af:1a:f1:0d:ec:1d:9e:96:c7:d4:61:64:39:23:fa:5f: - 29:c4:2a:3a:b8:ed:8a:72:50:6a:ac:45:04:76:09:a8:3d:57: - d7:f0:4b:ae:46:b4:83:c1:14:50:2a:19:59:53:b2:4d:ae:fc: - 2f:40:49:c8:ad:4d:9d:c8:22:8d:8c:01:db:31:33:5a:f4:bc: - 4c:9b:ed:d7:e3:43:d9:e8:1d:53:8b:30:d8:81:9e:72:ab:9e: - ce:b8:f5:83:93:f2:72:db:de:cd:b0:52:9a:45:4d:cf:e7:21: - d8:ce:16:64:8f:42:af:c1:87:a8:f9:d5:e2:03:dd:ba:6b:1b: - 7c:7d:a0:38:33:61:39:b4:dd:5c:69:17:79:02:3a:ec:1d:6f: - 5e:bb:13:fb:a6:82:5d:07:20:fc:86:fe:6e:8b:ac:e1:c2:18: - a2:fe:3f:95:66:d3:69:8a:00:06:2c:56:37:34:b9:b6:31:de: - 0f:f6:44:39 + b1:b1:83:61:af:db:ed:98:cf:3d:43:5f:a7:42:b8:6d:94:36: + 57:bb:ab:04:ee:dd:3b:b7:6d:ec:78:7d:46:59:b1:e6:2a:c3: + aa:a5:70:a7:e1:0c:fa:65:37:c6:cb:7d:a1:37:35:a1:ff:f0: + dd:ce:b6:a4:2c:12:d4:46:a9:9c:a2:91:3a:b0:95:55:97:55: + e6:0a:da:63:60:24:19:ac:20:c9:b1:94:40:e9:99:b1:f5:c3: + ed:61:5d:de:4c:e4:eb:d9:0e:ac:3a:0a:fc:44:7d:0f:77:a6: + b6:da:28:d4:ed:ea:3a:bc:57:23:9c:72:2b:2d:b0:5d:11:02: + 4d:c5:bc:b0:d6:7e:00:8e:f7:e7:f5:19:3a:23:df:33:02:aa: + 4b:bf:81:f4:5a:99:ee:74:20:f3:77:a1:f0:85:1e:a8:d6:cc: + a4:cb:31:fa:73:24:a2:0e:dd:9f:6f:82:38:5f:85:ac:8d:76: + bd:d8:f2:69:73:e3:46:44:42:e3:5e:f3:aa:5e:44:13:51:ea: + 0b:78:91:77:96:ee:73:fe:2a:b5:88:c1:38:8d:8d:a8:19:76: + 94:05:02:cf:d4:6f:eb:e6:07:f5:9d:52:24:b8:50:a3:0e:c4: + 45:a6:09:b4:06:2d:3e:14:a5:3f:1c:1a:bc:da:b8:40:3e:c1: + 1c:f6:3c:05 -----BEGIN CERTIFICATE----- -MIIDizCCAnOgAwIBAgIJAJRTRMx4iMvZMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV +MIIDljCCAn6gAwIBAgIULyXzzjxectAzKfYJH11fU9msI7swDQYJKoZIhvcNAQEL +BQAwYzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM +DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExFTATBgNVBAMMDFRlc3Qg +Um9vdCBDQTAeFw0yMDAzMTMyMDQ2MTZaFw0zMDAzMTEyMDQ2MTZaMGMxCzAJBgNV BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW -aWV3MRAwDgYDVQQKDAdUZXN0IENBMRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwHhcN -MTcwNjA1MTcxMDQ0WhcNMjcwNjAzMTcxMDQ0WjBjMQswCQYDVQQGEwJVUzETMBEG -A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UE -CgwHVGVzdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAxoEfknO2WIXZjay3IP3Hv0Cy6vrlC1IBj5rB63qA -wfOJpD7VG2HMtc+AsRrbuyXgGL+SaSZQzec//w08tB8UEqtnN94HA2wSdII2rMPU -02Sfke1b9ql6pJyY6GVslOHLVXOu+B1QsHjldP+xNyzLGT2kjOd2ToZcP9+z7UUj -T1SbM8aJXhMd3X1ZpQc0KIYnH/qeU08qtkKtNxJi9XI2tgISQET+x56ViUNRXrRu -x2eAWEO+zAcovVn/HEyNkEL0z/1UAE9IcivhZzyEF2iVv8oHe9+GnVbjMuNwh7f4 -OvfjbmUUfLt2txfxQoxvKjRkEDUUjIX2V7/zXFWdrQMQ8wIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBSbJguKmKm7HbkfHOMaQDPtjheIqzAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAFtT/23VCkOlD9R9xl2I45id -Z+sygrMP9cF4+AVKv7whBe4hCCyyFaG4svajFWHkwa2EpKdADIcJXysb+U1skn3L -fiuwAQrtQOVOrxrxDewdnpbH1GFkOSP6XynEKjq47YpyUGqsRQR2Cag9V9fwS65G -tIPBFFAqGVlTsk2u/C9AScitTZ3IIo2MAdsxM1r0vEyb7dfjQ9noHVOLMNiBnnKr -ns649YOT8nLb3s2wUppFTc/nIdjOFmSPQq/Bh6j51eID3bprG3x9oDgzYTm03Vxp -F3kCOuwdb167E/umgl0HIPyG/m6LrOHCGKL+P5Vm02mKAAYsVjc0ubYx3g/2RDk= +aWV3MRAwDgYDVQQKDAdUZXN0IENBMRUwEwYDVQQDDAxUZXN0IFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGgR+Sc7ZYhdmNrLcg/ce/QLLq ++uULUgGPmsHreoDB84mkPtUbYcy1z4CxGtu7JeAYv5JpJlDN5z//DTy0HxQSq2c3 +3gcDbBJ0gjasw9TTZJ+R7Vv2qXqknJjoZWyU4ctVc674HVCweOV0/7E3LMsZPaSM +53ZOhlw/37PtRSNPVJszxoleEx3dfVmlBzQohicf+p5TTyq2Qq03EmL1cja2AhJA +RP7HnpWJQ1FetG7HZ4BYQ77MByi9Wf8cTI2QQvTP/VQAT0hyK+FnPIQXaJW/ygd7 +34adVuMy43CHt/g69+NuZRR8u3a3F/FCjG8qNGQQNRSMhfZXv/NcVZ2tAxDzAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJsmC4qYqbsduR8c4xpA +M+2OF4irMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAsbGDYa/b +7ZjPPUNfp0K4bZQ2V7urBO7dO7dt7Hh9Rlmx5irDqqVwp+EM+mU3xst9oTc1of/w +3c62pCwS1EapnKKROrCVVZdV5graY2AkGawgybGUQOmZsfXD7WFd3kzk69kOrDoK +/ER9D3emttoo1O3qOrxXI5xyKy2wXRECTcW8sNZ+AI735/UZOiPfMwKqS7+B9FqZ +7nQg83eh8IUeqNbMpMsx+nMkog7dn2+COF+FrI12vdjyaXPjRkRC417zql5EE1Hq +C3iRd5buc/4qtYjBOI2NqBl2lAUCz9Rv6+YH9Z1SJLhQow7ERaYJtAYtPhSlPxwa +vNq4QD7BHPY8BQ== -----END CERTIFICATE-----
diff --git a/net/data/ssl/scripts/crlsetutil.py b/net/data/ssl/scripts/crlsetutil.py index 5d65cd1..815fa9c 100755 --- a/net/data/ssl/scripts/crlsetutil.py +++ b/net/data/ssl/scripts/crlsetutil.py
@@ -10,10 +10,10 @@ The input is taken on stdin and is a dict with the following keys: - BlockedBySPKI: An array of strings, where each string is a filename containing a PEM certificate, from which an SPKI will be extracted. - - BlockedByHash: A dict of string to an array of ints, where the string is - a filename containing a PEM format certificate, and the ints are the - serial numbers. The listed serial numbers will be blocked when issued by - the given certificate. + - BlockedByHash: A dict of string to an array of strings. The dict key is + a filename containing a PEM certificate, representing the issuer cert, + while the array of strings contain the filenames of PEM format + certificates whose serials are blocked. - LimitedSubjects: A dict of string to an array of strings, where the key is a filename containing a PEM format certificate, and the strings are the filenames of PEM format certificates. Certificates that share a Subject @@ -130,6 +130,10 @@ """Returns the raw data of the current element""" return self._contents + def encoded_value(self): + """Returns the encoded value of the current element (i.e. without header)""" + return self._contents[self._header_length:] + def _der_cert_to_spki(der_bytes): """Returns the subjectPublicKeyInfo of a DER-encoded certificate @@ -209,6 +213,38 @@ return der_cert_to_subject_hash(_pem_cert_to_binary(pem_filename)) +def der_cert_to_serial(der_bytes): + """Gets the serial of a DER-encoded certificate, omitting leading 0x00 + + Args: + der_bytes: A DER-encoded certificates (RFC 5280) + + Returns: + The encoded serial number value (omitting tag and length), and omitting + any leading 0x00 used to indicate it is a positive INTEGER. + """ + iterator = ASN1Iterator(der_bytes) + iterator.step_into() # enter certificate structure + iterator.step_into() # enter TBSCertificate + iterator.step_over() # over version + raw_serial = iterator.encoded_value() + if raw_serial[0] == chr(0x00) and len(raw_serial) > 1: + raw_serial = raw_serial[1:] + return raw_serial + + +def pem_cert_file_to_serial(pem_filename): + """Gets the DER-encoded serial of a cert in a file, omitting leading 0x00 + + Args: + pem_filename: A file containing a PEM-encoded certificate. + + Returns: + The DER-encoded serial as a byte sequence + """ + return der_cert_to_serial(_pem_cert_to_binary(pem_filename)) + + def main(): parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) parser.add_option('-o', '--output', @@ -223,8 +259,11 @@ pem_cert_file_to_spki_hash(pem_file).encode('base64').strip() for pem_file in config.get('BlockedBySPKI', [])] parents = { - pem_cert_file_to_spki_hash(pem_file): serials - for pem_file, serials in config.get('BlockedByHash', {}).iteritems() + pem_cert_file_to_spki_hash(pem_file): [ + pem_cert_file_to_serial(issued_cert_file) + for issued_cert_file in issued_certs + ] + for pem_file, issued_certs in config.get('BlockedByHash', {}).iteritems() } limited_subjects = { pem_cert_file_to_subject_hash(pem_file).encode('base64').strip(): [ @@ -260,9 +299,7 @@ if not serial: raw_serial = ['\x00'] else: - while serial: - raw_serial.insert(0, chr(serial & 0xff)) - serial >>= 8 + raw_serial = serial outfile.write(struct.pack('<B', len(raw_serial))) outfile.write(''.join(raw_serial))
diff --git a/net/data/ssl/scripts/generate-multi-root-test-chains.sh b/net/data/ssl/scripts/generate-multi-root-test-chains.sh index c4d1792e..d624160 100755 --- a/net/data/ssl/scripts/generate-multi-root-test-chains.sh +++ b/net/data/ssl/scripts/generate-multi-root-test-chains.sh
@@ -49,10 +49,9 @@ mkdir out echo Create the serial and index number files. -serial=1000 for i in B C D E F do - /bin/sh -c "echo ${serial} > out/${i}-serial" + openssl rand -hex -out "out/${i}-serial" 16 touch "out/${i}-index.txt" done @@ -229,14 +228,13 @@ } CRLSETDOCBLOCK -# Block C-by-D (serial number 0x1001) and F-by-E (serial number 0x1002) by -# way of serial number. +# Block C-by-D and F-by-E by way of serial number. python crlsetutil.py -o ../certificates/multi-root-crlset-CD-and-FE.raw \ <<CRLSETDOCBLOCK { "BlockedByHash": { - "out/D.pem": [4097], - "out/E.pem": [4098] + "out/D.pem": ["out/C.pem"], + "out/E.pem": ["out/F.pem"] } } CRLSETDOCBLOCK @@ -249,12 +247,12 @@ } CRLSETDOCBLOCK -# Block an unrelated/unissued serial (0x0FFF) to enable all paths. +# Block an unrelated/unissued serial (D, not issued by E) to enable all paths. python crlsetutil.py -o ../certificates/multi-root-crlset-unrelated.raw \ <<CRLSETDOCBLOCK { "BlockedByHash": { - "out/E.pem": [4095] + "out/E.pem": ["out/D.pem"] } } CRLSETDOCBLOCK
diff --git a/net/data/ssl/scripts/generate-test-certs.sh b/net/data/ssl/scripts/generate-test-certs.sh index 0a41eec..a26a595 100755 --- a/net/data/ssl/scripts/generate-test-certs.sh +++ b/net/data/ssl/scripts/generate-test-certs.sh
@@ -8,6 +8,17 @@ # certificates that can be used to test fetching of an intermediate via AIA. set -e -x +# The maximum lifetime for any certificates that may go through a "real" +# cert verifier. This is effectively: +# min(OS verifier max lifetime for local certs, built-in verifier max lifetime +# for local certs) +# +# The current built-in verifier max lifetime is 39 months +# The current OS verifier max lifetime is 825 days, which comes from +# iOS 13/macOS 10.15 - https://support.apple.com/en-us/HT210176 +# 731 is used here as just a short-hand for 2 years +CERT_LIFETIME=730 + rm -rf out mkdir out mkdir out/int @@ -117,7 +128,7 @@ openssl ca \ -batch \ -extensions user_cert \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/ok_cert.req \ -out out/ok_cert.pem \ -config ca.cnf @@ -128,7 +139,7 @@ openssl ca \ -batch \ -extensions user_cert \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/ok_cert.req \ -out out/int/ok_cert.pem \ -config ca.cnf @@ -137,7 +148,6 @@ openssl ca \ -batch \ -extensions user_cert \ - -days 3650 \ -in out/wildcard.req \ -out out/wildcard.pem \ -config ca.cnf @@ -147,7 +157,7 @@ -batch \ -extensions name_constraint_bad \ -subj "/CN=Leaf certificate/" \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/ok_cert.req \ -out out/name_constraint_bad.pem \ -config ca.cnf @@ -157,7 +167,7 @@ -batch \ -extensions name_constraint_good \ -subj "/CN=Leaf Certificate/" \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/ok_cert.req \ -out out/name_constraint_good.pem \ -config ca.cnf @@ -166,7 +176,7 @@ openssl ca \ -batch \ -extensions user_cert \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/localhost_cert.req \ -out out/localhost_cert.pem \ -config ca.cnf @@ -186,7 +196,7 @@ openssl ca \ -batch \ -extensions user_cert \ - -days 3650 \ + -days ${CERT_LIFETIME} \ -in out/test_names.req \ -out out/test_names.pem \ -config ca.cnf @@ -241,9 +251,8 @@ -out ../certificates/punycodetest.pem ## Reject intranet hostnames in "publicly" trusted certs -# 365 * 3 = 1095 SUBJECT_NAME="req_intranet_dn" \ - openssl req -x509 -days 1095 -extensions req_intranet_san \ + openssl req -x509 -days ${CERT_LIFETIME} -extensions req_intranet_san \ -config ../scripts/ee.cnf -newkey rsa:2048 -text \ -out ../certificates/reject_intranet_hosts.pem @@ -280,7 +289,6 @@ -in out/10_year_validity.req \ -out ../certificates/10_year_validity.pem \ -config ca.cnf -# 365 * 11 = 4015 openssl req -config ../scripts/ee.cnf \ -newkey rsa:2048 -text -out out/11_year_validity.req CA_NAME="req_ca_dn" \ @@ -288,7 +296,7 @@ -batch \ -extensions user_cert \ -startdate 141030000000Z \ - -days 4015 \ + -enddate 251030000000Z \ -in out/11_year_validity.req \ -out ../certificates/11_year_validity.pem \ -config ca.cnf @@ -327,13 +335,12 @@ -config ca.cnf openssl req -config ../scripts/ee.cnf \ -newkey rsa:2048 -text -out out/61_months_after_2012_07.req -# 30 * 61 = 1830 CA_NAME="req_ca_dn" \ openssl ca \ -batch \ -extensions user_cert \ -startdate 141030000000Z \ - -days 1830 \ + -enddate 191103000000Z \ -in out/61_months_after_2012_07.req \ -out ../certificates/61_months_after_2012_07.pem \ -config ca.cnf @@ -503,8 +510,7 @@ openssl ca \ -batch \ -extensions user_cert \ - -startdate 171220000000Z \ - -enddate 201220000000Z \ + -days ${CERT_LIFETIME} \ -in out/sha1_leaf.req \ -out out/sha1_leaf.pem \ -config ca.cnf \ @@ -600,13 +606,14 @@ } CRLBYROOTSPKI -## Block a leaf cert by issuer-hash-and-serial (ok_cert.pem == serial 3, by -## virtue of the serial file and ordering above. +## Block a leaf cert by issuer-hash-and-serial python crlsetutil.py -o ../certificates/crlset_by_root_serial.raw \ <<CRLBYROOTSERIAL { "BlockedByHash": { - "../certificates/root_ca_cert.pem": [3] + "../certificates/root_ca_cert.pem": [ + "../certificates/ok_cert.pem" + ] } } CRLBYROOTSERIAL @@ -617,7 +624,9 @@ <<CRLSETBYINTERMEDIATESERIAL { "BlockedByHash": { - "../certificates/intermediate_ca_cert.pem": [1] + "../certificates/intermediate_ca_cert.pem": [ + "../certificates/ok_cert_by_intermediate.pem" + ] } } CRLSETBYINTERMEDIATESERIAL
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json index ab3d31ed..49fae79 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -2420,7 +2420,6 @@ { "name": "unravel.ie", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wownmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "xtrim.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "yamaken.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yenniferallulli.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yenniferallulli.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "yenniferallulli.es", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -2453,7 +2452,6 @@ { "name": "collinmbarrett.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "coloradocomputernetworking.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "copperhead.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "covoiturage.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "csacongress.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "czakey.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "czk.mk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -5340,7 +5338,6 @@ { "name": "prelist.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ptbx.co", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "purplebricks.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "qtxh.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "quchao.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "raidstone.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "raidstone.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -7132,7 +7129,6 @@ { "name": "istdieweltschonuntergegangen.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "itsadog.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "itsecurityassurance.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "jayshao.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jcaicedo.tk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "jefftickle.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "kakaravaara.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -8675,7 +8671,6 @@ { "name": "expressemotion.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "extremenetworking.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "exy.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "exyplis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eyeglassuniverse.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "eyeonid.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ez.fi", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -9942,7 +9937,6 @@ { "name": "stevensononthe.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stoffe-monster.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stoick.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "storecove.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "storeden.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stqry.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "str0.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -10263,7 +10257,6 @@ { "name": "whiskynerd.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "whitelabelcashback.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wholikes.us", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "wiberg.nu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wiedu.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wijnservices.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "wikiclash.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -13170,7 +13163,6 @@ { "name": "otvaracie-hodiny.sk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "outgress.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "outlookonthedesktop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "outurnate.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paintingat.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "papermasters.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "paraborsa.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -13890,7 +13882,6 @@ { "name": "berasavocate.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "anastasia-shamara.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bettertest.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "aymericlagier.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "borderlinegroup.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "awaremi-tai.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bewerbungsfibel.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -14141,7 +14132,6 @@ { "name": "do67.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "digitalbank.kz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "do67.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "duckasylum.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dobrisan.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "drdim.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "elektronring.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -16396,7 +16386,6 @@ { "name": "recreoviral.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "president.bg", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "raytron.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "rolodato.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "rte.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "project-sparks.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "pyspace.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -23781,7 +23770,6 @@ { "name": "guillaumecote.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guillaumematheron.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gulfcoast-sandbox.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "gulshankumar.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "guusvandewal.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gymhero.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "gympap.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -25463,7 +25451,6 @@ { "name": "sumguy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "supa.sexy", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "supercalorias.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "superklima.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "support4server.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "supportericking.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "surasak.io", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -26309,7 +26296,6 @@ { "name": "balcaonet.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "b4z.eu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "avid.blue", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "awen.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "barlotta.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "audiorental.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "azso.pro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -29571,8 +29557,6 @@ { "name": "booox.pw", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "biomodra.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "breadandlife.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bitvegas.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "bituptick.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "braviskindenjeugd.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bitedge.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "bravisziekenhuis.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -30972,7 +30956,6 @@ { "name": "seleondar.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "solentes.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sportugalia.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "stevenroddis.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "stmlearning.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "steven-bennett.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "sql-und-xml.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -33228,7 +33211,6 @@ { "name": "haze.productions", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "head.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "health-plan-news.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "heap.zone", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hearmeraw.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "heartwoodart.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "hearty.tech", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34097,7 +34079,6 @@ { "name": "webaeon.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webapky.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webappky.cz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "webkeks.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webnoob.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "websites4business.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "webspire.tech", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -34345,7 +34326,6 @@ { "name": "creativekkids.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cristau.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "ct-watches.dk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, - { "name": "cuckoopalace.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cumparama.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "cylindricity.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, { "name": "dan-informacijske-varnosti.si", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true }, @@ -37333,7 +37313,6 @@ { "name": "legumeinfo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lemni.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "leodaniels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lesarts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liangbp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "librebox.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "librisulibri.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -39362,7 +39341,6 @@ { "name": "rollingbarge.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rook-playz.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roopakv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rootkea.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ropd.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roseparkhouse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rosetiger.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40048,7 +40026,6 @@ { "name": "ferienhaeuser-krummin.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ferry.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fiery.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fifei.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fireshellsecurity.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "flugstadplasticsurgery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fomopop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -40765,7 +40742,6 @@ { "name": "cartongesso.roma.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casino-cash-flow.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "casinocashflow.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cbcf.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cgal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "championsofpowerfulliving.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "chanddriving.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -42552,7 +42528,6 @@ { "name": "ask1.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "asmood.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "audirsq3.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ausmwoid.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "badblock.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "balance7.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "balenciaspa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -43043,7 +43018,6 @@ { "name": "cdncompanies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cdom.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "celcomhomefibre.com.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "centrosocialferrel.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cerivo.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ceskepivnisety.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cfda.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44183,7 +44157,6 @@ { "name": "skyworldserver.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smaltimentorifiuti.firenze.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smokinghunks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "smsbrana.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snic.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snoerendevelopment.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soakgames.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -44691,7 +44664,6 @@ { "name": "ffsociety.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "freakyawesome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.news", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45841,7 +45813,6 @@ { "name": "freakyawesome.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.guru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "freakyawesome.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.marketing", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -45872,7 +45843,6 @@ { "name": "freakyawesome.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesome.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesomeblog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "freakyawesomeio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesomemedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesomenews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "freakyawesomeplugin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46232,7 +46202,6 @@ { "name": "swing-belleville.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tankpassen-vergelijken.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "targetbuilding.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "taxi-waregem.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taylorstauss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teb-akademia.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "techsolvency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -46770,7 +46739,6 @@ { "name": "johnbpodcast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jose-lesson.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "juergenklieber.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "julius-zoellner.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "junjhome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "junjun-web.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "junodownload.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -51223,7 +51191,6 @@ { "name": "oldroutetwo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "omoide-hitokoto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onedegreehealth.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "onlinecorners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onlineporno.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "onnaguse.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "opadaily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56419,7 +56386,6 @@ { "name": "holadinero.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "holofox.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hombresconestilo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "hoosa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hopemeet.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hopemeet.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hotelbretagne.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -56996,7 +56962,6 @@ { "name": "redzonedaily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reening.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reflets.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "reittherapie-tschoepke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rendall.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "renovablesverdes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rensa-datorn.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -57346,7 +57311,6 @@ { "name": "wiss.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wissamnr.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wizzair.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wofflesoft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wolfshuegelturm.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wombatnet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wombere.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -58683,7 +58647,6 @@ { "name": "88851777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "888666pj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8yun.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8yun.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9090819.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "967606.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9950p.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -59698,7 +59661,6 @@ { "name": "smartgridsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smartgridsecurity.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "smartime.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "smartminibushire.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "snh48live.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soblaznenie.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "soblaznenie2.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -60452,7 +60414,6 @@ { "name": "kopplin.family", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kosinc.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kozawa.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "krant.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kscarlett.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lafermegourmande.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lavril.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -61157,7 +61118,6 @@ { "name": "galvingao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gitecolombedesbois.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "githubapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "goeb.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gooroosmarketplace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "grid.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "hammerpondkennels.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -62370,7 +62330,6 @@ { "name": "iondrey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "iwd.gc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "izolpoznan.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "jayharkess.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jif.gc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jingyunbank.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jomibe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -63729,7 +63688,6 @@ { "name": "awsumchan.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b-performance.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bar.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "baseweb.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beansgalore.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "behindertenagentur.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bellezzasenzalimiti.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64381,7 +64339,6 @@ { "name": "dakin.nyc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dakindesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dakinnyc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "danielnaaman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "darani.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "darkskymap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datacool.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -64406,7 +64363,6 @@ { "name": "derw.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "designerchad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "destyntek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "devdeb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dexonservicedeskws.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diabetessucks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "didtrumpopengovernmentyet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -67266,7 +67222,6 @@ { "name": "171083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "22321365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "23436565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "24seven.pk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "33321365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "333321365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "34536565.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69019,7 +68974,6 @@ { "name": "agwin2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "agwin777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alaskabuylocal.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "alexisathlani.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "aliefirfany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "almostobjective.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "alpha-ag.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69660,7 +69614,6 @@ { "name": "kf388.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf588.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6464.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf6868.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kff7.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kidneydonation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "koreanrandom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -69941,7 +69894,6 @@ { "name": "chun.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "clare3dx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "claudiney.eti.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "cmshangu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cnbibo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "cnss.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "col-head.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71573,8 +71525,6 @@ { "name": "tag-coin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "takb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "taptoweb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "techwhisperer.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "tecnasa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teenpussypornvid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "terminationsremembered.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thaiforexfamily.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71717,7 +71667,6 @@ { "name": "66.tn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7214.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "7214.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "8083d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8207d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8822d88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "8826d.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -71800,7 +71749,6 @@ { "name": "archivosmercury.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "arcogb.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "areis.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "arsenal-charodeya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "artlabdentistry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ashtonbromleyceramics.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "assosfi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -77781,7 +77729,6 @@ { "name": "wolkenbauer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "worio.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpabzar.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ws.net.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wx6688.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x81818.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--strandhaus-hinter-der-dne-1wc.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -78641,7 +78588,6 @@ { "name": "diabhal-staff.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "digiepoxypaint.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "digitalframe.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "digitaltrust.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "disruptiveadvertising.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "dnssecandipv6.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "doctorcalefon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -79164,7 +79110,6 @@ { "name": "rimkereso.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robotstxt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rockypest.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "roisu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roopakvenkatakrishnan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rotamap.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roys.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -80216,7 +80161,6 @@ { "name": "jtl-software.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jumprun.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "just3preety.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "justsome.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jyrilaitinen.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jyvaskylantykkimies.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k36594.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -81617,7 +81561,6 @@ { "name": "lightyear.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "liypoi.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lms-luch.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "lojapos.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lomaem-nsk.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "londonlegaltranslation.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "londonseedcentre.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82040,7 +81983,6 @@ { "name": "emmiwelentain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "employment-applicant.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "emptybox.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "epicsoft.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "equabanking.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "erty.stream", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "esfahanahan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82276,7 +82218,6 @@ { "name": "soupbuahtaza.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sphericalvision.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "spmax.design", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "spmax.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "sprossenwand.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ssrr.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "stagemaster.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82667,7 +82608,6 @@ { "name": "jungleadventuretours.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "jurojin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k-jtan.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "k8-1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k801.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k80608.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "k80998.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82729,11 +82669,7 @@ { "name": "keller-aarau.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kernel-panik.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kesef.org.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf-slot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf060.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf4343g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf5656.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf6161g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6622.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6623.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6625.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82748,14 +82684,6 @@ { "name": "kf66888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6820.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf6830.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf759.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf7676.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf7676g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf772.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf780.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf8383.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf8801.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf8812.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf8865.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf88666.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf8867.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82769,10 +82697,6 @@ { "name": "kf8892.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf8896.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kf8897.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf955.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf968.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf9696.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf997.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kimkyzcrs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kingstake.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kneli.co.il", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82900,7 +82824,6 @@ { "name": "lc9930.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lc9950.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lc9999g.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "le052.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "le802.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lecheng2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lecheng3.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82910,8 +82833,6 @@ { "name": "lemonrotools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "levante.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lexoo.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "libo766.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "libo766.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lidl-foto.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lidl-fotos.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "lidl-fotos.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82951,7 +82872,6 @@ { "name": "nasaacronyms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "netolink.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "niftypersonalloans.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "nklwhx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nn01.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "nn01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "no-ice.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -82996,7 +82916,6 @@ { "name": "pymescentro.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pythonatrix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "qicsystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "qnsgmd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "quarim.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "questdairy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "raffaelevinci.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83080,7 +82999,6 @@ { "name": "womenswellnessobgyn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "workshop.men", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wpwebshop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wrglzd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x-charge.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "x001.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xmgspace.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -83369,7 +83287,6 @@ { "name": "kalex.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kalisch.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kantoportraits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "kf8181.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kimsnagelstudio.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "kkutu.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "klempin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -85982,7 +85899,6 @@ { "name": "datasubject.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "datasubjects.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "davidfindlay.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "deelodge.art", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "deemlove.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "defesaaereanaval.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "demongey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -85992,7 +85908,6 @@ { "name": "diablocarpet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diaconat.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "diariorp.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "dicoeste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "digitalgyan.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "djurklinikenangelholm.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "donotcallgov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -87661,7 +87576,6 @@ { "name": "retro.camp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reviewinteriors.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reyrubi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rhinecho.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ringtune.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "riveroflifegifts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rivingtongreenwich.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -88622,7 +88536,6 @@ { "name": "richardvd.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robert-reisemobil.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rockernj.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rogard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roll-bakery.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "romsey.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rosahijab.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -90273,7 +90186,6 @@ { "name": "vokieciupamokos.lt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vonpawn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vschafer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "w81519.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w888011.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w888055.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "wallisdiervoeding.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -90947,12 +90859,7 @@ { "name": "189ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "198ks.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "255k8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "2831365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "2x.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "361365.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3650607.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "365361.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "3800611.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3d-glow.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "3deni.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "403page.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -90961,7 +90868,6 @@ { "name": "518zlong.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "55k66.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "5sba.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "6520265.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "666ks.app", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66k66.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "66lc8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91076,24 +90982,11 @@ { "name": "b2m.co.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b3.nu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b3pacific.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5706.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5707.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5708.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b5709.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b57bb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b57cc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b67881.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b67882.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b67883.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b67884.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b67885.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7501.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7502.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7503.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7506.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7507.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7508.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "b7509.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "b9l8tt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bachomp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "backspace.dev", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91101,9 +90994,6 @@ { "name": "badge.rs", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bap-consult.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "barlamane.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bb211.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bb221.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bb321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bd.foundation", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "becausecapitalism.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bedset.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91118,8 +91008,6 @@ { "name": "bestbuyatvs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestcouponvouchercodes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bestseo4u.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet571.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "bet572.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bexx-engineering.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "beyondauth.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "bietinidesign.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91379,8 +91267,6 @@ { "name": "echotango.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ecuadorextremo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eddie.website", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee651.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "ee652.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "efp.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "eichinger-stelzl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ejderrapgott.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91467,7 +91353,6 @@ { "name": "furisode-yamaguchiya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fussballpiraten.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "futb0l.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fyllehack.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "g4v.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gadgetanda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "gamerwelfare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91572,7 +91457,6 @@ { "name": "ikhwanto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilawgix.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "ilovehoney.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "imoasis.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "imoasis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "imoasis.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "incomingfire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -91801,8 +91685,6 @@ { "name": "matrimonios.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "maximemichaud.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mbda.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mbetbtt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "mbtt365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcfallout.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "mcsteve.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "medibasket.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92295,7 +92177,6 @@ { "name": "usagov.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "userbase.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "usolvit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "uu378.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vanhatten.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vannoordgouda.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "vargaslatten.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92319,7 +92200,6 @@ { "name": "vugt.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "w61611.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "walldisplaysapp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "wapbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "warhaggis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "watchcom.org.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "watersoul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92510,7 +92390,6 @@ { "name": "9968161.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9968202.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9968232.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "9968235.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9968285.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9968303.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "9968321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -92880,7 +92759,6 @@ { "name": "feetek.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "feraz.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fetishlive.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "fexiven.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "fichajes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "filicide.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "finde-kleinanzeigen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -93016,7 +92894,6 @@ { "name": "intalink.org.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "intec.edu.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "interesnyimir.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "intsys.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "investcarpremium.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "investissementimmobilier.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "investmotores.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -93291,7 +93168,6 @@ { "name": "paymongo.help", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pdfbest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peacefulrock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "pengola.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "peraavcilar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "perakampus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "performancefocus.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -93380,7 +93256,6 @@ { "name": "resilienceblocker.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "resolute.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "reveal-sound.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "rivennero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "rlaftershock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "robbievasquez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "roldeco.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -93579,7 +93454,6 @@ { "name": "unitedbusinessbank.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "unitpay.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "univaservizi.academy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "universedragonball.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "upsdelperu.com.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "uq1k.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "us.ax", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -93666,10 +93540,8 @@ { "name": "xbots.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xetnghiemadndanang.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xford.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xialingshi.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xibilus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--90w996eota.xn--6qq986b3xl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "xn--bm3bl9r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--erdnussl-t4a.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--gu1a.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "xn--kuerbiskernl-fjb.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -95536,7 +95408,6 @@ { "name": "priceless-jewelry.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "pro100blogger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "projectvault.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "projectveritasaction.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prospreads.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "prox.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "proxybay.uno", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -95676,7 +95547,6 @@ { "name": "tt8366.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "umanews.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "upsihologa.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "utashop.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v156.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v167.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "v521.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -97448,7 +97318,6 @@ { "name": "teppichfrisch.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teqip-pms.gov.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "tespent.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, - { "name": "testmock.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teutonia-grossenlueder.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "teutonia08.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "thatsucks.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, @@ -97556,6 +97425,9335 @@ { "name": "zhunlink.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zthc.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, { "name": "zwemclub-rob.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "000bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "00bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0116288.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0797.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0dayexploits.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "0okmnbvcxzx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1-pujcky-uvery.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "10000hits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "10000rub.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "101gen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "101st-airborne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "101st.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1069.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "10mijlvanijmuiden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "111bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "111novosti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "11men.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1223.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "12345porn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1244.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "12nomos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "16valerienicolas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "17th-airborne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "18upchat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1920.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1dollar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "1dollarwebsite.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "200.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2000feet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2016.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "222bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "222digits.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "22bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "236530.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "236560.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "236570.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2890.ltd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2gisparser.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2learncomputing.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "2link.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "333bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "33bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "33devici.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dexpose.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3dmetalprinting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3gdu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "3niu5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "404group.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "434365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "444bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "48lipetsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4lephants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4list.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4maniacos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "4seo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "50-ottenkov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "52danji.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "534365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "53ty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "555bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "55bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "5peciali5t.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6.gift", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "632365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "634365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "666689999.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "666bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "66bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "68reg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "69yd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "6meter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7-it.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "71217.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "732365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "734365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "743365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "74dy.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "753365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "75codes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "763365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "76networks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "777bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "77bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7emka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7starhealth.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7url.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "7zet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "832365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "834365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "888bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "88bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "91imh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "91news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "934365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "999bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "99bet86.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aalright.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aaronspain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abalsa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abandoned.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abaranov.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abarquinha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abay-today.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abbyairsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abceducationacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abcensax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abdelali.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abelles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abelles.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abelles.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abelles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aberdeencriticalmass.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abilix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abkbank.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abkhazianews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ablecha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abnradiofm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abolitionofspeciesism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "about-sects-and-cults.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aboutdelphi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aboutdiabetesinfo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abouttime.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abramovich.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abramowskimi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abrec.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "absolute.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "absolutperm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "absurdia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abtinheydari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abtinsh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "abuahmed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ac-booster.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "academichelp.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acapellalanguage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "accademiaprati.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ace-clan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acemsa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "achievenewsfrance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acmilan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acnh.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acomplia20mg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acredperu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "across-community.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actioncameraaccessories.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actionminecraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "active-english.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "activeplatesystem.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actorsanthosh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actrices.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "actuse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acuarismo-iquique.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acvan.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "acyclovir400mg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adamov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adaptivesite.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "addag.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adder.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adderall.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "addictionsolutionsllc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "addscoop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adelicious.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adescb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adhockery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adinfinitum.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adoran.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adores.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adorez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adorned.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adrianpetcu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adrianwalls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adrianweb.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adsforcash.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adspire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adstop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advair-generic.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advairprice.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advancedturf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advertisingcompany.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advirk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advmaster.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advoervice.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokat-dtp.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokat-dtp.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokat-dtp.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokat-dtp.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokat-dtp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokatkonsult.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokatonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokatskoe-byuro.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-onlajn.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-onlajn.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-onlajn.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-onlajn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-yuristy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty-yuristy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "advokaty.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "adygeya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aegmbh.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aeroframe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aerowillys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aestheticdr.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aeternus-darkermonument.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afanasev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afflictedquarter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "affordablecameras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "affordableelectronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afghandonia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aforism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "africaindemander.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "africanmangoforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afrodisiac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "after-whoru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afterfostercare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "afternoonhereyes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aga-eiken.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agalloch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agehotel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agencetourismemali.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aggression.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agora-soft.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agricult.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agrippa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agro-ferma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agronomi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agronomict.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "agropool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aguantepimpinero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ahccorleone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ahlac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ahsinsaleem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aiflow.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aikidoaalst.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "air-flot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aircheapfare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aircheapfares.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airconditioning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airethilien.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aireuropeflights.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfareandcheap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarecheapdeal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarecheapeurope.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarecompareprices.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfaredealstoindia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarefrom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarehonolulu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfarehoteldeals.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfareinindia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfaremexicocity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfareorlando.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfaresdomestic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfareseconomy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airfaresfrom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airline-rabota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airlinenews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "airtrain.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aisedomains.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akbarsempoi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akbas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akiba-souken.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akkordy-skachat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aktuellsakerhet.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "akura.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "al-capone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "al-capone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alabalaporto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alamad.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alamani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alarbnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alarko-carrier.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alas-negras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alaxyjewellers.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albakos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albaladejodelcuende.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albalinks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albanildedios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albendazole.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alberteinsteinbiography.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "albuterol.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alcantara.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alcohol.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alcoleadetajo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alcove.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldeal.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldo-saputra.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aldridge-ringers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aleksandar-vukmirovic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aleksanders.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alemangranada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alenaserezhina.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alendronate.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alesha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexanderkhen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexanderlau.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexanderpiatigorsky.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexanderpopov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexandremottier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexcpp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexguti.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexlombardo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alexustinoff.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aleynamasajsalonu.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alfa-books.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alfalasteenyia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alfambra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alfavideocirurgica.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "algerianportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "algeriaweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alibabau.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alicante-spain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alicebaldenegro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alinmaacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alireza2love.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alishanova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alisstyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alistaku.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alitpedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "all-gsm-solutions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allaboutmadonna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allamakee.k12.ia.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allbrestby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allbrestorg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allcelebs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allcrimea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allegra.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allegra180mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allegrapark.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allergyweb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allforex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allgadgetsfree.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allhits.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allindiajobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alljokesaside.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alllaboutchickens.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allmaps.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allmba.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allmessedup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allopurinol.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "allpedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almargen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almasoft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almaz-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almlab.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "almosis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alodokita.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alomch.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alphadronten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alphagames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alpine-tuning.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alpine.link", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altabash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altabooks.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-info.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-voyage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-zemlya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-zemlya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-zemlya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai-zemlya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altai22.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altaizemlya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altaizemlya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altaizemlya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altaizemlya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altawfer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altdforyou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alternativefacts.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "althistory.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altidrabat.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altramarsala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "altratella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aluchta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alumni-skensa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alunyc.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alushta-vostorg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alushta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alusib.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alusim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "alvarezmorales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amadeusproject.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amadin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amalgaamvrij.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amalgamma.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amartaramitramandal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amateur.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amateurs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americahealthcare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americanbooks.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americanbuzz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americanfootball.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americanfootball.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "americankickoff.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amerikanloto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amethystbodyart.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amfora.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aminko.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amisoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amitt.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amliorefemme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amolaccum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amorphis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxicillin-500mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxicillin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxicillincapsules.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxicillinonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxil.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxil875.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amoxilonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amphora.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ampicillin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ampicilliniv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ampicillinonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ampliosoft.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ampullen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amritps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amur-photo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amytuarez.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "amzik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "an0ns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anaal-nathrakh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anaalnathrakh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anabolic-stresser.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anagir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anahwaftah.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anakeen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "analgesia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "analinsting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anangeix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ananyagupta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anapsi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anarcasmetalicos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anarticle.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anaxios.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ancientwars.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andorraimperial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andre4ik3.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andrescuartas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "android-10-inch-tablets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "androidgaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "androidmarketturkiye.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "androidru.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andy-hagans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andyscubepage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "andywilliamsonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aneducationuto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anekdotiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anelik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelbulldog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelicsphynx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelinafilipski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelo4ek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelsanctum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelsandairwaves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelsoft.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angelswar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angolo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angular-js.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "angusandperthpgl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anihilated.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animalcenterunomas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animalcrossingwiki.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animalworld.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animanganetwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animecreed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animedescarga.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animeelite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animeheaven.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animelandia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animeplus1.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animesbrasil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animesconsteemplee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animeshka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "animoxavilorza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aninews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anisimov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anmelden.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anmolnayyar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anna-beauty.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annadebrux.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anne-marie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annemation.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annoncer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annonces34.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annuaire-express.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "annual.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anomaly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anonimizers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anorexia-nervosa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anpaju.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "answernow.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antabuskaufen1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antalya-yesim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antalyamasajsalonu.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antechrista.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antena.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antenna-lyubertsy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anthonylaberge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-civilisation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-depressants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-eniologiya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-gololed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-iupac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-lohotron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anti-stop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antibioticaugmentin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antibioticsadvice.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anticensorship-russia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antichatresources.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anticorruption.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antidepressants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antidope.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antidoping.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antifaschistisch-reisen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antifaschistischeaktioncelle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antifraud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antigender.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antihelp-tomsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antikfloors.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antikfloors.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antikfloors.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antikvar-net.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antikvarshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antimaterie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antipodi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antistatik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antitabak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "antonygeorge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anubisz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anwarverdict.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "any-download.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anydaytour.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anyduchildren.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anyebooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anyhobby.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anylu.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "anytimeoffices.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aomar-mohammedi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apartment-market.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apbforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apelsin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aperioadvice.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apex.ac", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apexconsulting.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aphelionband.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apipsandiego.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apkpokemongo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apkpokemongo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apocalypseclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apokalipsis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apollonas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apollonia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apothekeonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apparatrechose.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apparatus.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appelerintrt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appointment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apps-cart.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "appugo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aprazivel.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aprendejainternet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "apse.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aptnetwork.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquacapsule.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquariymist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquiparoxetina.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aquivardenafilo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arab1info.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabearthcommunity.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabi-news.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabictranslation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arabskills.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arakanis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arandomsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arargo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "araya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arcadegame.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "architekturwiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "archivestesting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arcosdelallana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ardabil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ardakannews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arditech.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "are-you-experienced.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "area21.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "areata.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arena-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arenatennis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arenda-bez-agenta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arendabotov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arendaskuterov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "argentinachat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "argument.uz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ariag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ariajourney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ariashii.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aristokratia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ariston-center.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arkadian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arkhangelsk.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arkhangelsk.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arkhangelsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arknights.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armado.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armageddonclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armandocorazones.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armchess.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "armhistory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aromex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arowsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arrangeyour.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsake.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsalbania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsenal-trans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsenalestate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsenyan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arsmagazine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "art-design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "art-illustration.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "art-school.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "art-voronov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "art21tv-armenian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artane.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artembusiness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arteriamagazine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arthrosis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "articlestack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "articlesutiles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artsalon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arturweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "artvertising.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "arxcs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aryani-fitriana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asaacai.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asaduddinowaisi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asansol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asantosdev.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asbestos-awareness.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ascannes-non-officiel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aserbx.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asialivenewscafe.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asiandubfoundation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asiaproductsdirect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asiaticas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asiaview.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asiaview.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "askerweb.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "askme-fast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asoccu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aspviress.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aspyct.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "assetvault.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "assikerujked.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "associate.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "assta.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astana.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astanainform.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astanakz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astarfrommosul.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astateoftrance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asterix-obelix.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asthenisusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astigmatic.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astormueble.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan-gorod.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrakhan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astro4u.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogift.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogift.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogift.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogift.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrogift.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrologie12.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astronomija.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astropar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrophena.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astrosoc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "astsummer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asukalangley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aswakbladi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asylumguild.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "asynchrono.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atafu-village.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atary.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atebaa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ateneumontbui.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atenolol50mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atide.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atlantahealthcare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atlanticdatastream.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atlantikwall.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atletico-guacuano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atmosferno.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aton-ensemble.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "attosoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "atunel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "audiologiasinfronteras.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "audition-radio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auditore-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "augmentin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "augmentin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "august-hoegn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aukanaw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aukcioon-domenov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aulaweb.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "australiadaily.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "australian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "austriaguide.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "austriatravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auto-arsenal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auto-reklame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autocashmachine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autofinancing.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autoknife.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autolet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "automaatic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autoportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autorai.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autostrady.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autosystem.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autozaz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "autre.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "auxbrinstresses.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avalon-ami.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avalondevelopment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avangard-tovar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avangard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avengersonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aviareis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aviationonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "aviations-engineering.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avinet.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avionicbooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avions.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avn-buses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avodart.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avogel.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avogel.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avogel.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avoids-troops.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avto-signal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avto-signal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtodoki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtodot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtojurist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtomaniya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtoobzor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtostolica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtovikup.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtoyurist.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtoyurist.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtoyurist.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "avtoyurist.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awakenwow.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awanteverde.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awarenessadvisor.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awersomecreatorfromrussia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "awfulsport-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "axiomtechnologies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "axios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "axoncoho.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ayur-veda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "az-forum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azerinews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azienda-tv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azinity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azithromycinbuy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azitromicina.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azlink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azurecraft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azuriom.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "azvpn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b23-tv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "b4tech.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babakhanalia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babaseo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babekids.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babki-mgnovenno.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babkitut.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babushkin-mir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baby-skin-care.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babybunnypictures.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babygirlholidaydresses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babymozg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babysdishes-bowls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babyshower.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babystrollers.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babytan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "babyzen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bacardi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bach-frederiksen.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "back-streets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "backlinktr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bactrim-ds.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bactrim-medicine.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bactrimds.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bactrimprice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "badgirlfoto.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "badmice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "badmintonargentina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "badmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "badules.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baikalfond.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baikalppk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baitable.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baixadordemusica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baks.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baksclub.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baksclub.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bakubest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "balanda.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "balasingandaru.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baldwin-mania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "balerma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "balkannightlife.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baloncestoarqueros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bambukshop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bampers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ban-list.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bananathrash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bandamirandadeebro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bandymasarna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banerka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bangujero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bankimsk.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banknews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banning.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "banzay.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bapeel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baraxolka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barbiecollectorjapan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barihandin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barnaul-altai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baronet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barrancos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "barrymarkus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bartdaelman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bartvandamme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basauristudios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "base-radio.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bashhack.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bashkiri.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bashtel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basictools.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basketballnewz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bastionadvokat.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bastionentifo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "basyrova.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "batailleros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "batmanvsupermanfullmovie.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "batoit.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "batonchik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "batteryreconditioning.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "battleforkhashuri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "battlefrontoldschool.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "battlerite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "battreil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baukelek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "baytobayaircon.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bazar-pc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bcrnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bdeshi.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "be-free.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beacoworks.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bearfarm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bearings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bearskin-rugs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beatmaker.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beatquantum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beatthebastards.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beaucrabill.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beautifulsouth.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beauty-stories.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beauty-style.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beauty-woman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beauty2home.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beautyandthebeast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beautyarticles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beautycom.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beautyeyewear.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beconnect.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bedrockcommunity.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beedsolyjas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beerglasses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beforeafter.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "begethost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "behold.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belajarpsikology.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belanews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belarustoday.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belarustravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belf.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belgia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belgianfilipinolovers.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belgiantennis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belgorod-host.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belgorod.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bella-abyssinia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bellanews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belloweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bellreguard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beloevino.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "belugadev.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benadryl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benadryld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bender.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beneazy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benhamplateau.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "benmarron.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bensvriend.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "beospain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bergelevrad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bernack.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bernarditadiaz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bernerland.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "berserk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bespredel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "besser-golfen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "besslavnye-ublyudki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "best-cats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "best-seminar.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "best-seminar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "best-software.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestcms.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestinsulatedwaterbottle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestitwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestmotorcyclehelmets.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestoldmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestomania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestplus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestrevs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestsatoshifaucet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestwirelessdoorbell.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bestzoo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bet333321.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bet333432.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bet333876.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bet333987.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betacommand.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betbed.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betexperts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bethzone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "betterworlded.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bewildered.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bezagentstva.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bezchyb.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bezoek-benidorm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bezopasna-rabota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bfbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bgbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bharat-media.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bharatanatyam-dancer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bhbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bhub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biaxin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bibet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bibitbunga.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bibliotecaguate.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biblioteka-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biblioteka17.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biboran.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bicubic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bidaah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bidonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bieg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biegi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "big-books.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "big-file.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "big-music.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigalba.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigboard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigdaddyslash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigdatatop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biggernews.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bighome.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigpurse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bigtimeiq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bijoulux.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bike-liptov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bike-style.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bikestream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bilbao.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bilingualunit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "billboard-panama.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "billionaire.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bimoge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "binary.ninja", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bingoclub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "binson-museum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bioblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biodieselbr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bioexistencialismo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biolact.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biomechanoid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biomod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bionic-karnage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biovid.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birjdid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birlikdayanisma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birtamode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "birzman.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bisik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bisoga.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bisrockonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bistrozaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitbank.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitbonus.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitbonusss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitcoin-exchange.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitcoineffect.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitforge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitgarant.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitljettnu.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitrate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bitspaceonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bittimaatti.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bittiraha.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bixmaster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biysk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biz-pak.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bizbelarus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bizfavor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biznes.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "biznesone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bizor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blablacar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "black-diamonds.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "black-market.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackandwhite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackarts.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackbirdproperties.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackchristmas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackforeststheoriginal.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackmafia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackmaskpro.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackmodelsusa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackriverfalls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackroses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacksega.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackshark.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacksniffer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackstonepress.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacktemplars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacktubes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blacktubes.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackwaterutilities.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackwidow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackwoodrugby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blackworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blago-sostoyanie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blago.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blagosvet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blako-squad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blaming.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blastoffbuisness.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blavaty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blazingsaddles.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bli.li", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blindfold.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blinking.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blitzkrieg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blog-ludmily.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blog-page.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blog-story.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bloggersonlinetrainings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blogvadim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bloody-hosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bloodycraft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bloomingwoods.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluavido.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blubux.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluebirdservice.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blueenergy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blueneuron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blueskybrokerage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "blurt.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bluxus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bmyjacks.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boardfree.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bobbyrobinson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bobfilm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bocaaboca.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bodclansite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bodegagarces.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "body-demo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bodyshaping.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boegli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boeing747.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bogdatrend.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boletaya.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boliviaverde.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bollywoodacapellas4djs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bollywoodgk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bollywoodstrot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bolshoi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bolton-consulting.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boluwebtasarim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bombard.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bombgame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bombgirls.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bombiaturkiye.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonapeti.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bondscript.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonkleagues.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonsaiclubsanvi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonus-kran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bonusup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "book-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bookingsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "books-dowload.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "books-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "booksandcoffee.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bookstores.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bookstrap.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boostdesign.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boranco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borasol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borderfever.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borderzoo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "born2dance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "borzov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bosnia-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bospor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bostonews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bostonivy.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "botbrother.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "botelegram.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "botipedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bottomfeedings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boucherie-lesnes.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bourbo.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boxofficebengal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boyard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boyscoutschile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "boysorebro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "braces-supports.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brahma.world", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brainburger101.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brainrush.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brainstormproductions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "braintonus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "branch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandon-manilow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandweer-sgravendeel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brandweerweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brasco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brasil66.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brasilduino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brasiliademinasnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brasilmobi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bratan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bravelittlesquirrel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bravenboer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bravewiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brawny.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "breakberlin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "breakingnewskenya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "breastenlargement.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brechadigital.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "breket.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brest-master.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brestradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brestshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brexit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bridesbouquet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bridgeportlaboratory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bridges.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brigadesecuritysolutions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brightsport-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "briliant.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "britishbullshitfoundation.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "britishgeneralelection.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "broadax.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brokenminds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brokerdecredite.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bronn.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brooklynboyblues.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brownavto-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brtve.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brugpensioen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brunanet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselsexpolive.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselslouisepenthouse.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselslouisestudio.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselsmidiapartment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselsmidistudio.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brusselswestapartment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brutalica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "brutality.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bryanski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bsaab.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bsbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bsteele.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "btc-wallet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "btdproductions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "btslr.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "btsource.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buatcv.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bubet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bubucmoi.dynu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buckethead.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buckfast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budapestairport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buddhism.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budgetrf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "budilnik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buesiforquo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bufete.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buff-buff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buggywonderland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buildmate.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buildnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buketnevesti.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buketon.uz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bukinist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bukularis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bulbonidos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bulgakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bullterrierspain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bullyprotection.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bulmanat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bumpi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bune.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bupropionhclsr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buralteria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buratiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burbaguena.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burewala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burghtstam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burkoff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burningflame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burreli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bursamusik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "burunucu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buryatia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buscolu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buscoop.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "business-explosion-fortune.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "business-secreti.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "business-secreti.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessconnect.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessdirect.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessinvest.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businessnet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "businka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bustillodeloro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "butowka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "butserdocumentary.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-aleve.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-amitriptyline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-amoxil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-avodart.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-camera-cases.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-cozaar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-decadron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-deltasone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-indocin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-jeansbiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-lipitor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-prednisolone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-premarin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-robaxin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-rumalaya.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-skelaxin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-stuffed-toys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-terramycin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-topamax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buy-zimulti.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyaccutane.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyacompliaonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyalbendazole.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyalbuterolonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyallopurinol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyamoxicillin875mg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyamoxil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyantabuse.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyatarax.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyazithromycin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buybaclofen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buybuspar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buycafergot.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buycheapandlow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buycialissmx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyclaritin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buycostarica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buydataonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buydeltasone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buydeltasone.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buydiamox.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyebooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyeffexor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyfluoxetineonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyhydrochlorothiazide.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buymetforminonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buymobic.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyneurontin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyprednisolone24h.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyprednisoloneonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyprilosec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buypropecia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyproscaronlinecanada.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyprovera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyprozac.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyretinamicro.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyrimonabant.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buystromectol.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buystromectol.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buytetracycline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buytramadol.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buytramadol.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyventolin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyventolininhaler.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buywellbutrinonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buywifi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyzithromax.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyzithromaxonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyzofranonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buyzoloft.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "buzzhub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bybet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "byggindrustrin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "byshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bystryj-zajm.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bytesoftech.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "bzbet365.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "c-c-europeen.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caballeroalba.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cabezadeframontanos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cabrachicagritona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cactusarium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cadici.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cadovod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caeas.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cafe-georges.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caffe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cairohost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cajamarca.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "californiahumanrights.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "callanenglish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "calligraph.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "callvip.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caltlg.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "calvario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camarzanadetera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cambados.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camelia-poezii.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cameronstar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camilaporto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camileonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caminreal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camipress.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camisetasparatodos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camouflaged.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "camrecord.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canadianpointerclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canadiansrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canaldelaespartera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canalescape.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canalinterativo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canalinterativo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canalinterativo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canarys.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cancan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "candelaguatemala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "canlom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cannabiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capellen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capike.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitains.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capital-electronics.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitalmatters.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitalpay.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitanbeilinson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capitapeskanova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caps-hats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capsicle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "captainclaw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "captainjanks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "capturelead.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "car-seats-store.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "car3d.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caraccidentslawyer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caracterizacion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caramellespinell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caraudionow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "caravaca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carbonadvantage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cardbouns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cardiology.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cardmart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cargotariff.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cariki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carikiv.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carlaschiavone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carlolacana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carmageddon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carmarthenradiocontrolledcarclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carmengrayfanclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carnavaldeltoro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carnavales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carolinavarletaarriagada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carolmolinari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "carp4life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cartridge.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casa-brel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casavaleria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cash-bot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cashline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cashworks.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casillasdecoria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casitawn.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casko-insurance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castaneda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castelletto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castilla-comunera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castlehack.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castrillodelavalduerna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castrillodevillavega.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "castroverde.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "casualclubdating.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cat-encyclopedia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cat-problems.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catalog-serverov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catastrofy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catfood.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catgarden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catholicprayers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catholicteuchtar.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catriel25noticias.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "catz-productions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cbcentelles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cboard.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ccbin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cctv-camera.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cctv-systems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdhome.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdnaval.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cdocs.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cebrita.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cecalivo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ceciledekock.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ceco.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celanasarung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebdaily.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebraze.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebrex.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebrex100mg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebritiesblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebritydailynews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celebritysrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celex-machinery.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "celexa365.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cellboost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cellufit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "censored.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centenariodeuncampeon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centenera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "central-apartman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centralsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centralsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centroculturalostuncalco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centrodeeportesbarco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centromedico.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centuryfighters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centuryforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "centurylink.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cepger.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cephalexin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cephalexincapsules.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cephalexincapsules.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cepxuo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cerovica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cervera.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cesar-hector.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cescfortuny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cewek.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cgbproduction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cgionline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ch-investor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chad-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chaikaclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chainz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chamartin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chamberlainpropertygroup.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chandramani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "channelist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "channingmotorsport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chaoscycle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chaoticonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "charleliphile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "charlesdickens.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "charon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chasoslov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chastitybelts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chat4me.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatmaus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatopia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatovod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatroomfans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chatvizor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapacyclovir.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheaplasix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapnolvadex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapsslsecurity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheaptadalafil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheapvaltrex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheat-files.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheaterbios.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chebotarevkk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "checkbot.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "checkercab.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chelmsz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chema.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chemicalromance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chengyutrading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cherkes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cherkess.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chernikova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chernogoriya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cheyennedentalgroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chicagoagent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chicagoillinois.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chicaman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chicinttim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chickencoop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chicospanico.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "children-toys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "childswear.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chiletrenes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chili.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chilipy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chill-house.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chiloesinpuente.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chimpanzee.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinchillas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinesedishes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinesephones.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chinfolk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chirkunov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chirojap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chistesdesebas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chita.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chita.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chitaem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chitashop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chitlar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chittagongtextile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chocoband.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chocolateslim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chocolatos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chofan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chongthamsika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chopradionet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chornobyl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "choylifut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrispaul.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrispontius.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrissytechaira.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianhaugen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianitas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianitas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianitas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christianmorales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christiansrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "christmaspages.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chriswiggin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrome.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chrt-tcdp.gc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chtodelat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chtyvo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chudnov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chukotka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chunga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "churakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "churchaid.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "churchlw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chuvash-republic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chuvash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "chuvashiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cialis-trial.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cialisfreetrial.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ciaran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cidikit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cidones.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cign.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cinema-rulem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cineping.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cinnagar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ciproantibiotic.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ciprofloxacin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ciprofloxacin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ciprogeneric.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cisindia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cistit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cisylik.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citafun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citalopram-20-mg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citalopram20.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citalopramgeneric.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citalopramhbr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citazioni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "city-home.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "city-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citycalculator.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citycricket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citylocal.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citypress.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "citytel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "civic-europe.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "civilvirus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cl-cloud.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cl-wiki.spdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clan-destin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clan-finaldestination.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clan-ogm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clan-ready4war.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clanlaw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claptrap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clarasegura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claretandbluearmy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clarinet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clarinexonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claritin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claritin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clasa-mea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clashoflights.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classic-diva.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classicalchaos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classiccrew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classiccrewhaiti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classichorrornetwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classichost.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classicmagazine.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classicstories.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "classificadostodaoferta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "claudiasnederlandsehangoordwergjes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clearhumor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleocinonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cleverdeal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clickheretobegin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clicktolinkb.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clickzone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "climaticequipment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "climbing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clindamycin-150mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clindamycin-phosphate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clindamycin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clindamycinantibiotic.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clindamycinprice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clinicadeesteticacontagem.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clinicalstats.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clips.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clomid50mg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clomid50mg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clomidonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clomiphene.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clonidine-hydrochloride.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clonix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clorinda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clothing-for-women.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudads.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clouddomain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudfast.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudmoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudrive.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudstress.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cloudwithlightning.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "club-dresses.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "club-oz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubcorolla.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubedegeografia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubeighteen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cluberiks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubfailed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubfunday.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubgenesis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubmania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "clubpes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cmetana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cn47mp.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cnabogota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cncr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coach-immobilier-neuf.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coalmen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coalvillebasketball.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cobranzasimg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cochin-brahma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cocinasazahara.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cocokmobi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coconutguy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coconutoil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cocresa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codebrasileiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codeclub.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codehangar.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codehelper.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codename24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codenamelungo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codepoint.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "codifique.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coding-basic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coffeebean.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coffeebeanstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cognosweb.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colah.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colbert.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coldspegll.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coldtomato.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colegiosantaursula.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colegiotalenti.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "collective-incubator.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "collector.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "collegesrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "collegetownstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colocolochile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colorblindfilms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "colorwow.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comarcadelaranda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "come.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comenc.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comercialcolombia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comfortablelife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comfriesland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comicsanshouse.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "commercialzone.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "commspace.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comomoraremportugal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comoperdonar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "compactador-vendetta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "complaint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "complex-kaspiy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comprarpapelhigienico.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "computer4me.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "computersoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "comunitateonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "concellodoparamo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "concepcion-futbol-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conceptual.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conclave.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conclude.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "condonescadistas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conf.tn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "confidentliving.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "confidentliving.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conrasd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "consoletech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conspiracionweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "constant.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "constellations.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "consul-novocherkassk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "consumer.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "contextolog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "continuernom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "contrarreforma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "conversatis.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cooking-food.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coolfilm.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coolsoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coolweirdfacts.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coopelectricidaddevoto.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copedeportes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copyfast.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "copytext.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coratxa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "corazoncaliente.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coremcnetwork.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coremove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "corhellemons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "corkcityfc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cornelia-luther.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cornertoyshop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "corrales-sanchez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "correspond.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "corsetacademy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cortege.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cortino.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coskun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cosmasiakraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cosmetiq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cosmosearch-azerbaijan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cosmosenalerta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "costi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "costoflipitor.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cotofoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cottonage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "country-games.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "country-house.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "countrysidebar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "coupy.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covid19.melbourne", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "covid19responsepod.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cphollywoodproduct.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cps-sante.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crackajack.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crackedsoftware.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crackerjohn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "craftingcrow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "craftottawa.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "craigphillips-work.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cranenburgh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crash-de-1929-et-grande-depression.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crashedata.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazybear-underground.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazycouple.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazydrivers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazyhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazypete.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazysavings.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crazystories.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "create-website.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "createbot.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "createwowsummit.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creativescorpio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "creeksidebiblechurch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crematory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crestor20mg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crestorgeneric.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crewsing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crimethincx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criminal-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criminalcasecheats.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criminallawyerjobdescription.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crimsoninators.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crimsonmedia.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criptozoologia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crispybacon.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cristenberens.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cristian-alexander.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cristiandumitru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cristomoradocusco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criterion.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "criticalculture.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crocop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cronicademuro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crossair.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crosslimit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crosty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cruises.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crushingcasinos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cruzadamorada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crvenikrst.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crypto-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptobonus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cryptonit.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crystal-media.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "crystalcherryonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "csdacadcv.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "csroot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctcloud.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctech.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctnigeria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctonovenkogo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ctrlcvz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cuartetocontinental.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cuboxmovies.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cudesa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cudesyb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cuentas-gratis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cuevafelina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culinary.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culpoilu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culturaldiversity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culturalsabotage.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culturesgames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "culturism.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cumbiavallenata.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "currentchaos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cursodememorizacao.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "customsandals.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cutehost.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cutemodel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cutie-viewty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cutt.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cvetpodokonnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cvglobal.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cvtenerife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyber-links.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyber-m.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyber-mech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyber-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberburek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberhostpro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberislam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cybermatrixone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberprogramming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cybersamurai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cybershot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cybersolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberworldexpert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyberzones.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyborgtheory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyqual.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "cyrix-systems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "czymamdzisimieniny.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "d24zgh0u05bzjw.cloudfront.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dabuzz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dacha-letom.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dadsarmy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daemons.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dag-berlin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dag-ogni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daganzo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dagestan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dagestanci.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dagestanec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daidogei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailyalerts.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailycricnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailyhealthylife.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailynewsfrommedjugorje.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailyreels.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dailyw88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daisyscars.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daki-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dalkhola-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dalkhola.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dalkholaphotos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dallaswestinternational.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dameeq.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dampfbahn-leverkusen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dampfbahn-leverkusen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "damvdolg.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danadameson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danalina.by", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danashamsters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danesara.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dania.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dania.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daniel-ayala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danieldevine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danieleluttazzi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danielhammond.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danish.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danispage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danituuu7.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dannycavanagh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dannyoficial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dannyscloud.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danoji.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "danzavila.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dapoxetine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daprint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dark-ages.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkartstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkcelebration.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkfilm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkforceofhappiness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkgames.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkhall.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkknights.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darklite.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkmail.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkoff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkpassionsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "darkperu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dartcarrousel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daryl-wilcher.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "das-clanpage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dasolindustrialpark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "databiz.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datacenterbrasil.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datagrid.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datanexa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datastream.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datessrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datingadvice.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "datutorials.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davalochki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daveyconstructions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidbyrne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidereinato.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidovskakreu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidpoyner.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidvilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davidzarza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davinamccall.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "davyatletiek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "daysnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dbtotalnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dclmwp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "de-basiliek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deadboyskilling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deadpoolonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deadsea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deal45.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dealmecoupon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deamonmail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deamsterdam.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dear-children.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deasyvow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "death-note.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deathlords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deathrockstar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deavon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "debats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "debostero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "decimation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "decisionssometimes.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "declarativ.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "decorativecosmetics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dedicatedservers.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deepu-mathew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deepumathew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "defensoresunidos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "defile.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "degreeducation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deja-lu.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dejavu.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dejected.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delaydengy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delaysoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delete.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delfinus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delivereasy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delontewest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "delphibasics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deltamusik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deltaphiepsilon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deluxe-bot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demesos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demicreation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demo-ferma.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "democracy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demografia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demokisisel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demokrasi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demondms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demonforums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demonicresurrection.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "demonwithin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denarium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denchik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denegka-mgnovenno.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dengidoma24.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dengisrazu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dengivdolg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denisdimoski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denisyan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dennislicht.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dental.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dentalcolleges.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dented.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dentist-profi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denugka-vezde.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "denver-design.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "depeche.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deportestalcahuano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deportivo-pasto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "derive.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "derkarl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dermax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "derrybasketball.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "derseebestatter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dersimizmatematik.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deserti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desiderantes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "designsociety.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desire-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "destroysilence.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "destructive-revolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "desyatnichenko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detdom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deti.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detroitnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detsad.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detsad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "detskie-avto-kresla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deustech-media.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "deustech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devahi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devchuli.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devdomain.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devendradox.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devochki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devos.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "devushki.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dewblog.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dexcellentesidees.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dgmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dhamdhamaanchalikcollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diables-noirs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diablescastell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diablos-obon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diagilev.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diasporan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dicaprio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diclofenac-75mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diclofenacgel1.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diclofenaconline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diclofenactopical.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diedenhofen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diegogranada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dietaedietas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dietandexercises.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dietfordiabetics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dieti.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dieti.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dietolog.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "difficulty.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diflucangeneric.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diflucanonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diflucanpill.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "difon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digikohan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digital-e-library.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digital-home.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalbd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitaldisaster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalgymnastics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalhands.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalheart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalninja.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalroma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digitalupcoming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "digivan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dignity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dinamikarosta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diogeneshoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diplom-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diplomatiegabon.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "directly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "directory-aldo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "directory-ecco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "directpaydayloansonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dirtycode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dirtygirl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dirtyporno.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dirtypretties.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dirtywoman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discordsworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discotheque.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discountforelectronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discoveraustralia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "discoverchinanow.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diskdoctors.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "disketa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "disketteetikette.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diskonsepatu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dismanmarketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "disneywallpapers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "displaysandholders.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diterzafra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dividedstates.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "divo-remont.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dixie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dixiefoodservice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "diyeta.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dizainkyhni.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dizzyskills.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dj-kupidon.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djamiroquai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "django.city", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djangoproject.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djazair.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djbessi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djcezar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djconker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djcontact.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djdarkz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djerba-tunisie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djinstinct.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djnandoalmenara.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djnext.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djsciencecollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djshivbabu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djwilson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "djyoungcruse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dkonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dl-protect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dmwclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dnash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dnepropetrovck.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doanhai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dobrekupony.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dobrekupony.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dobrekupony.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dobrinya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doctormahamudul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "documentat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "documods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doczlo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dodacommunity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doeleman.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dog-likeeyes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dogday.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doggingclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dogtrack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dojki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doktorplyusheva.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolg.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolgopolova.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolgorukovo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dollarweb.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dolly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dom2news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dom2seychelles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dom2tnt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domashniy-server.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dominicjackson.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dominolessons.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domostroiy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "domvsibiri.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "don-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "donalblaney.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dongor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "donnapepe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "donostiweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "donteaetcrayons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doorlinekktc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doorservice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dopiatku.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dorados.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doraemonchile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dorizonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dorkface.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dorsavi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dos-team.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dosbox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doserres.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dosgratus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dosite.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doska.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doskapozora.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dosyaa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dota2free.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dotadotaman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dothegangnamstyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dotless.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dotyk-snov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doubly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "douglegomovie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downandouts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downfreak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "download-image.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downloadapkpokemongo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downloadforum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downloadvipgames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "downset.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doxepinonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doxyciclin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doxycyclin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doxycycline1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doxycyclinehyclate100mgcap.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doyarki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "doyouspeakenglish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragon-craft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonboatfestival.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonflycms.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonoid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonradar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonraja.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonroost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dragonscale.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drakencan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drakiada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dramakorea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dramaslayer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dramatherapie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dranik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drawing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drdeath.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreadlord.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dream-design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dream-domain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreambbs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamelegant.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreaminjewelz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamlifeproperty.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamlinks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreampages.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamreality.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamsea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamsjob.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreamstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dredwerkz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drema.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dreumesshakira.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drifter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drinklife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drivingcalculator.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drmicheleross.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "droidguide.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "droidwars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dronebase.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dronesquadcoptersales.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dronix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drosophila.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drugzone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "druides.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "druko.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "druko.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "druko.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drummachines.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dry-cleaning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "drybysuperior.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dryzgov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dsad209.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dtrifonov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dual-universe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dublinrail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duesseldorferheineburschenschaft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dueto.store", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duhivip.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duke-nukem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dulcinea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duloxetinbestellen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "duloxetine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dunberghof.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dunce.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dungeonfire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "durabletravailler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "durganews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dust4you.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dustbox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dveri-lugansk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dvor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dxnguatemala.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dyachenko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dylan-motorcross.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dylandeconinck.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dynamicbusinessconsultants.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dynamictelevision.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dynamisk.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dynsoundmax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dypromed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dyuimovochka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dyykkarit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "dzmonarchie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-antikvar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-balloons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-belgia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-classroom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-dengi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-diapers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-diasporan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-geologia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-islam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-kartinki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-knitting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-nature.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-peeling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-planshet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-polygraphy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-recruitment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-student.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-sweaters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-tires.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-umbrellas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "e-zine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "earth-quake.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eas.ee", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eastdream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eastendonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eastheaven.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easton.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eastside.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easy-company.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easy-design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easy-katka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easyhostclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easyit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easylinker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easymeditation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easypayment.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easyradio.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easysoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "easysubmit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eazyg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebolavirus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebookdrive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebooks4all.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebookspy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebpgateway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebuha.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ebuku.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecarch.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecard.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecaterina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecoeuropa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecohimdv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecologiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "economicnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "economixportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecorp-australia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecoturismo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecoupakovka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecowoman-bengalian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecowoman-indonezian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecowoman-ukraine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecstaticentertainment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ecuadorlibrered.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eddsworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edegulkoyu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edmedications.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edrost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eduardofranco-luthier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educabis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educanada.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "education-info.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educationdepartment.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educationfirst.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "educbook.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edulinks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edunaut.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eduproject.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eduschool.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edward-tagle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "edwinlugo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "effectivecommunication.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "effexorgeneric.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egevpare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eggman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egilopaseryh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egonews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egypte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egyptenet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egypteweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egyptexposed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egyptian.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "egzekucija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ehome.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ehtu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "einscube.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ekhabar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ekokpandm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ekologija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eku.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ekzotika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "el-mundo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elakiri.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elbersdometechniek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electionpresidentiellegabon2009.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electric-clippers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electric-samara.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricianedenvale24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricianmidrand24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "electricpower.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elegant-design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elektroistrument.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elemenop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elementarium.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elementarium.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-paparizou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-risteska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-soset.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-soset.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-soset.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elena-soset.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elenaristeska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elenaristeskaweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elenashilko.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elenaskincarespa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elenatroncone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elencinar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eleonardo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eleonoraanzini.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eleonorapapallo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eleonrp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elephants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elevenensemble.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elgin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elias-erdmann.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elimitecreamforsale.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elit-fitnes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elit-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elitemud.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elka-piter.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ellesoft-freeware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elligre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ellinaras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ellipsoid.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ellisvanlaarhoven.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elmenreich.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elosoavila.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elovip.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elradiobuffet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elsadonaire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elsemanariodesalamanca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eltuito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elvismania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "elweronete.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emaad.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "email-verifier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emailexpress.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emailfreeshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emailservers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emaks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emdadkhodrokaraj.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emiliederavinspain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emilymarques.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emilywufaith.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emmawatsonking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emmepole.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emperoranimeindo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "empire-forum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "empiria.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emptiness.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emsrealfood.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emulsifier.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "emusicuz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "encryptionweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enderhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "endiana.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "endlessfashion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "endofevolution.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enemyterritory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energy-fm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energygroup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energyguru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energymedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energysite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energytrust.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "energywisdom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enescrackmerkezi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eng4arab.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "engelsism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "english-to-russian-translation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "english-training.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "englishouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enhanced-mail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enigheten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eniyicrmprogramlari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enlace.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enlacesgranotas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enns-photography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enriqueferreira.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enteratesoria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enterpriset.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entertaiment-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entertainmentsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "entreprenet.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "envisolarvind.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "enweb.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eonclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epcomputacion.com.ar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epi.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicdesign1.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicdesign2.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicmoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicmusicradio.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epicteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eplenet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "epliar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eqtravel.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "equilibriumx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erandymoreira.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erback.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erbt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erciyesspor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erector.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eric-kolelas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eric1932.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ericfo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erichware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erikaepedro.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erman.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ermitano.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erokat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erolib.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erosofia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erotikstahrtseite.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ersdfaredsaeem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ervirmaison.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "erythromycinonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esc-romania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esc-turkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escoladepilota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escolamais.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escuelagobierno.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escuelasargento.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "escuelotika-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esemprego.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eset.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eskimosboards.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esomeprazole1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "espachavo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "espacioweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "espaiblancandorra.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "espanyoldebarna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esquirebrotherhood.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esra.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "essentialinteriors.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esteban-abadahs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estradiolbestellen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estrogenonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estrogens.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estudiomantis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "estudiosalmogavares.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esturadio.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esvaco.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esys.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "esystems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "etestyonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ethnopsychoanalyse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eugeniaferreira.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "euleres.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eumk6.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eurobilltracker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "euroenergy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "euroflorist.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europesrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "europetraveler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eurosun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "euskaltzaleak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evaisanta-mariaalmudever.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evaisanta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evanavevan.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evandevizio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evanescencenorge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eveco-mebel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eventdays.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eventfun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everseo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everyoneadmins.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.my", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everysaving.sg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "everythinginoneblog.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evezqurbanli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evilbrood.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evojska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evolution-host.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evolutive-records.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evoplay.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evosnine.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "evronews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ewansinclair.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eworldmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ewoutpool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excavation.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exceed-clan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excellentrencontrer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exclusive-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "excluzive.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exerpm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exesoft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exforo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exodium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exogenous.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exomind.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expandabil.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "experiment-626.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expert96.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expertclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "explorium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expoexports.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "expoline.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exponentialsoft.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exponline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exponline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "express-shop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "extirosli.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "extrabits.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "extremesports.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "extrolife.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "exvisits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eyeball.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eyedea.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eyelashextensions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eyescratch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "eyktasarim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ezequiel-garzon.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ezpzhosting.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ezrent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ezz-drops.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f1simulator.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "f1worldwide.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fabelturen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fabian.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fabianni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fabriciomoreira.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fabriziofaniello.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faceegypt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fachim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fachiri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "facialparalysisnetwork.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "factozia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faeton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fail.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairbot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairbot.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairbot.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fairyballet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faithmissionaries.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fakel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fakinga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "falsesecurity.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fam-roos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fameslook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "familialchercher.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "famosas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "famouspdf.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fanaticamandafans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fanatka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fanclubblackhills.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fancypanty.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fandeev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fanidrakopoulou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fannyips.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fans-lily-allen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fantasmma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fantasyadventures.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fantinisfantasy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faqiteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "far-east.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "far3link.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fareast.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fareast.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fareast.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fareast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farfor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farinatorace.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farm-catalog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "farm-dogecoin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faroit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fashion-family.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fashion-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fashionsuits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fashionweek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fast-drops.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fast-mobile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastbob.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastbob.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastbob.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastbob.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastbob.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastcast.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fastknighki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fatcat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fau-bremen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fauceton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "faucetslist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fayamovies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fc-corvinul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "federaciocatalanapipaclubs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feedthegreek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feignandfolly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feldkirchen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feliscatus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "felixbroekhuizen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "felixsworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "felsenheimer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feluck.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fenagav.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fenitriatnica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fenixmetal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fenom.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feodosiya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "feodosiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ferien-zweibruecken.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ferienhaus-montenegro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fermastore.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fernandoalonso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fernandosuarez.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festivaldays.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festivalfumo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festivalsalmondeoro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "festivalsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fetawerelddans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fetichedecaramelo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fey-web.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fietskr.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fifastars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fiftyshadesofgreyfullmovie.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fighter-planes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fighting-turtle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fightingshit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fihatest.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "file24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filek.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filipinadating.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filipinasdailynews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filipinochinese.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filmbest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filmizleindir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "filosofia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finalfourstream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finbio.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fincities.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "findmail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finestroom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finhelp.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finmarket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finn-svoboda.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finnkupongkoder.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "finpomosh.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fipq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fireradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firouz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "first-money.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstclassnuisance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstgov.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstlightinspirations.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstnetwork.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firstplace.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "firsttimer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fischerp.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fisherman-union.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fishyscans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fitflaop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fitness-world.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fitoryx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fix-ru.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flagyl-500-mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flamentecnic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flameviper.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flash-games.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flashbackband.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flashtek-uk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flavourroad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flawless-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flawlessly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fleuromance.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flexicurity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flicerdowneh.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flightdiary.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flimnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flixsave.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "floatifnghotel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flomax385.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "floodboss.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "floppy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "florenciaextrema.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "florida-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flossdentallasvegas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fluconazole.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flukestar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fluoxetin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flvyingeagle.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flyingangels.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "flywind.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fnscatania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "focalpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fodder.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "folclore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "folkdance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "follow-the-leader.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foodtrekker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "football-news.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "footballrussia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "footballscores.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "footbolka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "footbolki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "footwear-catalogue.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "for-testing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forabrokenrobot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foremail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forensicsciencecentral.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forensicsinfo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forever.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forex-arabia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forex-trading-tutorial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forex-up.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forexpattern.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forexworld.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forojovensanfernando.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forowarhammer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forsaleacameras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forsaleelectronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forskolin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fortunacigarettes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fortunahamburg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forty-two.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fortytwo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forum-reklamowe.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forum-tw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forum-washington.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forum24.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forumotion.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forumrussia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forums4everyone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forumsampdoria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "forumsrussia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotbal-dubina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotbalclubcaracal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foto-znakomstva.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotografies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotolectura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotomodel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotostudiobasic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotovsibiri.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fotozakazka.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fousetmoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxcloud.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxcon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxdemos.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxdirectory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxmailer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "foxstyle.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fpnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fragmentation.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fragments.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "franceactivetravel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "francesfluente.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "franzters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frau.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fraudswatch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fredbarboo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freddo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freddyhasderyk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frederikugarte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "free-lancer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "free-obmen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "free-watching.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "free6to12yo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeartico.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeauroraoperations.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freebacklinksforyoudirectory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freebookdomain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freebookslibrary.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freecrypt.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freedeals4u.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freedomwill.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freefallproductions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freemagi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeman-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeminecraftmaps.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freemovieonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeonlinearticles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freepornhunt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeradical.zone", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freereal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freeschool.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freesexvideo.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freesports.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freetagboards.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freetelegraph.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freibesetzt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frekat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frenchvandal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frendamos-roleplay.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frequentlyaskedquestions.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fresh-info.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fresh-info.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fresh-info.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freshersworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fresherwalkins.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freshhosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "freshtest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frfiber.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "friendsforeverrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frikipedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fripper.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "from.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fromthecountsplace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frontbaydevices.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fronterasblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frontierbrasil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "frozencuisine.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fruit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fruit.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fs-rozmarija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fsalmeron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ftl-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ftpmovement.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuckwhatyouthink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuembellida.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuenferrada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuentesdeleon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fuerzaazul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fullmetalconsulting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fullmoondesignhouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fullsize.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fully-hair.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funatic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funchal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fundpress.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funeral-doom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funny-rates.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funny-wedding.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnyanimalvideos.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnycommercials.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnymedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnypicz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnyprankvideo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funnytimes.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funpakistan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funprogramming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "funzack.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furorcanario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furosemide-lasix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furosemide.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "furrycraft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fusacity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fusacovi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "futarara.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "futurama-il.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "futuristicarchitectures.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fx110.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fxtalk.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fyn.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "fzoske.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "g4t5esm2.team", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gabapentin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gabinet-okulistyczny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gabrielaebruno.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gabrielafriasfanclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gabrielemarino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadanie.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadatel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadget-freak.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadgetfreak.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadgetgi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadgetmaker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gadkiy-farm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gagesmith.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gagnerenfant.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galaxymedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galeriabunkers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galerias-xamoralarte.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galerie-claudia-walz-nagold.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galileo.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galive.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galizae-sports.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "galleryinfo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gallest.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gallest.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamagam.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gambiapagina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "game-net.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamebase.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamegainlx.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamekb.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamekeybox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamekiller.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gameloft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamelok.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamering.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamexperts.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaming-dice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaming-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaming-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamingexperts.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamingph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gamingtopbox.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gandalfcz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gangrulz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaponov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garbuz.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garden-land.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gargas.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gargola.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garmonia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garnertree.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garotastop10.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "garrettcornwell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaspard-ulliel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gatemaster.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gautam-iiith.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gautam-k.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gaynight.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gazaryan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gbiotech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gcschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gearnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geekashell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geekedin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geektechypro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geekurl.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gelanc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gelijk.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gelvetika.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gem.forex", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genbrugge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generacionmoderatto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generalpsych.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generaly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generic-plavix.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generic-sildenafil-citrate.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "generic-tenormin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericabana.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericaccutaneonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericaceon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericadvaironline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericazulfidine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericcalan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericclaritin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericcolchicine.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericdutasteride.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericflagyl.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericforavodartmedication.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericforflagyl.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericlevaquin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericlexaprocost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericlexaprocost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericrhinocort.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genericvytorin.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genesisplay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "genioyfigura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gentechi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gentlentssl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geoenvironconsult.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geografia-peru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geographique.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geokeys.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geologist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geomadrid.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "georgelucas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "georgeshobeika.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "georgianews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "georginabouzova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geosales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "geotech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "germinalekeren.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getanswer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getbrain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getcookie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getelectronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getfreeltc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getinfoleads.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getme.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getreadyforever.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getrealutah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gettwo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getvalidate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "getyoureuro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ggsolutions.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ggworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghanaculture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghazals.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghiafeh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghostbusters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghostdog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghostdragon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghostnight.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ghostutils.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gidapgs.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gidroponica.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gifuxuk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gigagroup.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gigatop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gilbertosimoni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "giovannisantini.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gipl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gipuzkoabasket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "girlfriend.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "girlsaloudcity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "giroskuter.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gisellapiano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gisma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gite-ambleteuse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "givemylife.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "givemylife.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "givemylife.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gkconsultancy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gkmusicindia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gladwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glasiko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glassofdirt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glazkova.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glickman-consulting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glitchcomic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "global-business-solutions.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "global-topsecret.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalconsulting.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globaldataline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalentertainment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalmed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalnewsnetwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalnewssystems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalpolarbear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalrussia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globaltravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globalwarmingis.science", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globehomeschool.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globus-plus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "globustrust.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gloomy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glossowiki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glowfic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "glyburidemetformin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gmsociety.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnomania.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnulinux.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnulinuxforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gnuworldorder.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goclix.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "godalivetpalandet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "godfilm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goedekortingscodes.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goedekortingscodes.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gofriends.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goizalde.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "golargefishruler.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "golayamadam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gold-bird.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gold-diamondltd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gold-fm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldankauf1875.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldband.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldbug.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldcreek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldenagefoundation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldenberg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldencircle.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldenclub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldenhouse.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldenwolrd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldfingermusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldfm1031.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldhill.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goldstandardtrust.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goloaninsurance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "golosovanye4you.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goluggo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gomezites.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gomicrophone.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goncalves-admredes.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gondon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "good-cd.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "good-know.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodenglish.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodiesnet.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodlink.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodontop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodopportunity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goodpeople.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gopri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gopronow.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gopuramcinemas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorakhpurclassifieds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gordas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gordion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gordvorets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorepriest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorgeouslyflawed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goriki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodabakan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodabakan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodabakan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodabakan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodivanovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodruza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorodyaroslavl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goroscop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goroskop-sovmestimosti-znakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goroskop-sovmestimosti.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goroskop.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gorstom.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gosarh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotepisodes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gothicsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotobooks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotovka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotriage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gotver.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "governmentjob.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "goviralnow.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "govno-site.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "govnohosting.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gpcs.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gpl25.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gppro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graberbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grabtech.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gracia-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graciasmarvin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graduados.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grafenberg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graft.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grallersdegegants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grammofono.gr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grand-books.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grand-knighki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grandi-books.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grandstarcourier.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "granit-capital.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graphe.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "graphicspace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gratis-hosting.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gratuitweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gravityresearchgroup.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grazhdanskij-advokat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greataltrock.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greatgooglymoogly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greatrenumbering.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greatscholars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greekweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "green-factory.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "green-laser.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greencocktail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greencross.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greendragonsearch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greenforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greengarden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greengrocery.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greenland-estate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greensph.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grenade.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grend.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greyhackcentral.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "greystonesscouts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "griendencollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grigorev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grijpskerk500.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grinday.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grindgore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gripencrossfit.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gripwenab.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grishavirus.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grizzlys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gromovphotography.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groomlake.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grotesk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groundfm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "groupx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grovecity.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "growme.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grsknow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grumpyguy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grundskoleboken.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grupatvogzivota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "grupos.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gruppa.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gruzchiki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gruzchiki74.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gruzinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gryte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gtnh.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gtonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guadalinfoconlaroja.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guardedbox.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guardian-codex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guarrato.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guategmala.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guayaquil-consort.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gubernia37.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gubka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guejarsierra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guenther-freitag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guernica1913.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guerrillaradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guestby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guestnetscript.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guiascliente.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guiasescapate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guide-voyage.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guidopedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guillemagullo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guitar-strings-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guitarfreak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guitarreria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gulabovski.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gulliwer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gulsot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gumbo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gundemguncel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "guruworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gustarfsberg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gustavo-lima.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gustavscelmins.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gusuraman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gutegutscheine.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gutegutscheine.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gutegutscheine.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gutendag.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gworld.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gymbase.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "gymnasium56.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haasonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "habahaba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "habarovsk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "habbplay.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hablemosdenutricion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hachimijiogan.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackengine.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackerinfo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackers-networks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackersw0rld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackerzbug.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackingfever.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hackney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hadika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hafizkadir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hair-carekit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hair-extension.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hair-extensions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hairbrushes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haircareblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hairhardstyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hairlossadvice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hairphoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hak-zona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hakasia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hakerzona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "halcraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haleluyah-asuubabi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "half.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "halneff.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "halospawns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hamletstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hammernews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hammerstorm.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hanakaru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hand2h.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "handmade-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hangargeek.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hanisirfan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hannit.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hannover-96.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hannover-reisen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hanoicapital-tanvn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hanomag-tractors.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hansa.org.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haozi.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happu-dinero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happy-face.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happy-finance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happy-space.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happycore.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happydad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happydota.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyexwife.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyfuture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happygreats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyhumans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyindia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyscubadiving.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "happyweekend.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hapronailz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harabar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harabar.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harabe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harcourt.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hardcore-hooligans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hardwareforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hari-katha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harray.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harriedrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harrietjohnston.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harryagustiana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "harrypotterclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "has.software", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hassan-kuordish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hassellunden.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hataonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hatsuharu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "have-it.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hawaiiafro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hawkrovers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "haxland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hazyhosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hb2132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hb5132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hb6132.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hcv.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hdlooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hdmobilpornolar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hdrezka2018.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heade.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "headphonesinear.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healmyhearttoday.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healtbeautyturkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "health-road.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "health.gd", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "health24.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthandglow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthchoice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthmanager.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthstyletips.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthymen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "healthyweblife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heart-cartoons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heatherbells.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heatingequipment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hebbelabi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hebrew.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hecking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heg.ge", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heikki-mikkola.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heilmandeckandfence.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heinzencastellano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heist-clan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helenssjoholm.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helga-fest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helikopter.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helikopters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hellokashmir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hellomyword.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "helloneu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hellonews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hellorussia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hemingwayfp.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hemorroi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "henkpille.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "henri-feuillade.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "henrymercado.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hentaizm.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herbalifereport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herbers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herdwilliam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heredapoxetine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hergeandtintin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herila.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heroes3stat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herrald-skeeleren.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "herumixer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hessenheim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hevrishut.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hexatech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "heybyrdie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hf-rpg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hhristov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hi-million.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hidden.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hien.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "higea.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "high-school-atka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "higheducation.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "highintegrity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "highnation.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hightechone.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hillexplorer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hillroadgarage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hilltopsurgicalhospital.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "himarijuana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hindustantimes.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hinduworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hirecities.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hispalazarus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hispania.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "histkult.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "historiadebagua.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "historicizam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hitech-news.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hitfm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hithouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hitmyheart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hitpointer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hitrow-move.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hivault.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hkoreatv.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hls-tutorial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hochuvrotik.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hochzeit-saufzeichnungen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hodeis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hofmannenhofmann.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hogvorts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hohma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hokkaido.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holdingcelebrations.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holidayclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holisticdevelopmentagency.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hollabanken.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holostyak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "holygrove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homake.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homedev.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homedeveloper.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homedeveloper.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homegardendecoration.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homepal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeschoolinkorea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homeyx.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homofo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homophones.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "homyak.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "honeybearchildcare.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "honguyensy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hopeland.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horcajadadelatorre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horde-entertainment.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horizonmail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horizontalsystems.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horseplanet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "horvatia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "host-morezar.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostcloud.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostelacion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostfree12.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hosting-rus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostingelite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostinvest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hostonssd.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotbabe.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotel-bella-muerte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotel-du-parc-allevard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelbiz.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hoteldvorik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelitalia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelsalzberg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotelsantalibera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotiii.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotnewsnl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotperiscope.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotpopky.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotscripting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hotsmi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "how-to-build-computer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "how-to-pc.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "how-to-write-a-book.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howlers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howmuch.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howmuch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howtopronounce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "howtostopsnoring.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hr-automation.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hrjob.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hrkfamilylaw.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hrmafia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hsog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlandcss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlcssphp.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlcssphp.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlcssphp.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlcssphp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "htmlweb.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "httpd.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hudeem-vmeste.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "huertoydesamparados.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humanesdemadrid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humanewolf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humblecraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hummel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humor-web.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humor.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "humored.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hungarian-united-church.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hungaryz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hunterscrolls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hustlerstate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hvhercules.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hvorschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hvylya.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hybridworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hydrochlorothiazide125.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hydrolyze.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hyperspace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hypexstore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hypnobb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hypnoseduction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hypnosesolutionsvives.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "hypnotizedgirls.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-forum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-lab.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-make-love.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-prince.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i-r-a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "i88i.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iamlegend.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iamsadmax.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ianis-build.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ianschulz.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ibuprofens.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icecreamika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iceflow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icehost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icon-programming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icons4free.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iconworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iconx.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icq-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "icst.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idanie.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ideahub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idealabs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idealbody.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ideeaanzee.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idiomasdelmundo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idmaster.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "idraetsmusik.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iegatpracticetest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ieiscccuba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ig-plastik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iggies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igra-prestol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igra3k.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igrodrom-kvest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "igrovoi-klub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ikaros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ikerepc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iklan-baris.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ikwillhout.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ilericikadinlar.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ilikepenguins.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iloveporn.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ilovesnow.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imagealbums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imagecom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imagen891.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imaginescape.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imakash.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imeria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imgo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imgo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imiku.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "immoraldoctors.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "immortal-it.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "immune.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imoxin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imperiyashop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "impossiblechoisir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "impra.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "imprezer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "impudence.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "in-books.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "in-crypto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "in-love.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inanaji.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inanan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inanec.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inaned.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inblank.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inceptionband.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "incoldext.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "incrediblenews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indeika.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "independentpartyofamerica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indexhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "india-ennenga.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiandramasonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiatechblogger.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiaviral.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indico.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiereview.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indignes-strasbourg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indir2017.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiwebawards.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indiya-kino.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indlish.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indoface.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indofountain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indoidnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indonesiatrip.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indotravels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "indramas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "industrialalpinism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inetuser.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infiernoalgecireno.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infinitenews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infinityrecruitinggroup.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-club.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-compusciencetech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-days.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-free.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-it.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-obzor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "info-sell.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infobasquet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infobiznes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infobrest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infocanada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoclub.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infofp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infogai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infogate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infogroups.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infohunter.education", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoiinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoindia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoislamharian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infolead.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infomail-online.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inforabota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inforge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inforok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoschool.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infosystem.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infoteka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "infowheels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ingeniumsociety.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ingticos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ingushetia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inhere.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkjets-inks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkliners.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkognito.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkognito.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkognito.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkognito.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inkor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inline-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inmaaa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inner-vision.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innogames.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innovationbranding.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innovative-trading.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "innoviahome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inovasirumahku.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insaingenieros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insanepyro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insidebeach.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insideperu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insider-invest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insiders.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "instantpage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "instrukci.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insulations.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insurance-companies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insurancecompanylive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insuranceleep.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insurancenews.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insurancequotes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insurancesaman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insuranceweb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "insuredcloud.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "integrishield.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intenirphoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inter-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interacthindu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interc0der.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interesting.ac.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interestingfacts.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interior16.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internacionalista.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internalframebackpack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internally.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internationaljoustingleague.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internationalweekly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internet-drive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internet-gazeta.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internettoday.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "internetzaim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intersexualite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "interslang.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intim-24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intim-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intima-mente.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "intomsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "invaded.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "invata-ma.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "invest-stroj.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "investgold.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "investion.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "investmonitor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "invitebiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "invito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inwit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "inzeitinteractive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iocorp.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iocus.fun", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iossearch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iotmu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iparenda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipclabs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipcmali.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iplookup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipmatic.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iptechnology.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ipushmail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iqos.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iran-best.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iran-dokht.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iran-speedex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irancenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iranconnect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irandroid.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iranfreshfruit.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iranlinks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iranpedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iraq2u.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ircoholik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ircsapiklari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irfanweb.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irinaf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irkutsk-studygood.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irma-gadalka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ironmongery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "irontigers.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ironwind.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iruniruten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isabellzaloof.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isakow.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isimonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isittheyearoflinuxonthedesktop.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iskorka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iskurturkiye.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islam-2day.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islam-azeri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islam-doc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islam4all.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islam4congo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islambolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islamdersi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islamisgreat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "islamnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "isletmenlikkursuankara.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ispanika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ispaniola.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ispymissions.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "israelitopbox.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "istagb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "istudentpro.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-blog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-ebook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-expert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-perm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "it-volgograd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "italiana-lacrima.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "italiansrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "italk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itbrouwerij.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itechgeekology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itiweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itlog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itperm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itraffic.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itsalan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itsoluciones.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "itsupport24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivanovka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivanovocity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivermectin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ivisa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "iwebsolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ixtan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "izipik.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "izmir-media.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "izmireskortlari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "izmirtemizlik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "izzyontour.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ja-sobstvennik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ja1deijssel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jaago-pakistan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jabboworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jabsolutions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jacaranda-deutschland.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jackets-coatsplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jackmail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jadedmonkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jagerkin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jahit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jailstorm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jakegyllenhaal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jako.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jamaica.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jamiepleasants.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jan-graca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "janavish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jannehonkonen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "janvanmechelen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "japanchiropractic.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "japanese-imperialism971.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "japanroll.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jaredonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jarquedelaval.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jatiwahidfurniture.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "java-fan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "javabot.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "javi-soleil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "javiersanchez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "javorina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jaybeez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jayhost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jayjardine.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jaypark.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jazzab-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jazzapart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jazzband.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeancarlos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeangarcia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeannotbel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeanphilippe.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeans-butik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeans-moda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeanslee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jecnetwork.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jedi-master.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jedi-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jeep-diagnost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jenelle.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jenhayes.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jennysource.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jessieabraham.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jesuscapitan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jesusnazarenobaena.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jetcraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jewelleryoutlook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jhmrcm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jhost.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jiangmen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jiheng.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jk-rjevka.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jmedesign.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jobfresh.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jobrus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jobsportalbookmarking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jobynet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "johanlog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "johannes-schaefer.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "johncook.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "johnwinter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joifur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jolette-hernandez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joletteperu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jonatan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jonbarron.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jonstar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jootshop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jophson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jordanprice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jorgenegrete.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "josephcz.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "josephmarino.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jourbook.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joyfulevents.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "joyreactor.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jozefkvasnica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jphost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jpvermogensregie.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jscsteigerbouw.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jslots.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jsphys.org.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jukovka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "juliakhairaton.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jumardotaekwondo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jungle-forums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jungschuetzen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "juniorsambo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "junjie.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "junkiedownload.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "junomessenger.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jurislex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jurist.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justanotherday.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justinsinkula.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justpdf.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "justrighthsc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "jwompa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866088.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866089.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866090.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866091.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866092.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866093.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866094.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866095.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866096.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866097.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866098.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866099.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866100.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866101.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866102.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866103.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866104.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866105.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866106.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k8866107.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k9lady.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "k9life.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ka4ka-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ka4ka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabardinka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabardino-balkariya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabinettindia.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabluchek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kabluchok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kachaem-knigi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kachka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kadet.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kadykchanskiy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kagomesashi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kahootkings.works", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakdolgonline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakofotmitzaim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakofotmitzaim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakofotmitzaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakofotmitzaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakofotmitzaim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakpoluchitzaim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakpoluchitzaim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakpoluchitzaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakpoluchitzaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakpoluchitzaim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaktus-tour.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakvzyatdolg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakvzyatdolg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakvzyatzaim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakvzyatzaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kakvzyatzaim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalambur.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalambur.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalaskvintetten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalendarabiturienta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalina.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaliningrad.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalk-shop.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalleanka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalligo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalmykia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalmykia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaluga.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaluga.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalugin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kalyazin-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamasutra-training.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kambistories.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamchatkatravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamchatkawinter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamennyj-pisatel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kameno-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamilla.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kamiyo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kanapa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kanctovary.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kantube.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kapanlagi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kapital-kredit.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kapparhokappa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaputtendorf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karabah.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karabah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karachay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karantyn.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karaoglanis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karatesamurai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karawane.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kareenaworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karelia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karelia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karelia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karelin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karen-homestay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kargas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karimova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karlskronajk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karlson.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karmatrend.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karniz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karramba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karriharju.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karstransport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "karta-baikala.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kartonki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kartpower.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kashifshah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kashousing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kasparovru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kat4at.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katalogharga.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katan-stroi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kate-beckinsale.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katenka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kateryan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kateryantv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katiebenson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katrelleonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katrinasevilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katushka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "katushka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kavkaz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kawaii-dollies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kayon.tj", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazan-tury.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazangoforums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazanusadba.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazino5.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kazna.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaznur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kaztest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kedi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kedibizworx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keithazzopardi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kelamanproduction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kelleylatino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kellyvoice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kemsa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kemsamnhatban.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kendrick.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kennewell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kenpobolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kenpotalca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kenyattaachinkle1.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "keramed.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kertis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ketemulagi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ketgioisu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kett.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kevansizemore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kevincoynepage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khaki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khakim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khalidmail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kharatinoil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kharkov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khmerlive.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khoteyev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "khukhrain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kiasarnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kids.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kietblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kiev-live.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kifid.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kilkimzaibu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "killmebaby.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "killmenow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinanbudotenero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kingbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kingdomexperiments.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kingliey.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kingsound.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kingspalacepainting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kino-boom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kino-room.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kino-zavr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinobag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinobarashka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinofest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinofile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinofilmionline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinogold.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinograd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinohi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinokub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinolex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinology.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinoscope.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kinoserver.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kirka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kislovodsk-zamok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kismyder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kisulki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kisumuterraceapartments.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kisvasut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kitchenlove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kitchenware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kite-surf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kits-graphiques.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kitten-advice-forum.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kizkulesi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kjccradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kkangeli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kkeun.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kkicreative.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klaxon.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klementijgerta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kliki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klikmarket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klinkov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klub-zajmov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "klushka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kniga-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knigareceptov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knighki-knighki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knighkidoma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knighulki.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knigi-free.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knigi-na-dom.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knigi-zdes.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knigifast.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "knjazevac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kobovec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kodifirestick.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kodioso.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kogotok.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kogotok.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kolhozik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koloradskij-zhuk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kolorwell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kolyapetrov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komarh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komintern43.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komitur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komment.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kommunistienliitto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "komplekt.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konata.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konf.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kononenko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultacii-buhgaltera.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultaciya-astrologa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultaciya-astrologa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultaciya-astrologa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultaciya-astrologa.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "konsultaciya-astrologa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kontikiindustries.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kontrastonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kontur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kopany.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kopeechka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kopeyka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kopfschaschlik.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "korablino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koreanpearls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "korespondent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "korn-klan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kornmesser-goldankauf.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "korolevstvo-movie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koroli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kortarsmagyarfesto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koshakovo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "koshechka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kosovo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostenloses-forum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostroma-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostroma.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostroma.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostroma.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kostroma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kotaev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kotaraanglican.org.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kotka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kotoopros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kozlov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krabathor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kraftek.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krakozyabra.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krakozyabra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kralenparadijs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kran.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kranservice-alzey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kraski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasnaya-nit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasnodarkrai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasnoyarsk-24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasnoyarsk24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasotkafirm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krasotki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kreditonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kreditor.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kreditovnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krilov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krimzeta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kripa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kriptopodgon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krishnendu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kriston.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krok.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kromciri.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krosovki-nike.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krubik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krugermillions.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krutilka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kryshodel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "krystal-framework.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ksem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kseniya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kseniyakoroleva.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ksenomorf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ksk-raduga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kt-motors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kteatras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kucukkaymakli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kudoran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuepper.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kukutza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kulinariya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kultur-werkstatt-wulfen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kulturistika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kumaraguruparan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kunashir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kupipled.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuponmail.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kurd-yogurt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kurgan-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kurgan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kurgancity.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuropatina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kursk.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kustosija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kutvonen.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuzik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuzinea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kuzov-plus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kvartira-grad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kvartiragrad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kviskoteka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kwork-garand.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kyrgizion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "kyzyl-senir.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "l-mservicios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "l2p.lol", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "l2relax.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "labandadelexpreso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "labirint.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laciana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lackan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lacuna-vermoegen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladanivabelgium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladiesrapide.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladocu.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladymayonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladysecrets.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ladysecrets.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laemiliafutbol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lagranmasade.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laguterbaru.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lahirusblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laity.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lajarana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lajauria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lajme-shqip.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lake-baikal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lakewinnipegdatastream.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lakorona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laleli.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lamalapalabra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lamorralla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lampbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lamper-design.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "landloperfm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "landofmerlin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "landscaping.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "landware.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lankana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lanny.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lanyardsfactory.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lapdance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laperla-chemnitz.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laravelcommunity.asia", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larch.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lareduction.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lareduction.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lareduction.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "largest-soldiers.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larimercolorado.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larmenta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larondenet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larplibrary.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "larser.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laser-toners.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lasersolutions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lasix-medication.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lasmesas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lastbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lastmile.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lastmohicans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latexspuitenspecialist.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latinmusiccollection.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "latviaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laubo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "launchyourcareer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laurainnes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laureaty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laurentimaurizio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavamine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavhire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavitagarden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lavochka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lawzakon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "layflamso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lazibeach.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "laziz24.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lazonacartagena.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lazywaves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lcsoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leadercreative.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leaderfreight.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leadersaudit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lean-consulting.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leandromarcolino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "learn-this.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "learolstore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leatherstreet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lebensinselparaguay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lechenietravami.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lechite.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leddeluxe.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leech.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leetbunny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leflox.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legacygame.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legacygame.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legaliz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legalnews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legalsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legendgrafix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leggyeggy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legkie-recepty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "legko-pohudet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lemonardo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lenemes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lengua-alemana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lenguasgermanicas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lenina72.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lennard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lennox.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lennyendewespen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lenorefan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lentanews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leonardofavio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leonplast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leper.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lephilnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "leprekon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lerika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lesargentinas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lesin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lespatriotes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lesportmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "letchikleha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "letscrackit.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "letturaveloce.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "levaquin750.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "levelsoft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "levendwater.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "levothyroxineonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "levs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lexapro-price.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lexicore.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lexifax.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lexis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lf112.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lgesteticaautomotiva.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liberalis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libertacao.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libertis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liberty-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libertyland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libractes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libresoft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libuni.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "libyanexpert.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lichnyj-astrolog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lichnyj-astrolog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lichnyj-astrolog.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lichnyj-astrolog.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lichnyj-astrolog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liderok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lieben.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lienhuyghebaert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "life-tec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifeandhealthtips.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifeasgame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifecoachkatrien.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifecraft.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifenews24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifetimefitness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lifexpert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ligneclaire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "like-boss.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "like-rabota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lilisg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lille.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "limbo-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lime-host.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lime-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "limiturls.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "limouzines.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lincasonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lindseyfansite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linebooks.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lingeriecollect.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linguaromanica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "link-group.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "link-knighki.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "link-list.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "link2link.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkbooks.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkcat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkdolar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkinbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkinparkoutpost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkposts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linksafe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linksite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linkto.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linocolombo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linotype.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linux-admin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linux-pc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linuxarequipa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "linuxcbt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lionchita.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lipeck.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lipeck.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lipetsk48.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liquidflash.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lisa-mainz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lisas.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lisavrobinson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishayut-prav.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishayut-prav.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishayut-prav.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishayut-prav.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lishayut-prav.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lissabonsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "listener.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "listing.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "litebooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "litehost24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "liteminer.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "literacychannel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "literatura-portal.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "literaturka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "litiab.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "litportal.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "littlebar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "littlebootshonduras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "littlerose.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "littlerphotographie.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "live-knigi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "live-news.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "live2play.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livebestbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livein.si", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livekey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livelonglife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livemomentum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livestone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "livestrana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lixincheng.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lizaminnelli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "llanelli-radio-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "llanowar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lnk.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loadme.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loanfreeze.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localassocier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "localized.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locall.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locatornet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithboksburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithedenvale24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locksmithgermiston24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locktonportal.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "locomotiv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lodger.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loftyideas.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logitheque.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logolabben.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logolando.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "logue.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lohkoketju.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loiit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loire-en-bateau.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lojacriativos.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lolcosplay.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lolfunny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loliel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lolipops.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lomza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "londonhealthcare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "longfordlodge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "longlink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "look-books.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "look-info.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loopool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lorbooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lordbyron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lorddominion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lordsesshoumaru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lorena-salido.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lorenzodeangelis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lorn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "los-diablos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loschilums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losdisidentes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lose-weight-now.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losemperadores.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loseweightbaby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loseweightin5days.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losflamers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loslegendarios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losmiserables.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "losmolinos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lospozuelos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lostprophetschile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loszucoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lotekk.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lotereiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lotusweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louboutin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louboutinshoessale.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louisa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louiserutkowski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "louisvilleconnections.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loutro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "love-and-hate.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "love-navigator.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "love-planeta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovebirdhut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovedaleschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovedutch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovejoli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovelee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loveless.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovelybook4u.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovemasjid.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovememories.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovemoon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovenet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "loverussiangirls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovetowork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lovlyhorses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lowcosthost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lowcostivf.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lozhka-mernaya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lpchemicalsolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lpkosovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lqshu.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lstu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ltailshort.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ltime.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lual.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucerin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucia-art.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luciferblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luciferianism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lucky-time.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luckyabonent.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luckyemail.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luckymice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luckyrent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ludmilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ludmillaewagner.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ludo-giuly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luematecidos.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luggagecare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lugros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luisanalopilatogrecia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luisaviles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luisnavarrosl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lukasfelder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lukasmatuska.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lukasw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lumchan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luminaproject.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lumpenrock.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lumpy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lunarhost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luochunhui.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lushnja.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lutherus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luxarchive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luxemburgsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luxuryspeed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "luzica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lxiii.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lyap-lyandiya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lydiawebfans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lynnesbian.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "lyubov-sovmestimost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "m-exchange.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mabusalah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macarenagomezfan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macaroons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macautocouture.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "machiavelli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "machinatio.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macho-i-botan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "machupicchu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mackanz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mackenziedatastream.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "macnews.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madameblueimages.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "made.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madhawaweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madisonprocaccini.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madluging.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madrasareforms.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madskills.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "madteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mafiaclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mafiaclub.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magadan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magadan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magaria.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magaso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magazin4ik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magazone.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maggiemcgee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magicalwishes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magicball.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magicbar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magiciansofchaos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "magnitola.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mahadihasan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mahjonggames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maikhuong.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mail-delivery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailbase.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailboy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailcubexs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maildrops.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailex.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailexpresso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailexx.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailexx.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailexx.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailjunkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailpass.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mailtracker.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "majestio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makeh2o.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makemoney-plan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makeupevelinua.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makingmemoney.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makingmoneyathome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makingmoves.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makohu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maksa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maksmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maksonshop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maksport.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maksutov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "makuonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malahov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malardalenvvs.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malaysia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maldives-showing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "male-cats-spray.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malibaby.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malikdeenarislamicacademy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malisheva-blog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mallpass.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malmyzh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "malvinas-falklands.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamasbox.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamaznaet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamboo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mambos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamburao.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mammal-taxonomy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mamunlyric.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "managedserver.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manaspaul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mandala-book.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mandarinplay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mandefender.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mandelaeffect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangabond.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangacat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangafreak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangagaga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mango-zajm.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mangoservers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maniazul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manipurmatka.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mannenzang.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manuelboelstler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manyhotfiesta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "manytubes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maquinasperfectas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maracit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marauderos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marcell-jansen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marchellenevers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marchinghatters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marcusburghardt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mardigrasnapkins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mare-sylt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marga-marga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "margaridamendessilva.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maria-kirilenko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mariachisdequito.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mariaisabel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marialopez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marianrivera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marielouise.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marinapozzoli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marinarinaldi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marinella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marinersins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mario-ancic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mariogarcia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marioserver.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maritlarsen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marjoriebarretto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "markantalyamasajsalonu-bayanmasoz-cim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marketgarden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marketingstrategy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marketplace.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "markitanova-anna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "markjansen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marktbakkerij.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maroshionline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marsafc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marshall-allman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "martijnvdputten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "martinassurfdepot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "martinkunc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "martonveronika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marvelo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "marxpark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masakanibu.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masanunciosimpresos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mascarablond.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mascarbo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mashonkavortu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maslenka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masmusicaradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masrilanguage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "massagekartan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masshost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masterdesingweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "masternetix.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mastervision.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "materiel-grand-format.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mathiveri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matovaya-pomada.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mattentaart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "matthewoshea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mauricio-ochmann.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mauriciosilva.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mausoleum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mavro.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mavro.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mavro.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxivisor.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxmanus.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxopen.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxwellcity.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxwellcity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maxwittfeld.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mayaedifice.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mayflowerbocawina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mayki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "maykitut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mazartdesign.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mbfiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mc-revolution.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mc-teemocraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mccommando.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mchaelkordomain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mcpat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mcpgnz.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mcsoneca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mdns.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meapbot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meapbot.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meapbot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meapbot.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mebel-voronezh.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mebelshik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mechta.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medaliturki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "media-start.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "media4u.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mediabooks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medialinkz.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mediamarket42.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medical-centr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medicalauction.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medicalsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medicina-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mediclinik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medifoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medinc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meditrak.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mediums.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medovoe.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medprozone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medrol.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medspecial.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "medvedka-nasekomoe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meepbot.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meepbot.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meepbot.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meeras.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meeting-server.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meetmyown.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "megabook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "megahostingbr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "megalibportal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "megamillions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meganmarston.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "megaparadise.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meharossii.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mehrgarh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meiler.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meineziege.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meiyi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mejorestablets.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mejovonakowogov.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mekanismo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mekatronika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melagenina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melaniec-thebest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melanin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melissageorge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melkiran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "melvinsfrance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "membershipnetworksite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "memorylines.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "memurvadisi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "men-costumes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mendel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "menselijkembryo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "menswear.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mentalproblems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "menureader.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "menzel4you.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mercadolibre.co.cr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mercadolibrefz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mercyseverity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meridiangroup.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merikserver.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "merkattumaa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "messageclient.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "messcoutsandguides.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meszlenyiattila.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metafiz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metagaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metal-madness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metal-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metalcorenews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metalmaniac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metalsoviet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metalunion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metamorfosis.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metaphilic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metayou.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meteocuenca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metformin365.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "methotrexatee.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "methotrexates.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metrika.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metronidazolee.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metronome.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metrothessalonikis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "metroval.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "meulocal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mexicosrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mezquetillas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaelabbas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaelbondar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaeliannetta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaelkorsgill.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michaelkuehn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michel-kratochvil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "micheladisavino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michellebeach.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "michelletrachtenberg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "micospa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "micro-credit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "microbiologist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "micromaid.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "microtel2notch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "microtube.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "micsoft.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miculturaservicios.gob.do", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mideo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "midia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mieszkania-wroclaw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mightytext-ios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "migrations.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "migueloblitas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miguelpallardo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mihanwebtest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikaelk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikelpradera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikino.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikino.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikino.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikino.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikrotech.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mikrozajmy-na-kartu.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milanoclownfestival.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milhistwiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "militaryfetish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miller-shop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "millonario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "milmiedos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mimonia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mimonia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mimonia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minced.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mincom.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mindask.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mindjee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mindresti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minebitcoin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftbestroyale.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftdolarcube.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecrafteasy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftgoldwar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftjustone.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftrealgold.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftruns.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecrafts.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftwin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minecraftx.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minefields.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minehash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minelands.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minelight.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minestory.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mini-igra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minialbums.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miniatomium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minibikini.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minimal-nothing.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mining-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minivideoadapterssales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minocyclinee.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minocyclinehere.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minocyclines.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minorisa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minsk-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minsk-cops.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "minsk-music.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirasmun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miraxe.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miraxe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirdetaley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirkino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirknighek.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirknighek.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirnesnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirnews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mironov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirrormirror.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirtazapine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirvolgograda.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirwild.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirwild.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miryam-martinez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mirzetonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "miscuadros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "misspoliticsaustralia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "missthetoro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "misstress.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "missyjay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mitstek.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mittendorff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mividasecreta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mix-books.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mizanexpert.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mkmedien.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mlnews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mloska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mmafactory.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mmcase.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mmuclassifieds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnjg123.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnml.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnogoknighek.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnogoknighek.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnogoknighek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnogoznai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnotrioesdp.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mnrloroli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mo-en-karim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobijo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobile-ivr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobile-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobilepartner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobilesnewsworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobilestuff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobiletirer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobistartv.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mobolight.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moca-2083.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moda-line.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modanacrho.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "model-school.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modeli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modem.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moderndukes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modernliferoleplay.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "modulebaan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mogilev-forum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mogomix.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mohabatein1.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mohamedalibenammarmaba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mohammad-yarahmadi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mohammadreza-bakhtiari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mohammedsuhailcs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moheyuddin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moi-sait.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moikolhoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mojartech.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molenaagtekerke.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molinillo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molletjesveer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mollyringworm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molokov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molot-tora.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "molot-tora24.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "momentalno.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "momit.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mommydigest.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monaco-info.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monacoexpress.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monays.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monde-oriental.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mondechenoafrance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mondocellulari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "money-earning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "money-finder.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "money-quick.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "money-transfers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moneygrup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moneymania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moneypip.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monforte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mongolito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monicapotter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monitoring-servers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monjardin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monkeymills.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monohost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monorail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "monstermoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "montehermoso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "montoneros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moom20101234567890.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moonlightpicnic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moonlights.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moonlighttheatre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moonracer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moralcompass.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moratilla.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mordovia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mordoviya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moreeducation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "morenadacentral.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moretesting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "morozyaka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "morrowind-finland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "morus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moscow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moscownews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moscowtimes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mosdosug.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moskas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moskva-city.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moskvagruz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mosobl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "most.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motchirotchi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motherbrain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moto-texnika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motoclubrker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "motringeneric.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mou-pmr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mound.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mountbrowneguestcottage.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "movies-fan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "movietradition.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moviewatchin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moy-biznes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moybiznes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "moyminsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mozzak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mp3skull.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mpdu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mpebrasil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mranimal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrbmafrica.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrcog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrcomer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrcyberpixel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrjunior.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrmanson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrmosier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrmostafaacademy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mrnice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "msar.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mtvroadies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muafakatmalaysia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muarstabyggmarknad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muceniece.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mufid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muhelheim.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muhibbulislam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multi-fruit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multi-tool.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multievidence.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multilevelmarketing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multimediaworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multiplex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multiplexenterprises.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multiplies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multipuntos.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multistas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multitool.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multitraf.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "multivideo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mundo-otaku.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mundofoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mup-republicanos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muralart.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muratcileli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "murciaprocuradores.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "murmanskforum24x7.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "murphy-law.net.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mursa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mursatov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "murtazamustafahirani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musamwaky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "museodelistmo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mushka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musicaporbolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musicgeek.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musichiphop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musiclenta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musicrainbow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musigama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musikerkontakt.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musikidersi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "musiques-traditionnelles.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muskuratimorning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muslimsoul.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mutual.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muzikanews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muzike.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "muzprosvet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mvzstartpagina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mwinds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "my-cars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "my-education.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "my-finance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "my-montenegro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "my-story.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myandroidfriend.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybarcelona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybbcode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybestbook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybestbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybirds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybisnis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mybritney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mychawinda.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mychildatschool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myclon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mycommerce.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myconferencion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mycrm.coach", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydarkness.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydarksite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydistance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydolls.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mydomen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myecopanda.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myedu.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myeducationhub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myemailsender.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myfancyurl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myfavmessage.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myfile.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mygimp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myhappiness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myhell-anonim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myhkweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myhotgirls.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mykarelia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mykolhoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mykurgan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mylawer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myled.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myltivarka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mymagic.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mymailboxpro.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mymailspace.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mymanagement.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mymusique.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myonlinemovies.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mypcb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mypersonalpage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mypogljad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mypskov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mypsychicreadings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myremont.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myrom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysaymk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysecretstylist.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myservik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myshikarpur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysociety.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystery-box.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystgames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystic-falls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystik-voyance.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystreet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mystudymap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mysupplements.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mytests.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mytraning.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mytuzla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myvologda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mywapforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mywebexperience.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mywebpharmacy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "mywebserver.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myweightlosstips.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "myzarabot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n-mail.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "n3rd0rama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nabeer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nabiev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nachalova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nacnkabiltrim.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nacoree.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nadezhda.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naga-wedding.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naga.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nahtanoj.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nahttps.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nailclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nails-n-more.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nairar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "najafpour-stone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "najiflix.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nakazanie.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nakenmodell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nale-hosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naltrexon.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanaka.love", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nandedbazar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naninossoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanohatsolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanohostsolution.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanoshop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nanotipbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "napikuponok.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "napitok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "napoleonoutlawed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nappylaundry.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nappywashing.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naraboty.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nardpedro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narodnaya-medizina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narodserial.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narushil-pdd.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narushil-pdd.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narushil-pdd.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narushil-pdd.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narushil-pdd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narutoshippuden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "narutouzumaki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nasavelkaceskoslovenskasvadba.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nash-server.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nash-shishtavec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nasha-kahovka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nashareklama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nashfutbol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nashjurist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nasimblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nasrabady.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nastunya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nat-neocron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "natalia-venezuela.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nataliehershlag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "natasa-theodoridou.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "natasasavija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nathenmaxwell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nationalopera.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nato-stamps.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "natura2000.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naturaldisasters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naturliga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "natuurlijk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "navadebejar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "naveka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "navidarian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "navinka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nawdar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nayapakistan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nazarenohuelva.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nazmulislam.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nba-pcszerviz.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nebucadnezzer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedela.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedhome.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedimon.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedviga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedvizhimost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nedvizhimostthailand.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "needing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "needsth.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "negativex.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neide.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nekondiciya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nekrasowsky.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nelegal-edition.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nemagiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nemirow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nemkoff.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nenapu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nepal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nepali-fonts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nepalsnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neptunosrefugio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nerd.gallery", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nerdgift.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nerdsuits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nervi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "net-script.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netelite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nethealth.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nethealth.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nethound.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netlevel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netmania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netmouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netoborona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netor.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netracks.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netreviews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netslum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netsphere.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netsplit.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nettiger.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netvpn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "networkarena.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "networktools.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "netzer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neurontinprice.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neuroticosanonimos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "neva-star.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nevam.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nevex.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newbackup.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newbies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newconcept.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newenglandradioforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newforex.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newhomedesign.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newhopeofindiana.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newparrot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news-of-russia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news-police.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news-zp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news17.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news24rus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news29.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news60.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news89.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "news89.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsbomba.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsforum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsforyou.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsinformer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newslanka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsspotify.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newstel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsthai.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsticker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newstraveltoday.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsworld247.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newsyclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newtambov.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newtambov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newtlgpacks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newusatoday.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newxit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newyearsdishes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newzashitnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "newzealandadventure.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nexiumgeneric.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nextright.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nextstepstudios.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nexussystems.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nexxxed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nexzcore.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ngarate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nginxtest.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ngorod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nhatrang.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nicat.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nice-links.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nicesurf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nickmandler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nigeriaportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightblue.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightbox.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightmarejoker2.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightoutrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightstar-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nightwood.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nihilocomunidad.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikesoccerbodotoutlet.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikhilramakrishnan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikitina.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikosoikonomopoulos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nikosverths.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nilefi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nimbus-net.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nimfomanki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nimus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ninedaysmore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ninetyseven.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "niniko.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ninja-corner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nipponprinting.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nirmalroy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "niscemi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nitecore.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nivarussia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nixcore.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nixplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nkvd-farm.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nmbtz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "no-data.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "no-terrorism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "no-war-on-iraq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nocoffeetech.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nocturnos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nodde.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nonemail.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nonxsistent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "norbert-wollheim-platz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nordcity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nordicportalen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "normalized.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "normalporter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "normco.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "norrisautomotiveinc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nortecultural.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "northliner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "northtek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "northzone.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "norway.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nosmoking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nostalgicinfinity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nostalgiktv.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nostradansacornella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "not4me.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noticies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "notnewz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "notrefuse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nova-eq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nova.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novasprint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novenopiso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novezamky.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novgorod24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novgorodinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noviceman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novichek-plus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novickoe.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novobudowa.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novogimn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novoodesabibl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novosel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novosti-novorossii.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novosti-novosibirsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novosti-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novosti-tv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novostimira.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novostionline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novostiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novostroyki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novsti.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "novye-kuhni.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nowebsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "noypark.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nozel.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nsoiran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nsrc.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nssfchile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nubunk.com.ng", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuclearforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuclearhell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuclearnation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuclearsky.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nudeandfresh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuggit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nugush.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nukeportal.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nukeportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nulledme.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nulleds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nullshare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "numancia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "numerouno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nunoefabia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuria-fergo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nutritious.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuzhenkredit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuzhenkredit.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuzhenkredit.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nuzhenkredit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nyiarlumar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "nzpost.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "o-dvor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obala.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obatjantungrematik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obbr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obecvinodol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obed-doma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "objetodestaque.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oblivious.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oblojka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obnalichka.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obnalichka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obocat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obomne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obrabotka-zakazow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "obzory-evgeny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "occult-magick.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "occult-magick.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "occultism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "occupations.org.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "occupybakersfield.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ocean-of-love.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oceanborn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oceaniahome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oceanshaman.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oceansurplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ocenka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "octopub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oculta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odessalove.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odinraz.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "odnostranichnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "off-rabota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "office-house.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "officeface.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "officert.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "offpageseopro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "offshoremoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oformit-zajm-kruglosutochno.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oformlaj.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ogarkovo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ognemet.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ognyan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ogogo-knigi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ogorod-money.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ogurishun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ohrange-music.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oidrava.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oilman.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ok-travel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okanaybek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okcasino.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okhanvatansever.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okkultemysterier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okna.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oknavdom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oknopvh.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "okotelecom.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oksmclub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "old-times.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "old-tomsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olddisk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oldfriends.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oldiesradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oldscans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oldtavern.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olgallery.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olgaserebrennikova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olimpoao.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olivia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olivialufkin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oliviercreation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olympia-blerick.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "olympiamanzanilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omanhr.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omaxe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omegachess.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "omestudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onceuagain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ondajoven.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "one-host.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onebookstore.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneclick2books.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneclickbooks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneclickmoney.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneclickmoney.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oneclickmoney.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onemonthcamera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onesourceit.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onestepbooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onestepbooks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onestopshop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onetown.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onfilm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onidesign.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onkologiya.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "online-carhire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "online-jobs.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "online-news-usa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "online-pochta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "online-taxes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinebupropion.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinecrafts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinedapoxetina.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinegamesforgirls.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlineknighki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinepaydayloans365.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinesorusor.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinetadacip.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinevardenafil.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlineviewers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinevoting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlineyearbook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlinezaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "only4free.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlybooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlylithiumhere.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlylovastatin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onlyveg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onshuistrust.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "onstat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oositk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opaco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oparamo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openbsd.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openbusiness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opencity.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openit.center", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openmind.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openproton.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "openslava.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opensourcex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operatic.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "operationturkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opioneers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opisrael.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oplata-mvd.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oplata-vklike.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opopulechki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oportaln10.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opos.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opsystems.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "opticoolheadgear.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "optimed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "optisell.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oralight.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orangehome.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orangerock.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orbisbi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orbitaclub.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orcamarine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orchestra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "order-ftw.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ordercipro.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orderdiflucan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orderomnicef.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ordervaltrexonlines.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orel-city.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orelblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orelnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orenburg-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "org-css.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "organicrootsfestival.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orientalcollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orientalcuisine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orientalgadgets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "originalpharmacygrup.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orion-rentals.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orodelsalento.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orquestas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orthopedic-shoes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "orthopedicsalon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ortocraft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "os76.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osagokasko.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osamabook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osamatoon.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osankj.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oscars-web.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oscarsalas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osetia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osetinskie-pirogi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osetiya.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osetiya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osobnyak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ostrovseocitra.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "osvaldocontreras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ot-vinta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otakuie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otakunopaw.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otdelochnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otg-drives.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otomania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "otterpops.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ottmarliebert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ottomanbedsuk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "our-little-secret.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ournewsindia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "out-of-england.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "outernet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "outerspace.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "outlaw-star.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overallscanners.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overcame.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overclockers.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overheek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overrated.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oversea.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overside.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "overtunes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ovez.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ovodakadarkut.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "owall.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxaliz.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxbridge.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxigenoinformatica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oximedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oxygenated.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "oyunoynuyalim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ozel-ders.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "p2p-tv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pablonadiecomotu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pacemakers.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pacificcycling.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "padisahbilisim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pagalsongs.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pagalsongs.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pagalworld.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "page-engine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pahira.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pahom.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakistanblogger.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakistanheadline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakistanientertainers.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakistanpost.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakostane-apartments.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pakpak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paleontologiadebagua.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "palmiye.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "palomalopez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panda-craft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panda-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pandakid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pandelys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panel-stroy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panezai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panoramacambios.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panoramaphoto.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panoramiquesorganya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pantingly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "panzers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "papabrand.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "papini.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parabellum-barakaldo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parachute.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paradise-world.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paragonsigns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parallel-worlds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paraluman.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paralysis.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paramo-pineiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paraplyen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parapsihologia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parasomnia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parastaran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parfum-best.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parfumi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parlament.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parovozov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paroxetine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parque-batlle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parquebatlle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parroquiacorazondemaria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "parrotbook.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "particles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partidolibertario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partnerchik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partnerforex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partnerobzor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partofthequeue.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "partycoin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pascal-ua.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pascualberniz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "passive-work.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "passivhaus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "passwordgenerator.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pastillased.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pastorello.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pastorluciano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paszkowski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patmanx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patrice-carriere.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patriceonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patrikjohan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "patriquefashion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulborza.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulini.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pauljackson.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulmarvin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "paulogarcia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pawnsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pawpatrol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pazyarmonia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pbest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pc-soft.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pc-tech.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcbmodel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcdroid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcnewsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcsafe.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pcsbrasil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfbook-dl.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfbooksonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfflier.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdflip.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfmanga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfpedia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfprostore.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pdfquran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peacepiperanch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peakd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pearlbridal.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pearvn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pebook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pect.com.pk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pedalirovanie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peddyland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pedrobotias.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pedromunoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pedrosillo-delosaires.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pelevin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pelhrimov-strmechy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peliculaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pelmeni.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pen15art.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pena-party.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pena600.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penedo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penguinos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pennymail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penopoly.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penopoly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "penosa.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pens-money.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pensatore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pensia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pensieridigitali.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pension-ua.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pensiun.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pensiunea-maria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pentagram.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pentaqu.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pentaquin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pentaquin.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peoplesliberationfront.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "percymagic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perdanabagus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perdita-capelli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peredovaya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pereezd.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peremena.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peresypchanka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfect-dream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfectcommunity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfectme.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfectme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfectosidiotaspunk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perfectworldbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pericsope.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perm-l2.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "permak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perrybook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perth-seo-agency.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pertwarp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "perupoemas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peruprogramadores.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peruviantravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pervejshijistochnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pervomaysk-city.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pescanetworks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pesnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pesnitut.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pestpatrol.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pestra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pet-cat-accessories.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petalsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peterbulckaen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petergudo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peterhome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peterkotula.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petermuenster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "peticion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petpuppy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petrarca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petrochemprojects.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petsnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petspark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "petutility.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pfcchavdar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pfcharland.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pgazette.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pgmtechnologies.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pgs.spb.su", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phantasmag.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phantomphans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phenergan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philipkdick.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philippekhau.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philipslater.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philipsmanythougths.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philology.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "philwilson-green.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phiomegachi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phoenixfrequency.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phone-spy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phoneinformation.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phonosynthesis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phosforum.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photo-design.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photo-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photo-travel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photobooth-romania.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photobosco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photochka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photodyna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "photowall.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phpbb-tutorials.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phreakaus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuketroman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phuketstyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phukettour.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "phukettravel.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "physio-im-appelbachtal.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piadouwes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piaohong.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piatenko.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "picked.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "picloud.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "picme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piechart.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piedrahita.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piensa-escribe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pierson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pietbrakman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pietrosoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pigzilla.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pindostan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pinebrook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pinedadegiguela.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ping-books.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pink-check.school", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pink-panther.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pintosgatemotors.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pinupbets.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pionierboat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pipeclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piratesofthewadden.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piro.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pirogi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pisaggni.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pisarzowa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pishgamiran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pit-stop-sto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pitbullclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piter-print.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pitius.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pitomec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "piurvolium.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pivnica.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixel-history.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pixelheaven.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pizdelka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pizzariaroma.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pk-master.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pk-soft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pkspskov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pkudh.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pkwebsolutions.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plaasprodukte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "placidoandriolo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planetmath.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planisware.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planitou.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plannedgrocery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planning.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plano.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "planshetnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plansight.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plaredo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "play-telochki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playasmiles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playdrop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playface.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playsoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playstation-network.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "playstation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plchardware.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pleindedemsvaart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plgr.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plumz.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "plusbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pmpm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podarki-deda-moroza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "podvenec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poemasonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poemindia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poetka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poetryinmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pogodavolgograd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pogodok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poimel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pointpalace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poisk-books.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poiskdru.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poiskkladov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poiskrus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poisoncolombia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poisonget-rid-ofac.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pokelens.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pokemonforums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pokemongoclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pokupkionline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polak-import.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polemik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poletaem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polina-gagarina.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polishhockey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "politicalasylum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "politisor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polmods.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "polonialidzbark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pomogidrugu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pomogite.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poobert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poolpowershop.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poolsonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pop-culture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "popki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poplavok77.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "popmundoforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poppingdance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "popular-male-kitten-names.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "populardiets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "porka.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "porkmart.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pornohypnosis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pornojimo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pornxxxvideos.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portablespeakers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portaladictos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portalpandalandia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portokalliali.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portraitsbydesignstudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portugal-reisetipps.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "portugalivre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poshe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "posied.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "positronicmoron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "post-anon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "post-office.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "postman.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "postmarka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "posutochno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "potosi-bolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "potrahushki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pottershouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pouchulu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "povarenok.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "povareshka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "power-magnetic.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powerbalance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powerball.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powerforpeople.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powerplayer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "powersubmitter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pozitiv.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "poznavatelno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ppsmedical.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prageeth-niranjan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pragtravel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pranafilms.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prashantcafe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prasos.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pravagolosa.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pravo-brest-belarus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prayag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prazdnik-volgodonsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prazdniki-sait.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prazdniktost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "precambridge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "preciadictos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "predatorworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prednisolone1.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "predskazanie.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "predskazanie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "predstavitelstvo-v-sude.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pregen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prelesti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premierleague.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "premiumlegalsupport.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "preply.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prepsiedy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "preschoole.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "presnya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "presta.expert", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prestigiouskitchen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prestopizzas63.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prestupniki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "primary.fit", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prime-host.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "primefoucs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "primitiv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "princemathew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "princemolak.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "princesscarly.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "print-street.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "printmydesigns.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "printpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "printus.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "privacysecuritybrainiacs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "private-mail-for.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "privatecollection.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "privorot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pro-kolhoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "probonus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "probooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proctorial.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "productfurniture.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "professionalblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "professionaleducation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "professions.org.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "professorwidget.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profielektrik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profilewatcher.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profilmonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "profissionalstool.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prog-d.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prog-mailolder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "progamehackers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proger.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "progon.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "programme-launch28-code854-com.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "progressive.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "progressm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prohelpers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prohost24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "projection.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prolens-lankaran.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prolocofrascarolo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promislovik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promo-code.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promo-kodi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "promokodi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pron4ik.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propecia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "property-tax.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "property-tax.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propertyselling.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propolisturkiye.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propranolol.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "propranololgeneric.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostavropol.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostitutka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostitutka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostodengi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostor.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prostozaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protanki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protanki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protapnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protection.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protectyourspeech.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protez.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protez.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prototayl.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "protrolley.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "provencemckinney.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "provera10mg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proverennie-kursi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proverennie-kursi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proverennie-kursi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proverochka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prowrestlingevents.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proximity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proxybay.onl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proxytool.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "proyectostep.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prozac20mg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prozorlivec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prushka.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "prushka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psalmer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psazy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psdpt-tpfd.gc.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psevdonim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pshweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psihologonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psihology.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psinetika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pskov-daily.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psphp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psycenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychiatriepapezova.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychicfairnetwork.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psycho-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychologic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychometrictests.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychometrictests.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychonews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psychotel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psygame.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psyh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psyk-patienten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psykologtidningen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "psyshell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ptboys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ptlibrary.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pturl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pubsavoy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pudding.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pueblocantabro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "puenteviejo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "puertodramaturgia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pullnopunchesradio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punctually.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pungatv.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punkas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punkcolombia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "punknmetal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pupok.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pura-ponia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pure-paste.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "purewaterguide.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pursuable.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pushok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pussycat.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "putani.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "puthenthope.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "putnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pvpagario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pvplist.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pwned.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pyca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "pyra-explorer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "q-and-a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qalab.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qask.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qatartimes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qbasicsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qbd.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qeepintelligence.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qhost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qike.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qiscience.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qmarket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qseek.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qslstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quadcityjuggalos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quadomania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qualith.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qualitytools.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qualityworks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quantumlink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quantweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quatermass.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "queenstyles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quena-artesania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quentar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "questbars.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "questbars.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "question.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "questionandanswer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quetico.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quezoncity.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quickerticker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quicklinkz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quickshops.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quickvideo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quierosermercedario.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quierosersanta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiescent.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiet-downloads.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quietstudyactivities.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiltednorthern.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quintanadelmonte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quintanilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quintobarrio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quiropraxiasaude.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quisildenafil.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quizhub.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quizzen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quotable.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quotesofgta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "quranpdf.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "qvision.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "r-t-n.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ra-studio.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabatcity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabatz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabinson2005.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabota-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabotabiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabotaemdoma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rabotaprofily.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rachaeltaylor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rachnacollege.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "racingfanclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radarcoupon.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radarcupao.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radarcupom.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radarcupon.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radarcupon.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radharanikijay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiationtherapy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radicalfuture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radicalwebdesign.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-az.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-bandit.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-club.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-mix.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-one.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radio-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioaltamar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiocappissima.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiocrazy.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiodeluxe.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiodoblen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioenam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiogomezone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioharrastus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiohlam.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiohouse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioibiapina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiojackienorth.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiokukesi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiomacuto.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiomikelerentxun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiomoodmix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radionetcolombia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioperfect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiopush.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiorecord.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioremix80.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiosuperplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiotataouine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radioumbrella.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiounofm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radiounost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radnickapartija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "radon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raduga-tv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raduga4.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rafaeltuber.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rafo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rahayi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rahilworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "railbus.fan", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "railclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rainbowcomputer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raintreatment.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rajofestival.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raksha-bandhanwish.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rallytrophy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ramiabusalah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ramieres.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ramirito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ramynetwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomarticle.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randombooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randombrainwave.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomkindness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomsnapshots.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomstuffproductions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomtest.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randomthings.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "randyrhoads.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ranfics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rangerfiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rangersloyalsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rankia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ranking10hits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ranksite.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ranksite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rantamplan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rapanui.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rapdinle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rarefish.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rasberry.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rascript.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raserbajs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rashbogota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rasheed-nuss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raskruti.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raskrutka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rastko-jevtovic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rateddomain.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ratiocinat.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ratusha.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ravik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raym.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raysmtp.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raysolutions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "raywisdom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "razborpoletovsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "razdolnoe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rbet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rcdrone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rctx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rdesigner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rdns.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rdserviciosdigitales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readcomics.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readlater.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readless.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readmynews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "readpages.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reakcjonista.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "real-srebrenica-genocide.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "real-work.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realbiz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realestateagency.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realitytoday.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realkeywords.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reallovetab.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realno-money.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realrapfans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realty-pochta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "realwebsite.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recessmonkeyz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recipeslist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recklessly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reckoning.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recolor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recommends.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recordstudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recruitskill.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "recycle.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "red-lightning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "red-planet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redacted.life", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redcabbage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redcardinal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redgeek.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redhillboardriders.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redhottube.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redhottube.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redhottube.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redhottube.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redicare.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redirecionarnoticias.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redlinker.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redlionclub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redparrotstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redrafting.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redrichindia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redskullstuff.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redstack.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redtails.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redtomato.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redtsar2000papers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "redtubs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reducto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reelnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "referati-ru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "referati.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "regdelivery.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reggea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "region22.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "regionethost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "regionmedia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "regtech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reintjens.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rejected-by-society.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rejected.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reklamy-led.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rekmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "relic.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "religiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reloading.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remake-projects.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remennik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remi-decker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remont-kazan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remont-rollet-izgotovlenie.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remont-rukami.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remontportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remoteshack.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "remoteworkertech.asia", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "renaatsioncke.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "renatopazmino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rendez-vous.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "renovationsf.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rent-to-own-home.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reparation-traceur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "replacementrate.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "replay.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "replicagold.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reportercareer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reportoid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "republicafederal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "republik-sombora.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "requeue.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reregu.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reseau.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reshebnik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "restartperm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "restaurantdetgulepakhus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "resumelibros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reticle.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "retics.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "retroslave.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "return-profit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revaloriza.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revconnect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reversedns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reviewdetector.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reviewfye.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reviewsonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reviewsweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revis-online.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reviviendolavilla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revizor-online.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revizor-online.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revizor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revizoronline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revolutionaryireland.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "revolutionofgaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "reyaltec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rezistor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rf-gamer.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rf.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rfbcnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rfnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rfomega.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rgdt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rhye.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rian.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ribafs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ribolov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ricardoquaresma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "richkidmarketing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "riders.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rifugioselvabella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rightblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ripadores.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ripcityproject.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "riscoshardware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "risunki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ritual.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "riweco.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "riyadbankacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rjcrafts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rk-links.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rknews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rmdb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rmyachting.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roadandtransport.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roaster.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robaxin750mg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robert-ewert.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robertgonzalez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robertmusil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robot-invest.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robotbattle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "robuxkingz.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rock-base.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rocketsworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rockfs.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rockhounds.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rockworldteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rodeodrive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roditely.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rodrigodematos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roelonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rogaineforwomen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rogarden.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rogell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rogerdeflor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rogiershikes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rohansingh.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roiblozyxfswe.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rokcupusa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rolandog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roligh.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roligt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roliki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rolstoelappartementen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romania-film.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romanos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romantik-fm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romantik-fm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romantik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romapk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "romtter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ronan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roofpost.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roomcube.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roomonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roques.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosabrasiv.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosalopezcortes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosamystica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosanerolife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosenberg-fansite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rosenkavalier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rossia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rossiyskaja.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rostov-arena.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rostov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roswellcity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotanaval.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotary.org.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotaryceuta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotaryfunds.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rotate4u.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rougeetblanc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rouxh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rovity.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royal-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royal858.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royal869.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royalrace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "roycampbell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "royger.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rp-megapolis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rp-murk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rsdns.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rsecure.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rtparket.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru-acyclopedia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru-adv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru-auto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru-sale.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru-sport.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ru251.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubashki-opt.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubashki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubber.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubblekempton.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubblemidrand.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubblerandburg.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubiales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rublev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubooks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubreklama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rubystore.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rudolf.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rudy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rudymendoza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rugby.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruhimustafa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruinme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruminecraftru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rumix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runbo-australia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runbo-new-zealand.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runbo-nz.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runboaustralia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runes.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runescapelordsconquest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runeworldforums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rungstedhave.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runlet.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "runningfast.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rupeespeaks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rupool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rupressa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruprivorot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rupture-skate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruqbnsmokebbq.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruquiz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rural-house.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rus-blog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rus-manual.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusenemas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusichi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusiptv.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusmodel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusnicolas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rusposuda.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russ-portal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russchooljordan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russia-knigi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russiahockey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russialife.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russian-artist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russianews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russisch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "russograffix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rustambek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruswomen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ruyana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rvantwembeke.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ryan-13.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ryazancity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rybinsk.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rybnitsa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ryland.consulting", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rymanow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rymergames.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "rzero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saaremaa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saba-shop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sabaland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sable.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saborcaribe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sabrine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sacademica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sacibo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sacramentum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sacrosanctus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sadiestavern.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safeboard.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safecso.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safer-software.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safermao.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "safirakbar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sagomedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sahalin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sahalinskiy.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saibacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saintaugustineschool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saintereso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saintpetersburg.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saintvincent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saitschool.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sakurapalace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sale-internet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salegor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saletodo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saleturs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sallyangeli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salt-travel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saltcave.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saltnsauce.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salukinet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salut-butovo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salvadoralevin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salvadorcorriols.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "salvameblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samar-leyte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samara-hosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sametimetomorrow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samodel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samogonka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "samokhin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanatori-elochka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanatori-teterev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanctus-de.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sand-and-mercury.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sand-craft.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sandiuno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sandrinesite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sandyrobison.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sangiovannilipioni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sangwanbeach.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanityrant.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanjuandeabajo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sannikfk.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanpablo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sanpancrazio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santamargarita.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santamariadelaisla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santehnica.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santekhmarket-nn.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santevege.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "santugon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarafani.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarafshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarah-brown.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarah-harding.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarahshabrina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarahvanessen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sardine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarmpel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sarogiw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sasakala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sashabognibov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sashakrasnoyarsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sasroli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "satpersian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "satsumi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saveworldpets.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "saxophone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sbabeshin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sbmsitelist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sborka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scalemodeling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scanamed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scanbetting.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scandalpunk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scaner.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scavenged.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scenetv.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schelkovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schiltron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scholarbaze.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scholenlijst.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scholohost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school-22.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school-27-lpr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school-33.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school-adventures.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school-project.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school16-tob.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school173.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "school43.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schoolrumble.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "schuman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scienceasfashion.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sciencetechworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scienceweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scientia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scientific-socialism.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scottbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scottish-paranormal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scottpilgrim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scoutreinosa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scoutsanpieropatti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scratchbot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "screamager.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "screenwriter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scriptline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scriptmaker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scroollocker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scruffy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sculptaestheticsclinic.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sculpturesworldwide.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scuolatdm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "scvoet.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sdsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sdut.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sea-airinternational.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "searchable.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "searchwork.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seaview.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sebar-iklan.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sebariklanmassal.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sebarin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sebastiantroncoso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seboreia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secret-queen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secret-queen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretmolodosti.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretmolodosti.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretmolodosti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretosbolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretstomartialarts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secretworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "secta.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seearmenia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seeksupply.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seemyreality.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sefor.nc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sekreti-biznesa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sekshikayeler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sektor-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sekusi-tochiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "selena-armavir.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "selezionebarbrboguaccero.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "selfbattery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "selfemployed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seller.diamonds", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sellsmartwatches.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sembosihosting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "semicvetik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "semiretire.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senarist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senderismoinfantil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senergiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senior-sigan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senoctarsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senok.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "senterada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sentinelnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sentmail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seo-blog12.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seo-portal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seo-reklama.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seobook2015.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoclubs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seocontents24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seocreator-blog24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seodrug.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seogood.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seokatka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seolister.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seolisting.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seomag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoonlinejaipur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seopiar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seopromotion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoranker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoscan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoshanti.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoshnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seosmart.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seosos.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seosprint.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seostrit.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seoteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seotoolset.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seovisits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serbiaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sercasindustry.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sercasystems.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sergen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sergeyburov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sergeyesenin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sergio-rivero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serial-kinder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serialize.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seriesgratis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seroquelonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serphost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "serverka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "servicii-funerare.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "servis-azd.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "servitel.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "servitor.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ses.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sesamomusical.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sescoen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sesenaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sestry.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sevillalinces.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sewavillamurah.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "seworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexminister.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sextacy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sexvideos.tel", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sfweef.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sgatlantis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shadow-forum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shadowdomain.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shadypark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shahidafkar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shahinclub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shahrvand.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shaimensonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shaknews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shalomamuzik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shalombolivia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shalomcottage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shambala.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shamiphotos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sharebot.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sharenergy.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shariftown.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shark-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sharmafamily.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shashlik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shawngvs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shawty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shechipin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shechipin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shechipin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shedrin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sheeprock.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shefftunes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shellavartanian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shellwhite.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shellwhite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shindocuba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shines.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shinsandenki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shipping-trade.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shiranaitenshi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shirazi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shiropaev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shitposter.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shittywok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shivacarpet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkolladigjitale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkolnyimir.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkololo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkololo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkololo.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shkololo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shlang.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shlupka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shlupka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shmotki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shockerdragon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shoesoutlet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shop-eldorado.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shopbabymonitors.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shophealthybits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shopmalinka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shoppies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "short-games.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "short.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shortcircuit-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "showgirls.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shredder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shrines.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shrinker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shuffleware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shulman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shumnyj-istochnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "shvedskie-stenki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sialis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sibekoaircons.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sibekoelectricians.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sibekohirescaffolding.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sibernet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sibirium-red.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sidecredit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sideral.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sidy.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "siegprod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sieiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sifasharing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sigmateca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sike.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silagra.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sildenafilcitrate.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sildenafilcitrate100mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silicateillusion.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silkproducts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silvermatch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silviaroddey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "silviorodriguez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simart.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simkin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simonreynoldsfavesunfaves.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simple-perfect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simplelist.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simpleman.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simplespy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simpletools.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "simstarstyle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinapuros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sindromebenjamin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinetron.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "singapur24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "singerpragathi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "singlehandedsailing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "singlenine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "singluten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinopx.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sinuate.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sipede.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sisadmin21.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sisqo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sistema-trenirovok.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sistema20k.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sistemapronto.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "site-remont.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "site-romania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "siteadvokat.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sitecreation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sitelinks.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sitestudio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sitesweb.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sitiosantaangela.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sivaru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sixpackband.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sjoelen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sjparanormal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skachat-shablon-rezyume-na-angliyskom-yazyk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skachat-zip.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skachay-knighki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skazochnyj-sait.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skeditor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skeptik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skibikers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skidki-ru.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skinboost.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skinboost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skinews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skinexpert.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skinfoodpeachcotton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skirted.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sklisen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skmedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skorbord.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skoropolnolunie.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skotobaza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skripta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skrivebordet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sky-wap.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyder.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyfpicture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyhigh-mizell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyhooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skyla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skylander.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skymonk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "skytown.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slackline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slathering.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slava.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleeker.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleep-tight.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sleepo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slemen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sletaem.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slinx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sllatina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slouching.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slovenia-trip.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "slunyavchik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "small-blog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smallcraftadvisory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smallfoot.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smalls-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smallville.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smaragderna.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smart-travel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smart-zona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartassembly.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartdigital.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartfons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartphonecases.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smartspace.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smashbros-chile.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smashnl.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smbowling.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smeta.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smilegenerator.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smishnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smithteresa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smmzilla.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smokingtapes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smolensk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smolensk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smolnikova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smskatingrink.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "smszone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snab-ural.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snakeanarchy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snakesandladders.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snapmart.co.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sneakers-sports.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "snowvictoria.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sobaki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sobchak.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "social-directory-list.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "social-network.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialistyouth.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socializator.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialmeeps.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialnet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialproject.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialtactics.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socialtranslation.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "societyparty.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sociology-bg.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sociusian.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "socomforums.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soda.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sodalai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sofianeves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soft-key.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soft-office.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "softpark.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "software-tech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "softwarepatenten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sohanakhan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sokolovskyi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sokrabatt.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solana-active.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solarace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solargaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solarhome.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solaronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solarpanels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solartek.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solartek.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solartravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solarwave.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solarwind.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soleanos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soledadmataro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solidform.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solidhost.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solidincome.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solntsezaschitnye-ochki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sologetaway.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "solsi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soluzionifightlist.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "somalilandtalk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "somewherenews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "somnam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonesinafar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonesisonesi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonesonesisi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "songsonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonidoslibertarios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonnik-znachenie-sna.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonology.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sonsight.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sopelaotaez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soph.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sosisuka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sosnovka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sosok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sotnya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sotnyk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sougou.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soulla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soulpowercoaching.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soulsinner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soulwinning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soundblast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soundman.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soundrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soundtrash.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soundzimega.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovhoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovmestimost-goroskop.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovmestimost-goroskop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovmestimost-goroskop.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovmestimost-goroskop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovmestimost-zodiak.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovremenik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sovxoz.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soya.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "soyuznik.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sozdanie-krana.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "space-net.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spacepirates.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spaceshells.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanischunterricht.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanishnow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spanpine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sparkletowels.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sparta-szczekociny.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spartamet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spartanis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spear.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specialcameras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specialeffect.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specialelectronics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specialofficesupplies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specialworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "specks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spectre-network.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "speedcam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "speeder-vpn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spegeltankar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spetsialist.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spicegirlschart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spichki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spidersweb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spidometr.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spinal.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spiritdesigns.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spiski-domenov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spisochek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spisok-domenov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "splashily.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "splibrary.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spm-servis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sport-obzor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sport-online-ru.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sport-school.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportinfon.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportmedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportraucher.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sports-news-today.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sports-wear.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportverzorging.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sportvoedingspecialist.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spot-cleaner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spravka-internet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spravka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spravki.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "spyclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sql-injection.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sql-injection.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqli.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqli.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqlinjection.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqlinjection.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sqmin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squardllc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "square-gamers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squaredancedance.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squaresoft.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squelcher.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "squidnovels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sr-f.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritafrican.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritalabama.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritcalifornia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritclassic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritculture.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritegypt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sritsafety.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srittheatre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srix.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "srochno-pohudeti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sroturkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sshbox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssl4all.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssprod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sspu.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ssr01.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staatdesinternets.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staatdesnederlandscheninternets.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staatdesnederlandseninternets.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staatvanhetnederlandscheinternet.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staatvanhetnederlandseinternet.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staffi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stagingpepocoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stalplus.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stalstroi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stalworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stammering.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "standoff-magic.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stanonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "star-24.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "star-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starcitizen.tools", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starcraftsource.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stardrive.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starfm.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "starmyworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "start-knighki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startbetter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startgeophysical.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startnowmakingmoneyonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startpa.ge", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startplats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "startupyourmind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "statcenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stated.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stateidea.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "statelines.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "staticweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stationmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "statsit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stavinchains.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stavropol-news.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stcatharinesromawolves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stderr.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steamcrack.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steamkeyget.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steempeak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stefanolsdal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stels.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stels.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stematechnologies.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stemklank.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stephenschirle.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stereostudio.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sterno.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "steve-mason.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stevenavaldez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stewards.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stickertrade.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stifflersmom.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stihiya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stinter.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stjude-ettekkar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stockslam.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stocksnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stockway.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stolensun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stolpe5674.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stolpersteine-dithmarschen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stomatolog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stomatolog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stomatologiya.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stomatologiya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stonerwitch.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stoneworld.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stop-nikotin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stopka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stopsmoke.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stopssherdenking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stopsvet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stopves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storage-books.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storiadellarte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stormairsoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stormestudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "storycycle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stperseo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strakh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strana-snov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strangeonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strassberger.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "straylight.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stream-box.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "streaminginternacional.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "street-hoops.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "street-legal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "streetstunters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "striae.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strikeout.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strings.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strobe.cool", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stroginopk.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stroimsami.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strojmaster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "strongtomorrow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stroyca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stroydvor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stroynet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stuckwithme.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stud-lib.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studio-mir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studio32.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studioandrew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studioevent.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studiolegalemarchi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studius.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studsovet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studwebs.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studyme.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studystack.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "studytube.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stuntman.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stuphid.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "styilishdress.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stylemall.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "styletheweb.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "stylingstudio.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "styplon.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subahankamal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subarus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subbacultcha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subgirl.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subject-barred.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sublimated.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "submit-link.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "submityou-rlink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "submityour-link.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subteen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subversionnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subwaysurfers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "subwaytrain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "successclicker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sudak-turizm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sugarroll.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sugos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suicidegirls.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sukruarslan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sulemanmalik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sulemanquotes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suleri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sulkmen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumatraselatan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumbur.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumhost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumisa.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumitbot.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "summing.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sumochki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sun-host.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunblind.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunchild.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sundiel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sungalsses.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunkar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunnyhome.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunroof.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sunshinefrontier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supdajuice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supel.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "super-boy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "super-knighki.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "super-lolitas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superbaskirskij-med.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superdolly.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superfury.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supergoods.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supergroup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superhits.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superiormusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superkrasota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superlol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supermanera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supermart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supermini-games.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supernogi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supersisi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supersisi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superskidki.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superstart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "superzaim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suplementasi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supplement.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suprax365.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "supreme-court.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "surfseo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suriname.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "surrealistas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "susajja.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "susanagomez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sushi-sakura.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sushilmedicos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "susoft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sutabi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "suzdalgrad.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svarka22.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svatyjur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svenskakyrkansunga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sverdlov.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sverdlovsk.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sverdlovsk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sverdlovsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sverlo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svetlanamamedova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svetlograd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svetoch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svetodiod.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svetonaushniki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svg-board.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svgzone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svhni.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "svoimi-slovami.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swampcoolerservice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swederica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swedish-saints.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swedishforces.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweetairlines.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweethorses.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweetintrigue.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sweetparis.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "swingle.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sworn.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syedmuhdadasgardezi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "symplyos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syndikalismus-im-laendle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "synergy-logistics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "synergyzone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "synitsa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syntia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syphax.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sypra-host.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syrianet.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "syrius.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "sysadmin21.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "system-fehler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systemblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systemerr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "systemtoto.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "t1everydaymagic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabacundolindo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabadotupi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabakerka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabclassics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabira.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tablamatica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tabletennis-tt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tablettes-tactiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tacosandmiches.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tadjiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taekwondo-berlin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tagana-anindustrialpark.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tahrirbazar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taiaro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taikodom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taipak-krasnoyar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taiwantechtrek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taj-portal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tajniy-smisl.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "takeaction.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "takestars.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "takethatspainfanclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "takiplekazan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talented.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talentguru.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "talkscope.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tamareverson.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tambov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tambovcity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tamdidpay.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tamiltax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tammie.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tamoxifenformen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tampaexplorer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tamsulosin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanatos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tancuongtea.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanhaa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanjasavicmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanned.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tantrum-rocks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanushka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanya-avdeeva.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tanzanianfilms.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tao-energie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taoofbeauty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taoyingchang.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarabici.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taraksarkar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taraori.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarapacadigitaltv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarjetaspark.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarkari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tarocchi.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatar-bashqort.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tataria.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatarin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatarin.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tataristan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatarland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatarworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatary.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatsuya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tatu-love.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taturukav.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "taxi24.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tazamobile.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tazendaforever.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tb-bolshevik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tcoa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tds-forum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teach.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teahouse.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "team-a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "team-darkness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamcode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamdevelopers.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamkankun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamkiller.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamlightning.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teamsudan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teatroutopia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tec24.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techcentral.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techclan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techcluster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techfibian.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techiesmart.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techindo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technewsetc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technicalbikrammalati.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technogrand.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technoholod.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technomix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technopedia.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "technoweb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techsecrets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "techtoydeveloper.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tederomero.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teenmoviesgallery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teenwebcams.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teenworlds.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teepak.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tekirdagemlak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teknikaldomain.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teknotiq.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tekstover.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tekstpesni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telangananews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teleafrica.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telecommunications.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telega.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telegram-gp.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telegram.poker", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telema.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telenovelas-france.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teleradio.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telesoftware.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "televisioncontests.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "televisionsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telokchki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "telokchki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "temirgaliev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "temporal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tendersoft.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tendinite.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tenhourguy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tennis-altai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tennistalk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tennisweb.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tenthdimensions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teplotehnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teraservice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terenska-edinica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "termeh-store.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terovania.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terovania.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "terovania.games", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "territoriocuchero.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "territory.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ters.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tesla-tula.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "test-my.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testcoz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testdemoweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testdevelocidad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testdomens.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testing-server.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testispdomain.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testmy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testpool.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tests.pp.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testscript.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testsity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testsweb.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "testyonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tetrabyte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tetracycline500mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "teunmulder.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "texasnewsusa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "texosmotr.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "textcounter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "textil-kyoto.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "textsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tfrei.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thailandpropertylisting.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thailandvariety.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thais.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thaumaturgian-national-university.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "the-allmighty-mike.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "the-metropolitans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "the13thtribe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theaquila.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thearchimag.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theaterfrederik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theatresuite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebarkofhinkle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebearcanread.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebestnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebestshopping.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebigbigworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebodylanguageguide.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theboysrepublic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thebucknetwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thecomfortcollection.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thecondemned.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theconsultingpeople.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thecowquerie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thecrazybrains.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thedarkcolonyfansite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thedietsolutionprog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thedigitalparadox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thediscforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thedrizzle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thedysfunctionalangel.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theebookkeepers.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theeldritchhounds.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thefishshop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thefreethinker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thegeniusdz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thegetaway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thegospell.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehabitat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehappyxwife.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehassanmusic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theheadplug.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehiltonfirm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theholloways.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehotrocks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thehuskyhaul.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theindiangraph.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theinstitute.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thekalakriti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thelordofthewing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thelwallrangers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "themandogs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thematyper.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "themodernreviewer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theocjournal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theoldmill.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theophil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepaleodiettips.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theparachafamily.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theparticipants.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepilotwoman.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepiratebay.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thepowerboys.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theprinceshort.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therapistresources.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therasmusgt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therasmusperu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thereafter.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therenegade.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theresingles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therichardsfamily.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thermostat.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therniakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therokasshow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theroyal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therunawayspremiere.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "therusnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thescienceofdeduction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theseal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thesilentfew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thespacegame.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thespiritfm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thestandards.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thestore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thestrangenessofthings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theswanstation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theswitch.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thetattooedpreacher.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theteaguemovie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thetherapist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thetopsecretepisode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theuniversallover.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theuniversitiesofasia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thevirgin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewalkerz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewave.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewayofislam.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theweed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewinedelivery.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "theworldtakes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thewraithmovie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thexalla.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thexpert.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thiagoribeiro.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thibaultchristin.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thinkelectric.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thirdwave.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thisdayinhockey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thisistwice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thrillkill.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "throughout.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thrustrules.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thugcityrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thunderbase.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "thunderbolt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiagoneves.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiamabi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiburgundysi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tidehunter.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tienerdienst-johanneskapel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tierra-indomables.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiffany-remixed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tigerforce.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tigerzplace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tigreblanco.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tikona.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tileco.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tileflooringideas.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tilisi.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tilitop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tim-lawrence.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timberjewelleryboxes.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "time-killers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timebookings.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timecheck.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timefor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timelapsetv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timelesstreasures.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timepassengers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timeroll.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timilion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "timonenko.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinaarenaweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinderphotos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinhlai.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinohost.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tintamas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiny-house.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiny-tattoos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinyfont.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinyhousebarat.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinylink.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tinyproxy.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tipsfinal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tipskanalen.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tipslifetimefitness.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tipsoftech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tirana-chat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tirandoalplato.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tiraspol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tirgul-vertiujeni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "titina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tjongeling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tkhirianov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tkwhongkong.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toastmasters.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tobeyvorus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tobtennis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "todaylearn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toddmclauchlin.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "todolex.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "todotiendas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokelaunso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokiohotel-world.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tokopedia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tolkienfans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tolkienwiki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tolkovanie-sna.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tolstoevsky.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomboonen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomco-corporation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomica.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomica.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomodachi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomorrow-traxx.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomradtke.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsick.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsk.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsk24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsk365.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsknet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomsknews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tomssite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tonshaiza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tonyhagerlund.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toonmate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tootbitco.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toothless.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-beauty.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-credit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-drop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-secret.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-service.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top-skins.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top10.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "top100games.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topbookmarking.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topbussines.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topcameras.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topdosug.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topgallant.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topgrading.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toplistforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topmuzic.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topofficesupplies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toponlinemarketing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topotom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topradiosbrasil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toprci.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topservers.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toptiernetworks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topwonders.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "topzarabotok.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toquechic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torchbearer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torondor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torontotransit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torquemada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torrba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torrecilladelaabadesa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torrentdownload.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torresdealbanchez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "torresjaen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tortak.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tortillas-duras.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tortuga.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "total-destruction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "totalconceptnh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "totally-dakota.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "totallystocks.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "totalzen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "touchable.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "touchboobs.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tour-japan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tour-vietnam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tourbryansk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tourismpskov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tourismtrain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "touristanalyst.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tours-in-petersburg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tovari-rukodeliya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "towerdefence.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "towessi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "townresults.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toyduck.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toymarket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "toystory3.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tpiada.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traceur-france.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tracker-knigi.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trade-bot.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tradelink.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trademen.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tradersport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tradezlist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traf-bonus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trafplus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tragicempire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trahnisoseda.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trailblazers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trainable.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trainingcentral.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trainwiki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tramadolhcl.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trance-zone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transformersmmdb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transito.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "translation-services.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "translit-net.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "translit.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transparency.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transportnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "transsrit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tranzron.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trasandino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trashylingerie.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traumfaenger.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travel-cube.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travel-rus-club.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travel-to-cuba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travel101.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traveladdiction.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelbangladesh.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelbiz.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelcenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelclinic.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelfoot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelfriend.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelinsurance.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelmontenegro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelnews.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travelstation.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "traveltalk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travkolyl.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "travnik24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trazodoneonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "treinonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trendme.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trendocracy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trends-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tresredatores.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "treurtransport.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trevo-lotofacil.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trevorng.vision", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trial-server.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trialbyfire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tributoconsuegra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tricolortotal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trigi.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trigi.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trihedron.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "triker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trincheraunorte.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trinetus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tripolinews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trisha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tritium.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trkhosting.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trodat.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trodniescis.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trojanchronicles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "troll-gaming.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trolldesign.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trolldi.eu.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollforums.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollhanttan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trolling.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollolo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollos.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trollos.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trophykoi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tropicalticket.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tross.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truecosmos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truedarkness.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truereligionjeanstore.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trulycharmed.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trusifan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "trust-btc.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truten.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truth.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truttle.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truvayangin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "truxton.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tryk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ts-folienmontage.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ts-public.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tsacbttest.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tsakanakis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tsja.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tsunamic.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tsuruhime.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tubeview.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tubing.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tucarora.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tuerkei-immobilien.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tuliha.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tulikajain.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tuller.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tumen.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tumen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tumen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tumen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tumult-productions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tunen.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tunenet.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tungstenworld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tunisiadefnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tupatane.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turadionline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turbaza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turbinelectricity.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turboworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turismoliliana.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turizm.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turizm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turizmsektoru.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkcechat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkeyfiles.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkgrafik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkhalkmuzigi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkistan-rap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkkarate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkmanbox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkmans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkrap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turkteam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turktelekomarenagolleri.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turnet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turnover.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turtunis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "turul.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tusar.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tut-kino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tutorialcoding.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tutorialitmalaysia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tutorialphotoshop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tuzlasite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tv-tuners.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tv-zone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvabullarbro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvchannelslive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvenligne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tver2000.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tver69.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tveronline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvfans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvhoorn.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvmice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvoedelo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvoistili.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvreviewer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tvseasons.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twaddler.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tweeple.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twilightningzone.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twinfishing.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twl-clan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "two.cm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "twoandahalfvan.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tycho.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tylko-wazne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tynefm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyni-goc.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyni-gof.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyraga.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyre-search.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyrkey.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tysukakorrekt.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tytixazo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tyva.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tzunami.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "tzunamiblog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ua-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uamxsociologia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uanews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uateach.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uawoptout.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uber-work.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uborka-snega.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ubutovo.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ucheba.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "udmarbella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "udmurtia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ufologiaweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ugolovnyj-advokat.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uhcuhcas.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uhcuhcas.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uhcuhcas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uhcuhcas.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uhcuhcas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ukcarers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uknews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uknewsroom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ukrtabletki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulax.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultimasword.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultimatebattle.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultimatehalo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultimatemapping.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultortech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultra-pro.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultracentr.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultralife.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultraman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultraonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ultrasocial.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulyanovsk-73.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulyanovsk73.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ulyanovskcity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "umas.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "umnugobi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unaffectedsound.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unai-yus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unataz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unblockit.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unboxrobotics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uncinema.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uncorporate.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "undemocracy.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "undercoverxp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "undiepatrol.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unescoclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unetyr.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unexplored-belarus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unexplored-moscow.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unfamousrecords.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unfollow.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unfriend.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ungnyo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ungrafakta.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unicool.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unicrack.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unionhoster.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unipass.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unique-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uniqueworks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "united-trainers-league.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unitencup.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "universal-mail.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "universalmedia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "universehk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unknownhacks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unofficialbpb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unovosti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unprovided.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unrepentant.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unstoppable.money", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unusualworldd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "unwa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "up-obmen.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upbound.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uploadscript.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upmail.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upmusics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upnext.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uppercloud.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upskilllearning.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "upskirtmania.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uptional.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ural-travel.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ural.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ural.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ural.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uralec.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uralsite.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uralsk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uralskaya-garmon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uralspravka.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urang-kurai.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uraniumhost.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uranmoney.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uranus.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urban-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanagriculturesummit.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanbikeweamr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanbooks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanlounge.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanmuslim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urbanusonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urgent-notice.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urljournal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urlwing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urlz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urocentre.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uroki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ursonatefanzine.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "urstore.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ursula-gadalka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usagi-ku.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usanewsposts.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usanewstrends.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usaweblist.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usbcompatible.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usenetpirate.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "user-agent.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "userhelp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usk-clan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uskaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "usleravnekrog.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uslugi-advokata.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ussm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "utodyg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "utopian-institute.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "utopiancapitalism.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "utural.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uz-yulduzlar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzagmozemunk.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzagmozemunk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzbaza.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzbek-soft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzbekistan24.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzbekkizlari.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uzbwap.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "uztop.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v-gornom.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v-kurgane.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v-media.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "v-news.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vacation-in-pisak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vaclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vadiar-angola.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vadillodelasierra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vagabondages.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vagabundos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vakantieinfo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valdecaballeros.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valenciaescatala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valentinstag.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valiakhmetov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vallenar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valleyofdeath.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valleywidetvrepair.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valor-host.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valoriashard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valparaiso.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valpovo-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "valtherperron.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "van-brandevoort.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanbruchem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vandals.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanecketfs.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanesaleiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanessaamorosi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanhelsing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vanityfairnapkins.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vapetaclope.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vaporquest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "varied.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "varnish.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "varun-rajeshwari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "varvitra20mg.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vas.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vash-doctor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vash-dom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vashdohod.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vashprazdnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasilevo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasilisa-volodina.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasilisa-volodina.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasilisa-volodina.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasilisa-volodina.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vasyaka.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vatikantour.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vaurio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vbelgorode.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vburyatii.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdagestan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg2000rub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg2000rub.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg8000rub.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg8000rub.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg8000rub.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg8000rub.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vdolg8000rub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vebdengi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vechersky.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vectorcardiometry.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vectrum.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vege-tables.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "velis.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "velo-volga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "velvet-tarantula.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "velvetempire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venacifuentes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vendasdealbunsbrasil.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venesuela.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venezia.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venezuelachat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "venezuelalibre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vennaccounts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ventolin-hfa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vercettipropiedades.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vereshagino.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vergraal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vermageringsdieetpillen.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vermouth.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veronique-huon-photographe.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vertexlife.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veselyjpovar.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vestiizhevska.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veterinanmnm.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veterinanmnm.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "veterinaryhelp.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetitus-teatro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vetosh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vgpu.vladimir.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vhproductions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viagratop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vibramycin100mg.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vicarious.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vicentejr.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vickylarraz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vickyoliver.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "victorbuch.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "victorrodriguez.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vidaforanea.com.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vidawichi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videferre.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoarcadia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoconferencing.guide", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoebook.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videogamerreader.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videomaniya.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videonika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoprikol.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoprikoly.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videoskazka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videotehnika.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videouroki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "videt-son.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vievolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vieweb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viewer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vijayam.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vijaymishra.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vilamarija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vilife.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viliravnjak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "villacarralon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "villaespanola.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "villanew.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "villaumbrales.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vimka.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vinaygakhar.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vincentpo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vineta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vinohradiv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vinzer.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "violetfairy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vip-banner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vip-soski.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viplata-mgnovenno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vipsauna.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vipshop.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vipsibir.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viptravel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virala.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viraltech.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virazh58.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virgi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virginiedelmas.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virtbaza.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "virtola.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viruscare.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visa-master.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vishenka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visionnocturne.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visits.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "visituzbekistan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitaen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitahost.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitaminka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitrinachasov.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vitskynutrition.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivabraslav.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivates.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivavox.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vivichannel.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "viviennelinettevandenassem.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vizantia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vizit-obmen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vizitfree.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vizitnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vizualbits.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vk-random.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkavkaz.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkolledzhe.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkrutilca.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vkusnyashka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladgazeta.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladikavkaz-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladimirbatrakov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladimirchernyshov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladimirkarpets.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladimirpenev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladivostok-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladivostok.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladivostok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vladivostokportal.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vlasov.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vlasova-sova.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vlike.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vmagadane.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vmro.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vmurmanske.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vnikolaev.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vnsc.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vodafone.com.gh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voguefrontier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voicedata.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voiceofcricket.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voiceofserbia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vokrug.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volatiliza.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volgograd-34.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volgograd34.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volha.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volk.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volki.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volkov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volkswagengolf.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volleyballnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volleyfreaks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volochaevskiy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volochisk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vologda-city.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vologda-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volosi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volosi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voltageelectricity.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voltarengelprice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volunka.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volunteers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "volvo1800es.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vomitoxin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voprosnik.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vorona.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vortari.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vortexhosting.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vosk-cream.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "votan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vovachka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vovo4ka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "voxel.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vozbudim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vozhuo.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpn4free.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpnemail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vpnhongkong.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vriendenkring-klassiekers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vrisak-generacije.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vsatke.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vse-bolezni.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vse-dlya-fermera.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vse-dlya-jinok.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vse-novosti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vsenovosti.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vseostile.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vserisuem.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vseserialy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vss-clan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vtanki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vvcasteren.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vysokij-istochnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vysotka.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatonlinezaim.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatonlinezaim.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatonlinezaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatonlinezaim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatzaimonline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatzaimonline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatzaimonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatzaimonline.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "vzyatzaimonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waays.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waays.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waayz.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waayz.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wahine.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wakeupworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wall-banners.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wallhost.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wally4000.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "walskifilm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wanderersfc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wap-umbrella.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapbd.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapgame.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapheat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapkarma.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapkat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wapveil.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "warbox.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wardonat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wargun.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "warispak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "warworld.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wasdestek.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "washingtonregisteredagent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "washsolucoesemlimpeza.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "watchdogs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "water-valley.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waterpoint.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "waterpolospain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "watersource.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wavered.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wavesite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wbookcompany.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wctsite.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wear-largesizes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wearesouthafricans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wearvintage.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-aps.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-create.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-creato.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-disaster.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-online.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-ross.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-ross.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web-town.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "web74.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webcam-lisa.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webcamera-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webcamrunetki.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webcarroseletricos.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webcoins.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webdesignagency.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webdev-cw.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webdieta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webexperts.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webgentleman.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webhosting-erfahrungen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weblibrary.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weblogia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webmarcosmarquez.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webmetallica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webmethod.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webmining.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weboflies.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webparallax.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webpitarque.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webprostitutki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webpublishing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webpunk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webregion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websanlamuerte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websitecalifornia.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websitecenter.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websitelearners.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websoftba.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websphere.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webssupport.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webstats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "websubmissions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webtomsk.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webtransfers.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webuildsite.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webunix.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webvampiro.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webvenezuela.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "webwinkelkeur.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weda.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wedding-page.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weddinghotographers.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weddingideas.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weddingtrunks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weeaboo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wegiveloans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weighed.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weightlift.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weightprogram.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "welcomepowayan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wellbutrinxlgeneric.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wellreachlogistics.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "welom.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "welshterrier.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "welshyak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weltumradler.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "weple.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "westwings.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wgsuyi.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "what-do-kittens-need-to-eat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "what-does-kittens-need.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whataboutjonbuckland.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whataboutjoshua.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whatevents.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whateverzone.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whatiscss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wheelchair.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wheelspin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whigfieldspain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whishart.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whistlingdog.media", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "white-info.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "white-noise.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "white-skull.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitebox.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitehorse.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitemetalperu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitepages.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whitestarlegacy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wholesale.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "whoreofwallstreet.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wifishing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikicooking.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikihelp.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikihistory.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikilibrary.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikimir.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikirace.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikisaur.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikiskripta.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikitech.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikitransporte.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wikproduccions.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildcove.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildeco.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildrideproject.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wildsafety.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "williamarias.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "williamgoldberg.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "willich.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "win-fortuna.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winball.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wind-riders.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winfilestorage.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wing-tsun.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winktonsibo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winning.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winsabayi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winter-leak.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winteromeo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winterzine.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "winxpclub.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wipa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wippy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirelessbelgie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirelessthief.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wiretap.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wirtanen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wiseemergency.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wishlisotr.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wishmail.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wisselink.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wlpvzfilmy-onlajnmlawq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wnark.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wocup.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "womenfashionshirt.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "womens-suits.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wonderbox.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wonderleaks.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wonko-vs-trader.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "woo-jiho.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wootkit.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wordpressdevelopment.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wordspam.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "work-at-home.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "work-at-home.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "workerselforganisation.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "workfromhomebusinessopportunities.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worktefa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "world-documentary.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "world-of-tes.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "world-politics.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "world-tanks.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldarmy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldcharteronline.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldgun.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldhosting.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldintercontinental.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldix.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldix.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldjobs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldnewsinbox.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldpolitics.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldrallyforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldsms.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldsport.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldstyles.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldtrandingnews.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldturkmans.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worldwinesweb.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wormburners.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worthlessingratitudecq.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worthlessingratitudecq.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worthlessingratitudecq.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "worzo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wow-serbia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wowarcaim.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wows-mods.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wozalapha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpnews.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpnews.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wpnovice.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wqaw3.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wrecked.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wringer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "writerecommendations.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "writingapps.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wrsblog.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wuestenbergs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wwwclan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wycena.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "wzajemnie.org.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xarmenta.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xbanner.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xcspy.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xenical-online.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xenical-online.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xenicalonline.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xenicalorlistat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xenicalpills.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xftp.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xhanster.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xiarain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xice.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xile.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xinja.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xlhdh.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn------7cdabibmbihbgykn8elfdbfgbeqxmlc3a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn------7cdbfcbc0ab6akhadmzphmbibhebcc7b0ahshon.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn-----6kcbb0cahbiskdv1bcj5c7g.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn-----7kcgqqeagtqecgbhc3aginaie1hwh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn-----8kcdcb4bffibpgkpbdbcc5cedihs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn----7sbabexseekfke3cifnf3b4r.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn----7sbbncaddj9a9b6am9p.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn----dtbfemantkhdczc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn----dtbfemmqjdddczc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn----etbqa2alia5i.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80a1a8b.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80a6a1b.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80a6aq.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aaa3bgsbbm.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aaa5ajbrzqd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aaaane9bk7bh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aaacqdkdv7b0a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aaaptltzqd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80ab1bse.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80abb4bp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80abmghlx4ajd.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80ace6be.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80achgm7d.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80acqgkhcn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80acubre5k.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80ae7bafe4d.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80affa6ai0a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80ahjdhy.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aknjgrv.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80aod6g.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80axad8esa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--80azep.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--90agmsorb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--90aimoos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--90aizn.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--9kq.moe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--b1aa9b.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--b1agcgqrei7i.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--b1ayb.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c1aaulbdc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c1aid4ap8e.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c1aolabgdj.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c5w032d4vi.xn--fiqz9s", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c5wy5c025b.xn--fiqs8s", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--c5wy5c025b.xn--fiqz9s", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--d1aca2a5al.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--d1aczdsdn4d.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--d1awi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--e1aahuqbk6f.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--e1agokg6a9a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--e1aoddhq.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--f1ai7a.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--h1aarew7ct.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--hnse-gra.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xn--m1aba.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xnetwork.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xnix.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xomyak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xonobixa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xplozion.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xrayreview.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xsenya74hram.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xtreamfire.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xtreme-cs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xuann.wang", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xuesoska.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xviii.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xwfwrestling.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xxl-bonus.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xyrexwolf-sebastien-izambard.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "xztech.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-hudeu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-hudeyu.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-hudeyu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-madina.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-radio.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-stroynaya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ya-zdorova.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yakkifamirie.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yakutia.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yakutianews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yakutsk-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yakutsk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yalb.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yamal159263.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yamobila.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yannickvdvelde.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yanovosibirsk.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yaoge123.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yarplast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yarygin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yasraiting.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yasrating.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yassinesmael.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yay-btcl.work", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yazichestvo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yeartracker.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yekaterinburg-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yemenat.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yes-money.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesapp.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yescareer.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesilliforum.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesjobs.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yesmirov.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yobniyulyu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yogagadgets.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yogasolution.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yogaworld.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yojnaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoshkar-ola-city.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youla.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "young-celebrities.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "young-zy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourbreakfast.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourdemowebsite.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourdrive.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourmobility.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoursoul.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yoursoulmate.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourtests.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yourworlds.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yousee.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youth-for-life.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "youyifans.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ypgnews.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ypopovych.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ysearc.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "ytexa.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuandan.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yucca.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yugohome.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yula.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yun-bao.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yunnet.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yurist-vopros.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "yuuwa-service.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zabatsai-sam.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zabbix-monitoring.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zahirdanzavila.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zahnarzt-seidenstuecker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaim-best.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimi.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimin.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimlime.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimvkredit2.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimvkredit3.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimvkredit3.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimvkredit3.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaimvkredit4.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zain-hasan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaitaiguo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zajm-bez-otkaza.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zajm-cherez-sms.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zajm-na-kartu.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zajm-pod-zalog.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zakononline.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zalihvoch.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zam0th.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zamok.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zapaska.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaplano.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarabotok-v-internete.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarabotok2017.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarabotoker.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarabotoklaif.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarabotokvseti.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zardain.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarjadnik.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarobotok-forum.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zarobotok-forum.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaschtnik.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zavarkin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zayats.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaym.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaympodzalog.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaympodzalog.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaympodzalog.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zaympodzalog.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zayzoon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zcompany.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zcompany.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zcwtl.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zdorovcentr.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeldaliberty.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zelena-armija.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zelendoma.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zelkor.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zemli.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zenki-manga.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zenmail.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zenrtal-online-russia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zepter.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zepter.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zerium.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeroz.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zerozero.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zeuscorp.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zevenbergenbos.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhamolov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhdun.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhelanie.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zheldor-dance.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zheldorinform.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhestokijavtor.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhidkiy-kashtan.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhodino.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zhoujunlawer.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zikipedia.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zilla-sushi.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zion-craft.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zithromaxstrepthroat.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zlarin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zlatanonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zlotyslawecin.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zmeya.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znachenie-sna.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znakomstva-2013.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znakomstva.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znakomstvablogs.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "znaniya.cf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zodiak.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zofrangeneric.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zofzpcb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zogatest.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zoloft-medication.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zolotie-ptichki.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zolotistyi-kofe.gq", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zolotoioasis.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zona-bellepop.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zonatelevision.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zoogbook.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zornica.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zoske.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zsbd.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zulaoyun.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zurmas-design.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zuss.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zuyzi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zvezdy-porno.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zycao.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zythromax.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, + { "name": "zyx3d.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true }, // END OF 1-YEAR BULK HSTS ENTRIES // Only eTLD+1 domains can be submitted automatically to hstspreload.org,
diff --git a/printing/BUILD.gn b/printing/BUILD.gn index 1a41207..faf4aea 100644 --- a/printing/BUILD.gn +++ b/printing/BUILD.gn
@@ -237,6 +237,8 @@ "backend/printing_restrictions.h", "printed_document_chromeos.cc", "printer_query_result_chromeos.h", + "printer_status_chromeos.cc", + "printer_status_chromeos.h", "printing_context_no_system_dialog.cc", "printing_context_no_system_dialog.h", ] @@ -315,6 +317,11 @@ "//ui/gfx/geometry", ] + data = [ + "test/data/", + "../pdf/test/data/", + ] + if (is_win || is_mac) { sources += [ "printed_document_unittest.cc" ] }
diff --git a/printing/backend/cups_connection.h b/printing/backend/cups_connection.h index 6d7f766..439904df 100644 --- a/printing/backend/cups_connection.h +++ b/printing/backend/cups_connection.h
@@ -16,6 +16,7 @@ #include "printing/backend/cups_deleters.h" #include "printing/backend/cups_jobs.h" #include "printing/backend/cups_printer.h" +#include "printing/printer_status_chromeos.h" #include "printing/printing_export.h" #include "url/gurl.h"
diff --git a/printing/backend/cups_jobs.cc b/printing/backend/cups_jobs.cc index 90865e1..d87f3af 100644 --- a/printing/backend/cups_jobs.cc +++ b/printing/backend/cups_jobs.cc
@@ -18,6 +18,7 @@ #include "base/version.h" #include "printing/backend/cups_deleters.h" #include "printing/backend/cups_ipp_helper.h" +#include "printing/printer_status_chromeos.h" namespace printing { namespace { @@ -110,9 +111,10 @@ constexpr std::array<const char* const, 3> kPrinterAttributes{ {kPrinterState, kPrinterStateReasons, kPrinterStateMessage}}; -constexpr std::array<const char* const, 5> kPrinterInfo{ +constexpr std::array<const char* const, 8> kPrinterInfoAndStatus{ {kPrinterMakeAndModel, kIppVersionsSupported, kIppFeaturesSupported, - kDocumentFormatSupported, kPwgRasterDocumentResolutionSupported}}; + kDocumentFormatSupported, kPwgRasterDocumentResolutionSupported, + kPrinterState, kPrinterStateReasons, kPrinterStateMessage}}; // Converts an IPP attribute |attr| to the appropriate JobState enum. CupsJob::JobState ToJobState(ipp_attribute_t* attr) { @@ -352,12 +354,6 @@ CupsJob::~CupsJob() = default; -PrinterStatus::PrinterStatus() = default; - -PrinterStatus::PrinterStatus(const PrinterStatus& other) = default; - -PrinterStatus::~PrinterStatus() = default; - PrinterInfo::PrinterInfo() = default; PrinterInfo::~PrinterInfo() = default; @@ -420,6 +416,8 @@ } void ParsePrinterStatus(ipp_t* response, PrinterStatus* printer_status) { + *printer_status = PrinterStatus(); + for (ipp_attribute_t* attr = ippFirstAttribute(response); attr != nullptr; attr = ippNextAttribute(response)) { base::StringPiece name = ippGetName(attr); @@ -446,7 +444,11 @@ const int port, const std::string& resource, bool encrypted, - PrinterInfo* printer_info) { + PrinterInfo* printer_info, + PrinterStatus* printer_status) { + DCHECK(printer_info); + DCHECK(printer_status); + ScopedHttpPtr http = ScopedHttpPtr(httpConnect2( address.c_str(), port, nullptr, AF_INET, encrypted ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 0, @@ -467,14 +469,16 @@ address.c_str(), port, path.c_str()); ipp_status_t status; - ScopedIppPtr response = - GetPrinterAttributes(http.get(), printer_uri, resource, - kPrinterInfo.size(), kPrinterInfo.data(), &status); + ScopedIppPtr response = GetPrinterAttributes( + http.get(), printer_uri, resource, kPrinterInfoAndStatus.size(), + kPrinterInfoAndStatus.data(), &status); if (StatusError(status) || response.get() == nullptr) { LOG(WARNING) << "Get attributes failure: " << status; return PrinterQueryResult::UNKNOWN_FAILURE; } + ParsePrinterStatus(response.get(), printer_status); + if (ParsePrinterInfo(response.get(), printer_info)) { return PrinterQueryResult::SUCCESS; }
diff --git a/printing/backend/cups_jobs.h b/printing/backend/cups_jobs.h index fab54044..d868b547 100644 --- a/printing/backend/cups_jobs.h +++ b/printing/backend/cups_jobs.h
@@ -23,6 +23,8 @@ namespace printing { +struct PrinterStatus; + // Represents a print job sent to the queue. struct PRINTING_EXPORT CupsJob { // Corresponds to job-state from RFC2911. @@ -56,66 +58,6 @@ int processing_started = 0; }; -// Represents the status of a printer containing the properties printer-state, -// printer-state-reasons, and printer-state-message. -struct PRINTING_EXPORT PrinterStatus { - struct PrinterReason { - // Standardized reasons from RFC2911. - enum Reason { - UNKNOWN_REASON, - NONE, - MEDIA_NEEDED, - MEDIA_JAM, - MOVING_TO_PAUSED, - PAUSED, - SHUTDOWN, - CONNECTING_TO_DEVICE, - TIMED_OUT, - STOPPING, - STOPPED_PARTLY, - TONER_LOW, - TONER_EMPTY, - SPOOL_AREA_FULL, - COVER_OPEN, - INTERLOCK_OPEN, - DOOR_OPEN, - INPUT_TRAY_MISSING, - MEDIA_LOW, - MEDIA_EMPTY, - OUTPUT_TRAY_MISSING, - OUTPUT_AREA_ALMOST_FULL, - OUTPUT_AREA_FULL, - MARKER_SUPPLY_LOW, - MARKER_SUPPLY_EMPTY, - MARKER_WASTE_ALMOST_FULL, - MARKER_WASTE_FULL, - FUSER_OVER_TEMP, - FUSER_UNDER_TEMP, - OPC_NEAR_EOL, - OPC_LIFE_OVER, - DEVELOPER_LOW, - DEVELOPER_EMPTY, - INTERPRETER_RESOURCE_UNAVAILABLE - }; - - // Severity of the state-reason. - enum Severity { UNKNOWN_SEVERITY, REPORT, WARNING, ERROR }; - - Reason reason; - Severity severity; - }; - - PrinterStatus(); - PrinterStatus(const PrinterStatus& other); - ~PrinterStatus(); - - // printer-state - ipp_pstate_t state; - // printer-state-reasons - std::vector<PrinterReason> reasons; - // printer-state-message - std::string message; -}; struct PRINTING_EXPORT PrinterInfo { PrinterInfo(); @@ -164,11 +106,13 @@ // Queries the printer at |address| on |port| with a Get-Printer-Attributes // request to populate |printer_info|. If |encrypted| is true, request is made // using ipps, otherwise, ipp is used. Returns false if the request failed. -PrinterQueryResult PRINTING_EXPORT GetPrinterInfo(const std::string& address, - const int port, - const std::string& resource, - bool encrypted, - PrinterInfo* printer_info); +PrinterQueryResult PRINTING_EXPORT +GetPrinterInfo(const std::string& address, + int port, + const std::string& resource, + bool encrypted, + PrinterInfo* printer_info, + PrinterStatus* printer_status); // Attempts to retrieve printer status using connection |http| for |printer_id|. // Returns true if succcssful and updates the fields in |printer_status| as
diff --git a/printing/emf_win.cc b/printing/emf_win.cc index 92b032e..da060ce 100644 --- a/printing/emf_win.cc +++ b/printing/emf_win.cc
@@ -342,7 +342,7 @@ void Emf::StartPage(const gfx::Size& /*page_size*/, const gfx::Rect& /*content_area*/, - const float& /*scale_factor*/) {} + float /*scale_factor*/) {} bool Emf::FinishPage() { return true;
diff --git a/printing/emf_win.h b/printing/emf_win.h index 5245b4d..20356bbd 100644 --- a/printing/emf_win.h +++ b/printing/emf_win.h
@@ -60,7 +60,7 @@ // ignored. void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) override; + float scale_factor) override; bool FinishPage() override; bool FinishDocument() override;
diff --git a/printing/metafile.h b/printing/metafile.h index 2e06527b..d012d019 100644 --- a/printing/metafile.h +++ b/printing/metafile.h
@@ -37,32 +37,29 @@ class PRINTING_EXPORT MetafilePlayer { public: #if defined(OS_MACOSX) - // |shrink_to_fit| specifies whether the output should be shrunk to fit a - // destination page if the source PDF is bigger than the destination page in - // any dimension. If this is false, parts of the source PDF page that lie - // outside the bounds will be clipped. - // |stretch_to_fit| specifies whether the output should be stretched to fit - // the destination page if the source page size is smaller in all dimensions. - // |center_horizontally| specifies whether the output (after any scaling is - // done) should be centered horizontally within the destination page. - // |center_vertically| specifies whether the output (after any scaling is - // done) should be centered vertically within the destination page. - // Note that all scaling preserves the original aspect ratio of the page. - // |autorotate| specifies whether the source PDF should be autorotated to fit - // on the destination page. struct MacRenderPageParams { - MacRenderPageParams() - : shrink_to_fit(false), - stretch_to_fit(false), - center_horizontally(false), - center_vertically(false), - autorotate(false) {} + // Whether the output should be shrunk to fit a destination page if the + // source PDF is bigger than the destination page in any dimension. If this + // is false, parts of the source PDF page that lie outside the bounds will + // be clipped. + bool shrink_to_fit = false; - bool shrink_to_fit; - bool stretch_to_fit; - bool center_horizontally; - bool center_vertically; - bool autorotate; + // Whether the output should be stretched to fit the destination page if the + // source page size is smaller in all dimensions. + bool stretch_to_fit = false; + + // Whether the output (after any scaling is done) should be centered + // horizontally within the destination page. + bool center_horizontally = false; + + // Whether the output (after any scaling is done) should be centered + // vertically within the destination page. Note that all scaling preserves + // the original aspect ratio of the page. + bool center_vertically = false; + + // Whether the source PDF should be autorotated to fit on the destination + // page. + bool autorotate = false; }; #endif // defined(OS_MACOSX) MetafilePlayer(); @@ -81,7 +78,7 @@ // |params| to determine scaling, translation, and rotation. virtual bool RenderPage(unsigned int page_number, printing::NativeDrawingContext context, - const CGRect rect, + const CGRect& rect, const MacRenderPageParams& params) const = 0; #endif // if defined(OS_WIN) @@ -127,7 +124,7 @@ // in points (=1/72 in). virtual void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) = 0; + float scale_factor) = 0; // Closes the current page and destroys the context used in rendering that // page. The results of current page will be appended into the underlying
diff --git a/printing/metafile_skia.cc b/printing/metafile_skia.cc index 0c856c6..d30994d 100644 --- a/printing/metafile_skia.cc +++ b/printing/metafile_skia.cc
@@ -117,7 +117,7 @@ void MetafileSkia::StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) { + float scale_factor) { DCHECK_GT(page_size.width(), 0); DCHECK_GT(page_size.height(), 0); DCHECK_GT(scale_factor, 0.0f); @@ -148,7 +148,7 @@ cc::PaintCanvas* MetafileSkia::GetVectorCanvasForNewPage( const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) { + float scale_factor) { StartPage(page_size, content_area, scale_factor); return data_->recorder.getRecordingCanvas(); } @@ -280,7 +280,7 @@ */ bool MetafileSkia::RenderPage(unsigned int page_number, CGContextRef context, - const CGRect rect, + const CGRect& rect, const MacRenderPageParams& params) const { DCHECK_GT(GetDataSize(), 0U); if (data_->pdf_cg.GetDataSize() == 0) {
diff --git a/printing/metafile_skia.h b/printing/metafile_skia.h index 73344bb..444ad96 100644 --- a/printing/metafile_skia.h +++ b/printing/metafile_skia.h
@@ -42,7 +42,7 @@ void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) override; + float scale_factor) override; bool FinishPage() override; bool FinishDocument() override; @@ -61,7 +61,7 @@ #elif defined(OS_MACOSX) bool RenderPage(unsigned int page_number, printing::NativeDrawingContext context, - const CGRect rect, + const CGRect& rect, const MacRenderPageParams& params) const override; #endif @@ -88,7 +88,7 @@ // until FinishPage() or FinishDocument() is called. cc::PaintCanvas* GetVectorCanvasForNewPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor); + float scale_factor); // This is used for painting content of out-of-process subframes. // For such a subframe, since the content is in another process, we create a
diff --git a/printing/pdf_metafile_cg_mac.cc b/printing/pdf_metafile_cg_mac.cc index d9d62135..8370979 100644 --- a/printing/pdf_metafile_cg_mac.cc +++ b/printing/pdf_metafile_cg_mac.cc
@@ -22,7 +22,7 @@ namespace { // Rotate a page by |num_rotations| * 90 degrees, counter-clockwise. -void RotatePage(CGContextRef context, const CGRect rect, int num_rotations) { +void RotatePage(CGContextRef context, const CGRect& rect, int num_rotations) { switch (num_rotations) { case 0: break; @@ -58,9 +58,9 @@ namespace printing { -PdfMetafileCg::PdfMetafileCg() : page_is_open_(false) {} +PdfMetafileCg::PdfMetafileCg() = default; -PdfMetafileCg::~PdfMetafileCg() {} +PdfMetafileCg::~PdfMetafileCg() = default; bool PdfMetafileCg::Init() { // Ensure that Init hasn't already been called. @@ -107,16 +107,16 @@ void PdfMetafileCg::StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) { + float scale_factor) { DCHECK(context_.get()); DCHECK(!page_is_open_); - double height = page_size.height(); - double width = page_size.width(); + page_is_open_ = true; + float height = page_size.height(); + float width = page_size.width(); CGRect bounds = CGRectMake(0, 0, width, height); CGContextBeginPage(context_, &bounds); - page_is_open_ = true; CGContextSaveGState(context_); // Move to the context origin. @@ -159,7 +159,7 @@ bool PdfMetafileCg::RenderPage(unsigned int page_number, CGContextRef context, - const CGRect rect, + const CGRect& rect, const MacRenderPageParams& params) const { CGPDFDocumentRef pdf_doc = GetPDFDocument(); if (!pdf_doc) { @@ -256,7 +256,7 @@ LOG(ERROR) << "Unable to create PDF document from data"; return gfx::Rect(); } - if (page_number > GetPageCount()) { + if (page_number == 0 || page_number > GetPageCount()) { LOG(ERROR) << "Invalid page number: " << page_number; return gfx::Rect(); }
diff --git a/printing/pdf_metafile_cg_mac.h b/printing/pdf_metafile_cg_mac.h index a49a389..4d3edd5 100644 --- a/printing/pdf_metafile_cg_mac.h +++ b/printing/pdf_metafile_cg_mac.h
@@ -10,20 +10,16 @@ #include <stdint.h> #include "base/mac/scoped_cftyperef.h" -#include "base/macros.h" #include "printing/metafile.h" -namespace gfx { -class Rect; -class Size; -} - namespace printing { // This class creates a graphics context that renders into a PDF data stream. class PRINTING_EXPORT PdfMetafileCg : public Metafile { public: PdfMetafileCg(); + PdfMetafileCg(const PdfMetafileCg&) = delete; + PdfMetafileCg& operator=(const PdfMetafileCg&) = delete; ~PdfMetafileCg() override; // Metafile methods. @@ -31,7 +27,7 @@ bool InitFromData(const void* src_buffer, size_t src_buffer_size) override; void StartPage(const gfx::Size& page_size, const gfx::Rect& content_area, - const float& scale_factor) override; + float scale_factor) override; bool FinishPage() override; bool FinishDocument() override; @@ -47,7 +43,7 @@ bool RenderPage(unsigned int page_number, printing::NativeDrawingContext context, - const CGRect rect, + const CGRect& rect, const MacRenderPageParams& params) const override; private: @@ -64,9 +60,7 @@ mutable base::ScopedCFTypeRef<CGPDFDocumentRef> pdf_doc_; // Whether or not a page is currently open. - bool page_is_open_; - - DISALLOW_COPY_AND_ASSIGN(PdfMetafileCg); + bool page_is_open_ = false; }; } // namespace printing
diff --git a/printing/pdf_metafile_cg_mac_unittest.cc b/printing/pdf_metafile_cg_mac_unittest.cc index 4b9b38c..bf50b1f 100644 --- a/printing/pdf_metafile_cg_mac_unittest.cc +++ b/printing/pdf_metafile_cg_mac_unittest.cc
@@ -10,16 +10,42 @@ #include <string> #include <vector> +#include "base/files/file_util.h" +#include "base/hash/sha1.h" +#include "base/path_service.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/rect.h" namespace printing { +namespace { + +base::FilePath GetPdfTestData(const base::FilePath::StringType& filename) { + base::FilePath root_path; + if (!base::PathService::Get(base::DIR_SOURCE_ROOT, &root_path)) + return base::FilePath(); + return root_path.Append("pdf").Append("test").Append("data").Append(filename); +} + +base::FilePath GetPrintingTestData(const base::FilePath::StringType& filename) { + base::FilePath root_path; + if (!base::PathService::Get(base::DIR_SOURCE_ROOT, &root_path)) + return base::FilePath(); + return root_path.Append("printing") + .Append("test") + .Append("data") + .Append("pdf_cg") + .Append(filename); +} + +} // namespace + TEST(PdfMetafileCgTest, Pdf) { // Test in-renderer constructor. PdfMetafileCg pdf; EXPECT_TRUE(pdf.Init()); - EXPECT_TRUE(pdf.context() != NULL); + EXPECT_TRUE(pdf.context()); // Render page 1. gfx::Rect rect_1(10, 10, 520, 700); @@ -65,4 +91,98 @@ EXPECT_EQ(540, page_size.height()); } +TEST(PdfMetafileCgTest, GetPageBounds) { + // Get test data. + base::FilePath pdf_file = GetPdfTestData("rectangles_multi_pages.pdf"); + ASSERT_FALSE(pdf_file.empty()); + std::string pdf_data; + ASSERT_TRUE(base::ReadFileToString(pdf_file, &pdf_data)); + + // Initialize and check metafile. + PdfMetafileCg pdf_cg; + ASSERT_TRUE(pdf_cg.InitFromData(pdf_data.data(), pdf_data.size())); + ASSERT_EQ(5u, pdf_cg.GetPageCount()); + + // Since the input into GetPageBounds() is a 1-indexed page number, 0 and 6 + // are out of bounds. + gfx::Rect bounds; + for (size_t i : {0, 6}) { + bounds = pdf_cg.GetPageBounds(i); + EXPECT_EQ(0, bounds.x()); + EXPECT_EQ(0, bounds.y()); + EXPECT_EQ(0, bounds.width()); + EXPECT_EQ(0, bounds.height()); + } + + // Whereas 1-5 are in bounds. + for (size_t i = 1; i < 6; ++i) { + bounds = pdf_cg.GetPageBounds(i); + EXPECT_EQ(0, bounds.x()); + EXPECT_EQ(0, bounds.y()); + EXPECT_EQ(200, bounds.width()); + EXPECT_EQ(250, bounds.height()); + } +} + +TEST(PdfMetafileCgTest, RenderPageBasic) { + // Get test data. + base::FilePath pdf_file = GetPdfTestData("rectangles.pdf"); + ASSERT_FALSE(pdf_file.empty()); + std::string pdf_data; + ASSERT_TRUE(base::ReadFileToString(pdf_file, &pdf_data)); + + base::FilePath expected_png_file = + GetPrintingTestData("rectangles_cg_expected.pdf.0.png"); + ASSERT_FALSE(expected_png_file.empty()); + std::string expected_png_data; + ASSERT_TRUE(base::ReadFileToString(expected_png_file, &expected_png_data)); + + // Initialize and check metafile. + constexpr int kExpectedWidth = 200; + constexpr int kExpectedHeight = 300; + PdfMetafileCg pdf_cg; + ASSERT_TRUE(pdf_cg.InitFromData(pdf_data.data(), pdf_data.size())); + ASSERT_EQ(1u, pdf_cg.GetPageCount()); + gfx::Rect bounds = pdf_cg.GetPageBounds(1); + ASSERT_EQ(0, bounds.x()); + ASSERT_EQ(0, bounds.y()); + ASSERT_EQ(kExpectedWidth, bounds.width()); + ASSERT_EQ(kExpectedHeight, bounds.height()); + + // Set up rendering context. + constexpr size_t kBitsPerComponent = 8; + constexpr size_t kBytesPerPixel = 4; + constexpr size_t kStride = kExpectedWidth * kBytesPerPixel; + std::vector<uint8_t> rendered_bitmap(kStride * kExpectedHeight); + base::ScopedCFTypeRef<CGColorSpaceRef> color_space( + CGColorSpaceCreateDeviceRGB()); + base::ScopedCFTypeRef<CGContextRef> context(CGBitmapContextCreate( + rendered_bitmap.data(), kExpectedWidth, kExpectedHeight, + kBitsPerComponent, kStride, color_space, + kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little)); + + // Render using metafile and calculate the output hash. + Metafile::MacRenderPageParams params; + params.autorotate = true; + ASSERT_TRUE(pdf_cg.RenderPage(1, context, bounds.ToCGRect(), params)); + std::array<uint8_t, base::kSHA1Length> rendered_hash = + base::SHA1HashSpan(rendered_bitmap); + + // Decode expected PNG and calculate the output hash. + std::vector<uint8_t> expected_png_bitmap; + int png_width; + int png_height; + ASSERT_TRUE(gfx::PNGCodec::Decode( + reinterpret_cast<const uint8_t*>(expected_png_data.data()), + expected_png_data.size(), gfx::PNGCodec::FORMAT_BGRA, + &expected_png_bitmap, &png_width, &png_height)); + ASSERT_EQ(kExpectedWidth, png_width); + ASSERT_EQ(kExpectedHeight, png_height); + std::array<uint8_t, base::kSHA1Length> expected_hash = + base::SHA1HashSpan(expected_png_bitmap); + + // Make sure the hashes match. + EXPECT_EQ(expected_hash, rendered_hash); +} + } // namespace printing
diff --git a/printing/printer_status_chromeos.cc b/printing/printer_status_chromeos.cc new file mode 100644 index 0000000..1425152 --- /dev/null +++ b/printing/printer_status_chromeos.cc
@@ -0,0 +1,15 @@ +// Copyright 2020 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 "printing/printer_status_chromeos.h" + +namespace printing { + +PrinterStatus::PrinterStatus() = default; + +PrinterStatus::PrinterStatus(const PrinterStatus& other) = default; + +PrinterStatus::~PrinterStatus() = default; + +} // namespace printing
diff --git a/printing/printer_status_chromeos.h b/printing/printer_status_chromeos.h new file mode 100644 index 0000000..00dd4459 --- /dev/null +++ b/printing/printer_status_chromeos.h
@@ -0,0 +1,80 @@ +// Copyright 2020 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 PRINTING_PRINTER_STATUS_CHROMEOS_H_ +#define PRINTING_PRINTER_STATUS_CHROMEOS_H_ + +#include <cups/cups.h> + +#include <string> +#include <vector> + +#include "printing/printing_export.h" + +namespace printing { + +// Represents the status of a printer containing the properties printer-state, +// printer-state-reasons, and printer-state-message. +struct PRINTING_EXPORT PrinterStatus { + struct PrinterReason { + // Standardized reasons from RFC2911. + enum Reason { + UNKNOWN_REASON, + NONE, + MEDIA_NEEDED, + MEDIA_JAM, + MOVING_TO_PAUSED, + PAUSED, + SHUTDOWN, + CONNECTING_TO_DEVICE, + TIMED_OUT, + STOPPING, + STOPPED_PARTLY, + TONER_LOW, + TONER_EMPTY, + SPOOL_AREA_FULL, + COVER_OPEN, + INTERLOCK_OPEN, + DOOR_OPEN, + INPUT_TRAY_MISSING, + MEDIA_LOW, + MEDIA_EMPTY, + OUTPUT_TRAY_MISSING, + OUTPUT_AREA_ALMOST_FULL, + OUTPUT_AREA_FULL, + MARKER_SUPPLY_LOW, + MARKER_SUPPLY_EMPTY, + MARKER_WASTE_ALMOST_FULL, + MARKER_WASTE_FULL, + FUSER_OVER_TEMP, + FUSER_UNDER_TEMP, + OPC_NEAR_EOL, + OPC_LIFE_OVER, + DEVELOPER_LOW, + DEVELOPER_EMPTY, + INTERPRETER_RESOURCE_UNAVAILABLE + }; + + // Severity of the state-reason. + enum Severity { UNKNOWN_SEVERITY, REPORT, WARNING, ERROR }; + + Reason reason; + Severity severity; + }; + + PrinterStatus(); + PrinterStatus(const PrinterStatus& other); + ~PrinterStatus(); + + // printer-state + ipp_pstate_t state; + // printer-state-reasons + std::vector<PrinterReason> reasons; + // printer-state-message + std::string message; +}; + +} // namespace printing + +#endif // PRINTING_PRINTER_STATUS_CHROMEOS_H_
diff --git a/printing/test/data/pdf_cg/README.md b/printing/test/data/pdf_cg/README.md new file mode 100644 index 0000000..5f2fdb0d --- /dev/null +++ b/printing/test/data/pdf_cg/README.md
@@ -0,0 +1,6 @@ +pdf_cg test expectations +--- +The PNG files in this directory are the CoreGraphics rendering outputs for PDFs +in //pdf/test/data/. They are generated from raw bitmaps using +gfx::PNGCodec::Encode() using the |gfx::PNGCodec::FORMAT_BGRA| format. The PNGs +are further optimized with optipng.
diff --git a/printing/test/data/pdf_cg/rectangles_cg_expected.pdf.0.png b/printing/test/data/pdf_cg/rectangles_cg_expected.pdf.0.png new file mode 100644 index 0000000..4f28235 --- /dev/null +++ b/printing/test/data/pdf_cg/rectangles_cg_expected.pdf.0.png Binary files differ
diff --git a/remoting/host/linux/linux_me2me_host.py b/remoting/host/linux/linux_me2me_host.py index 12176c3..2a016297 100755 --- a/remoting/host/linux/linux_me2me_host.py +++ b/remoting/host/linux/linux_me2me_host.py
@@ -425,6 +425,11 @@ def _init_child_env(self): self.child_env = dict(os.environ) + # Force GDK to use the X11 backend, as otherwise parts of the host that use + # GTK can end up connecting to an active Wayland display instead of the + # CRD X11 session. + self.child_env["GDK_BACKEND"] = "x11" + # Ensure that the software-rendering GL drivers are loaded by the desktop # session, instead of any hardware GL drivers installed on the system. library_path = (
diff --git a/remoting/host/linux/remoting_user_session.cc b/remoting/host/linux/remoting_user_session.cc index 0f87e6a..38b212e 100644 --- a/remoting/host/linux/remoting_user_session.cc +++ b/remoting/host/linux/remoting_user_session.cc
@@ -304,10 +304,16 @@ void ExecMe2MeScript(base::EnvironmentMap environment, const struct passwd* pwinfo, const std::vector<std::string>& script_args) { - // By convention, a login shell is signified by preceeding the shell name in + std::string login_shell = pwinfo->pw_shell; + if (login_shell.empty()) { + // According to "man 5 passwd", if the shell field is empty, it defaults to + // "/bin/sh". + login_shell = "/bin/sh"; + } + + // By convention, a login shell is signified by preceding the shell name in // argv[0] with a '-'. - std::string shell_name = - '-' + base::FilePath(pwinfo->pw_shell).BaseName().value(); + std::string shell_name = '-' + base::FilePath(login_shell).BaseName().value(); base::Optional<std::string> escaped_script_path = ShellEscapeArgument(FindScriptPath()); @@ -325,7 +331,7 @@ environment["USER"] = pwinfo->pw_name; environment["LOGNAME"] = pwinfo->pw_name; environment["HOME"] = pwinfo->pw_dir; - environment["SHELL"] = pwinfo->pw_shell; + environment["SHELL"] = login_shell; if (!environment.count("PATH")) { environment["PATH"] = "/bin:/usr/bin"; } @@ -345,9 +351,9 @@ } env_ptrs.push_back(nullptr); - execve(pwinfo->pw_shell, const_cast<char* const*>(arg_ptrs.data()), + execve(login_shell.c_str(), const_cast<char* const*>(arg_ptrs.data()), const_cast<char* const*>(env_ptrs.data())); - PLOG(FATAL) << "Failed to exec login shell " << pwinfo->pw_shell; + PLOG(FATAL) << "Failed to exec login shell " << login_shell; } // Relaunch the user session. When calling this function, the real UID must be
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc index 43fc6fe..dcbc836 100644 --- a/services/network/cookie_manager_unittest.cc +++ b/services/network/cookie_manager_unittest.cc
@@ -143,7 +143,7 @@ net::CanonicalCookie::CookieInclusionStatus::EXCLUDE_UNKNOWN_ERROR); net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); if (modify_http_only) options.set_include_httponly(); cookie_service_->SetCanonicalCookie( @@ -166,7 +166,7 @@ base::RunLoop run_loop; net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); if (modify_http_only) options.set_include_httponly(); net::CanonicalCookie::CookieInclusionStatus result_out( @@ -264,7 +264,7 @@ callback; net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); if (can_modify_httponly) options.set_include_httponly(); @@ -572,7 +572,7 @@ // Want the SameSite=lax cookies, but not httponly ones. net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList( GURL("https://foo_host.com/with/path"), options); @@ -622,7 +622,7 @@ // Retrieve without httponly cookies (default) net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(options.exclude_httponly()); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList( @@ -677,8 +677,10 @@ // Retrieve only unrestricted cookies. net::CookieOptions options; - EXPECT_EQ(net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - options.same_site_cookie_context()); + EXPECT_EQ( + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + options.same_site_cookie_context()); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList( GURL("https://foo_host.com/with/path"), options); ASSERT_EQ(1u, cookies.size()); @@ -693,7 +695,9 @@ // Retrieve unrestricted and lax cookies. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX); + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX)); cookies = service_wrapper()->GetCookieList( GURL("https://foo_host.com/with/path"), options); ASSERT_EQ(2u, cookies.size()); @@ -707,7 +711,7 @@ // Retrieve everything. options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); cookies = service_wrapper()->GetCookieList( GURL("https://foo_host.com/with/path"), options); ASSERT_EQ(3u, cookies.size()); @@ -735,7 +739,7 @@ // the access time is null. net::CookieOptions options; options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); options.set_do_not_update_access_time(); std::vector<net::CanonicalCookie> cookies = service_wrapper()->GetCookieList(
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.cc b/services/network/public/cpp/cookie_manager_mojom_traits.cc index 9404bc28c..c7c8b53b 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits.cc +++ b/services/network/public/cpp/cookie_manager_mojom_traits.cc
@@ -150,96 +150,88 @@ return false; } -network::mojom::CookieSameSiteContext -EnumTraits<network::mojom::CookieSameSiteContext, - net::CookieOptions::SameSiteCookieContext>:: - ToMojom(net::CookieOptions::SameSiteCookieContext input) { +network::mojom::ContextType +EnumTraits<network::mojom::ContextType, + net::CookieOptions::SameSiteCookieContext::ContextType>:: + ToMojom(net::CookieOptions::SameSiteCookieContext::ContextType input) { switch (input) { - case net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT: - return network::mojom::CookieSameSiteContext::SAME_SITE_STRICT; - case net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX: - return network::mojom::CookieSameSiteContext::SAME_SITE_LAX; - case net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE: - return network::mojom::CookieSameSiteContext::SAME_SITE_LAX_METHOD_UNSAFE; - case net::CookieOptions::SameSiteCookieContext::CROSS_SITE: - return network::mojom::CookieSameSiteContext::CROSS_SITE; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL; - case net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL: - return network::mojom::CookieSameSiteContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL; + case net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_STRICT: + return network::mojom::ContextType::SAME_SITE_STRICT; + case net::CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX: + return network::mojom::ContextType::SAME_SITE_LAX; + case net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_LAX_METHOD_UNSAFE: + return network::mojom::ContextType::SAME_SITE_LAX_METHOD_UNSAFE; + case net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE: + return network::mojom::ContextType::CROSS_SITE; default: NOTREACHED(); - return network::mojom::CookieSameSiteContext::CROSS_SITE; + return network::mojom::ContextType::CROSS_SITE; } } -bool EnumTraits<network::mojom::CookieSameSiteContext, - net::CookieOptions::SameSiteCookieContext>:: - FromMojom(network::mojom::CookieSameSiteContext input, - net::CookieOptions::SameSiteCookieContext* output) { +bool EnumTraits<network::mojom::ContextType, + net::CookieOptions::SameSiteCookieContext::ContextType>:: + FromMojom(network::mojom::ContextType input, + net::CookieOptions::SameSiteCookieContext::ContextType* output) { switch (input) { - case network::mojom::CookieSameSiteContext::SAME_SITE_STRICT: - *output = net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT; + case network::mojom::ContextType::SAME_SITE_STRICT: + *output = net::CookieOptions::SameSiteCookieContext::ContextType:: + SAME_SITE_STRICT; return true; - case network::mojom::CookieSameSiteContext::SAME_SITE_LAX: - *output = net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX; + case network::mojom::ContextType::SAME_SITE_LAX: + *output = + net::CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX; return true; - case network::mojom::CookieSameSiteContext::SAME_SITE_LAX_METHOD_UNSAFE: - *output = net::CookieOptions::SameSiteCookieContext:: + case network::mojom::ContextType::SAME_SITE_LAX_METHOD_UNSAFE: + *output = net::CookieOptions::SameSiteCookieContext::ContextType:: SAME_SITE_LAX_METHOD_UNSAFE; return true; - case network::mojom::CookieSameSiteContext::CROSS_SITE: - *output = net::CookieOptions::SameSiteCookieContext::CROSS_SITE; + case network::mojom::ContextType::CROSS_SITE: + *output = + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE; return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL; + } + return false; +} + +network::mojom::CrossSchemeness +EnumTraits<network::mojom::CrossSchemeness, + net::CookieOptions::SameSiteCookieContext::CrossSchemeness>:: + ToMojom(net::CookieOptions::SameSiteCookieContext::CrossSchemeness input) { + switch (input) { + case net::CookieOptions::SameSiteCookieContext::CrossSchemeness::NONE: + return network::mojom::CrossSchemeness::NONE; + case net::CookieOptions::SameSiteCookieContext::CrossSchemeness:: + INSECURE_SECURE: + return network::mojom::CrossSchemeness::INSECURE_SECURE; + case net::CookieOptions::SameSiteCookieContext::CrossSchemeness:: + SECURE_INSECURE: + return network::mojom::CrossSchemeness::SECURE_INSECURE; + default: + NOTREACHED(); + return network::mojom::CrossSchemeness::NONE; + } +} + +bool EnumTraits<network::mojom::CrossSchemeness, + net::CookieOptions::SameSiteCookieContext::CrossSchemeness>:: + FromMojom( + network::mojom::CrossSchemeness input, + net::CookieOptions::SameSiteCookieContext::CrossSchemeness* output) { + switch (input) { + case network::mojom::CrossSchemeness::NONE: + *output = + net::CookieOptions::SameSiteCookieContext::CrossSchemeness::NONE; return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL; + case network::mojom::CrossSchemeness::INSECURE_SECURE: + *output = net::CookieOptions::SameSiteCookieContext::CrossSchemeness:: + INSECURE_SECURE; return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL; - return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL; - return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL; - return true; - case network::mojom::CookieSameSiteContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL: - *output = net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL; + case network::mojom::CrossSchemeness::SECURE_INSECURE: + *output = net::CookieOptions::SameSiteCookieContext::CrossSchemeness:: + SECURE_INSECURE; return true; } return false; @@ -301,6 +293,24 @@ return false; } +bool StructTraits<network::mojom::CookieSameSiteContextDataView, + net::CookieOptions::SameSiteCookieContext>:: + Read(network::mojom::CookieSameSiteContextDataView mojo_context, + net::CookieOptions::SameSiteCookieContext* context) { + net::CookieOptions::SameSiteCookieContext::ContextType context_type; + if (!mojo_context.ReadContext(&context_type)) + return false; + + net::CookieOptions::SameSiteCookieContext::CrossSchemeness cross_schemeness; + if (!mojo_context.ReadCrossSchemeness(&cross_schemeness)) + return false; + + *context = + net::CookieOptions::SameSiteCookieContext(context_type, cross_schemeness); + + return true; +} + bool StructTraits<network::mojom::CookieOptionsDataView, net::CookieOptions>:: Read(network::mojom::CookieOptionsDataView mojo_options, net::CookieOptions* cookie_options) {
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits.h b/services/network/public/cpp/cookie_manager_mojom_traits.h index 6e4849b..3a9814d 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits.h +++ b/services/network/public/cpp/cookie_manager_mojom_traits.h
@@ -39,13 +39,23 @@ }; template <> -struct EnumTraits<network::mojom::CookieSameSiteContext, - net::CookieOptions::SameSiteCookieContext> { - static network::mojom::CookieSameSiteContext ToMojom( - net::CookieOptions::SameSiteCookieContext input); +struct EnumTraits<network::mojom::ContextType, + net::CookieOptions::SameSiteCookieContext::ContextType> { + static network::mojom::ContextType ToMojom( + net::CookieOptions::SameSiteCookieContext::ContextType input); + static bool FromMojom( + network::mojom::ContextType input, + net::CookieOptions::SameSiteCookieContext::ContextType* output); +}; - static bool FromMojom(network::mojom::CookieSameSiteContext input, - net::CookieOptions::SameSiteCookieContext* output); +template <> +struct EnumTraits<network::mojom::CrossSchemeness, + net::CookieOptions::SameSiteCookieContext::CrossSchemeness> { + static network::mojom::CrossSchemeness ToMojom( + net::CookieOptions::SameSiteCookieContext::CrossSchemeness input); + static bool FromMojom( + network::mojom::CrossSchemeness input, + net::CookieOptions::SameSiteCookieContext::CrossSchemeness* output); }; template <> @@ -67,6 +77,23 @@ }; template <> +struct StructTraits<network::mojom::CookieSameSiteContextDataView, + net::CookieOptions::SameSiteCookieContext> { + static net::CookieOptions::SameSiteCookieContext::ContextType context( + net::CookieOptions::SameSiteCookieContext& s) { + return s.context; + } + + static net::CookieOptions::SameSiteCookieContext::CrossSchemeness + cross_schemeness(net::CookieOptions::SameSiteCookieContext& s) { + return s.cross_schemeness; + } + + static bool Read(network::mojom::CookieSameSiteContextDataView mojo_options, + net::CookieOptions::SameSiteCookieContext* context); +}; + +template <> struct StructTraits<network::mojom::CookieOptionsDataView, net::CookieOptions> { static bool exclude_httponly(const net::CookieOptions& o) { return o.exclude_httponly();
diff --git a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc index 1d134c9..8b5180c9 100644 --- a/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc +++ b/services/network/public/cpp/cookie_manager_mojom_traits_unittest.cc
@@ -133,6 +133,31 @@ } } +TEST(CookieManagerTraitsTest, Roundtrips_ContextType) { + using ContextType = net::CookieOptions::SameSiteCookieContext::ContextType; + for (ContextType context_type : + {ContextType::CROSS_SITE, ContextType::SAME_SITE_LAX_METHOD_UNSAFE, + ContextType::SAME_SITE_LAX, ContextType::SAME_SITE_STRICT}) { + ContextType roundtrip; + ASSERT_TRUE(SerializeAndDeserializeEnum<mojom::ContextType>(context_type, + &roundtrip)); + EXPECT_EQ(context_type, roundtrip); + } +} + +TEST(CookieManagerTraitsTest, Roundtrips_CrossSchemeness) { + using CrossSchemeness = + net::CookieOptions::SameSiteCookieContext::CrossSchemeness; + for (CrossSchemeness cross_schemeness : + {CrossSchemeness::NONE, CrossSchemeness::INSECURE_SECURE, + CrossSchemeness::SECURE_INSECURE}) { + CrossSchemeness roundtrip; + ASSERT_TRUE(SerializeAndDeserializeEnum<mojom::CrossSchemeness>( + cross_schemeness, &roundtrip)); + EXPECT_EQ(cross_schemeness, roundtrip); + } +} + TEST(CookieManagerTraitsTest, Roundtrips_CookieAccessSemantics) { for (net::CookieAccessSemantics access_semantics : {net::CookieAccessSemantics::UNKNOWN, @@ -160,27 +185,26 @@ } TEST(CookieManagerTraitsTest, Roundtrips_CookieSameSiteContext) { - for (net::CookieOptions::SameSiteCookieContext context_state : - {net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_LAX_METHOD_UNSAFE, - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, - net::CookieOptions::SameSiteCookieContext:: - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL}) { - net::CookieOptions::SameSiteCookieContext roundtrip; - ASSERT_TRUE(SerializeAndDeserializeEnum<mojom::CookieSameSiteContext>( - context_state, &roundtrip)); - EXPECT_EQ(context_state, roundtrip); + using ContextType = net::CookieOptions::SameSiteCookieContext::ContextType; + using CrossSchemeness = + net::CookieOptions::SameSiteCookieContext::CrossSchemeness; + for (ContextType context_type : + {ContextType::CROSS_SITE, ContextType::SAME_SITE_LAX_METHOD_UNSAFE, + ContextType::SAME_SITE_LAX, ContextType::SAME_SITE_STRICT}) { + for (CrossSchemeness cross_schemeness : + {CrossSchemeness::NONE, CrossSchemeness::INSECURE_SECURE, + CrossSchemeness::SECURE_INSECURE}) { + net::CookieOptions::SameSiteCookieContext context_in(context_type, + cross_schemeness), + copy; + + EXPECT_TRUE( + mojo::test::SerializeAndDeserialize<mojom::CookieSameSiteContext>( + &context_in, ©)); + + EXPECT_EQ(context_in.context, copy.context); + EXPECT_EQ(context_in.cross_schemeness, copy.cross_schemeness); + } } } @@ -193,8 +217,10 @@ EXPECT_TRUE(mojo::test::SerializeAndDeserialize<mojom::CookieOptions>( &least_trusted, ©)); EXPECT_TRUE(copy.exclude_httponly()); - EXPECT_EQ(net::CookieOptions::SameSiteCookieContext::CROSS_SITE, - copy.same_site_cookie_context()); + EXPECT_EQ( + net::CookieOptions::SameSiteCookieContext( + net::CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE), + copy.same_site_cookie_context()); EXPECT_TRUE(copy.return_excluded_cookies()); } @@ -202,12 +228,12 @@ net::CookieOptions very_trusted, copy; very_trusted.set_include_httponly(); very_trusted.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + net::CookieOptions::SameSiteCookieContext::MakeInclusive()); EXPECT_TRUE(mojo::test::SerializeAndDeserialize<mojom::CookieOptions>( &very_trusted, ©)); EXPECT_FALSE(copy.exclude_httponly()); - EXPECT_EQ(net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT, + EXPECT_EQ(net::CookieOptions::SameSiteCookieContext::MakeInclusive(), copy.same_site_cookie_context()); EXPECT_FALSE(copy.return_excluded_cookies()); }
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom index 2fc0f4b..f36677db1 100644 --- a/services/network/public/mojom/cookie_manager.mojom +++ b/services/network/public/mojom/cookie_manager.mojom
@@ -73,17 +73,23 @@ // Reserved 3 (was EXTENDED_MODE), next number is 4. }; -enum CookieSameSiteContext { +enum ContextType { CROSS_SITE, SAME_SITE_LAX_METHOD_UNSAFE, SAME_SITE_LAX, - SAME_SITE_STRICT, - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_SECURE_URL, - SAME_SITE_LAX_CROSS_SCHEME_SECURE_URL, - SAME_SITE_STRICT_CROSS_SCHEME_SECURE_URL, - SAME_SITE_LAX_METHOD_UNSAFE_CROSS_SCHEME_INSECURE_URL, - SAME_SITE_LAX_CROSS_SCHEME_INSECURE_URL, - SAME_SITE_STRICT_CROSS_SCHEME_INSECURE_URL + SAME_SITE_STRICT +}; + +enum CrossSchemeness { + NONE, + INSECURE_SECURE, + SECURE_INSECURE +}; + +// Keep defaults here in sync with net/cookies/cookie_options.h. +struct CookieSameSiteContext { + ContextType context = CROSS_SITE; + CrossSchemeness cross_schemeness = NONE; }; // What rules to apply when determining whether access to a particular cookie is @@ -98,7 +104,7 @@ // Keep defaults here in sync with net/cookies/cookie_options.cc. struct CookieOptions { bool exclude_httponly = true; - CookieSameSiteContext same_site_cookie_context = CROSS_SITE; + CookieSameSiteContext same_site_cookie_context; bool update_access_time = true; bool return_excluded_cookies = false; };
diff --git a/services/network/trust_tokens/BUILD.gn b/services/network/trust_tokens/BUILD.gn index 488e2ea..5bc8a910 100644 --- a/services/network/trust_tokens/BUILD.gn +++ b/services/network/trust_tokens/BUILD.gn
@@ -26,6 +26,7 @@ "trust_token_http_headers.h", "trust_token_key_commitment_controller.cc", "trust_token_key_commitment_controller.h", + "trust_token_key_commitment_getter.h", "trust_token_key_commitment_parser.cc", "trust_token_key_commitment_parser.h", "trust_token_key_commitment_result.cc", @@ -37,6 +38,8 @@ "trust_token_request_helper.h", "trust_token_request_issuance_helper.cc", "trust_token_request_issuance_helper.h", + "trust_token_request_redemption_helper.cc", + "trust_token_request_redemption_helper.h", "trust_token_request_signing_helper.cc", "trust_token_request_signing_helper.h", "trust_token_store.cc", @@ -63,8 +66,8 @@ testonly = true sources = [ - "trust_token_test_util.cc", - "trust_token_test_util.h", + "test/trust_token_test_util.cc", + "test/trust_token_test_util.h", ] deps = [ @@ -93,6 +96,7 @@ "trust_token_persister_unittest.cc", "trust_token_request_canonicalizer_unittest.cc", "trust_token_request_issuance_helper_unittest.cc", + "trust_token_request_redemption_helper_unittest.cc", "trust_token_request_signing_helper_unittest.cc", "trust_token_store_unittest.cc", "types_unittest.cc",
diff --git a/services/network/trust_tokens/trust_token_test_util.cc b/services/network/trust_tokens/test/trust_token_test_util.cc similarity index 94% rename from services/network/trust_tokens/trust_token_test_util.cc rename to services/network/trust_tokens/test/trust_token_test_util.cc index 60cc38cd..c6f7ef4 100644 --- a/services/network/trust_tokens/trust_token_test_util.cc +++ b/services/network/trust_tokens/test/trust_token_test_util.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "services/network/trust_tokens/trust_token_test_util.h" +#include "services/network/trust_tokens/test/trust_token_test_util.h" #include "base/test/bind_test_util.h" namespace network {
diff --git a/services/network/trust_tokens/trust_token_test_util.h b/services/network/trust_tokens/test/trust_token_test_util.h similarity index 90% rename from services/network/trust_tokens/trust_token_test_util.h rename to services/network/trust_tokens/test/trust_token_test_util.h index 62d61dd..6c69de6 100644 --- a/services/network/trust_tokens/trust_token_test_util.h +++ b/services/network/trust_tokens/test/trust_token_test_util.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_TEST_UTIL_H_ -#define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_TEST_UTIL_H_ +#ifndef SERVICES_NETWORK_TRUST_TOKENS_TEST_TRUST_TOKEN_TEST_UTIL_H_ +#define SERVICES_NETWORK_TRUST_TOKENS_TEST_TRUST_TOKEN_TEST_UTIL_H_ #include <memory> #include <string> @@ -54,4 +54,4 @@ } // namespace network -#endif // SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_TEST_UTIL_H_ +#endif // SERVICES_NETWORK_TRUST_TOKENS_TEST_TRUST_TOKEN_TEST_UTIL_H_
diff --git a/services/network/trust_tokens/trust_token_key_commitment_getter.h b/services/network/trust_tokens/trust_token_key_commitment_getter.h new file mode 100644 index 0000000..46601d4 --- /dev/null +++ b/services/network/trust_tokens/trust_token_key_commitment_getter.h
@@ -0,0 +1,30 @@ +// Copyright 2020 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 SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_KEY_COMMITMENT_GETTER_H_ +#define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_KEY_COMMITMENT_GETTER_H_ + +#include <memory> + +#include "base/callback.h" +#include "services/network/trust_tokens/trust_token_key_commitment_result.h" +#include "url/origin.h" + +namespace network { + +// Class TrustTokenKeyCommitmentGetter fetches key commitments asynchronously. +// These are used for precondition checking before issuance, and for validating +// received tokens in issuance responses. +class TrustTokenKeyCommitmentGetter { + public: + virtual ~TrustTokenKeyCommitmentGetter() = default; + virtual void Get( + const url::Origin& origin, + base::OnceCallback<void(std::unique_ptr<TrustTokenKeyCommitmentResult>)> + on_done) = 0; +}; + +} // namespace network + +#endif // SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_KEY_COMMITMENT_GETTER_H_
diff --git a/services/network/trust_tokens/trust_token_key_commitment_parser_unittest.cc b/services/network/trust_tokens/trust_token_key_commitment_parser_unittest.cc index 331c326e..fa98f180 100644 --- a/services/network/trust_tokens/trust_token_key_commitment_parser_unittest.cc +++ b/services/network/trust_tokens/trust_token_key_commitment_parser_unittest.cc
@@ -317,6 +317,13 @@ base::test::TaskEnvironment env( base::test::TaskEnvironment::TimeSource::MOCK_TIME); + // Ensure that "one minute ago" yields a nonnegative number of microseconds + // past the Unix epoch. + env.AdvanceClock(std::max<base::TimeDelta>( + base::TimeDelta(), base::Time::UnixEpoch() + + base::TimeDelta::FromMinutes(1) - + base::Time::Now())); + base::Time one_minute_before_now = base::Time::Now() - base::TimeDelta::FromMinutes(1); int64_t one_minute_before_now_in_micros =
diff --git a/services/network/trust_tokens/trust_token_request_canonicalizer_unittest.cc b/services/network/trust_tokens/trust_token_request_canonicalizer_unittest.cc index 3dc757f..9f812e4 100644 --- a/services/network/trust_tokens/trust_token_request_canonicalizer_unittest.cc +++ b/services/network/trust_tokens/trust_token_request_canonicalizer_unittest.cc
@@ -10,10 +10,10 @@ #include "components/cbor/writer.h" #include "net/url_request/url_request.h" #include "services/network/public/mojom/trust_tokens.mojom-shared.h" +#include "services/network/trust_tokens/test/trust_token_test_util.h" #include "services/network/trust_tokens/trust_token_http_headers.h" #include "services/network/trust_tokens/trust_token_request_canonicalizer.h" #include "services/network/trust_tokens/trust_token_request_signing_helper.h" -#include "services/network/trust_tokens/trust_token_test_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace network {
diff --git a/services/network/trust_tokens/trust_token_request_issuance_helper.cc b/services/network/trust_tokens/trust_token_request_issuance_helper.cc index a57101b..ed0f159 100644 --- a/services/network/trust_tokens/trust_token_request_issuance_helper.cc +++ b/services/network/trust_tokens/trust_token_request_issuance_helper.cc
@@ -25,7 +25,7 @@ TrustTokenRequestIssuanceHelper::TrustTokenRequestIssuanceHelper( const url::Origin& top_level_origin, TrustTokenStore* token_store, - std::unique_ptr<KeyCommitmentGetter> key_commitment_getter, + std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter, std::unique_ptr<Cryptographer> cryptographer) : top_level_origin_(top_level_origin), token_store_(token_store),
diff --git a/services/network/trust_tokens/trust_token_request_issuance_helper.h b/services/network/trust_tokens/trust_token_request_issuance_helper.h index f5d7c9b1..9669141 100644 --- a/services/network/trust_tokens/trust_token_request_issuance_helper.h +++ b/services/network/trust_tokens/trust_token_request_issuance_helper.h
@@ -14,6 +14,7 @@ #include "base/strings/string_piece_forward.h" #include "services/network/public/mojom/trust_tokens.mojom-shared.h" #include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/trust_token_key_commitment_getter.h" #include "services/network/trust_tokens/trust_token_key_commitment_result.h" #include "services/network/trust_tokens/trust_token_request_helper.h" #include "url/origin.h" @@ -38,18 +39,6 @@ // signatures, and another to send blinded tokens to the issuer. class TrustTokenRequestIssuanceHelper : public TrustTokenRequestHelper { public: - // Class KeyCommitmentGetter fetches key commitments asynchronously. These are - // used for precondition checking before issuance, and for validating - // received tokens in issuance responses. - class KeyCommitmentGetter { - public: - virtual ~KeyCommitmentGetter() = default; - virtual void Get( - const url::Origin& origin, - base::OnceCallback<void(std::unique_ptr<TrustTokenKeyCommitmentResult>)> - on_done) = 0; - }; - // Class Cryptographer executes the underlying cryptographic // operations required for issuance. The API is intended to correspond closely // to the BoringSSL API. @@ -109,7 +98,7 @@ TrustTokenRequestIssuanceHelper( const url::Origin& top_level_origin, TrustTokenStore* token_store, - std::unique_ptr<KeyCommitmentGetter> key_commitment_getter, + std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter, std::unique_ptr<Cryptographer> cryptographer); ~TrustTokenRequestIssuanceHelper() override; @@ -170,7 +159,7 @@ url::Origin issuer_; const url::Origin top_level_origin_; TrustTokenStore* const token_store_; - const std::unique_ptr<KeyCommitmentGetter> key_commitment_getter_; + const std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter_; const std::unique_ptr<Cryptographer> cryptographer_; base::WeakPtrFactory<TrustTokenRequestIssuanceHelper> weak_ptr_factory_{this}; };
diff --git a/services/network/trust_tokens/trust_token_request_issuance_helper_unittest.cc b/services/network/trust_tokens/trust_token_request_issuance_helper_unittest.cc index bfca61d8..19ba9dab 100644 --- a/services/network/trust_tokens/trust_token_request_issuance_helper_unittest.cc +++ b/services/network/trust_tokens/trust_token_request_issuance_helper_unittest.cc
@@ -16,11 +16,12 @@ #include "net/url_request/url_request_test_util.h" #include "services/network/public/mojom/url_response_head.mojom.h" #include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/test/trust_token_test_util.h" #include "services/network/trust_tokens/trust_token_http_headers.h" +#include "services/network/trust_tokens/trust_token_key_commitment_getter.h" #include "services/network/trust_tokens/trust_token_key_commitment_result.h" #include "services/network/trust_tokens/trust_token_parameterization.h" #include "services/network/trust_tokens/trust_token_store.h" -#include "services/network/trust_tokens/trust_token_test_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/origin.h" @@ -42,8 +43,7 @@ // FixedKeyCommitmentGetter returns the provided commitment result when // |Get| is called by the tested code. -class FixedKeyCommitmentGetter - : public TrustTokenRequestIssuanceHelper::KeyCommitmentGetter { +class FixedKeyCommitmentGetter : public TrustTokenKeyCommitmentGetter { public: FixedKeyCommitmentGetter() = default; explicit FixedKeyCommitmentGetter(
diff --git a/services/network/trust_tokens/trust_token_request_redemption_helper.cc b/services/network/trust_tokens/trust_token_request_redemption_helper.cc new file mode 100644 index 0000000..abf41f8 --- /dev/null +++ b/services/network/trust_tokens/trust_token_request_redemption_helper.cc
@@ -0,0 +1,240 @@ +// Copyright 2020 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 "services/network/trust_tokens/trust_token_request_redemption_helper.h" + +#include <algorithm> +#include <utility> + +#include "base/callback.h" +#include "base/stl_util.h" +#include "net/base/load_flags.h" +#include "net/http/http_response_headers.h" +#include "net/url_request/url_request.h" +#include "services/network/public/cpp/is_potentially_trustworthy.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/trust_token_database_owner.h" +#include "services/network/trust_tokens/trust_token_http_headers.h" +#include "services/network/trust_tokens/trust_token_key_commitment_result.h" +#include "services/network/trust_tokens/trust_token_parameterization.h" +#include "services/network/trust_tokens/trust_token_store.h" +#include "services/network/trust_tokens/types.h" +#include "url/url_constants.h" + +namespace network { + +TrustTokenRequestRedemptionHelper::TrustTokenRequestRedemptionHelper( + const url::Origin& top_level_origin, + mojom::TrustTokenRefreshPolicy refresh_policy, + TrustTokenStore* token_store, + std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter, + std::unique_ptr<KeyPairGenerator> key_pair_generator, + std::unique_ptr<Cryptographer> cryptographer) + : top_level_origin_(top_level_origin), + refresh_policy_(refresh_policy), + token_store_(token_store), + key_commitment_getter_(std::move(key_commitment_getter)), + key_pair_generator_(std::move(key_pair_generator)), + cryptographer_(std::move(cryptographer)) { + DCHECK(top_level_origin.scheme() == url::kHttpsScheme || + (top_level_origin.scheme() == url::kHttpScheme && + IsOriginPotentiallyTrustworthy(top_level_origin))) + << top_level_origin; + + DCHECK(token_store_); + DCHECK(key_commitment_getter_); + DCHECK(key_pair_generator_); + DCHECK(cryptographer_); +} + +TrustTokenRequestRedemptionHelper::~TrustTokenRequestRedemptionHelper() = + default; + +void TrustTokenRequestRedemptionHelper::Begin( + net::URLRequest* request, + base::OnceCallback<void(mojom::TrustTokenOperationStatus)> done) { + DCHECK(request->url().SchemeIsHTTPOrHTTPS() && + IsUrlPotentiallyTrustworthy(request->url())) + << request->url(); + DCHECK(request->initiator() && + request->initiator()->scheme() == url::kHttpsScheme || + (request->initiator()->scheme() == url::kHttpScheme && + IsOriginPotentiallyTrustworthy(*request->initiator()))) + << (request->initiator() ? request->initiator()->Serialize() : "(none)"); + + issuer_ = url::Origin::Create(request->url()); + + if (refresh_policy_ == mojom::TrustTokenRefreshPolicy::kRefresh && + !request->initiator()->IsSameOriginWith(issuer_)) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kFailedPrecondition); + return; + } + + if (!token_store_->SetAssociation(issuer_, top_level_origin_)) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kResourceExhausted); + return; + } + + if (refresh_policy_ == mojom::TrustTokenRefreshPolicy::kUseCached && + token_store_->RetrieveNonstaleRedemptionRecord(issuer_, + top_level_origin_)) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kAlreadyExists); + return; + } + + key_commitment_getter_->Get( + issuer_, + base::BindOnce(&TrustTokenRequestRedemptionHelper::OnGotKeyCommitment, + weak_factory_.GetWeakPtr(), request, std::move(done))); +} + +void TrustTokenRequestRedemptionHelper::OnGotKeyCommitment( + net::URLRequest* request, + base::OnceCallback<void(mojom::TrustTokenOperationStatus)> done, + std::unique_ptr<TrustTokenKeyCommitmentResult> commitment_result) { + if (!commitment_result) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kFailedPrecondition); + return; + } + + UpdateTokenStoreFromKeyCommitmentResult(*commitment_result); + + base::Optional<TrustToken> maybe_token_to_redeem = RetrieveSingleToken(); + if (!maybe_token_to_redeem) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kResourceExhausted); + return; + } + + // As a postcondition of UpdateTokenStoreFromKeyCommitmentResult, each token + // in the store for |issuer_| should have been issued by some key in + // |commitment_result|. + DCHECK(std::any_of(commitment_result->keys.begin(), + commitment_result->keys.end(), + [&](const TrustTokenKeyCommitmentResult::Key& key) { + return key.body == maybe_token_to_redeem->signing_key(); + })); + + if (!key_pair_generator_->Generate(&signing_key_, &verification_key_)) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kInternalError); + return; + } + + base::Optional<std::string> maybe_redemption_header = + cryptographer_->BeginRedemption(*maybe_token_to_redeem, verification_key_, + top_level_origin_); + + if (!maybe_redemption_header) { + std::move(done).Run(mojom::TrustTokenOperationStatus::kInternalError); + return; + } + + request->SetExtraRequestHeaderByName(kTrustTokensSecTrustTokenHeader, + std::move(*maybe_redemption_header), + /*overwrite=*/true); + + // We don't want cache reads, because the highest priority is to execute the + // protocol operation by sending the server the Trust Tokens request header + // and getting the corresponding response header, but we want cache writes + // in case subsequent requests are made to the same URL in non-trust-token + // settings. + request->SetLoadFlags(request->load_flags() | net::LOAD_BYPASS_CACHE); + + token_store_->DeleteToken(issuer_, *maybe_token_to_redeem); + + std::move(done).Run(mojom::TrustTokenOperationStatus::kOk); +} + +mojom::TrustTokenOperationStatus TrustTokenRequestRedemptionHelper::Finalize( + mojom::URLResponseHead* response) { + // Numbers 1-4 below correspond to the lines of the "Process a redemption + // response" pseudocode from the design doc. + + DCHECK(response); + + // A response headers object should be present on all responses for + // HTTP requests (which Trust Tokens requests are). + DCHECK(response->headers); + + // 1. If the response has no Sec-Trust-Token header, return an error. + + std::string header_value; + + // EnumerateHeader(|iter|=nullptr) asks for the first instance of the header, + // if any. + if (!response->headers->EnumerateHeader( + /*iter=*/nullptr, kTrustTokensSecTrustTokenHeader, &header_value)) { + return mojom::TrustTokenOperationStatus::kBadResponse; + } + + // 2. Strip the Sec-Trust-Token header, from the response and pass the header, + // base64-decoded, to BoringSSL, along with the issuer’s SRR-verification + // public key previously obtained from a key commitment. + response->headers->RemoveHeader(kTrustTokensSecTrustTokenHeader); + + base::Optional<std::string> maybe_signed_redemption_record = + cryptographer_->ConfirmRedemption(header_value); + + // 3. If BoringSSL fails its structural validation / signature check, return + // an error. + if (!maybe_signed_redemption_record) { + // The response was rejected by the underlying cryptographic library as + // malformed or otherwise invalid. + return mojom::TrustTokenOperationStatus::kBadResponse; + } + + // 4. Otherwise, if these checks succeed, store the SRR and return success. + + SignedTrustTokenRedemptionRecord record_to_store; + record_to_store.set_body(std::move(*maybe_signed_redemption_record)); + record_to_store.set_signing_key(std::move(signing_key_)); + record_to_store.set_public_key(std::move(verification_key_)); + token_store_->SetRedemptionRecord(issuer_, top_level_origin_, + std::move(record_to_store)); + + return mojom::TrustTokenOperationStatus::kOk; +} + +void TrustTokenRequestRedemptionHelper::UpdateTokenStoreFromKeyCommitmentResult( + const TrustTokenKeyCommitmentResult& result) { + // TODO(crbug.com/1063510): Once we've centralized key commitment storage, + // this method, and its counterpart in TrustTokenRequestIssuanceHelper, will + // no longer be needed. + + int batch_size = result.batch_size ? *result.batch_size + : kDefaultTrustTokenIssuanceBatchSize; + token_store_->SetBatchSize(issuer_, batch_size); + + std::vector<TrustTokenKeyCommitment> commitments_to_store; + + for (const TrustTokenKeyCommitmentResult::Key& key : result.keys) { + TrustTokenKeyCommitment to_store; + to_store.set_key(key.body); + to_store.set_expiry(internal::TimeToString(key.expiry)); + commitments_to_store.emplace_back(std::move(to_store)); + } + + token_store_->SetKeyCommitmentsAndPruneStaleState( + issuer_, std::move(commitments_to_store)); +} + +base::Optional<TrustToken> +TrustTokenRequestRedemptionHelper::RetrieveSingleToken() { + // As a postcondition of UpdateTokenStoreFromKeyCommitmentResult, all of the + // store's tokens for |issuer_| match the key commitment result obtained at + // the beginning of this redemption. Consequently, it's OK to use any + // |issuer_| token in the store. + auto key_matcher = + base::BindRepeating([](const std::string&) { return true; }); + + std::vector<TrustToken> matching_tokens = + token_store_->RetrieveMatchingTokens(issuer_, key_matcher); + + if (matching_tokens.empty()) + return base::nullopt; + + return matching_tokens.front(); +} + +} // namespace network
diff --git a/services/network/trust_tokens/trust_token_request_redemption_helper.h b/services/network/trust_tokens/trust_token_request_redemption_helper.h new file mode 100644 index 0000000..9c02d4b --- /dev/null +++ b/services/network/trust_tokens/trust_token_request_redemption_helper.h
@@ -0,0 +1,188 @@ +// Copyright 2020 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 SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_REQUEST_REDEMPTION_HELPER_H_ +#define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_REQUEST_REDEMPTION_HELPER_H_ + +#include <memory> +#include <string> + +#include "base/callback_forward.h" +#include "base/memory/weak_ptr.h" +#include "base/optional.h" +#include "base/strings/string_piece_forward.h" +#include "services/network/public/mojom/trust_tokens.mojom.h" +#include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/trust_token_key_commitment_getter.h" +#include "services/network/trust_tokens/trust_token_key_commitment_result.h" +#include "services/network/trust_tokens/trust_token_request_helper.h" +#include "url/origin.h" + +namespace net { +class URLRequest; +} // namespace net + +namespace network { +class TrustTokenStore; + +namespace mojom { +class URLResponseHead; +} // namespace mojom + +// Class TrustTokenRequestRedemptionHelper performs a single trust token +// redemption operation (https://github.com/wicg/trust-token-api): it attaches a +// single signed, unblinded token to an outgoing request, hands it to the +// token's issuer, and expects a signed redemption record (SRR) in response. The +// normal case involves a total of two network requests: one to get an +// up-to-date view of a key set the issuer provides for verifying that it's safe +// to perform the redemption, and another to send the token to the issuer. +class TrustTokenRequestRedemptionHelper : public TrustTokenRequestHelper { + public: + // Class KeyPairGenerator generates a signing and verification key pair. + // These are not used for any cryptographic operations during redemption + // itself. Instead, a digest of the verification key goes into the redemption + // request and, on redemption success, we store the key pair alongside the + // Signed Redemption Record obtained from the server; the key pair can + // subsequently be used to sign outgoing requests as part of the Trust Tokens + // "request signing" operation. + class KeyPairGenerator { + public: + virtual ~KeyPairGenerator() = default; + // Generates a key pair, returning true on success and false on failure (for + // instance, the underlying cryptographic code could fail unexpectedly). + virtual bool Generate(std::string* signing_key_out, + std::string* verification_key_out) = 0; + }; + + // Class Cryptographer executes the underlying cryptographic operations + // required for redemption. The API is intended to correspond closely to the + // BoringSSL API. + class Cryptographer { + public: + virtual ~Cryptographer() = default; + + // Given a trust token to redeem and parameters to encode in the redemption + // request, returns an ASCII string suitable for attachment in the + // Sec-Trust-Token header, or nullopt on error. + virtual base::Optional<std::string> BeginRedemption( + TrustToken token, + base::StringPiece verification_key, + const url::Origin& top_level_origin) = 0; + + // Given a base64-encoded redemption response header, validates and extracts + // the signed redemption record (SRR) contained in the header. If + // successful, returns the SRR. Otherwise, returns nullptr. + virtual base::Optional<std::string> ConfirmRedemption( + base::StringPiece response_header) = 0; + }; + + // Creates a new redemption helper. + // + // - |top_level_origin| is the top-level origin + // of the request subsequently passed to Begin; |top_level_origin|'s scheme + // must be both (1) HTTP or HTTPS and (2) "potentially trustworthy". This + // precondition is slightly involved because there are two needs: + // 1. HTTP or HTTPS so that the scheme serializes in a sensible manner in + // order to serve as a key for persisting state. + // 2. potentially trustworthy origin to satisfy Web security requirements. + // + // - |refresh_policy| controls whether to attempt to overwrite the cached + // SRR stored for the request's (issuer, top-level) origin pair. This is + // permitted to have value |kRefresh| only when the redemption + // request's initiator equals its issuer origin. + // + // - |token_store| will be responsible for storing underlying Trust Tokens + // state. It must outlive this object. + // + // - |key_commitment_getter|, |key_pair_generator|, and + // |cryptographer| are delegates that help execute the protocol; see + // their class comments. + TrustTokenRequestRedemptionHelper( + const url::Origin& top_level_origin, + mojom::TrustTokenRefreshPolicy refresh_policy, + TrustTokenStore* token_store, + std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter, + std::unique_ptr<KeyPairGenerator> key_pair_generator, + std::unique_ptr<Cryptographer> cryptographer); + ~TrustTokenRequestRedemptionHelper() override; + + // Executes the outbound part of a Trust Tokens redemption operation, + // interpreting |request|'s URL's origin as the token issuance origin; + // 1. Checks preconditions (see "Returns" below); if unsuccessful, fails. + // 2. Executes a Trust Tokens key commitment request against the issuer; if + // unsuccessful, fails. + // 3. In a request header, adds a signed, unblinded token along with + // associated metadata provided by |cryptographer_|. + // + // Returns: + // * kOk on success + // * kResourceExhausted if the top-level origin provided to this + // object's constructor has already reached its number-of-issuers limit, + // or if the (issuer, top-level) pair has no tokens to redeem + // * kAlreadyExists if the (issuer, top-level) pair already has a current + // SRR and this helper was not parameterized with |kRefresh|. + // * kFailedPrecondition if preconditions fail, including receiving a + // malformed or otherwise invalid key commitment record from the issuer, + // or if |kRefresh| was provided and the request was not initiated + // from an issuer context. + // + // |request|'s initiator, and its destination URL's origin, must be both (1) + // HTTP or HTTPS and (2) "potentially trustworthy" in the sense of + // network::IsOriginPotentiallyTrustworthy. (See the justification in the + // constructor's comment.) + void Begin( + net::URLRequest* request, + base::OnceCallback<void(mojom::TrustTokenOperationStatus)> done) override; + + // Performs the second half of Trust Token issuance's client side: + // 1. Checks |response| for an issuance response header. + // 2. If the header is present, strips it from the response and passes its + // value to an underlying cryptographic library, which parses and validates + // the response and splits it into a number of signed, unblinded tokens. + // + // If both of these steps are successful, stores the tokens in |token_store_| + // and returns kOk. Otherwise, returns kBadResponse. + mojom::TrustTokenOperationStatus Finalize( + mojom::URLResponseHead* response) override; + + private: + // Continuation of |Begin| after asynchronous key commitment fetching + // concludes. + void OnGotKeyCommitment( + net::URLRequest* request, + base::OnceCallback<void(mojom::TrustTokenOperationStatus)> done, + std::unique_ptr<TrustTokenKeyCommitmentResult> commitment_result); + + // Helper method: stores the keys from |result| in |token_store_| (and, while + // doing so, evicts all tokens not signed with keys in |result|). + void UpdateTokenStoreFromKeyCommitmentResult( + const TrustTokenKeyCommitmentResult& result); + + // Helper method: searches |token_store_| for a single trust token and returns + // it, returning nullopt if the store contains no tokens for |issuer_|. + // + // Warning: This does NOT remove the token from the store. + base::Optional<TrustToken> RetrieveSingleToken(); + + // |issuer_|, |top_level_origin_|, and |refresh_policy_| are parameters + // determining the scope and control flow of the redemption operation. + url::Origin issuer_; + const url::Origin top_level_origin_; + const mojom::TrustTokenRefreshPolicy refresh_policy_; + + // |signing_key_| and |verification_key_| are generated speculatively near the + // beginning of redemption and committed to storage if the operation succeeds. + std::string signing_key_; + std::string verification_key_; + + TrustTokenStore* const token_store_; + const std::unique_ptr<TrustTokenKeyCommitmentGetter> key_commitment_getter_; + const std::unique_ptr<KeyPairGenerator> key_pair_generator_; + const std::unique_ptr<Cryptographer> cryptographer_; + + base::WeakPtrFactory<TrustTokenRequestRedemptionHelper> weak_factory_{this}; +}; +} // namespace network + +#endif // SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_REQUEST_REDEMPTION_HELPER_H_
diff --git a/services/network/trust_tokens/trust_token_request_redemption_helper_unittest.cc b/services/network/trust_tokens/trust_token_request_redemption_helper_unittest.cc new file mode 100644 index 0000000..869e96f1 --- /dev/null +++ b/services/network/trust_tokens/trust_token_request_redemption_helper_unittest.cc
@@ -0,0 +1,919 @@ +// Copyright 2020 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 "services/network/trust_tokens/trust_token_request_redemption_helper.h" + +#include <memory> + +#include "base/callback.h" +#include "base/test/task_environment.h" +#include "net/base/load_flags.h" +#include "net/base/request_priority.h" +#include "net/http/http_response_headers.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/url_request.h" +#include "net/url_request/url_request_test_util.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/test/trust_token_test_util.h" +#include "services/network/trust_tokens/trust_token_http_headers.h" +#include "services/network/trust_tokens/trust_token_key_commitment_getter.h" +#include "services/network/trust_tokens/trust_token_key_commitment_result.h" +#include "services/network/trust_tokens/trust_token_parameterization.h" +#include "services/network/trust_tokens/trust_token_store.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace network { + +namespace { + +using TrustTokenRequestRedemptionHelperTest = TrustTokenRequestHelperTest; + +using ::testing::_; +using ::testing::ElementsAre; +using ::testing::Optional; +using ::testing::Property; +using ::testing::Return; + +// FixedKeyCommitmentGetter returns the provided commitment result when +// |Get| is called by the tested code. +class FixedKeyCommitmentGetter : public TrustTokenKeyCommitmentGetter { + public: + FixedKeyCommitmentGetter() = default; + explicit FixedKeyCommitmentGetter( + const url::Origin& issuer, + std::unique_ptr<TrustTokenKeyCommitmentResult> result) + : issuer_(issuer), result_(std::move(result)) {} + void Get( + const url::Origin& origin, + base::OnceCallback<void(std::unique_ptr<TrustTokenKeyCommitmentResult>)> + on_done) override { + EXPECT_EQ(origin, issuer_); + std::move(on_done).Run(std::move(result_)); + } + + private: + url::Origin issuer_; + std::unique_ptr<TrustTokenKeyCommitmentResult> result_; +}; + +// MockCryptographer mocks out the cryptographic operations +// underlying Trust Tokens redemption. +class MockCryptographer + : public TrustTokenRequestRedemptionHelper::Cryptographer { + public: + MOCK_METHOD3( + BeginRedemption, + base::Optional<std::string>(TrustToken token, + base::StringPiece verification_key, + const url::Origin& top_level_origin)); + + MOCK_METHOD1(ConfirmRedemption, + base::Optional<std::string>(base::StringPiece response_header)); +}; + +class FakeKeyPairGenerator + : public TrustTokenRequestRedemptionHelper::KeyPairGenerator { + public: + bool Generate(std::string*, std::string*) override { return true; } +}; + +class FailingKeyPairGenerator + : public TrustTokenRequestRedemptionHelper::KeyPairGenerator { + public: + bool Generate(std::string*, std::string*) override { return false; } +}; + +class MockKeyPairGenerator + : public TrustTokenRequestRedemptionHelper::KeyPairGenerator { + public: + MockKeyPairGenerator(const std::string& signing, + const std::string& verification) + : signing_(signing), verification_(verification) {} + bool Generate(std::string* s, std::string* v) override { + s->swap(signing_); + v->swap(verification_); + return true; + } + + private: + std::string signing_; + std::string verification_; +}; + +} // namespace + +// Check that redemption fails if it would result in too many issuers being +// configured for the redemption top-level origin. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfTooManyIssuers) { + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + + auto issuer = url::Origin::Create(GURL("https://issuer.com/")); + auto toplevel = url::Origin::Create(GURL("https://toplevel.com/")); + + // Associate the toplevel with the cap's worth of issuers different from + // |issuer|. (The cap is guaranteed to be quite small because of privacy + // requirements of the Trust Tokens protocol.) + for (int i = 0; i < kTrustTokenPerToplevelMaxNumberOfAssociatedIssuers; ++i) { + ASSERT_TRUE(store->SetAssociation( + url::Origin::Create( + GURL(base::StringPrintf("https://issuer%d.com/", i))), + toplevel)); + } + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::make_unique<FixedKeyCommitmentGetter>(), + std::make_unique<FakeKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kResourceExhausted); +} + +// Check that redemption fails if its key commitment request fails. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfKeyCommitmentFails) { + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + + // Have the key commitment getter return nullptr, denoting that the key + // commitment fetch failed. + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com/")), nullptr), + std::make_unique<FakeKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kFailedPrecondition); +} + +// Check that redemption fails with kResourceExhausted if there are no trust +// tokens stored for the (issuer, top-level origin) pair. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfNoTokensToRedeem) { + // Establish the following state: + // * Initialize an _empty_ trust token store. + // * Successfully return from the key commitment query. + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::make_unique<TrustTokenKeyCommitmentResult>()); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kResourceExhausted); +} + +// Check that redemption fails with kInternalError if there's an error during +// encoding of the request header. +TEST_F(TrustTokenRequestRedemptionHelperTest, + RejectsIfAddingRequestHeaderFails) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Configure the cryptographer to fail to encode the redemption request. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return(base::nullopt)); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kInternalError); +} + +// Check that redemption fails with kInternalError if there's an error during +// generating the signing/validation key pair. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfKeyPairGenerationFails) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Provide |helper| a FailingKeyPairGenerator to ensure that key pair + // generation does not succeed. + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FailingKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Since key pair generation failed, |Begin| should have failed and reported + // an internal error. + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kInternalError); +} + +namespace { + +class TrustTokenBeginRedemptionPostconditionsTest + : public TrustTokenRequestRedemptionHelperTest { + public: + void SetUp() override { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the + // key commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE( + store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // The value obtained from the cryptographer should be the exact + // Sec-Trust-Token header attached to the request. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce( + Return(std::string("this string contains a redemption request"))); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + request_ = MakeURLRequest("https://issuer.com/"); + request_->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request_.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + } + + protected: + std::unique_ptr<net::URLRequest> request_; +}; + +} // namespace + +// Check that the redemption helper sets the Sec-Trust-Token header on the +// outgoing request. +TEST_F(TrustTokenBeginRedemptionPostconditionsTest, SetsHeader) { + std::string attached_header; + EXPECT_TRUE(request_->extra_request_headers().GetHeader( + kTrustTokensSecTrustTokenHeader, &attached_header)); +} + +// Check that the redemption helper sets the LOAD_BYPASS_CACHE flag on the +// outgoing request. +TEST_F(TrustTokenBeginRedemptionPostconditionsTest, SetsLoadFlag) { + EXPECT_TRUE(request_->load_flags() & net::LOAD_BYPASS_CACHE); +} + +// Check that the redemption helper rejects responses lacking the +// Sec-Trust-Token response header. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfResponseOmitsHeader) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce( + Return(std::string("this string contains a redemption request"))); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Verify that the first half of the redemption operation succeeded, as a + // precursor to testing that the second half works, too. + ASSERT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + // Add an empty list of response headers. In particular, this is missing the + // Sec-Trust-Token redemption response header. + auto response_head = mojom::URLResponseHead::New(); + response_head->headers = + net::HttpResponseHeaders::TryToCreate("HTTP/1.1 200 OK\r\n"); + + // As a consequence, |Finalize| should fail. + EXPECT_EQ(helper.Finalize(response_head.get()), + mojom::TrustTokenOperationStatus::kBadResponse); +} + +// Check that the redemption helper handles a redemption response rejected by +// the underlying cryptographic library. +TEST_F(TrustTokenRequestRedemptionHelperTest, RejectsIfResponseIsUnusable) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Configure the cryptographer to reject the response header by returning + // nullopt on ConfirmRedemption. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce( + Return(std::string("this string contains a redemption request"))); + EXPECT_CALL(*cryptographer, ConfirmRedemption(_)) + .WillOnce(Return(base::nullopt)); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Verify that the first half of the redemption operation succeeded, as a + // precursor to testing that the second half works, too. + ASSERT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + auto response_head = mojom::URLResponseHead::New(); + response_head->headers = + net::HttpResponseHeaders::TryToCreate("HTTP/1.1 200 OK\r\n"); + response_head->headers->AddHeader( + base::StringPrintf("%s: %s", kTrustTokensSecTrustTokenHeader, "")); + + // Since the cryptographer rejected the response header by returning nullopt + // on ConfirmRedemption, expect to fail with kBadResponse. + EXPECT_EQ(helper.Finalize(response_head.get()), + mojom::TrustTokenOperationStatus::kBadResponse); + + // Processing the response should have stripped the header. + EXPECT_FALSE( + response_head->headers->HasHeader(kTrustTokensSecTrustTokenHeader)); +} + +// Check that, when preconditions are met and the underlying cryptographic steps +// successfully complete, the begin/finalize methods succeed. +TEST_F(TrustTokenRequestRedemptionHelperTest, Success) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Configure the cryptographer to succeed on both the outbound and inbound + // halves of the operation. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + EXPECT_CALL(*cryptographer, ConfirmRedemption(_)) + .WillOnce(Return("a successfully-extracted SRR")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Since this test is testing the behavior on handling the response after + // successfully constructing a redemption request, sanity check that the setup + // has correctly caused constructing the request so succeed. + ASSERT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + auto response_head = mojom::URLResponseHead::New(); + response_head->headers = + net::HttpResponseHeaders::TryToCreate("HTTP/1.1 200 OK\r\n"); + response_head->headers->AddHeader( + base::StringPrintf("%s: %s", kTrustTokensSecTrustTokenHeader, "")); + + // After a successfully constructed request, when the response is well-formed + // and the delegate accepts the response, Finalize should succeed. + EXPECT_EQ(helper.Finalize(response_head.get()), + mojom::TrustTokenOperationStatus::kOk); + + // Processing the response should have stripped the header. + EXPECT_FALSE( + response_head->headers->HasHeader(kTrustTokensSecTrustTokenHeader)); +} + +// Check that a successful Begin call associates the issuer with the redemption +// toplevel origin. +TEST_F(TrustTokenRequestRedemptionHelperTest, AssociatesIssuerWithToplevel) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Configure the cryptographer to succeed on both the outbound and inbound + // halves of the operation. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Since this test is testing the behavior on handling the response after + // successfully constructing a redemption request, sanity check that the setup + // has correctly caused constructing the request so succeed. + ASSERT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + // After the operation has successfully begun, the issuer and the toplevel + // should be associated. + EXPECT_TRUE( + store->IsAssociated(url::Origin::Create(GURL("https://issuer.com/")), + url::Origin::Create(GURL("https://toplevel.com/")))); +} + +// Check that a successful Begin call stores the batch size obtained from the +// key commitment registry in the trust token store. +TEST_F(TrustTokenRequestRedemptionHelperTest, StoresBatchSize) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->batch_size = 10; + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + // Configure the cryptographer to succeed on the outbound half of the + // operation. + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + // Since this test is testing the behavior on handling the response after + // successfully constructing a redemption request, sanity check that the setup + // has correctly caused constructing the request so succeed. + ASSERT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + // After the operation has successfully begun, the issuer and the toplevel + // should be associated. + EXPECT_EQ(store->BatchSize(url::Origin::Create(GURL("https://issuer.com/"))), + 10); +} + +// Check that a successful Begin call stores the keys obtained from the key +// commitment registry in the trust token store. +TEST_F(TrustTokenRequestRedemptionHelperTest, StoresObtainedKeys) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "key". + // * One token stored corresponding to the key "key" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + TrustTokenKeyCommitment key_commitment; + key_commitment.set_key("key"); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>{key_commitment}); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"key")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back( + TrustTokenKeyCommitmentResult::Key{.body = "key"}); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), std::make_unique<FakeKeyPairGenerator>(), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + // After the operation has successfully begun, the keys from the key + // commitment query should have been stored in the trust token store. + EXPECT_THAT( + store->KeyCommitments(url::Origin::Create(GURL("https://issuer.com/"))), + ElementsAre(Property(&TrustTokenKeyCommitment::key, "key"))); +} + +// Check that a successful end-to-end Begin/Finalize flow stores the obtained +// signed redemption record (and associated key pair) in the trust token store. +TEST_F(TrustTokenRequestRedemptionHelperTest, StoresObtainedRedemptionRecord) { + // Establish the following state: + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + EXPECT_CALL(*cryptographer, ConfirmRedemption(_)) + .WillOnce(Return("a successfully-extracted SRR")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::move(getter), + std::make_unique<MockKeyPairGenerator>("signing key", "verification key"), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + auto response_head = mojom::URLResponseHead::New(); + response_head->headers = + net::HttpResponseHeaders::TryToCreate("HTTP/1.1 200 OK\r\n"); + response_head->headers->AddHeader( + base::StringPrintf("%s: %s", kTrustTokensSecTrustTokenHeader, "")); + EXPECT_EQ(helper.Finalize(response_head.get()), + mojom::TrustTokenOperationStatus::kOk); + + // After the operation has successfully finished, the SRR parsed from the + // server response should be in the store. + EXPECT_THAT( + store->RetrieveNonstaleRedemptionRecord( + url::Origin::Create(GURL("https://issuer.com/")), + url::Origin::Create(GURL("https://toplevel.com/"))), + Optional(AllOf(Property(&SignedTrustTokenRedemptionRecord::body, + "a successfully-extracted SRR"), + Property(&SignedTrustTokenRedemptionRecord::public_key, + "verification key"), + Property(&SignedTrustTokenRedemptionRecord::signing_key, + "signing key")))); +} + +// Check that a "refresh" refresh mode is rejected unless the request's +// initiating origin is the issuer origin. +TEST_F(TrustTokenRequestRedemptionHelperTest, + RejectsRefreshFromNonissuerOrigin) { + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kRefresh, store.get(), + std::make_unique<FixedKeyCommitmentGetter>(), + std::make_unique<FakeKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + // kRefresh should mean that redemption fails on requests with + // non-issuer initiators. + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://not-issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kFailedPrecondition); +} + +// On a redemption operation parameterized by kUseCachedSrr, if there's an SRR +// present in the store for the given issuer-toplevel pair, the request should +// return early with kAlreadyExists. +TEST_F(TrustTokenRequestRedemptionHelperTest, RedemptionRecordCacheHit) { + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetRedemptionRecord(url::Origin::Create(GURL("https://issuer.com")), + url::Origin::Create(GURL("https://toplevel.com")), + SignedTrustTokenRedemptionRecord()); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kUseCached, store.get(), + std::make_unique<FixedKeyCommitmentGetter>(), + std::make_unique<FakeKeyPairGenerator>(), + std::make_unique<MockCryptographer>()); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kAlreadyExists); +} + +// Check that a successful end-to-end Begin/Finalize flow with kRefresh +// overwrites the previously stored signed redemption record (and associated key +// pair) in the trust token store. +TEST_F(TrustTokenRequestRedemptionHelperTest, + SuccessUsingRefreshSrrOverwritesStoredSrr) { + // Establish the following state: + // * A signed redemption record is already stored for the issuer, toplevel + // pair at hand. + // * One key initially added to the token store, so that insertion of tokens + // (which requires existence of a matching key) subsequently succeeds. + // * One key commitment returned from the key commitment registry, with one + // key, with body "". + // * One token stored corresponding to the key "" (this will be the token + // that the redemption request redeems; its key needs to match the key + // commitment's key so that it does not get evicted from storage after the key + // commitment is updated to reflect the key commitment result). + std::unique_ptr<TrustTokenStore> store = TrustTokenStore::CreateInMemory(); + store->SetRedemptionRecord(url::Origin::Create(GURL("https://issuer.com")), + url::Origin::Create(GURL("https://toplevel.com")), + SignedTrustTokenRedemptionRecord()); + store->SetKeyCommitmentsAndPruneStaleState( + url::Origin::Create(GURL("https://issuer.com/")), + std::vector<TrustTokenKeyCommitment>(1)); + ASSERT_TRUE(store->AddTokens(url::Origin::Create(GURL("https://issuer.com/")), + std::vector<std::string>{"a token"}, + /*key=*/"")); + + auto key_commitment_result = + std::make_unique<TrustTokenKeyCommitmentResult>(); + key_commitment_result->keys.push_back(TrustTokenKeyCommitmentResult::Key()); + auto getter = std::make_unique<FixedKeyCommitmentGetter>( + url::Origin::Create(GURL("https://issuer.com")), + std::move(key_commitment_result)); + + auto cryptographer = std::make_unique<MockCryptographer>(); + EXPECT_CALL(*cryptographer, BeginRedemption(_, _, _)) + .WillOnce(Return("well-formed redemption request")); + EXPECT_CALL(*cryptographer, ConfirmRedemption(_)) + .WillOnce(Return("a successfully-extracted SRR")); + + TrustTokenRequestRedemptionHelper helper( + url::Origin::Create(GURL("https://toplevel.com/")), + mojom::TrustTokenRefreshPolicy::kRefresh, store.get(), std::move(getter), + std::make_unique<MockKeyPairGenerator>("signing key", "verification key"), + std::move(cryptographer)); + + auto request = MakeURLRequest("https://issuer.com/"); + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + // Set the initiator in order to be able to use refresh mode + // kRefresh. + request->set_initiator(url::Origin::Create(GURL("https://issuer.com/"))); + + mojom::TrustTokenOperationStatus result = + ExecuteBeginOperationAndWaitForResult(&helper, request.get()); + EXPECT_EQ(result, mojom::TrustTokenOperationStatus::kOk); + + auto response_head = mojom::URLResponseHead::New(); + response_head->headers = + net::HttpResponseHeaders::TryToCreate("HTTP/1.1 200 OK\r\n"); + response_head->headers->AddHeader( + base::StringPrintf("%s: %s", kTrustTokensSecTrustTokenHeader, "")); + EXPECT_EQ(helper.Finalize(response_head.get()), + mojom::TrustTokenOperationStatus::kOk); + + // After the operation has successfully finished, the SRR parsed from the + // server response should be in the store. + EXPECT_THAT( + store->RetrieveNonstaleRedemptionRecord( + url::Origin::Create(GURL("https://issuer.com/")), + url::Origin::Create(GURL("https://toplevel.com/"))), + Optional(AllOf(Property(&SignedTrustTokenRedemptionRecord::body, + "a successfully-extracted SRR"), + Property(&SignedTrustTokenRedemptionRecord::public_key, + "verification key"), + Property(&SignedTrustTokenRedemptionRecord::signing_key, + "signing key")))); +} + +} // namespace network
diff --git a/services/network/trust_tokens/trust_token_request_signing_helper_unittest.cc b/services/network/trust_tokens/trust_token_request_signing_helper_unittest.cc index 193b362..2f889602 100644 --- a/services/network/trust_tokens/trust_token_request_signing_helper_unittest.cc +++ b/services/network/trust_tokens/trust_token_request_signing_helper_unittest.cc
@@ -28,9 +28,9 @@ #include "net/url_request/url_request_test_util.h" #include "services/network/public/mojom/trust_tokens.mojom-shared.h" #include "services/network/trust_tokens/proto/public.pb.h" +#include "services/network/trust_tokens/test/trust_token_test_util.h" #include "services/network/trust_tokens/trust_token_request_canonicalizer.h" #include "services/network/trust_tokens/trust_token_store.h" -#include "services/network/trust_tokens/trust_token_test_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc index 1ae9b072..6e183abf 100644 --- a/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc +++ b/services/service_manager/sandbox/linux/bpf_soda_policy_linux.cc
@@ -25,6 +25,14 @@ case __NR_eventfd2: return Allow(); #endif +#if defined(__NR_getdents64) + case __NR_getdents64: + return Allow(); +#endif +#if defined(__NR_getdents) + case __NR_getdents: + return Allow(); +#endif default: auto* broker_process = SandboxLinux::GetInstance()->broker_process(); if (broker_process->IsSyscallAllowed(system_call_number))
diff --git a/services/tracing/perfetto/perfetto_integration_unittest.cc b/services/tracing/perfetto/perfetto_integration_unittest.cc index 65a4a79..b5e5f40 100644 --- a/services/tracing/perfetto/perfetto_integration_unittest.cc +++ b/services/tracing/perfetto/perfetto_integration_unittest.cc
@@ -57,16 +57,15 @@ }; TEST_F(PerfettoIntegrationTest, ProducerDatasourceInitialized) { - auto dummy_client = std::make_unique<MockProducerClient>(); + std::unique_ptr<MockProducerClient::Handle> dummy_client = + MockProducerClient::Create(); base::RunLoop producer_initialized_runloop; auto new_producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - dummy_client.get(), producer_initialized_runloop.QuitClosure()); + **dummy_client, producer_initialized_runloop.QuitClosure()); producer_initialized_runloop.Run(); - - ProducerClient::DeleteSoonForTesting(std::move(dummy_client)); } TEST_F(PerfettoIntegrationTest, ClientEnabledAndDisabled) { @@ -80,13 +79,14 @@ base::RunLoop client_enabled_callback; base::RunLoop client_disabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), - client_disabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), + client_disabled_callback.QuitClosure()); auto producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client.get()); + **client); client_enabled_callback.Run(); @@ -98,8 +98,6 @@ on_trace_packets.Run(); EXPECT_EQ(0u, consumer.received_test_packets()); - - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, PacketsEndToEndProducerFirst) { @@ -108,13 +106,14 @@ base::RunLoop client_enabled_callback; base::RunLoop client_disabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), - client_disabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), + client_disabled_callback.QuitClosure()); auto producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client.get()); + **client); base::RunLoop no_more_packets_runloop; MockConsumer consumer({kPerfettoTestDataSourceName}, @@ -135,8 +134,6 @@ no_more_packets_runloop.Run(); EXPECT_EQ(kNumPackets, consumer.received_test_packets()); - - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, PacketsEndToEndConsumerFirst) { @@ -153,12 +150,13 @@ }); base::RunLoop client_enabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client_enabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 1, client_enabled_callback.QuitClosure()); auto new_producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client.get()); + **client); client_enabled_callback.Run(); @@ -169,7 +167,6 @@ no_more_packets_runloop.Run(); EXPECT_EQ(kNumPackets, consumer.received_test_packets()); - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, CommitDataRequestIsMaybeComplete) { @@ -186,11 +183,12 @@ }); base::RunLoop client_enabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client_enabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 1, client_enabled_callback.QuitClosure()); auto new_producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client.get()); + **client); client_enabled_callback.Run(); @@ -212,7 +210,7 @@ // {cli,host}_reqs are a std::vector<std::string>. Each entry of the vector // is a proto-serialized CommitDataRequest. - const auto& cli_reqs = client->all_client_commit_data_requests(); + const auto& cli_reqs = (*client)->all_client_commit_data_requests(); const auto& host_reqs = new_producer->all_host_commit_data_requests(); ASSERT_EQ(cli_reqs.size(), host_reqs.size()); for (size_t i = 0; i < cli_reqs.size(); i++) { @@ -228,8 +226,6 @@ ASSERT_TRUE(host_req.ParseFromString(cli_reqs[i])); ASSERT_EQ(cli_req.SerializeAsString(), host_req.SerializeAsString()); } - - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, TracingRestarted) { @@ -247,20 +243,21 @@ base::RunLoop client_enabled_callback; base::RunLoop client_disabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), - client_disabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 1, client_enabled_callback.QuitClosure(), + client_disabled_callback.QuitClosure()); auto new_producer = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client.get()); + **client); client_enabled_callback.Run(); RunUntilIdle(); perfetto::SharedMemory* first_session_shm = - client->shared_memory_for_testing(); + (*client)->shared_memory_for_testing(); consumer.StopTracing(); client_disabled_callback.Run(); @@ -270,7 +267,7 @@ consumer.FreeBuffers(); base::RunLoop client_reenabled_callback; - client->SetAgentEnabledCallback(client_reenabled_callback.QuitClosure()); + (*client)->SetAgentEnabledCallback(client_reenabled_callback.QuitClosure()); consumer.StartTracing(); client_reenabled_callback.Run(); @@ -278,17 +275,15 @@ RunUntilIdle(); // We should still be using the same shared memory. - EXPECT_EQ(first_session_shm, client->shared_memory_for_testing()); + EXPECT_EQ(first_session_shm, (*client)->shared_memory_for_testing()); base::RunLoop client_redisabled_callback; - client->SetAgentDisabledCallback(client_redisabled_callback.QuitClosure()); + (*client)->SetAgentDisabledCallback(client_redisabled_callback.QuitClosure()); consumer.StopTracing(); client_redisabled_callback.Run(); EXPECT_EQ(kNumPackets * 2, consumer.received_test_packets()); - - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, NoPacketsReceivedOnWrongSourceName) { @@ -297,14 +292,14 @@ base::RunLoop client_enabled_callback; base::RunLoop client_disabled_callback; - auto client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 0, client_enabled_callback.QuitClosure(), - client_disabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client = + MockProducerClient::Create( + /* num_data_sources = */ 0, client_enabled_callback.QuitClosure(), + client_disabled_callback.QuitClosure()); base::RunLoop producer_initialized_runloop; auto new_producer = std::make_unique<MockProducerHost>( - kPerfettoProducerName, "fake_data_source", perfetto_service(), - client.get()); + kPerfettoProducerName, "fake_data_source", perfetto_service(), **client); base::RunLoop no_more_packets_runloop; MockConsumer consumer({"fake_data_source"}, perfetto_service()->GetService(), @@ -321,18 +316,18 @@ no_more_packets_runloop.Run(); EXPECT_EQ(0u, consumer.received_test_packets()); - ProducerClient::DeleteSoonForTesting(std::move(client)); } TEST_F(PerfettoIntegrationTest, MAYBE_DifferentSharedMemoryBuffersForDifferentAgents) { base::RunLoop client1_enabled_callback; base::RunLoop client2_enabled_callback; - auto client1 = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client1_enabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client1 = + MockProducerClient::Create( + /* num_data_sources = */ 1, client1_enabled_callback.QuitClosure()); auto producer1 = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client1.get()); + **client1); // Start the trace here, this is because we need to send the EnableTracing // call to client1, but constructing client2 will override the @@ -348,22 +343,20 @@ // null. data_source_->SetSystemProducerToNullptr(); - auto client2 = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, client2_enabled_callback.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> client2 = + MockProducerClient::Create( + /* num_data_sources = */ 1, client2_enabled_callback.QuitClosure()); auto producer2 = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, perfetto_service(), - client2.get()); + **client2); client2_enabled_callback.Run(); - EXPECT_TRUE(client1->shared_memory_for_testing()); - EXPECT_TRUE(client2->shared_memory_for_testing()); - EXPECT_NE(client1->shared_memory_for_testing(), - client2->shared_memory_for_testing()); - - ProducerClient::DeleteSoonForTesting(std::move(client1)); - ProducerClient::DeleteSoonForTesting(std::move(client2)); + EXPECT_TRUE((*client1)->shared_memory_for_testing()); + EXPECT_TRUE((*client2)->shared_memory_for_testing()); + EXPECT_NE((*client1)->shared_memory_for_testing(), + (*client2)->shared_memory_for_testing()); } } // namespace
diff --git a/services/tracing/perfetto/system_perfetto_unittest.cc b/services/tracing/perfetto/system_perfetto_unittest.cc index 65c94909..6153647b 100644 --- a/services/tracing/perfetto/system_perfetto_unittest.cc +++ b/services/tracing/perfetto/system_perfetto_unittest.cc
@@ -56,11 +56,15 @@ class SaveSystemProducerAndScopedRestore { public: - SaveSystemProducerAndScopedRestore() - : saved_producer_( - PerfettoTracedProcess::Get()->SetSystemProducerForTesting( - std::make_unique<DummyProducer>( - PerfettoTracedProcess::GetTaskRunner()))) {} + SaveSystemProducerAndScopedRestore() { + PerfettoTracedProcess::GetTaskRunner()->GetOrCreateTaskRunner()->PostTask( + FROM_HERE, base::BindLambdaForTesting([this] { + saved_producer_ = + PerfettoTracedProcess::Get()->SetSystemProducerForTesting( + std::make_unique<DummyProducer>( + PerfettoTracedProcess::GetTaskRunner())); + })); + } ~SaveSystemProducerAndScopedRestore() { base::RunLoop destroy; @@ -301,10 +305,11 @@ base::RunLoop local_data_source_enabled_runloop; base::RunLoop local_data_source_disabled_runloop; base::RunLoop local_no_more_packets_runloop; - auto local_producer_client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 3, - local_data_source_enabled_runloop.QuitClosure(), - local_data_source_disabled_runloop.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> local_producer_client = + MockProducerClient::Create( + /* num_data_sources = */ 3, + local_data_source_enabled_runloop.QuitClosure(), + local_data_source_disabled_runloop.QuitClosure()); MockConsumer local_consumer( {kPerfettoTestDataSourceName, base::StrCat({kPerfettoTestDataSourceName, "1"}), @@ -317,7 +322,7 @@ }); auto local_producer_host = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, local_service(), - local_producer_client.get()); + **local_producer_client); system_consumer.WaitForAllDataSourcesStopped(); system_data_source_disabled_runloop.Run(); @@ -367,7 +372,6 @@ EXPECT_EQ(1u + 3u + 7u, local_consumer.received_test_packets()); EXPECT_EQ(2u, system_consumer.received_test_packets()); - PerfettoProducer::DeleteSoonForTesting(std::move(local_producer_client)); PerfettoProducer::DeleteSoonForTesting(std::move(system_producer)); } @@ -386,13 +390,14 @@ // Now start the local trace and wait for the system trace to stop first. base::RunLoop local_data_source_enabled_runloop; base::RunLoop local_data_source_disabled_runloop; - auto local_producer_client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 1, - local_data_source_enabled_runloop.QuitClosure(), - local_data_source_disabled_runloop.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> local_producer_client = + MockProducerClient::Create( + /* num_data_sources = */ 1, + local_data_source_enabled_runloop.QuitClosure(), + local_data_source_disabled_runloop.QuitClosure()); auto local_producer_host = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, local_service(), - local_producer_client.get()); + **local_producer_client); local_data_source_enabled_runloop.Run(); local_consumer->WaitForAllDataSourcesStarted(); @@ -461,10 +466,12 @@ // for the system producer. base::RunLoop local_data_source_reenabled_runloop; base::RunLoop local_data_source_redisabled_runloop; - local_producer_client->SetAgentEnabledCallback( - local_data_source_reenabled_runloop.QuitClosure()); - local_producer_client->SetAgentDisabledCallback( - local_data_source_redisabled_runloop.QuitClosure()); + (*local_producer_client) + ->SetAgentEnabledCallback( + local_data_source_reenabled_runloop.QuitClosure()); + (*local_producer_client) + ->SetAgentDisabledCallback( + local_data_source_redisabled_runloop.QuitClosure()); local_consumer->FreeBuffers(); local_consumer->StartTracing(); @@ -481,7 +488,6 @@ EXPECT_EQ(14u, local_consumer->received_test_packets()); EXPECT_EQ(1u + 3u + 7u, system_consumer.received_test_packets()); - PerfettoProducer::DeleteSoonForTesting(std::move(local_producer_client)); PerfettoProducer::DeleteSoonForTesting(std::move(system_producer)); } @@ -515,13 +521,14 @@ base::RunLoop local_data_source_enabled_runloop; base::RunLoop local_data_source_disabled_runloop; base::RunLoop local_no_more_packets_runloop; - auto local_producer_client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 3, - local_data_source_enabled_runloop.QuitClosure(), - local_data_source_disabled_runloop.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> local_producer_client = + MockProducerClient::Create( + /* num_data_sources = */ 3, + local_data_source_enabled_runloop.QuitClosure(), + local_data_source_disabled_runloop.QuitClosure()); auto local_producer_host = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, local_service(), - local_producer_client.get()); + **local_producer_client); MockConsumer local_consumer( {kPerfettoTestDataSourceName, base::StrCat({kPerfettoTestDataSourceName, "1"}), @@ -590,7 +597,6 @@ EXPECT_EQ(1u + 3u + 7u, local_consumer.received_test_packets()); EXPECT_EQ((1u + 3u + 7u) * 2, system_consumer.received_test_packets()); - PerfettoProducer::DeleteSoonForTesting(std::move(local_producer_client)); PerfettoProducer::DeleteSoonForTesting(std::move(system_producer)); } @@ -610,13 +616,14 @@ base::RunLoop local_data_source_enabled_runloop; base::RunLoop local_data_source_disabled_runloop; base::RunLoop local_no_more_packets_runloop; - auto local_producer_client = std::make_unique<MockProducerClient>( - /* num_data_sources = */ 3, - local_data_source_enabled_runloop.QuitClosure(), - local_data_source_disabled_runloop.QuitClosure()); + std::unique_ptr<MockProducerClient::Handle> local_producer_client = + MockProducerClient::Create( + /* num_data_sources = */ 3, + local_data_source_enabled_runloop.QuitClosure(), + local_data_source_disabled_runloop.QuitClosure()); auto local_producer_host = std::make_unique<MockProducerHost>( kPerfettoProducerName, kPerfettoTestDataSourceName, local_service(), - local_producer_client.get()); + **local_producer_client); MockConsumer local_consumer( {kPerfettoTestDataSourceName, base::StrCat({kPerfettoTestDataSourceName, "1"}), @@ -695,7 +702,6 @@ EXPECT_EQ(1u + 3u + 7u, local_consumer.received_test_packets()); EXPECT_EQ(1u + 3u + 7u, system_consumer.received_test_packets()); - PerfettoProducer::DeleteSoonForTesting(std::move(local_producer_client)); PerfettoProducer::DeleteSoonForTesting(std::move(system_producer)); } @@ -715,13 +721,13 @@ // Create local producer. base::RunLoop local_data_source_enabled_runloop; base::RunLoop local_data_source_disabled_runloop; - auto local_producer = std::make_unique<MockProducerClient>( + auto local_producer = MockProducerClient::Create( /* num_data_sources = */ 1, local_data_source_enabled_runloop.QuitClosure(), local_data_source_disabled_runloop.QuitClosure()); // Setup startup tracing for local producer. - CHECK(local_producer->SetupStartupTracing()); + CHECK((*local_producer)->SetupStartupTracing()); // Attempt to start a system tracing session. Because startup tracing is // already active, the system producer shouldn't activate yet. @@ -754,7 +760,7 @@ })); auto local_producer_host = std::make_unique<MockProducerHost>( kPerfettoProducerName, mojom::kTraceEventDataSourceName, local_service(), - local_producer.get()); + **local_producer); local_data_source_enabled_runloop.Run(); local_consumer->WaitForAllDataSourcesStarted(); @@ -797,7 +803,6 @@ // Local consumer should have received 1 packet from the |data_sources_[0]|. EXPECT_EQ(1u, system_consumer.received_test_packets()); - PerfettoProducer::DeleteSoonForTesting(std::move(local_producer)); PerfettoProducer::DeleteSoonForTesting(std::move(system_producer)); }
diff --git a/services/tracing/perfetto/test_utils.cc b/services/tracing/perfetto/test_utils.cc index 10a952c..a8366d5 100644 --- a/services/tracing/perfetto/test_utils.cc +++ b/services/tracing/perfetto/test_utils.cc
@@ -104,24 +104,53 @@ num_data_sources_expected_(num_data_sources), client_enabled_callback_(std::move(client_enabled_callback)), client_disabled_callback_(std::move(client_disabled_callback)) { - // We want to set the ProducerClient to this mock, but that 'requires' passing - // ownership of ourselves to PerfettoTracedProcess. Since someone else manages - // our deletion we need to be careful in the deconstructor to not double free - // ourselves. - std::unique_ptr<MockProducerClient> client; - client.reset(this); - old_producer_ = PerfettoTracedProcess::Get()->SetProducerClientForTesting( - std::move(client)); - // Create SMB immediately since we never call ProducerClient's Connect(). CHECK(InitSharedMemoryIfNeeded()); } -MockProducerClient::~MockProducerClient() { - // See comment in the constructor. This prevents a double free. - auto client = PerfettoTracedProcess::Get()->SetProducerClientForTesting( - std::move(old_producer_)); - client.release(); +MockProducerClient::~MockProducerClient() = default; + +// static +std::unique_ptr<MockProducerClient::Handle> MockProducerClient::Create( + uint32_t num_data_sources, + base::OnceClosure client_enabled_callback, + base::OnceClosure client_disabled_callback) { + std::unique_ptr<MockProducerClient> client(new MockProducerClient( + num_data_sources, std::move(client_enabled_callback), + std::move(client_disabled_callback))); + auto handle = std::make_unique<Handle>(client.get()); + + // Transfer ownership of the client to PerfettoTracedProcess. + PerfettoTracedProcess::Get() + ->GetTaskRunner() + ->GetOrCreateTaskRunner() + ->PostTask( + FROM_HERE, + base::BindOnce( + [](std::unique_ptr<MockProducerClient> client) { + auto* raw_client = client.get(); + raw_client->old_producer_ = + PerfettoTracedProcess::Get()->SetProducerClientForTesting( + std::move(client)); + }, + std::move(client))); + return handle; +} + +MockProducerClient::Handle::~Handle() { + // Replace the previous client in PerfettoTracedProcess, deleting the mock + // as a side-effect. + PerfettoTracedProcess::Get() + ->GetTaskRunner() + ->GetOrCreateTaskRunner() + ->PostTask( + FROM_HERE, + base::BindOnce( + [](std::unique_ptr<ProducerClient> old_producer) { + PerfettoTracedProcess::Get()->SetProducerClientForTesting( + std::move(old_producer)); + }, + std::move(client_->old_producer_))); } void MockProducerClient::SetupDataSource(const std::string& data_source_name) {} @@ -369,19 +398,17 @@ // from the real client to the mock, however this is done on a different // sequence and thus we have a race. By setting the pointer before we // construct the data source the TestDataSource can not race. - producer_client_ = std::make_unique<MockProducerClient>( + producer_client_ = MockProducerClient::Create( /* num_data_sources = */ 1, std::move(on_tracing_started)); data_source_ = TestDataSource::CreateAndRegisterDataSource(data_source_name, num_packets); producer_host_ = std::make_unique<MockProducerHost>( - producer_name, data_source_name, service, producer_client_.get(), + producer_name, data_source_name, service, **producer_client_, std::move(on_datasource_registered)); } -MockProducer::~MockProducer() { - ProducerClient::DeleteSoonForTesting(std::move(producer_client_)); -} +MockProducer::~MockProducer() = default; void MockProducer::WritePacketBigly(base::OnceClosure on_write_complete) { PerfettoTracedProcess::Get()
diff --git a/services/tracing/perfetto/test_utils.h b/services/tracing/perfetto/test_utils.h index 3762f95..c33d41c7 100644 --- a/services/tracing/perfetto/test_utils.h +++ b/services/tracing/perfetto/test_utils.h
@@ -63,13 +63,28 @@ base::OnceClosure start_tracing_callback_ = base::OnceClosure(); }; +// This class is owned by PerfettoTracedProcess, and its lifetime is indirectly +// controlled by the handle returned from Create(). class MockProducerClient : public ProducerClient { public: - MockProducerClient( + class Handle { + public: + explicit Handle(MockProducerClient* client) : client_(client) {} + ~Handle(); + + MockProducerClient* operator->() { return client_; } + MockProducerClient* operator*() { return client_; } + + private: + MockProducerClient* const client_; + }; + + ~MockProducerClient() override; + + static std::unique_ptr<Handle> Create( uint32_t num_data_sources = 0, base::OnceClosure client_enabled_callback = base::OnceClosure(), base::OnceClosure client_disabled_callback = base::OnceClosure()); - ~MockProducerClient() override; void SetupDataSource(const std::string& data_source_name); @@ -91,6 +106,10 @@ } private: + MockProducerClient(uint32_t num_data_sources, + base::OnceClosure client_enabled_callback, + base::OnceClosure client_disabled_callback); + uint32_t num_data_sources_active_ = 0; uint32_t num_data_sources_expected_; base::OnceClosure client_enabled_callback_; @@ -197,13 +216,13 @@ void WritePacketBigly(base::OnceClosure on_write_complete); - MockProducerClient* producer_client() { return producer_client_.get(); } + MockProducerClient* producer_client() { return **producer_client_; } TestDataSource* data_source() { return data_source_.get(); } private: std::unique_ptr<TestDataSource> data_source_; - std::unique_ptr<MockProducerClient> producer_client_; + std::unique_ptr<MockProducerClient::Handle> producer_client_; std::unique_ptr<MockProducerHost> producer_host_; };
diff --git a/services/tracing/public/cpp/perfetto/perfetto_traced_process.cc b/services/tracing/public/cpp/perfetto/perfetto_traced_process.cc index a8047b2..96163e00 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_traced_process.cc +++ b/services/tracing/public/cpp/perfetto/perfetto_traced_process.cc
@@ -102,6 +102,7 @@ std::unique_ptr<ProducerClient> PerfettoTracedProcess::SetProducerClientForTesting( std::unique_ptr<ProducerClient> client) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto old_producer_client_for_testing = std::move(producer_client_); producer_client_ = std::move(client); return old_producer_client_for_testing; @@ -110,6 +111,7 @@ std::unique_ptr<SystemProducer> PerfettoTracedProcess::SetSystemProducerForTesting( std::unique_ptr<SystemProducer> producer) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto old_for_testing = std::move(system_producer_); system_producer_ = std::move(producer); return old_for_testing;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 66b4b03c..f5ccdaaa 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -218,6 +218,10 @@ #define SK_SUPPORT_LEGACY_AAA_CHOICE #endif +#ifndef SK_USE_LEGACY_SRGB_COLOR_FILTER +#define SK_USE_LEGACY_SRGB_COLOR_FILTER +#endif + // We're turning this off indefinitely, // until we can figure out some fundamental problems with its approach. //
diff --git a/testing/OWNERS b/testing/OWNERS index ef3ee98f..44ab56f 100644 --- a/testing/OWNERS +++ b/testing/OWNERS
@@ -1,4 +1,3 @@ -crouleau@chromium.org dpranke@chromium.org jbudorick@chromium.org johnchen@chromium.org
diff --git a/testing/buildbot/OWNERS b/testing/buildbot/OWNERS index 74ea8134..54a715d 100644 --- a/testing/buildbot/OWNERS +++ b/testing/buildbot/OWNERS
@@ -9,7 +9,7 @@ machenbach@chromium.org sky@chromium.org -per-file *chromium.perf*.json=crouleau@chromium.org +per-file *chromium.perf*.json=johnchen@chromium.org per-file *chromium.perf*.json=wenbinzhang@google.com per-file *chromium.perf*.json=hypan@google.com per-file chromium.webrtc.json=mbonadei@chromium.org
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 6d010c8..4b3356fc 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -21508,6 +21508,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -21521,6 +21523,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21539,7 +21549,7 @@ "os": "Android" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk", @@ -21889,6 +21899,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -21902,6 +21914,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21929,7 +21949,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk", @@ -37649,6 +37669,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -37662,6 +37684,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37690,7 +37720,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk",
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json index a544b6ad..e5a80c6 100644 --- a/testing/buildbot/chromium.ci.json +++ b/testing/buildbot/chromium.ci.json
@@ -24682,6 +24682,70 @@ "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_target": "//:blink_web_tests" + }, + { + "args": [ + "hardware_accelerated_feature", + "--show-stdout", + "--browser=web-engine-shell", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=aemu" + ], + "isolate_name": "fuchsia_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, + "dimension_sets": [ + { + "kvm": "1", + "os": "Ubuntu-16.04" + } + ], + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//content/test:fuchsia_telemetry_gpu_integration_test" + }, + { + "args": [ + "info_collection", + "--show-stdout", + "--browser=web-engine-shell", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--expected-vendor-id", + "0", + "--expected-device-id", + "0", + "--device=aemu" + ], + "isolate_name": "fuchsia_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, + "dimension_sets": [ + { + "kvm": "1", + "os": "Ubuntu-16.04" + } + ], + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//content/test:fuchsia_telemetry_gpu_integration_test" } ] }, @@ -87563,6 +87627,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -87576,6 +87642,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -87594,7 +87668,7 @@ "os": "Android" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk", @@ -90300,6 +90374,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -90313,6 +90389,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -90340,7 +90424,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk", @@ -136211,14 +136295,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "context_lost_tests", + "name": "gl_renderer_context_lost_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -136241,14 +136325,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "depth_capture_tests", + "name": "gl_renderer_depth_capture_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -136271,14 +136355,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "gpu_process_launch_tests", + "name": "gl_renderer_gpu_process_launch_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -136301,14 +136385,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "hardware_accelerated_feature_tests", + "name": "gl_renderer_hardware_accelerated_feature_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -136331,7 +136415,7 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", "--dont-restore-color-profile-after-test", "--build-revision", "${got_revision}", @@ -136343,7 +136427,50 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "maps_pixel_test", + "name": "gl_renderer_maps_pixel_tests", + "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": "nvidia-quadro-p400-win10-stable", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "idempotent": false, + "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" + } + }, + { + "args": [ + "pixel", + "--show-stdout", + "--browser=release_x64", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", + "--dont-restore-color-profile-after-test", + "--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": "gl_renderer_pixel_skia_gold_tests", "precommit_args": [ "--review-patch-issue", "${patch_issue}", @@ -136374,7 +136501,7 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", "--dont-restore-color-profile-after-test" ], "isolate_name": "telemetry_gpu_integration_test", @@ -136382,7 +136509,7 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "screenshot_sync_tests", + "name": "gl_renderer_screenshot_sync_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -136440,49 +136567,6 @@ "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_target": "//:blink_web_tests" - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release_x64", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", - "--dont-restore-color-profile-after-test", - "--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": "skia_renderer_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": "nvidia-quadro-p400-win10-stable", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "idempotent": false, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - } } ] }, @@ -184850,6 +184934,8 @@ "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json", "--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", + "--git-revision", + "${got_revision}", "--gs-results-bucket=chromium-result-details", "--recover-devices" ], @@ -184863,6 +184949,14 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-ddview", + "precommit_args": [ + "--gerrit-issue", + "${patch_issue}", + "--gerrit-patchset", + "${patch_set}", + "--buildbucket-id", + "${buildbucket_build_id}" + ], "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -184891,7 +184985,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", "shards": 2 }, "test": "chrome_public_test_vr_apk", @@ -206247,6 +206341,5415 @@ } ] }, + "ios13-sdk-device": { + "additional_compile_targets": [ + "all" + ] + }, + "ios13-sdk-simulator": { + "additional_compile_targets": [ + "all" + ], + "isolated_scripts": [ + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_crypto_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_crypto_tests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_crypto_tests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_crypto_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_crypto_tests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_crypto_tests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_ssl_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_ssl_tests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_ssl_tests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_ssl_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_ssl_tests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_ssl_tests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "crypto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "crypto_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//crypto:crypto_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "crypto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "crypto_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//crypto:crypto_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "google_apis_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "google_apis_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//google_apis:google_apis_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "google_apis_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "google_apis_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//google_apis:google_apis_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_smoke_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_smoke_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_smoke_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_smoke_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_components_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/components:ios_components_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_components_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/components:ios_components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_net_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/net:ios_net_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_net_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/net:ios_net_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_remoting_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_remoting_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//remoting/ios:ios_remoting_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_remoting_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_remoting_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//remoting/ios:ios_remoting_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_testing_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_testing_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/testing:ios_testing_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_testing_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_testing_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/testing:ios_testing_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "net_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//net:net_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "net_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//net:net_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//services:services_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//services:services_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "sql_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "sql_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//sql:sql_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "sql_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "sql_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//sql:sql_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "url_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "url_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//url:url_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "url_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "url_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//url:url_unittests" + } + ] + }, "linux-annotator-rel": { "scripts": [ {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 4898e37..d14e0bab 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -24296,6 +24296,5415 @@ } ] }, + "ios13-sdk-device": { + "additional_compile_targets": [ + "all" + ] + }, + "ios13-sdk-simulator": { + "additional_compile_targets": [ + "all" + ], + "isolated_scripts": [ + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "base_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//base:base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_crypto_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_crypto_tests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_crypto_tests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_crypto_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_crypto_tests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_crypto_tests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_ssl_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_ssl_tests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_ssl_tests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "boringssl_ssl_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "boringssl_ssl_tests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//third_party/boringssl:boringssl_ssl_tests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "components_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//components:components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "crypto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "crypto_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//crypto:crypto_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "crypto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "crypto_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//crypto:crypto_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "gfx_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gfx_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/gfx:gfx_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "google_apis_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "google_apis_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//google_apis:google_apis_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "google_apis_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "google_apis_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//google_apis:google_apis_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_bookmarks_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_bookmarks_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_bookmarks_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_bookmarks_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_integration_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_integration_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_integration_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_integration_egtests" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_reading_list_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_reading_list_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_reading_list_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_settings_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_settings_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_settings_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_settings_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_signin_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_signin_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_signin_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_signin_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_smoke_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_smoke_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_smoke_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_smoke_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_smoke_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_translate_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_translate_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_translate_egtests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_ui_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_ui_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_ui_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 5 + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_ui_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test:ios_chrome_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey2:ios_chrome_web_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_chrome_web_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_chrome_web_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/chrome/test/earl_grey:ios_chrome_web_egtests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_components_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/components:ios_components_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_components_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_components_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/components:ios_components_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_net_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/net:ios_net_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_net_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/net:ios_net_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_remoting_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_remoting_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//remoting/ios:ios_remoting_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_remoting_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_remoting_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//remoting/ios:ios_remoting_unittests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air (3rd generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPad Air (3rd generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone 7", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone 7 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_showcase_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_showcase_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/showcase:ios_showcase_egtests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_testing_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_testing_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/testing:ios_testing_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_testing_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_testing_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/testing:ios_testing_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_inttests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_inttests" + }, + { + "args": [ + "--platform", + "iPad (6th generation)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_eg2tests_module_iPad (6th generation) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_eg2tests_module", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_eg2tests_module_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_eg2tests_module" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPad Air 2 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch)", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPad Pro (12.9-inch) 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_shell_egtests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_shell_egtests_iPhone X 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web/shell/test:ios_web_shell_egtests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web:ios_web_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_inttests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_inttests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_inttests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ios_web_view_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ios_web_view_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ios/web_view:ios_web_view_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "net_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//net:net_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "net_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "net_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//net:net_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//services:services_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//services:services_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "skia_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "skia_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//skia:skia_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "sql_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "sql_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//sql:sql_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "sql_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "sql_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//sql:sql_unittests" + }, + { + "args": [ + "--platform", + "iPad Air 2", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPad Air 2 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s Plus 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s Plus", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone 6s Plus 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "ui_base_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ui_base_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//ui/base:ui_base_unittests" + }, + { + "args": [ + "--platform", + "iPhone 6s", + "--version", + "13.3", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "url_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "url_unittests_iPhone 6s 13.3", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//url:url_unittests" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "12.4", + "--out-dir", + "${ISOLATED_OUTDIR}" + ], + "isolate_name": "url_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "url_unittests_iPhone X 12.4", + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a" + } + ], + "dimension_sets": [ + { + "os": "Mac-10.14.6" + } + ], + "named_caches": [ + { + "name": "xcode_ios_11c29", + "path": "Xcode.app" + } + ], + "service_account": "ios-isolated-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//url:url_unittests" + } + ] + }, "linux-annotator-rel": { "scripts": [ {
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index f61b0e0..644a9a3 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -25514,14 +25514,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "context_lost_tests", + "name": "gl_renderer_context_lost_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -25544,14 +25544,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "depth_capture_tests", + "name": "gl_renderer_depth_capture_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -25574,14 +25574,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "gpu_process_launch_tests", + "name": "gl_renderer_gpu_process_launch_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -25604,14 +25604,14 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "hardware_accelerated_feature_tests", + "name": "gl_renderer_hardware_accelerated_feature_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -25634,7 +25634,7 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", "--dont-restore-color-profile-after-test", "--build-revision", "${got_revision}", @@ -25646,7 +25646,50 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "maps_pixel_test", + "name": "gl_renderer_maps_pixel_tests", + "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": "nvidia-quadro-p400-win10-stable", + "os": "Windows-10", + "pool": "chromium.tests.gpu.template" + } + ], + "idempotent": false, + "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" + } + }, + { + "args": [ + "pixel", + "--show-stdout", + "--browser=release_x64", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", + "--dont-restore-color-profile-after-test", + "--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": "gl_renderer_pixel_skia_gold_tests", "precommit_args": [ "--review-patch-issue", "${patch_issue}", @@ -25677,7 +25720,7 @@ "--browser=release_x64", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --disable-features=UseSkiaRenderer", "--dont-restore-color-profile-after-test" ], "isolate_name": "telemetry_gpu_integration_test", @@ -25685,7 +25728,7 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, - "name": "screenshot_sync_tests", + "name": "gl_renderer_screenshot_sync_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -25743,49 +25786,6 @@ "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_target": "//:blink_web_tests" - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release_x64", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --enable-features=UseSkiaRenderer", - "--dont-restore-color-profile-after-test", - "--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": "skia_renderer_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": "nvidia-quadro-p400-win10-stable", - "os": "Windows-10", - "pool": "chromium.tests.gpu.template" - } - ], - "idempotent": false, - "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com" - } } ] },
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 2b2921b3..8433e63 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -2585,6 +2585,70 @@ "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test_target": "//:blink_web_tests" + }, + { + "args": [ + "hardware_accelerated_feature", + "--show-stdout", + "--browser=web-engine-shell", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=aemu" + ], + "isolate_name": "fuchsia_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, + "dimension_sets": [ + { + "kvm": "1", + "os": "Ubuntu-16.04" + } + ], + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//content/test:fuchsia_telemetry_gpu_integration_test" + }, + { + "args": [ + "info_collection", + "--show-stdout", + "--browser=web-engine-shell", + "--passthrough", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--expected-vendor-id", + "0", + "--expected-device-id", + "0", + "--device=aemu" + ], + "isolate_name": "fuchsia_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, + "dimension_sets": [ + { + "kvm": "1", + "os": "Ubuntu-16.04" + } + ], + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_target": "//content/test:fuchsia_telemetry_gpu_integration_test" } ] },
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 15b2969..2b5a9ae 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -395,6 +395,31 @@ "io_timeout": 21600, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" } + }, + { + "args": [], + "isolate_name": "resource_sizes_trichrome_google", + "merge": { + "script": "//tools/perf/process_perf_results.py" + }, + "name": "resource_sizes_trichrome_google", + "override_compile_targets": [ + "resource_sizes_trichrome_google" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04", + "pool": "chrome.tests" + } + ], + "expiration": 7200, + "hard_timeout": 21600, + "ignore_task_failure": false, + "io_timeout": 21600, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + } } ] }, @@ -811,6 +836,31 @@ "io_timeout": 21600, "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" } + }, + { + "args": [], + "isolate_name": "resource_sizes_trichrome_google", + "merge": { + "script": "//tools/perf/process_perf_results.py" + }, + "name": "resource_sizes_trichrome_google", + "override_compile_targets": [ + "resource_sizes_trichrome_google" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04", + "pool": "chrome.tests" + } + ], + "expiration": 7200, + "hard_timeout": 21600, + "ignore_task_failure": false, + "io_timeout": 21600, + "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" + } } ] },
diff --git a/testing/buildbot/filters/android.emulator.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator.chrome_public_test_apk.filter index 35f17a8..0c3b11c 100644 --- a/testing/buildbot/filters/android.emulator.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.emulator.chrome_public_test_apk.filter
@@ -100,7 +100,33 @@ # crbug.com/1062838 -org.chromium.chrome.browser.offlinepages.prefetch.PrefetchFeedFlowTest.testPrefetchForbiddenByServer_FullBrowser +-org.chromium.chrome.browser.offlinepages.prefetch.PrefetchFeedFlowTest.testPrefetchSinglePageSuccess_FullBrowser + # crbug.com/1062843 -org.chromium.chrome.browser.banners.AppBannerManagerTest.testAppInstalledModalNativeAppBannerCustomTab -org.chromium.chrome.browser.banners.AppBannerManagerTest.testModalNativeAppBannerCanBeTriggeredMultipleTimesCustomTab + +# crbug.com/1063971 +-org.chromium.chrome.browser.media.ui.PictureInPictureControllerTest.testExitPipOnNavigation + +# crbug/1036545 +-org.chromium.chrome.browser.suggestions.tile.TileGroupTest.testDismissTileUndo + +# crbug.com/1063975 +-org.chromium.chrome.browser.feed.FeedAppLifecycleTest.testSecondWindowDoesNotTriggerForegroundOrBackground + +# crbug.com/1063981 +-org.chromium.chrome.browser.toolbar.IdentityDiscControllerTest.testIdentityDiscWithSignInState + +# crbug.com/1063984 +-org.chromium.chrome.browser.tasks.ReturnToChromeTest.testInitialScrollIndex + +# crbug.com/1063987 +-org.chromium.chrome.browser.tasks.tab_management.TabListContainerViewBinderTest.testHidesWithAnimation + +# crbug.com/1063991 +-org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testIncognitoToggle_tabCount + +# crbug.com/1064058 +-org.chromium.chrome.features.start_surface.StartSurfaceLayoutTest.testRecycling_aspectRatioPoint75
diff --git a/testing/buildbot/filters/bfcache.content_unittests.filter b/testing/buildbot/filters/bfcache.content_unittests.filter index 2d8f82a..98d2b4c 100644 --- a/testing/buildbot/filters/bfcache.content_unittests.filter +++ b/testing/buildbot/filters/bfcache.content_unittests.filter
@@ -1 +1,5 @@ # These tests currently fail when run with --enable-features=BackForwardCache + +# https://crbug.com/1062923 +# Need investigation. +-RenderFrameHostImplBrowserTest.CheckIsCurrentBeforeAndAfterUnload
diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py index e7dd81a3..7077c9d 100755 --- a/testing/buildbot/manage.py +++ b/testing/buildbot/manage.py
@@ -186,6 +186,7 @@ 'resource_sizes_chrome_apk', 'resource_sizes_chrome_modern_minimal_apks', 'resource_sizes_monochrome_minimal_apks', + 'resource_sizes_trichrome_google', 'resource_sizes_system_webview_google_apk', # These are used by https://www.chromium.org/developers/cluster-telemetry.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 683200f..53bc5da2 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -37,7 +37,14 @@ '--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_ddview_skipdon_setupcomplete.json', '--replace-system-package=com.google.vr.vrcore,//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk', '--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk', + '--git-revision', '${got_revision}', ], + 'precommit_args': [ + '--gerrit-issue', '${patch_issue}', + '--gerrit-patchset', '${patch_set}', + '--buildbucket-id', '${buildbucket_build_id}', + ], + 'mixins': ['chrome-gold-service-account'], 'swarming': { 'shards': 2, }, @@ -2144,9 +2151,89 @@ }, }, + 'gpu_gl_renderer_full_telemetry_tests': { + 'context_lost': { + 'name': 'gl_renderer_context_lost_tests', + 'args': [ + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + }, + 'depth_capture': { + 'name': 'gl_renderer_depth_capture_tests', + 'args': [ + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + }, + 'gpu_process': { + 'name': 'gl_renderer_gpu_process_launch_tests', + 'args': [ + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + }, + 'hardware_accelerated_feature': { + 'name': 'gl_renderer_hardware_accelerated_feature_tests', + 'args': [ + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + }, + 'maps': { + 'name': 'gl_renderer_maps_pixel_tests', + 'args': [ + '--dont-restore-color-profile-after-test', + '--build-revision', + '${got_revision}', + '--test-machine-name', + '${buildername}', + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + 'precommit_args': [ + # Gerrit issue ID + '--review-patch-issue', + '${patch_issue}', + # Patch set number + '--review-patch-set', + '${patch_set}', + # Buildbucket ID + '--buildbucket-build-id', + '${buildbucket_build_id}', + ], + 'mixins': ['chrome-gpu-gold-service-account'], + }, + 'pixel': { + 'name': 'gl_renderer_pixel_skia_gold_tests', + 'args': [ + '--dont-restore-color-profile-after-test', + '--build-revision', + '${got_revision}', + '--test-machine-name', + '${buildername}', + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + 'precommit_args': [ + # Gerrit issue ID + '--review-patch-issue', + '${patch_issue}', + # Patch set number + '--review-patch-set', + '${patch_set}', + # Buildbucket ID + '--buildbucket-build-id', + '${buildbucket_build_id}', + ], + 'mixins': ['chrome-gpu-gold-service-account'], + }, + 'screenshot_sync': { + 'name': 'gl_renderer_screenshot_sync_tests', + 'args': [ + '--dont-restore-color-profile-after-test', + '--extra-browser-args=--disable-features=UseSkiaRenderer', + ], + }, + }, + # Very small set of test that exercise GLRenderer and produce pixels for CQ. # For use where SkiaRenderer is enabled by field trial or default. - 'gpu_gl_renderer_telemetry_tests': { + 'gpu_gl_renderer_small_telemetry_tests': { 'gl_renderer_screenshot_sync': { 'args': [ '--dont-restore-color-profile-after-test', @@ -4185,7 +4272,7 @@ 'gpu_common_and_optional_telemetry_tests', 'gpu_telemetry_tests', 'gpu_webgl_conformance_telemetry_tests', - 'gpu_gl_renderer_telemetry_tests', + 'gpu_gl_renderer_small_telemetry_tests', ], 'gpu_dawn_deps_isolated_scripts': [ @@ -4620,6 +4707,47 @@ }, }, + 'ios13_sdk_simulator_tests': { + 'ios_common_tests': { + 'variants': [ + 'SIM_IPHONE_6S_13_3', + 'SIM_IPHONE_X_12_4', + ], + }, + 'ios_eg2_tests': { + 'variants': [ + 'SIM_IPHONE_X_12_4', + 'SIM_IPAD_6_GEN_12_4', + ] + }, + 'ios_eg_cq_tests': { + 'variants': [ + 'SIM_IPHONE_X_13_3', + 'SIM_IPAD_AIR_2_13_3', + 'SIM_IPHONE_X_12_4', + 'SIM_IPAD_PRO_12_4', + ] + }, + 'ios_eg_tests': { + 'variants': [ + 'SIM_IPHONE_7_13_3', + 'SIM_IPAD_AIR_2_13_3', + 'SIM_IPHONE_X_13_3', + 'SIM_IPHONE_X_12_4', + 'SIM_IPAD_AIR_3RD_GEN_12_4', + ] + }, + 'ios_screen_size_dependent_tests': { + 'variants': [ + 'SIM_IPHONE_6S_PLUS_13_3', + 'SIM_IPHONE_6S_13_3', + 'SIM_IPHONE_6S_PLUS_12_4', + 'SIM_IPHONE_X_12_4', + 'SIM_IPAD_AIR_2_12_4', + ], + }, + }, + 'ios_code_coverage_tests': { 'ios_common_tests': { 'variants': [
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index 2be1e1b8..b5c075c7 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -81,6 +81,15 @@ ], 'identifier': 'iPad (6th generation) 13.3' }, + 'SIM_IPHONE_6S_13_3': { + 'args': [ + '--platform', + 'iPhone 6s', + '--version', + '13.3', + ], + 'identifier': 'iPhone 6s 13.3' + }, 'SIM_IPHONE_6S_PLUS_12_4': { 'args': [ '--platform',
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 2760089..2edc11a4 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1916,6 +1916,26 @@ 'isolated_scripts': 'ios13_beta_simulator_tests' }, }, + 'ios13-sdk-device': { + 'additional_compile_targets': [ + 'all', + ], + }, + 'ios13-sdk-simulator': { + 'additional_compile_targets': [ + 'all', + ], + 'mixins': [ + 'ios_swarming_account', + 'mac_10.14', + 'mac_toolchain', + 'out_dir_arg', + 'xcode_11c29', + ], + 'test_suites': { + 'isolated_scripts': 'ios13_sdk_simulator_tests' + }, + }, 'linux-annotator-rel': { 'test_suites': { 'scripts': 'test_traffic_annotation_auditor_script', @@ -3577,9 +3597,14 @@ 'win10_nvidia_quadro_p400_stable', ], 'test_suites': { + # UseSkiaRenderer is enabled through fieldtrial_testing_config.json on + # Windows. Telemetry tests now run with SkiaRenderer by default, so + # this bot runs them with GLRenderer to maintain coverage. Other + # content based tests still run with GLRenderer by default so this bot + # runs them with SkiaRenderer. 'gtest_tests': 'skia_renderer_gtests', 'isolated_scripts': 'gpu_blink_web_tests_skia_renderer', - 'gpu_telemetry_tests': 'gpu_skia_renderer_non_vulkan_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_gl_renderer_full_telemetry_tests', }, }, 'Win10 FYI x64 dEQP Release (Intel HD 630)': { @@ -3758,6 +3783,8 @@ 'additional_compile_targets': [ 'all', ], + 'browser_config': 'web-engine-shell', + 'os_type': 'linux', 'mixins': [ 'fuchsia_aemu', 'linux-xenial', @@ -3772,6 +3799,7 @@ 'test_suites': { 'gtest_tests': 'fuchsia_gtests', 'isolated_scripts': 'chromium_webkit_isolated_scripts', + 'gpu_telemetry_tests': 'fuchsia_gpu_telemetry_tests', }, }, 'Leak Detection Linux': {
diff --git a/testing/perf/OWNERS b/testing/perf/OWNERS index 22119a0d..c3be6fd 100644 --- a/testing/perf/OWNERS +++ b/testing/perf/OWNERS
@@ -1,2 +1,2 @@ bsheedy@chromium.org -crouleau@chromium.org +johnchen@chromium.org
diff --git a/testing/scripts/OWNERS b/testing/scripts/OWNERS index 540926e6..bccebb0 100644 --- a/testing/scripts/OWNERS +++ b/testing/scripts/OWNERS
@@ -1,7 +1,6 @@ # This is reserved for people that are comfortably with buildbot recipes # and understand the implications of changing these files. -crouleau@chromium.org dpranke@chromium.org kbr@chromium.org martiniss@chromium.org @@ -12,5 +11,10 @@ per-file run-wpt_tests.py=lpz@chromium.org per-file run_wpt_tests.py=robertma@chromium.org +per-file run_performance_tests.py=johnchen@chromium.org +per-file run_performance_tests.py=wenbinzhang@google.com + +per-file run_chromedriver_tests.py=johnchen@chromium.org + # TEAM: infra-dev@chromium.org # COMPONENT: Infra>Client>Chrome
diff --git a/testing/scripts/run_android_wpt.py b/testing/scripts/run_android_wpt.py index ddc9c16f..84f5dea7 100755 --- a/testing/scripts/run_android_wpt.py +++ b/testing/scripts/run_android_wpt.py
@@ -63,9 +63,6 @@ WEB_TESTS_DIR = os.path.join(BLINK_TOOLS_DIR, os.pardir, 'web_tests') DEFAULT_WPT = os.path.join(WEB_TESTS_DIR, 'external', 'wpt', 'wpt') -SYSTEM_WEBVIEW_SHELL_PKG = 'org.chromium.webview_shell' -WEBLAYER_SHELL_PKG = 'org.chromium.weblayer.shell' -WEBLAYER_SUPPORT_PKG = 'org.chromium.weblayer.support' # List of supported products. PRODUCTS = ['android_weblayer', 'android_webview', 'chrome_android'] @@ -89,28 +86,30 @@ cls.pass_through_args.append(arg) +def _get_adapter(device): + product = WPTAndroidAdapter(device).options.product + if product == 'android_weblayer': + return WPTWeblayerAdapter(device) + elif product == 'android_webview': + return WPTWebviewAdapter(device) + else: + return WPTClankAdapter(device) + + class WPTAndroidAdapter(common.BaseIsolatedScriptArgsAdapter): - def __init__(self): + def __init__(self, device): self.pass_through_wpt_args = [] self.pass_through_binary_args = [] self._metadata_dir = None self._test_apk = None self._missing_test_apk_arg = None + self._device = device super(WPTAndroidAdapter, self).__init__() # Arguments from add_extra_argumentsparse were added so # its safe to parse the arguments and set self._options self.parse_args() - @classmethod - def get_adapter(cls): - product = cls().options.product - if product == 'android_weblayer': - return WPTWeblayerAdapter() - elif product == 'android_webview': - return WPTWebviewAdapter() - else: - return WPTClankAdapter() def generate_test_output_args(self, output): return ['--log-chromium', output] @@ -194,10 +193,13 @@ common.run_command(metadata_builder_cmd) def run_test(self): - with NamedTemporaryDirectory() as self._metadata_dir: + with NamedTemporaryDirectory() as self._metadata_dir, self._install_apks(): self._maybe_build_metadata() return super(WPTAndroidAdapter, self).run_test() + def _install_apks(self): + raise NotImplementedError + def clean_up_after_test_run(self): # Avoid having a dangling reference to the temp directory # which was deleted @@ -270,27 +272,38 @@ help='Force trial params for Chromium features.') -class WPTWebviewAdapter(WPTAndroidAdapter): - - def __init__(self): - super(WPTWebviewAdapter, self).__init__() - self._test_apk = self.options.system_webview_shell - self._missing_test_apk_arg = '--system-webview-shell' - - def _extra_metadata_builder_args(self): - return [ - '--additional-expectations', - os.path.join( - WEB_TESTS_DIR, 'android', 'WebviewWPTOverrideExpectations')] - - class WPTWeblayerAdapter(WPTAndroidAdapter): - def __init__(self): - super(WPTWeblayerAdapter, self).__init__() + WEBLAYER_SHELL_PKG = 'org.chromium.weblayer.shell' + WEBLAYER_SUPPORT_PKG = 'org.chromium.weblayer.support' + + def __init__(self, device): + super(WPTWeblayerAdapter, self).__init__(device) self._test_apk = self.options.weblayer_shell self._missing_test_apk_arg = '--weblayer-shell' + @contextlib.contextmanager + def _install_apks(self): + if self.options.package_name: + logger.warn('--package-name has no effect for weblayer, provider' + 'will be set to the --apk if it is provided.') + install_weblayer_shell_as_needed = maybe_install_user_apk( + self._device, self.options.weblayer_shell, self.WEBLAYER_SHELL_PKG) + install_weblayer_support_as_needed = maybe_install_user_apk( + self._device, self.options.weblayer_support, self.WEBLAYER_SUPPORT_PKG) + + if self.options.apk: + install_webview_as_needed = webview_app.UseWebViewProvider( + self._device, self.options.apk) + logger.info('Will install WebView apk at ' + self.options.apk) + else: + install_webview_as_needed = no_op() + + with install_weblayer_shell_as_needed, \ + install_weblayer_support_as_needed, \ + install_webview_as_needed: + yield + def _extra_metadata_builder_args(self): return [ '--additional-expectations', @@ -298,79 +311,65 @@ 'android', 'WeblayerWPTOverrideExpectations')] +class WPTWebviewAdapter(WPTAndroidAdapter): + + SYSTEM_WEBVIEW_SHELL_PKG = 'org.chromium.webview_shell' + + def __init__(self, device): + super(WPTWebviewAdapter, self).__init__(device) + self._test_apk = self.options.system_webview_shell + self._missing_test_apk_arg = '--system-webview-shell' + + @contextlib.contextmanager + def _install_apks(self): + if self.options.package_name: + logger.warn('--package-name has no effect for android_webview, provider' + 'will be set to the --apk if it is provided.') + + if self.options.system_webview_shell: + install_shell_as_needed = maybe_install_user_apk( + self._device, self.options.system_webview_shell, + self.SYSTEM_WEBVIEW_SHELL_PKG) + else: + install_shell_as_needed = no_op() + + if self.options.apk: + install_webview_as_needed = webview_app.UseWebViewProvider( + self._device, self.options.apk) + logger.info('Will install WebView apk at ' + self.options.apk) + else: + install_webview_as_needed = no_op() + + with install_shell_as_needed, install_webview_as_needed: + yield + + def _extra_metadata_builder_args(self): + return [ + '--additional-expectations', + os.path.join( + WEB_TESTS_DIR, 'android', 'WebviewWPTOverrideExpectations')] + + class WPTClankAdapter(WPTAndroidAdapter): - def __init__(self): - super(WPTClankAdapter, self).__init__() + def __init__(self, device): + super(WPTClankAdapter, self).__init__(device) self._test_apk = self.options.apk self._missing_test_apk_arg = '--apk' + @contextlib.contextmanager + def _install_apks(self): + install_clank_as_needed = maybe_install_user_apk( + self._device, self.options.apk) + with install_clank_as_needed: + yield + def _extra_metadata_builder_args(self): return [ '--additional-expectations', os.path.join(WEB_TESTS_DIR, 'android', 'ClankWPTOverrideExpectations')] -def run_android_weblayer(device, adapter): - if adapter.options.package_name: - logger.warn('--package-name has no effect for weblayer, provider' - 'will be set to the --apk if it is provided.') - - install_weblayer_shell_as_needed = maybe_install_user_apk( - device, adapter.options.weblayer_shell, WEBLAYER_SHELL_PKG) - - install_weblayer_support_as_needed = maybe_install_user_apk( - device, adapter.options.weblayer_support, WEBLAYER_SUPPORT_PKG) - - if adapter.options.apk: - install_webview_as_needed = webview_app.UseWebViewProvider(device, - adapter.options.apk) - logger.info('Will install WebView apk at ' + adapter.options.apk) - else: - install_webview_as_needed = no_op() - - with install_weblayer_shell_as_needed,\ - install_weblayer_support_as_needed,\ - install_webview_as_needed: - return adapter.run_test() - - -def run_android_webview(device, adapter): - if adapter.options.package_name: - logger.warn('--package-name has no effect for android_webview, provider' - 'will be set to the --apk if it is provided.') - - if adapter.options.system_webview_shell: - shell_pkg = apk_helper.GetPackageName(adapter.options.system_webview_shell) - if shell_pkg != SYSTEM_WEBVIEW_SHELL_PKG: - raise Exception('{} has incorrect package name: {}, expected {}.'.format( - '--system-webview-shell apk', shell_pkg, SYSTEM_WEBVIEW_SHELL_PKG)) - install_shell_as_needed = system_app.ReplaceSystemApp(device, shell_pkg, - adapter.options.system_webview_shell) - logger.info('Will install ' + shell_pkg + ' at ' - + adapter.options.system_webview_shell) - else: - install_shell_as_needed = no_op() - - if adapter.options.apk: - install_webview_as_needed = webview_app.UseWebViewProvider(device, - adapter.options.apk) - logger.info('Will install WebView apk at ' + adapter.options.apk) - else: - install_webview_as_needed = no_op() - - with install_shell_as_needed, install_webview_as_needed: - return adapter.run_test() - - -def run_chrome_android(device, adapter): - if adapter.options.apk: - with app_installed(device, adapter.options.apk): - return adapter.run_test() - else: - return adapter.run_test() - - def maybe_install_user_apk(device, apk, expected_pkg=None): """contextmanager to install apk on device. @@ -417,7 +416,18 @@ def main(): - adapter = WPTAndroidAdapter.get_adapter() + devil_chromium.Initialize() + devices = device_utils.DeviceUtils.HealthyDevices() + + if not devices: + logger.error('There are no devices attached to this host. Exiting script.') + return 1 + + # Only 1 device is supported for Android locally, this will work well with + # sharding support via swarming infra. + device = devices[0] + + adapter = _get_adapter(device) adapter.parse_args() if adapter.options.verbose: @@ -426,25 +436,12 @@ else: logger.setLevel(logging.DEBUG) - devil_chromium.Initialize() - - # Only 1 device is supported for Android locally, this will work well with - # sharding support via swarming infra. - device = device_utils.DeviceUtils.HealthyDevices()[0] - # WPT setup for chrome and webview requires that PATH contains adb. platform_tools_path = os.path.dirname(devil_env.config.FetchPath('adb')) os.environ['PATH'] = ':'.join([platform_tools_path] + os.environ['PATH'].split(':')) - if adapter.options.product == 'android_weblayer': - return run_android_weblayer(device, adapter) - elif adapter.options.product == 'android_webview': - return run_android_webview(device, adapter) - elif adapter.options.product == 'chrome_android': - return run_chrome_android(device, adapter) - else: - return 1 + return adapter.run_test() if __name__ == '__main__':
diff --git a/testing/scripts/run_performance_tests.py b/testing/scripts/run_performance_tests.py index 4bd22ad..1abcd5f3 100755 --- a/testing/scripts/run_performance_tests.py +++ b/testing/scripts/run_performance_tests.py
@@ -587,8 +587,6 @@ options.test_shard_map_filename) # Copy sharding map file to isolated_out_dir so that the merge script # can collect it later. - # TODO(crouleau): Move this step over to merge script - # (process_perf_results.py). shutil.copyfile( shard_map_path, os.path.join(isolated_out_dir, 'benchmarks_shard_map.json'))
diff --git a/testing/trigger_scripts/OWNERS b/testing/trigger_scripts/OWNERS index 3095086e..4ea7851 100644 --- a/testing/trigger_scripts/OWNERS +++ b/testing/trigger_scripts/OWNERS
@@ -1,4 +1,4 @@ -crouleau@chromium.org eyaich@chromium.org jbudorick@chromium.org kbr@chromium.org +wenbinzhang@google.com
diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py index 4eb1f7f8..ed3b6c0 100644 --- a/testing/variations/PRESUBMIT.py +++ b/testing/variations/PRESUBMIT.py
@@ -168,7 +168,8 @@ if not isinstance(experiment_config['platforms'], list): return create_message_fn('Expecting list for platforms') supported_platforms = [ - 'android', 'android_webview', 'chromeos', 'ios', 'linux', 'mac', 'windows' + 'android', 'android_weblayer', 'android_webview', 'chromeos', 'ios', + 'linux', 'mac', 'windows' ] experiment_platforms = experiment_config['platforms'] unsupported_platforms = list(
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index d78a881..9634bac 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -30,6 +30,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -330,7 +331,8 @@ "AndroidNightMode": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -348,7 +350,8 @@ "AndroidPictureInPictureAPI": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -382,6 +385,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -446,6 +450,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -587,7 +592,8 @@ "AutofillAssistantDirectActionsLaunch": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -604,6 +610,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -660,6 +667,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -676,7 +684,8 @@ "AutofillKeyboardAccessory": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -700,6 +709,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -720,6 +730,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -759,6 +770,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "ios", @@ -795,6 +807,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "ios", @@ -820,6 +833,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -858,6 +872,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -884,6 +899,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "ios", @@ -905,6 +921,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -943,6 +960,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "ios" ], @@ -1020,6 +1038,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -1045,6 +1064,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -1065,6 +1085,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -1093,6 +1114,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -1176,6 +1198,7 @@ "chromeos", "linux", "android", + "android_weblayer", "ios" ], "experiments": [ @@ -1189,6 +1212,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -1212,7 +1236,8 @@ "mac", "chromeos", "linux", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1231,7 +1256,8 @@ "mac", "chromeos", "linux", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1436,7 +1462,8 @@ "ClipboardMaximumAge": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1455,6 +1482,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -1475,6 +1503,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -1670,7 +1699,8 @@ "DataCompressionProxyPromoVisibility": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1692,7 +1722,8 @@ "DataReductionProxyBlockOnBadGatewayResponse": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1707,7 +1738,8 @@ "DataReductionProxyFREPromo": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1719,7 +1751,8 @@ "DataReductionProxyLowMemoryDevicePromo": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1735,6 +1768,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -1767,6 +1801,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -1806,6 +1841,7 @@ "chromeos", "linux", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -1877,7 +1913,8 @@ "DirectActions": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -1943,6 +1980,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "mac", "windows" @@ -1961,6 +1999,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -2012,7 +2051,8 @@ "DownloadResumptionWithoutStrongValidators": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -2045,7 +2085,8 @@ "DownloadsAutoResumptionNative": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -2197,6 +2238,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -2262,6 +2304,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -2281,6 +2324,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -2336,7 +2380,8 @@ "FreezeBackgroundTabOnNetworkIdle": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -2383,6 +2428,7 @@ "chromeos", "linux", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -2401,7 +2447,8 @@ "GestureNavigation": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -2479,6 +2526,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -2503,6 +2551,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -2656,6 +2705,21 @@ ] } ], + "IOSWebPageTextAccessibility": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebPageTextAccessibility" + ] + } + ] + } + ], "IdentityDiscIPH": [ { "platforms": [ @@ -2700,6 +2764,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -2764,6 +2829,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -2867,7 +2933,7 @@ ] } ], - "IsolatePasswordSites": [ + "InterestFeedFeedback": [ { "platforms": [ "android" @@ -2876,6 +2942,22 @@ { "name": "Enabled", "enable_features": [ + "InterestFeedFeedback" + ] + } + ] + } + ], + "IsolatePasswordSites": [ + { + "platforms": [ + "android", + "android_weblayer" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ "site-isolation-for-password-sites" ] } @@ -2906,6 +2988,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -2970,6 +3053,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -2989,6 +3073,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -3051,6 +3136,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -3074,6 +3160,7 @@ "mac", "windows", "android", + "android_weblayer", "chromeos" ], "experiments": [ @@ -3092,7 +3179,8 @@ "LowerJavaScriptPriorityWhenForceDeferred": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3337,7 +3425,8 @@ "NavigationPredictor": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3373,7 +3462,8 @@ "NavigationPredictorMultiplePrerenders": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3447,6 +3537,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -3695,7 +3786,8 @@ "OptimizationTargetPrediction": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3715,6 +3807,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "ios", @@ -3756,6 +3849,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -3775,6 +3869,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -3793,7 +3888,8 @@ "ParallelDownloadWithQUICAndHTTP2": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3814,7 +3910,8 @@ "ParallelDownloading": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3836,6 +3933,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -3857,6 +3955,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -3875,7 +3974,8 @@ "PaymentRequestSkipToGPayIfNoCard": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -3932,7 +4032,8 @@ "PermissionPromptUIAndroidModal": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4036,7 +4137,8 @@ "PreconnectOnDidFinishNavigation": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4116,6 +4218,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4196,6 +4299,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4218,6 +4322,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4242,6 +4347,7 @@ "ProtoDBSharedMigration": [ { "platforms": [ + "android_weblayer", "android_webview", "android", "chromeos", @@ -4286,6 +4392,7 @@ "QUIC": [ { "platforms": [ + "android_weblayer", "android_webview", "android", "chromeos", @@ -4356,6 +4463,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4394,6 +4502,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -4539,6 +4648,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -4559,7 +4669,8 @@ "ResourceLoadingHints": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4574,7 +4685,8 @@ "RevampedContextMenu": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4645,6 +4757,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4667,6 +4780,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4700,7 +4814,8 @@ "SafeBrowsingAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4720,6 +4835,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -4757,7 +4873,8 @@ "SafeBrowsingPasswordProtectionForSavedPasswordsAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4791,7 +4908,8 @@ "SafeBrowsingPasswordProtectionOnFocusPingAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4806,7 +4924,8 @@ "SafeBrowsingPasswordProtectionPasswordReusePingAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4857,7 +4976,8 @@ "SafeBrowsingRealTimeUrlLookupEnabledAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4876,6 +4996,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4904,6 +5025,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -4928,7 +5050,8 @@ "SafeBrowsingUseLocalBlacklistsV2": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -4947,6 +5070,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -4998,6 +5122,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -5016,7 +5141,8 @@ "ScrollResamplingRollout": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -5052,7 +5178,8 @@ "ServiceGroupImportance": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -5083,6 +5210,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -5157,6 +5285,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -5232,6 +5361,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -5254,6 +5384,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -5294,7 +5425,8 @@ "SubresourceRedirect": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -5612,6 +5744,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "linux", @@ -5628,6 +5761,26 @@ ] } ], + "TextureLayerSkipWaitForActivation": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "TextureLayerSkipWaitForActivation", + "enable_features": [ + "TextureLayerSkipWaitForActivation" + ] + } + ] + } + ], "ThirdPartyModulesBlocking": [ { "platforms": [ @@ -5647,6 +5800,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -5688,7 +5842,8 @@ "TranslateCompactUI": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -5768,7 +5923,8 @@ "TranslateRankerModelAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -5788,6 +5944,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -5820,10 +5977,12 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", "windows", + "android_weblayer", "android_webview" ], "experiments": [ @@ -5858,6 +6017,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -5971,6 +6131,7 @@ { "platforms": [ "android", + "android_weblayer", "linux", "windows" ], @@ -6024,6 +6185,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "ios", "chromeos", @@ -6050,7 +6212,8 @@ "V8LowMemoryModeForSubframes": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6072,6 +6235,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -6091,6 +6255,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "ios" ], @@ -6159,7 +6324,8 @@ "VideoCaptureServiceAndroid": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6241,7 +6407,8 @@ "WebApkGooglePlay": [ { "platforms": [ - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6260,6 +6427,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -6279,6 +6447,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -6316,6 +6485,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "ios", "linux", @@ -6386,6 +6556,7 @@ "linux", "ios", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -6404,6 +6575,7 @@ "linux", "ios", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -6422,6 +6594,7 @@ "linux", "ios", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -6435,6 +6608,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -6454,6 +6628,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac", @@ -6492,7 +6667,8 @@ "chromeos", "linux", "ios", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6524,6 +6700,7 @@ "chromeos", "linux", "android", + "android_weblayer", "android_webview" ], "experiments": [ @@ -6537,6 +6714,7 @@ { "platforms": [ "android", + "android_weblayer", "android_webview", "chromeos", "ios", @@ -6559,7 +6737,8 @@ "chromeos", "linux", "ios", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6576,7 +6755,8 @@ "chromeos", "linux", "ios", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6593,7 +6773,8 @@ "chromeos", "linux", "ios", - "android" + "android", + "android_weblayer" ], "experiments": [ { @@ -6694,6 +6875,7 @@ { "platforms": [ "android", + "android_weblayer", "chromeos", "linux", "mac",
diff --git a/third_party/blink/public/strings/blink_strings.grd b/third_party/blink/public/strings/blink_strings.grd index 569bfe91..28c457c 100644 --- a/third_party/blink/public/strings/blink_strings.grd +++ b/third_party/blink/public/strings/blink_strings.grd
@@ -776,155 +776,155 @@ Appears to be: <ph name="DESCRIPTION">$1<ex>A person at a podium</ex></ph> </message> - <message name="IDS_AX_AM_PM_FIELD_TEXT" desc="Accessible description of the AM/PM field in a date/time control"> + <message name="IDS_AX_AM_PM_FIELD_TEXT" desc="Accessibility label of the AM/PM field in a date/time control"> AM/PM </message> - <message name="IDS_AX_DAY_OF_MONTH_FIELD_TEXT" desc="Accessible description of the day of month field in a date/time control"> + <message name="IDS_AX_DAY_OF_MONTH_FIELD_TEXT" desc="Accessibility label of the day of month field in a date/time control"> Day </message> - <message name="IDS_AX_HOUR_FIELD_TEXT" desc="Accessible description of the hour field in a date/time control"> + <message name="IDS_AX_HOUR_FIELD_TEXT" desc="Accessibility label of the hour field in a date/time control"> Hours </message> - <message name="IDS_AX_MEDIA_DEFAULT" desc="Accessible description of a media control."> + <message name="IDS_AX_MEDIA_DEFAULT" desc="Accessibility label of a media control."> media control </message> - <message name="IDS_AX_MEDIA_AUDIO_ELEMENT" desc="Accessible description of audio"> + <message name="IDS_AX_MEDIA_AUDIO_ELEMENT" desc="Accessibility label of audio"> audio </message> - <message name="IDS_AX_MEDIA_VIDEO_ELEMENT" desc="Accessible description of video"> + <message name="IDS_AX_MEDIA_VIDEO_ELEMENT" desc="Accessibility label of video"> video </message> - <message name="IDS_AX_MEDIA_MUTE_BUTTON" desc="Accessibility role description for mute button"> + <message name="IDS_AX_MEDIA_MUTE_BUTTON" desc="Accessibility label for mute button"> mute </message> - <message name="IDS_AX_MEDIA_UNMUTE_BUTTON" desc="Accessibility role description for turn mute off button"> + <message name="IDS_AX_MEDIA_UNMUTE_BUTTON" desc="Accessibility label for turn mute off button"> unmute </message> - <message name="IDS_AX_MEDIA_PLAY_BUTTON" desc="Accessibility role description for play button"> + <message name="IDS_AX_MEDIA_PLAY_BUTTON" desc="Accessibility label for play button"> play </message> - <message name="IDS_AX_MEDIA_PAUSE_BUTTON" desc="Accessibility role description for pause button"> + <message name="IDS_AX_MEDIA_PAUSE_BUTTON" desc="Accessibility label for pause button"> pause </message> - <message name="IDS_AX_MEDIA_CURRENT_TIME_DISPLAY" desc="Accessibility role description for elapsed time display"> + <message name="IDS_AX_MEDIA_CURRENT_TIME_DISPLAY" desc="Accessibility label for elapsed time display"> elapsed time: <ph name="ELAPSED_TIME">$1<ex>0:25</ex></ph> </message> - <message name="IDS_AX_MEDIA_TIME_REMAINING_DISPLAY" desc="Accessibility role description for time remaining display"> - remaining time: <ph name="REMAINING_TIME">$1<ex>3:25</ex></ph> + <message name="IDS_AX_MEDIA_TIME_REMAINING_DISPLAY" desc="Accessibility label for total time display"> + total time: <ph name="REMAINING_TIME">$1<ex>3:25</ex></ph> </message> - <message name="IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON" desc="Accessibility role description for enter fullscreen button"> + <message name="IDS_AX_MEDIA_ENTER_FULL_SCREEN_BUTTON" desc="Accessibility label for enter fullscreen button"> enter full screen </message> - <message name="IDS_AX_MEDIA_EXIT_FULL_SCREEN_BUTTON" desc="Accessibility role description for exit fullscreen button"> + <message name="IDS_AX_MEDIA_EXIT_FULL_SCREEN_BUTTON" desc="Accessibility label for exit fullscreen button"> exit full screen </message> - <message name="IDS_AX_MEDIA_DISPLAY_CUT_OUT_FULL_SCREEN_BUTTON" desc="Accessibility role description for display cutout fullscreen button"> + <message name="IDS_AX_MEDIA_DISPLAY_CUT_OUT_FULL_SCREEN_BUTTON" desc="Accessibility label for display cutout fullscreen button"> toggle display cutout fullscreen </message> - <message name="IDS_AX_MEDIA_ENTER_PICTURE_IN_PICTURE_BUTTON" desc="Accessibility role description for enter Picture-in-Picture button"> + <message name="IDS_AX_MEDIA_ENTER_PICTURE_IN_PICTURE_BUTTON" desc="Accessibility label for enter Picture-in-Picture button"> enter picture-in-picture </message> - <message name="IDS_AX_MEDIA_EXIT_PICTURE_IN_PICTURE_BUTTON" desc="Accessibility role description for exit Picture-in-Picture button"> + <message name="IDS_AX_MEDIA_EXIT_PICTURE_IN_PICTURE_BUTTON" desc="Accessibility label for exit Picture-in-Picture button"> exit picture-in-picture </message> - <message name="IDS_AX_MEDIA_LOADING_PANEL" desc="Accessibility role description for the loading/buffering panel"> + <message name="IDS_AX_MEDIA_LOADING_PANEL" desc="Accessibility label for the loading/buffering panel"> buffering </message> - <message name="IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_MENU_BUTTON" desc="Accessibility role description for show closed captions menu button"> + <message name="IDS_AX_MEDIA_SHOW_CLOSED_CAPTIONS_MENU_BUTTON" desc="Accessibility label for show closed captions menu button"> show closed captions menu </message> - <message name="IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_MENU_BUTTON" desc="Accessibility role description for hide closed captions menu button"> + <message name="IDS_AX_MEDIA_HIDE_CLOSED_CAPTIONS_MENU_BUTTON" desc="Accessibility label for hide closed captions menu button"> hide closed captions menu </message> - <message name="IDS_AX_MEDIA_CAST_OFF_BUTTON" desc="Accessibility role description for remote playback button"> + <message name="IDS_AX_MEDIA_CAST_OFF_BUTTON" desc="Accessibility label for remote playback button"> play on remote device </message> - <message name="IDS_AX_MEDIA_CAST_ON_BUTTON" desc="Accessibility role description for remote playback control button"> + <message name="IDS_AX_MEDIA_CAST_ON_BUTTON" desc="Accessibility label for remote playback control button"> control remote playback </message> - <message name="IDS_AX_MEDIA_DOWNLOAD_BUTTON" desc="Media controls download button."> + <message name="IDS_AX_MEDIA_DOWNLOAD_BUTTON" desc="Accessibility label for media controls download button."> download media </message> - <message name="IDS_AX_MEDIA_OVERFLOW_BUTTON" desc="Media controls overflow button."> + <message name="IDS_AX_MEDIA_OVERFLOW_BUTTON" desc="Accessibility label for media controls overflow button."> show more media controls </message> - <message name="IDS_AX_MEDIA_AUDIO_ELEMENT_HELP" desc="Accessible help of audio controls"> + <message name="IDS_AX_MEDIA_AUDIO_ELEMENT_HELP" desc="Accessibility label for help of audio controls"> audio </message> - <message name="IDS_AX_MEDIA_VIDEO_ELEMENT_HELP" desc="Accessible help of video"> + <message name="IDS_AX_MEDIA_VIDEO_ELEMENT_HELP" desc="Accessibility label for help of video"> video </message> - <message name="IDS_AX_MEDIA_AUDIO_SLIDER_HELP" desc="Accessibility help description for audio timeline slider"> + <message name="IDS_AX_MEDIA_AUDIO_SLIDER_HELP" desc="Accessibility label for audio timeline slider"> audio time scrubber </message> - <message name="IDS_AX_MEDIA_VIDEO_SLIDER_HELP" desc="Accessibility help description for video timeline slider"> + <message name="IDS_AX_MEDIA_VIDEO_SLIDER_HELP" desc="Accessibility label for video timeline slider"> video time scrubber </message> - <message name="IDS_AX_MEDIA_VOLUME_SLIDER_HELP" desc="Accessibility help description for volume slider"> + <message name="IDS_AX_MEDIA_VOLUME_SLIDER_HELP" desc="Accessibility label for volume slider"> volume slider </message> - <message name="IDS_AX_MEDIA_CURRENT_TIME_DISPLAY_HELP" desc="Accessibility help description for elapsed time display"> + <message name="IDS_AX_MEDIA_CURRENT_TIME_DISPLAY_HELP" desc="Accessibility label for elapsed time display"> current time in seconds </message> - <message name="IDS_AX_MEDIA_TIME_REMAINING_DISPLAY_HELP" desc="Accessibility help description for time remaining display"> + <message name="IDS_AX_MEDIA_TIME_REMAINING_DISPLAY_HELP" desc="Accessibility label for time remaining display"> number of seconds of video remaining </message> - <message name="IDS_AX_MEDIA_OVERFLOW_BUTTON_HELP" desc="Accessibility help description for overflow button."> + <message name="IDS_AX_MEDIA_OVERFLOW_BUTTON_HELP" desc="Accessibility label for overflow button."> more options </message> - <message name="IDS_AX_MILLISECOND_FIELD_TEXT" desc="Accessible description of the millisecond field in a date/time control"> + <message name="IDS_AX_MILLISECOND_FIELD_TEXT" desc="Accessibility label for the millisecond field in a date/time control"> Milliseconds </message> - <message name="IDS_AX_MINUTE_FIELD_TEXT" desc="Accessible description of the minute field in a date/time control"> + <message name="IDS_AX_MINUTE_FIELD_TEXT" desc="Accessibility label for the minute field in a date/time control"> Minutes </message> - <message name="IDS_AX_MONTH_FIELD_TEXT" desc="Accessible description of the month field in a date/time control"> + <message name="IDS_AX_MONTH_FIELD_TEXT" desc="Accessibility label for the month field in a date/time control"> Month </message> - <message name="IDS_AX_SECOND_FIELD_TEXT" desc="Accessible description of the second field in a date/time control"> + <message name="IDS_AX_SECOND_FIELD_TEXT" desc="Accessibility label for the second field in a date/time control"> Seconds </message> - <message name="IDS_AX_WEEK_OF_YEAR_FIELD_TEXT" desc="Accessible description of the week of year field in a date/time control"> + <message name="IDS_AX_WEEK_OF_YEAR_FIELD_TEXT" desc="Accessibility label for the week of year field in a date/time control"> Week </message> - <message name="IDS_AX_YEAR_FIELD_TEXT" desc="Accessible description of the year field in a date/time control"> + <message name="IDS_AX_YEAR_FIELD_TEXT" desc="Accessibility label for the year field in a date/time control"> Year </message>
diff --git a/third_party/blink/public/strings/translations/blink_strings_af.xtb b/third_party/blink/public/strings/translations/blink_strings_af.xtb index 707f21b..18c67d1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_af.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_af.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Lyk of dit sê: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">woordelysverwysing</translation> <translation id="4522570452068850558">Besonderhede</translation> -<translation id="4542388879936266156">oorblywende tyd: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">vorm</translation> <translation id="4661075872484491155">boom</translation> <translation id="4664250907885839816">'n Deel wat '<ph name="ATSIGN" />' volg, behoort nie die simbool '<ph name="INVALIDCHARACTER" />' te bevat nie.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_am.xtb b/third_party/blink/public/strings/translations/blink_strings_am.xtb index 34c9dbe0..c9efd62 100644 --- a/third_party/blink/public/strings/translations/blink_strings_am.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_am.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">እንዲህ የሚል ይመስላል፦ <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">የሙዳየ ቃላት ዋቢ</translation> <translation id="4522570452068850558">ዝርዝሮች</translation> -<translation id="4542388879936266156">ቀሪ ጊዜ፦ <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ቅጽ</translation> <translation id="4661075872484491155">ዛፍ</translation> <translation id="4664250907885839816">ከ«<ph name="ATSIGN" />» በኋላ የሚመጣ ክፍል የ«<ph name="INVALIDCHARACTER" />» ምልክት መያዝ የለበትም።</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ar.xtb b/third_party/blink/public/strings/translations/blink_strings_ar.xtb index 2846e76..03e8eded 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ar.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ar.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">يبدو أنه يقول: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">مرجع مسرد مصطلحات</translation> <translation id="4522570452068850558">التفاصيل</translation> -<translation id="4542388879936266156">الوقت المتبقي: <ph name="REMAINING_TIME" />ّ</translation> <translation id="4597532268155981612">نموذج</translation> <translation id="4661075872484491155">متفرع</translation> <translation id="4664250907885839816">يجب ألا يشتمل الجزء الذي يلي العلامة "<ph name="ATSIGN" />" على الرمز "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_as.xtb b/third_party/blink/public/strings/translations/blink_strings_as.xtb index fb5b1c0..88430aa 100644 --- a/third_party/blink/public/strings/translations/blink_strings_as.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_as.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">এনেকুৱা কিহবাৰ কথা কোৱা যেন লাগিছে: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">শব্দাৱলীৰ প্ৰসংগ</translation> <translation id="4522570452068850558">সবিশেষ</translation> -<translation id="4542388879936266156">বাকী থকা সময়: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ফ’ৰ্ম</translation> <translation id="4661075872484491155">গছ</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />'ৰ পিছত থকা অংশত '<ph name="INVALIDCHARACTER" />' চিহ্নটো থাকিব নালাগে।</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_az.xtb b/third_party/blink/public/strings/translations/blink_strings_az.xtb index 5679b5d..b9336f91 100644 --- a/third_party/blink/public/strings/translations/blink_strings_az.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_az.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Ola bilər: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">lüğət istinadı</translation> <translation id="4522570452068850558">Detallar</translation> -<translation id="4542388879936266156">qalan vaxt: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">forma</translation> <translation id="4661075872484491155">ağac</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' bir hissəsi '<ph name="INVALIDCHARACTER" />' simvolunu içərməməlidir.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_be.xtb b/third_party/blink/public/strings/translations/blink_strings_be.xtb index af2925a..5642134 100644 --- a/third_party/blink/public/strings/translations/blink_strings_be.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_be.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Здаецца, напісана наступнае: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">спасылка на гласарый</translation> <translation id="4522570452068850558">Падрабязнасці</translation> -<translation id="4542388879936266156">засталося часу: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">форма</translation> <translation id="4661075872484491155">дрэва</translation> <translation id="4664250907885839816">У частцы пасля "<ph name="ATSIGN" />" не павінна быць сімвала "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bg.xtb b/third_party/blink/public/strings/translations/blink_strings_bg.xtb index 088cb49..aa7f1f1e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bg.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bg.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Изглежда, че пише: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">препратка към определение в терминологичния речник</translation> <translation id="4522570452068850558">Подробности</translation> -<translation id="4542388879936266156">оставащо време: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">формуляр</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Текстът след „<ph name="ATSIGN" />“ не бива да съдържа символа „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bn.xtb b/third_party/blink/public/strings/translations/blink_strings_bn.xtb index ca78a94..251b51aa 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bn.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">মনে হচ্ছে বলতে চাইছে: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">শব্দকোষের রেফারেন্স</translation> <translation id="4522570452068850558">বিশদ বিবরণ</translation> -<translation id="4542388879936266156">বাকি সময়: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ফর্ম</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' অনুসরণ করে এমন একটি অংশে '<ph name="INVALIDCHARACTER" />' চিহ্ন থাকা উচিত নয়৷</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bs.xtb b/third_party/blink/public/strings/translations/blink_strings_bs.xtb index 2c6e699..b8a186d4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_bs.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Čini se da piše: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referenca iz rječnika</translation> <translation id="4522570452068850558">Detalji</translation> -<translation id="4542388879936266156">preostalo vrijeme: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">obrazac</translation> <translation id="4661075872484491155">stablo</translation> <translation id="4664250907885839816">Dio koji slijedi nakon znaka "<ph name="ATSIGN" />" ne smije sadržavati simbol "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ca.xtb b/third_party/blink/public/strings/translations/blink_strings_ca.xtb index 4dbcd3e..2bf25a2 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ca.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ca.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Sembla que diu "<ph name="OCR_TEXT" />"</translation> <translation id="4446524499724042288">referència del glossari</translation> <translation id="4522570452068850558">Detalls</translation> -<translation id="4542388879936266156">temps restant: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulari</translation> <translation id="4661075872484491155">arbre</translation> <translation id="4664250907885839816">Un domini precedit per "<ph name="ATSIGN" />" no pot contenir el símbol "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_cs.xtb b/third_party/blink/public/strings/translations/blink_strings_cs.xtb index 1aae9b0b..173ebd4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_cs.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_cs.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Vypadá jako: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">odkaz na glosář</translation> <translation id="4522570452068850558">Podrobnosti</translation> -<translation id="4542388879936266156">zbývající čas: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulář</translation> <translation id="4661075872484491155">strom</translation> <translation id="4664250907885839816">Část za znakem <ph name="ATSIGN" /> nesmí obsahovat znak <ph name="INVALIDCHARACTER" />.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_da.xtb b/third_party/blink/public/strings/translations/blink_strings_da.xtb index 6d94bab..bcf378a 100644 --- a/third_party/blink/public/strings/translations/blink_strings_da.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_da.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Der lader til at stå: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">reference på ordliste</translation> <translation id="4522570452068850558">Detaljer</translation> -<translation id="4542388879936266156">resterende tid: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formular</translation> <translation id="4661075872484491155">træ</translation> <translation id="4664250907885839816">Den del, der kommer efter "<ph name="ATSIGN" />", må ikke indeholde symbolet "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_de.xtb b/third_party/blink/public/strings/translations/blink_strings_de.xtb index 76fa856..896820b 100644 --- a/third_party/blink/public/strings/translations/blink_strings_de.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_de.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Es sieht aus wie: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">Glossarreferenz</translation> <translation id="4522570452068850558">Details</translation> -<translation id="4542388879936266156">verbleibende Zeit: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">Formular</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Nach dem <ph name="ATSIGN" />-Zeichen darf das Zeichen "<ph name="INVALIDCHARACTER" />" nicht verwendet werden.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_el.xtb b/third_party/blink/public/strings/translations/blink_strings_el.xtb index bab32d66..ff06f42 100644 --- a/third_party/blink/public/strings/translations/blink_strings_el.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_el.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Φαίνεται πως λέει: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">αναφορά στο γλωσσάρι</translation> <translation id="4522570452068850558">Λεπτομέρειες</translation> -<translation id="4542388879936266156">χρόνος που απομένει: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">φόρμα</translation> <translation id="4661075872484491155">δέντρο</translation> <translation id="4664250907885839816">Το τμήμα της διεύθυνσης μετά το σύμβολο "<ph name="ATSIGN" />" δεν πρέπει να περιέχει το σύμβολο "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb index 0517969..43840428 100644 --- a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Appears to say: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">glossary reference</translation> <translation id="4522570452068850558">Details</translation> -<translation id="4542388879936266156">remaining time: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">form</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">A part following '<ph name="ATSIGN" />' should not contain the symbol '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb index 7d018b03..f1fbaf2d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Parece decir: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referencia de glosario</translation> <translation id="4522570452068850558">Detalles</translation> -<translation id="4542388879936266156">tiempo restante: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulario</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">El texto después del signo "<ph name="ATSIGN" />" no debe incluir el símbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_es.xtb b/third_party/blink/public/strings/translations/blink_strings_es.xtb index 88876b10..bf9d514d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_es.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_es.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Parece que pone: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referencia de glosario</translation> <translation id="4522570452068850558">Detalles</translation> -<translation id="4542388879936266156">tiempo restante: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulario</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">El texto detrás del signo "<ph name="ATSIGN" />" no debe incluir el símbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_et.xtb b/third_party/blink/public/strings/translations/blink_strings_et.xtb index b3507709..e24a5a6 100644 --- a/third_party/blink/public/strings/translations/blink_strings_et.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_et.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Näib ütlevat: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">sõnastiku viide</translation> <translation id="4522570452068850558">Üksikasjad</translation> -<translation id="4542388879936266156">järelejäänud aeg: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">vorm</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Märgile „<ph name="ATSIGN" />” järgnev osa ei tohi sisaldada sümbolit „<ph name="INVALIDCHARACTER" />”.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_eu.xtb b/third_party/blink/public/strings/translations/blink_strings_eu.xtb index eda408f1..7c3eaf9 100644 --- a/third_party/blink/public/strings/translations/blink_strings_eu.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_eu.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Badirudi hau dioela: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">glosarioaren erreferentzia</translation> <translation id="4522570452068850558">Xehetasunak</translation> -<translation id="4542388879936266156">gelditzen den denbora: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">inprimakia</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">"<ph name="ATSIGN" />" ikurraren ondoren ezin da "<ph name="INVALIDCHARACTER" />" ikurra ezarri.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fa.xtb b/third_party/blink/public/strings/translations/blink_strings_fa.xtb index ce7598d..de37c8e4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fa.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fa.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ظاهراً <ph name="OCR_TEXT" /> را نشان میدهد</translation> <translation id="4446524499724042288">مرجع واژهنامه</translation> <translation id="4522570452068850558">جزئیات</translation> -<translation id="4542388879936266156">زمان باقیمانده: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">فرم</translation> <translation id="4661075872484491155">درخت</translation> <translation id="4664250907885839816">قسمت بعد از «<ph name="ATSIGN" />» نباید حاوی نماد «<ph name="INVALIDCHARACTER" />» باشد.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fi.xtb b/third_party/blink/public/strings/translations/blink_strings_fi.xtb index eba0f7b..c8c7f95 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fi.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Kuuluu sanovan: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">sanastoviittaus</translation> <translation id="4522570452068850558">Tiedot</translation> -<translation id="4542388879936266156">jäljellä oleva aika: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">lomake</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816"><ph name="ATSIGN" />-osan jälkeen tulevassa osassa ei pitäisi olla merkkiä <ph name="INVALIDCHARACTER" />.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fil.xtb b/third_party/blink/public/strings/translations/blink_strings_fil.xtb index f90bc6d..5cbfe89 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fil.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fil.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Mukhang ang sabi ay: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">sanggunian sa glosaryo</translation> <translation id="4522570452068850558">Mga Detalye</translation> -<translation id="4542388879936266156">natitirang oras: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">form</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Hindi dapat naglalaman ng simbolong '<ph name="INVALIDCHARACTER" />' ang bahagi pagkatapos ng '<ph name="ATSIGN" />.'</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb b/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb index 7d6b1ed..c625d4f 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">La photo semble contenir le texte suivant : <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">référence du glossaire</translation> <translation id="4522570452068850558">Détails</translation> -<translation id="4542388879936266156">temps restant : <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulaire</translation> <translation id="4661075872484491155">arbre</translation> <translation id="4664250907885839816">La partie suivant « <ph name="ATSIGN" /> » ne doit pas contenir le symbole « <ph name="INVALIDCHARACTER" /> ».</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fr.xtb b/third_party/blink/public/strings/translations/blink_strings_fr.xtb index 951f9e3e..78c04425 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fr.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Voici la mention que contient probablement l'image : <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">référence de glossaire</translation> <translation id="4522570452068850558">Détails</translation> -<translation id="4542388879936266156">temps restant : <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulaire</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">La partie précédée du symbole "<ph name="ATSIGN" />" ne doit pas contenir le caractère "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_gl.xtb b/third_party/blink/public/strings/translations/blink_strings_gl.xtb index 27caa057..3e540b1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_gl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_gl.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Parece que pon: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referencia do glosario</translation> <translation id="4522570452068850558">Detalles</translation> -<translation id="4542388879936266156">tempo restante: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulario</translation> <translation id="4661075872484491155">árbore</translation> <translation id="4664250907885839816">A parte que vai a continuación de "<ph name="ATSIGN" />" non debe conter o símbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_gu.xtb b/third_party/blink/public/strings/translations/blink_strings_gu.xtb index 0a4c5fc..ad9300e1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_gu.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_gu.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">આવું બોલતા જણાય છે: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">શબ્દાવલીનો સંદર્ભ</translation> <translation id="4522570452068850558">વિગતો</translation> -<translation id="4542388879936266156">બાકીનો સમય: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ફોર્મ</translation> <translation id="4661075872484491155">ટ્રી</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' ને અનુસરી રહેલા ભાગમાં '<ph name="INVALIDCHARACTER" />' પ્રતીક શામેલ હોવું જોઈએ નહીં.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hi.xtb b/third_party/blink/public/strings/translations/blink_strings_hi.xtb index 5d596cc..40fc64c 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">यह जानकारी इस बारे में लगती है: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">संदर्भ के लिए शब्दावली</translation> <translation id="4522570452068850558">विवरण</translation> -<translation id="4542388879936266156">बचा हुआ समय: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">फ़ॉर्म</translation> <translation id="4661075872484491155">ट्री</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' के बाद आने वाले भाग में '<ph name="INVALIDCHARACTER" />' प्रतीक शामिल नहीं होना चाहिए.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hr.xtb b/third_party/blink/public/strings/translations/blink_strings_hr.xtb index 582ce43..8d23d10 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Čini se da piše: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referenca iz pojmovnika</translation> <translation id="4522570452068850558">Detalji</translation> -<translation id="4542388879936266156">preostalo vrijeme: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">obrazac</translation> <translation id="4661075872484491155">stablo</translation> <translation id="4664250907885839816">Dio adrese iza znaka "<ph name="ATSIGN" />" ne smije sadržavati simbol "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hu.xtb b/third_party/blink/public/strings/translations/blink_strings_hu.xtb index b2dcb4f..2e721e96 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hu.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Úgy tűnik, hogy a következő látható rajta: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">szószedet-hivatkozás</translation> <translation id="4522570452068850558">Részletek</translation> -<translation id="4542388879936266156">hátralévő idő: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">űrlap</translation> <translation id="4661075872484491155">fa</translation> <translation id="4664250907885839816">A „<ph name="ATSIGN" />” utáni rész nem tartalmazhat „<ph name="INVALIDCHARACTER" />” karaktert.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hy.xtb b/third_party/blink/public/strings/translations/blink_strings_hy.xtb index 991f53db..caff9a3 100644 --- a/third_party/blink/public/strings/translations/blink_strings_hy.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_hy.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Կարծես թե ասում է <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">մեջբերում բառացանկից</translation> <translation id="4522570452068850558">Մանրամասներ</translation> -<translation id="4542388879936266156">մնացած ժամանակը՝ <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ձևաթուղթ</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">«<ph name="ATSIGN" />»-ին հաջորդող մասը չպետք է պարունակի «<ph name="INVALIDCHARACTER" />» նշանը:</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_id.xtb b/third_party/blink/public/strings/translations/blink_strings_id.xtb index b931657..5277592d4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_id.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_id.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Muncul dengan menyatakan: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referensi glosarium</translation> <translation id="4522570452068850558">Detail</translation> -<translation id="4542388879936266156">sisa waktu: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulir</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Bagian setelah '<ph name="ATSIGN" />' tidak boleh berisi simbol '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_is.xtb b/third_party/blink/public/strings/translations/blink_strings_is.xtb index dfe1f76..182e455 100644 --- a/third_party/blink/public/strings/translations/blink_strings_is.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_is.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Þarna virðist standa: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">tilvísun í orðalista</translation> <translation id="4522570452068850558">Upplýsingar</translation> -<translation id="4542388879936266156">tími eftir: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">eyðublað</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Hlutinn sem kemur á eftir „<ph name="ATSIGN" />“ ætti ekki að innihalda táknið „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_it.xtb b/third_party/blink/public/strings/translations/blink_strings_it.xtb index 708d8f1f..5b7f133e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_it.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Sembra che dica: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">riferimento glossario</translation> <translation id="4522570452068850558">Dettagli</translation> -<translation id="4542388879936266156">Tempo rimanente: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">modulo</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Una parte che segue "<ph name="ATSIGN" />" non deve contenere il simbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_iw.xtb b/third_party/blink/public/strings/translations/blink_strings_iw.xtb index 7d59939..df2202e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_iw.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">נראה שכתובים כאן הדברים הבאים: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">הפניה למילון מונחים</translation> <translation id="4522570452068850558">פרטים</translation> -<translation id="4542388879936266156">הזמן שנותר: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">טופס</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">חלק ולאחריו '<ph name="ATSIGN" />' לא אמור לכלול את הסמל '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ja.xtb b/third_party/blink/public/strings/translations/blink_strings_ja.xtb index 0d8a2a4..39f86de 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ja.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ja.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822"><ph name="OCR_TEXT" /> というテキストのようです</translation> <translation id="4446524499724042288">用語参照</translation> <translation id="4522570452068850558">詳細</translation> -<translation id="4542388879936266156">残り時間: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">フォーム</translation> <translation id="4661075872484491155">ツリー</translation> <translation id="4664250907885839816">「<ph name="ATSIGN" />」に続く文字列に記号「<ph name="INVALIDCHARACTER" />」を使用しないでください。</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ka.xtb b/third_party/blink/public/strings/translations/blink_strings_ka.xtb index 829b614..3465463 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ka.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ka.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">როგორც ჩანს, აქ წერია: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">მითითება ტერმინების ლექსიკონზე</translation> <translation id="4522570452068850558">დეტალები</translation> -<translation id="4542388879936266156">დარჩენილი დრო: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ფორმა</translation> <translation id="4661075872484491155">ხე</translation> <translation id="4664250907885839816">„<ph name="ATSIGN" />“-ის შემდეგ ნაწილი არ უნდა შეიცავდეს სიმბოლოს „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_kk.xtb b/third_party/blink/public/strings/translations/blink_strings_kk.xtb index 6964f5e..6fd076aa 100644 --- a/third_party/blink/public/strings/translations/blink_strings_kk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_kk.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Келесі сөз шығатын сияқты: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">глоссарий анықтамасы</translation> <translation id="4522570452068850558">Мәліметтер</translation> -<translation id="4542388879936266156">қалған уақыт: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">пішім</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">"<ph name="ATSIGN" />" кейінгі бөлікте "<ph name="INVALIDCHARACTER" />" таңбасы болмауы керек.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_km.xtb b/third_party/blink/public/strings/translations/blink_strings_km.xtb index 3dbd7881..b7ac6d0 100644 --- a/third_party/blink/public/strings/translations/blink_strings_km.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_km.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ហាក់ដូចជានិយាយថា៖ <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ឯកសារយោងនៃសទ្ទានុក្រម</translation> <translation id="4522570452068850558">ព័ត៌មានលំអិត</translation> -<translation id="4542388879936266156">រយៈពេលនៅសល់៖ <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">បែបបទ</translation> <translation id="4661075872484491155">ដើមឈើ</translation> <translation id="4664250907885839816">ផ្នែកដែលនៅពីមុខ '<ph name="ATSIGN" />' មិនគួរផ្ទុកសញ្ញា '<ph name="INVALIDCHARACTER" />' នេះទេ។</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_kn.xtb b/third_party/blink/public/strings/translations/blink_strings_kn.xtb index 6f78160d..0242d9c 100644 --- a/third_party/blink/public/strings/translations/blink_strings_kn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_kn.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ಹೀಗೆ ಹೇಳುತ್ತಿರಬಹುದು: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ಪದಕೋಶ ಉಲ್ಲೇಖ</translation> <translation id="4522570452068850558">ವಿವರಗಳು</translation> -<translation id="4542388879936266156">ಬಾಕಿ ಉಳಿದಿರುವ ಸಮಯ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ಫಾರ್ಮ್</translation> <translation id="4661075872484491155">ಮರ</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' ನಂತರದ ಭಾಗವು '<ph name="INVALIDCHARACTER" />' ಚಿಹ್ನೆಯನ್ನು ಒಳಗೊಂಡಿರಬಾರದು.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ko.xtb b/third_party/blink/public/strings/translations/blink_strings_ko.xtb index e8f164c3..b9bde97 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ko.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ko.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">텍스트가 <ph name="OCR_TEXT" />인 것으로 보입니다</translation> <translation id="4446524499724042288">용어 참조</translation> <translation id="4522570452068850558">세부정보</translation> -<translation id="4542388879936266156">남은 시간: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">양식</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' 다음 부분에 '<ph name="INVALIDCHARACTER" />' 기호가 포함되면 안됩니다.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ky.xtb b/third_party/blink/public/strings/translations/blink_strings_ky.xtb index 8d05b70..2e8f330 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ky.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ky.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Төмөнкү жазылыптыр: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">глоссарийге шилтеме</translation> <translation id="4522570452068850558">Чоо-жайлары</translation> -<translation id="4542388879936266156">калган убакыт: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">форма</translation> <translation id="4661075872484491155">дарак</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' дегенден кийинки бөлүктө '<ph name="INVALIDCHARACTER" />' символу болбошу керек.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lo.xtb b/third_party/blink/public/strings/translations/blink_strings_lo.xtb index 25c43be..8948efa7 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lo.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lo.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ປາກົດວ່າຈະເວົ້າ: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ການອ້າງອີງປະມວນຄຳສັບ</translation> <translation id="4522570452068850558">ລາຍລະອຽດ</translation> -<translation id="4542388879936266156">ເວລາທີ່ເຫຼືອ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ແບບຟອມ</translation> <translation id="4661075872484491155">ຕົ້ນໄມ້</translation> <translation id="4664250907885839816">ສ່ວນຫນຶ່ງຕໍ່ໄປນີ້ '<ph name="ATSIGN" />' ບໍ່ຄວນໃຫ້ມີສັນຍາລັກ '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lt.xtb b/third_party/blink/public/strings/translations/blink_strings_lt.xtb index 7714c8a..ae0fb33 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lt.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Tai tikriausiai reiškia: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">aiškinamojo terminų žodyno nuoroda</translation> <translation id="4522570452068850558">Išsami informacija</translation> -<translation id="4542388879936266156">likęs laikas: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">forma</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Po „<ph name="ATSIGN" />“ esančioje dalyje neturėtų būti simbolio „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lv.xtb b/third_party/blink/public/strings/translations/blink_strings_lv.xtb index 3105e8c0..208ba81 100644 --- a/third_party/blink/public/strings/translations/blink_strings_lv.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_lv.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Izklausās: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">atsauce uz glosāriju</translation> <translation id="4522570452068850558">Informācija</translation> -<translation id="4542388879936266156">atlikušais laiks: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">veidlapa</translation> <translation id="4661075872484491155">koks</translation> <translation id="4664250907885839816">Daļā, kas atrodas aiz zīmes <ph name="ATSIGN" />, nedrīkst būt ietverts simbols <ph name="INVALIDCHARACTER" />.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mk.xtb b/third_party/blink/public/strings/translations/blink_strings_mk.xtb index 37f61ba9..5113090 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mk.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Се чини дека вели: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">референца за поимник</translation> <translation id="4522570452068850558">Детали</translation> -<translation id="4542388879936266156">преостанато време: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">образец</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Следниот дел „<ph name="ATSIGN" />“ не треба да го содржи симболот „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ml.xtb b/third_party/blink/public/strings/translations/blink_strings_ml.xtb index 9ed9ded..671bcb9 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ml.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">പറയാൻ ദൃശ്യമാകുന്നത്: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">പദസഞ്ചയ റെഫറൻസ്</translation> <translation id="4522570452068850558">വിശദാംശങ്ങൾ</translation> -<translation id="4542388879936266156">അവശേഷിക്കുന്ന സമയം: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ഫോം</translation> <translation id="4661075872484491155">ട്രീ</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' എന്നതിനുശേഷം വരുന്ന ഭാഗത്തിൽ '<ph name="INVALIDCHARACTER" />' ചിഹ്നം ഉണ്ടാകരുത്.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mn.xtb b/third_party/blink/public/strings/translations/blink_strings_mn.xtb index 61f8c69..2957b789 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mn.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822"><ph name="OCR_TEXT" /> гэж хэлж байгаа бололтой</translation> <translation id="4446524499724042288">тайлбар толины лавлагаа</translation> <translation id="4522570452068850558">дэлгэрэнгүй мэдээлэл</translation> -<translation id="4542388879936266156">үлдсэн хугацаа: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">маягт</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />'-ын дараах хэсэгт '<ph name="INVALIDCHARACTER" />' тэмдэг оруулахгүй байх хэрэгтэй.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mr.xtb b/third_party/blink/public/strings/translations/blink_strings_mr.xtb index b0933207..e65a8a9 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mr.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">असे म्हणत असल्याचे दिसत आहे: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">शब्दावली संदर्भ</translation> <translation id="4522570452068850558">तपशील</translation> -<translation id="4542388879936266156">शिल्लक वेळ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">फॉर्म</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' चे फॉलो करणार्या भागामध्ये '<ph name="INVALIDCHARACTER" />' चिन्ह नसावे.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ms.xtb b/third_party/blink/public/strings/translations/blink_strings_ms.xtb index 74de5176..d10b65c6 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ms.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ms.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Nampaknya menyatakan: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">rujukan glosari</translation> <translation id="4522570452068850558">Butiran</translation> -<translation id="4542388879936266156">masa yang tinggal: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">borang</translation> <translation id="4661075872484491155">pohon</translation> <translation id="4664250907885839816">Bahagian selepas '<ph name="ATSIGN" />' tidak boleh mengandungi simbol '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_my.xtb b/third_party/blink/public/strings/translations/blink_strings_my.xtb index b36e0a5..8740832 100644 --- a/third_party/blink/public/strings/translations/blink_strings_my.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_my.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">အောက်ပါကို ပြောပုံရသည်- <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ခက်ဆစ်အညွှန်း</translation> <translation id="4522570452068850558">အသေးစိတ်များ</translation> -<translation id="4542388879936266156">ကျန်ရှိချိန်- <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ပုံစံ</translation> <translation id="4661075872484491155">အပင်</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />'၏ နောက်မှာ ပါလာသည့် အပိုင်း ထဲတွင် သင်္ကေတာ '<ph name="INVALIDCHARACTER" />' မပါရပါ။</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ne.xtb b/third_party/blink/public/strings/translations/blink_strings_ne.xtb index c816556..94f87c2 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ne.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ne.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">निम्न कुरा भन्न खोजे जस्तो छ: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">शब्दावलीको सन्दर्भ</translation> <translation id="4522570452068850558">विवरणहरू</translation> -<translation id="4542388879936266156">बाँकी समय: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">फाराम</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' पछ्याउने भागले '<ph name="INVALIDCHARACTER" />' चिन्ह समावेश गर्नु हुँदैन।</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_nl.xtb b/third_party/blink/public/strings/translations/blink_strings_nl.xtb index b665552..01717370 100644 --- a/third_party/blink/public/strings/translations/blink_strings_nl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_nl.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Lijkt het volgende te zeggen: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">woordenlijstreferentie</translation> <translation id="4522570452068850558">Details</translation> -<translation id="4542388879936266156">resterende tijd: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulier</translation> <translation id="4661075872484491155">structuur</translation> <translation id="4664250907885839816">Het adresgedeelte na '<ph name="ATSIGN" />' mag niet het teken '<ph name="INVALIDCHARACTER" />' bevatten.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_no.xtb b/third_party/blink/public/strings/translations/blink_strings_no.xtb index a7b3ad6..1499c1084 100644 --- a/third_party/blink/public/strings/translations/blink_strings_no.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_no.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Det ser ut til at det står <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ordlistereferanse</translation> <translation id="4522570452068850558">Detaljer</translation> -<translation id="4542388879936266156">tid som gjenstår: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">skjema</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">En del etterfulgt av «<ph name="ATSIGN" />» kan ikke inneholde symbolet «<ph name="INVALIDCHARACTER" />».</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_or.xtb b/third_party/blink/public/strings/translations/blink_strings_or.xtb index 334ee6f..a0cf9422 100644 --- a/third_party/blink/public/strings/translations/blink_strings_or.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_or.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ଏହି ସୂଚନା ଏହି ବିଷୟରେ ଲାଗୁଛି: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ଶବ୍ଦାବଳୀର ସନ୍ଦର୍ଭ</translation> <translation id="4522570452068850558">ବିବରଣୀ</translation> -<translation id="4542388879936266156">ଅବଶିଷ୍ଟ ସମୟ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ଫର୍ମ</translation> <translation id="4661075872484491155">ଟ୍ରୀ</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' ପରେ ଆସୁଥିବା ଅଂଶରେ '<ph name="INVALIDCHARACTER" />' ଚିହ୍ନ ରହିବା ଉଚିତ ନୁହେଁ।</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pa.xtb b/third_party/blink/public/strings/translations/blink_strings_pa.xtb index 991a9b8..f96da4e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pa.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pa.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ ਕਿਹਾ ਜਾ ਰਿਹਾ ਹੈ: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ਸ਼ਬਦਾਵਲੀ ਦਾ ਹਵਾਲਾ</translation> <translation id="4522570452068850558">ਵੇਰਵੇ</translation> -<translation id="4542388879936266156">ਬਾਕੀ ਸਮਾਂ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ਫ਼ਾਰਮ</translation> <translation id="4661075872484491155">ਰੁੱਖ</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' ਤੋਂ ਬਾਅਦ ਇੱਕ ਭਾਗ ਵਿੱਚ ਚਿੰਨ੍ਹ '<ph name="INVALIDCHARACTER" />' ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ।</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pl.xtb b/third_party/blink/public/strings/translations/blink_strings_pl.xtb index 745f0a0..5d8f797 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Wygląda jak napis: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">odniesienie do słownika</translation> <translation id="4522570452068850558">Szczegóły</translation> -<translation id="4542388879936266156">pozostało: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formularz</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Część po znaku „<ph name="ATSIGN" />” nie może zawierać symbolu „<ph name="INVALIDCHARACTER" />”.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb index 93ae39e4..6e498dc 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Parece dizer: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referência de glossário</translation> <translation id="4522570452068850558">Saiba mais</translation> -<translation id="4542388879936266156">tempo restante: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulário</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">A parte depois de "<ph name="ATSIGN" />" não deve conter o símbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb index 21246a9..e0e7c333 100644 --- a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Parece indicar: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referência do glossário</translation> <translation id="4522570452068850558">Detalhes</translation> -<translation id="4542388879936266156">tempo restante: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulário</translation> <translation id="4661075872484491155">árvore</translation> <translation id="4664250907885839816">Uma parte a seguir a "<ph name="ATSIGN" />" não deve conter o símbolo "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ro.xtb b/third_party/blink/public/strings/translations/blink_strings_ro.xtb index 54ee043..0d6978a 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ro.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ro.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Se pare că spune: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">trimitere la glosar</translation> <translation id="4522570452068850558">Detalii</translation> -<translation id="4542388879936266156">timp rămas: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formular</translation> <translation id="4661075872484491155">arbore</translation> <translation id="4664250907885839816">Valoarea care urmează după semnul „<ph name="ATSIGN" />” nu trebuie să conțină simbolul „<ph name="INVALIDCHARACTER" />”.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ru.xtb b/third_party/blink/public/strings/translations/blink_strings_ru.xtb index 0c3f51bd..408283f 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ru.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ru.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Похоже, тут написано "<ph name="OCR_TEXT" />"</translation> <translation id="4446524499724042288">ссылка на словарную статью</translation> <translation id="4522570452068850558">Подробнее</translation> -<translation id="4542388879936266156">осталось времени: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">форма</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Часть адреса после символа "<ph name="ATSIGN" />" не должна содержать символ "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_si.xtb b/third_party/blink/public/strings/translations/blink_strings_si.xtb index 739334c8..1f86425 100644 --- a/third_party/blink/public/strings/translations/blink_strings_si.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_si.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">මෙසේ කියන බව පෙනේ: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ශබ්ද මාලා යොමුව</translation> <translation id="4522570452068850558">විස්තර</translation> -<translation id="4542388879936266156">ඉතිරි කාලය: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">පෝරමය</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">පහත ඒවායින් කොටසක් '<ph name="ATSIGN" />' තුළ මෙම සංකේතය අඩංගු නොවිය යුතුය '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sk.xtb b/third_party/blink/public/strings/translations/blink_strings_sk.xtb index 4057fa7..67f6b3b2e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sk.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Zrejme znamená: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">glosárový termín</translation> <translation id="4522570452068850558">Podrobnosti</translation> -<translation id="4542388879936266156">zostávajúci čas: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulár</translation> <translation id="4661075872484491155">strom</translation> <translation id="4664250907885839816">Časť za znakom <ph name="ATSIGN" /> by nemala obsahovať symbol <ph name="INVALIDCHARACTER" />.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sl.xtb b/third_party/blink/public/strings/translations/blink_strings_sl.xtb index 7f532dea..8241f09 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Videti je, da piše: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">vnos v glosarju</translation> <translation id="4522570452068850558">Podrobnosti</translation> -<translation id="4542388879936266156">preostali čas: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">obrazec</translation> <translation id="4661075872484491155">drevo</translation> <translation id="4664250907885839816">Del po »<ph name="ATSIGN" />« ne sme vsebovati znaka »<ph name="INVALIDCHARACTER" />«.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sq.xtb b/third_party/blink/public/strings/translations/blink_strings_sq.xtb index 5969ace8..1ebf29bb 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sq.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sq.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Duket se thotë: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">referencë fjalorthi</translation> <translation id="4522570452068850558">Detajet</translation> -<translation id="4542388879936266156">koha e mbetur: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulari</translation> <translation id="4661075872484491155">pemë</translation> <translation id="4664250907885839816">Një pjesë që ndjek "<ph name="ATSIGN" />" nuk duhet të përmbajë simbolin "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr.xtb b/third_party/blink/public/strings/translations/blink_strings_sr.xtb index 4854cf91e..be35f21 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Изгледа да пише: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">референца речника термина</translation> <translation id="4522570452068850558">Детаљи</translation> -<translation id="4542388879936266156">преостало време: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">образац</translation> <translation id="4661075872484491155">стабло</translation> <translation id="4664250907885839816">Део после „<ph name="ATSIGN" />“ не треба да садржи симбол „<ph name="INVALIDCHARACTER" />“.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sv.xtb b/third_party/blink/public/strings/translations/blink_strings_sv.xtb index def9f438..3402832 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sv.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Säger troligen: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">hänvisning till ordlista</translation> <translation id="4522570452068850558">Info</translation> -<translation id="4542388879936266156">tid som återstår: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">formulär</translation> <translation id="4661075872484491155">träd</translation> <translation id="4664250907885839816">En del efter <ph name="ATSIGN" /> får inte innehålla symbolen <ph name="INVALIDCHARACTER" />.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sw.xtb b/third_party/blink/public/strings/translations/blink_strings_sw.xtb index b6854df..40ba529 100644 --- a/third_party/blink/public/strings/translations/blink_strings_sw.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_sw.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Inaonekana kusema: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">marejeleo ya farahasa</translation> <translation id="4522570452068850558">Maelezo</translation> -<translation id="4542388879936266156">muda uliosalia: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">fomu</translation> <translation id="4661075872484491155">mti</translation> <translation id="4664250907885839816">Sehemu inayofuata '<ph name="ATSIGN" />' haipaswi kuwa na alama ya '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ta.xtb b/third_party/blink/public/strings/translations/blink_strings_ta.xtb index f8603ca..c39c3997 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ta.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ta.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822"><ph name="OCR_TEXT" /> என்று சொல்வதாகத் தோன்றுகிறது</translation> <translation id="4446524499724042288">அருஞ்சொல் திரட்டு மேற்கோள்</translation> <translation id="4522570452068850558">விவரங்கள்</translation> -<translation id="4542388879936266156">மீதமுள்ள நேரம்: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">படிவம்</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' ஐத் தொடரும் பகுதியில், '<ph name="INVALIDCHARACTER" />' சின்னம் இருக்கக்கூடாது.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_te.xtb b/third_party/blink/public/strings/translations/blink_strings_te.xtb index e4037df..cc91f01 100644 --- a/third_party/blink/public/strings/translations/blink_strings_te.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ఇది చెబుతున్నట్లుగా ఉంది: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">పదకోశ సూచన</translation> <translation id="4522570452068850558">వివరాలు</translation> -<translation id="4542388879936266156">మిగిలి ఉన్న సమయం: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ఫారమ్</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />'కి తర్వాత ఉన్న భాగంలో '<ph name="INVALIDCHARACTER" />' చిహ్నం ఉండకూడదు.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_th.xtb b/third_party/blink/public/strings/translations/blink_strings_th.xtb index 620179d..b6ce692 100644 --- a/third_party/blink/public/strings/translations/blink_strings_th.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_th.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">ดูเหมือนจะพูดว่า <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ข้อมูลอ้างอิงอภิธานศัพท์</translation> <translation id="4522570452068850558">รายละเอียด</translation> -<translation id="4542388879936266156">เวลาที่เหลือ: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ฟอร์ม</translation> <translation id="4661075872484491155">แผนผัง</translation> <translation id="4664250907885839816">ส่วนที่ต่อท้าย "<ph name="ATSIGN" />" ต้องไม่มีสัญลักษณ์ "<ph name="INVALIDCHARACTER" />"</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_tr.xtb b/third_party/blink/public/strings/translations/blink_strings_tr.xtb index 710f9a0..96e6c81d 100644 --- a/third_party/blink/public/strings/translations/blink_strings_tr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_tr.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Şöyle diyor olabilir: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">terimler sözlüğü referansı</translation> <translation id="4522570452068850558">Ayrıntılar</translation> -<translation id="4542388879936266156">kalan süre: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">form</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">Başında "<ph name="ATSIGN" />" bulunan kısımda "<ph name="INVALIDCHARACTER" />" simgesi bulunmamalıdır.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_uk.xtb b/third_party/blink/public/strings/translations/blink_strings_uk.xtb index 7f7149cf2..c30bbf2 100644 --- a/third_party/blink/public/strings/translations/blink_strings_uk.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_uk.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Схоже, на зображенні написано "<ph name="OCR_TEXT" />"</translation> <translation id="4446524499724042288">посилання на глосарій</translation> <translation id="4522570452068850558">Деталі</translation> -<translation id="4542388879936266156">залишилося часу: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">форма</translation> <translation id="4661075872484491155">дерево</translation> <translation id="4664250907885839816">Частина після знака "<ph name="ATSIGN" />" не може містити символ "<ph name="INVALIDCHARACTER" />".</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ur.xtb b/third_party/blink/public/strings/translations/blink_strings_ur.xtb index 399852b7..0fb17d4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ur.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ur.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">بظاہر یہ لکھا ہے: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">فرہنگ کا حوالہ</translation> <translation id="4522570452068850558">تفصیلات</translation> -<translation id="4542388879936266156">باقی وقت: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">فارم</translation> <translation id="4661075872484491155">ٹری</translation> <translation id="4664250907885839816">'<ph name="ATSIGN" />' کے بعد کے حصہ میں علامت '<ph name="INVALIDCHARACTER" />' شامل نہیں ہونی چاہیے۔</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_uz.xtb b/third_party/blink/public/strings/translations/blink_strings_uz.xtb index d7da4354..2066f29 100644 --- a/third_party/blink/public/strings/translations/blink_strings_uz.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_uz.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Bunday yozilgan shekilli: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">lug‘at havolasi</translation> <translation id="4522570452068850558">Tafsilotlar</translation> -<translation id="4542388879936266156">qolgan vaqt: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">shakl</translation> <translation id="4661075872484491155">daraxt</translation> <translation id="4664250907885839816">Manzillar qatorining “<ph name="ATSIGN" />” qismida “<ph name="INVALIDCHARACTER" />” belgisi bo‘lmasligi kerak.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_vi.xtb b/third_party/blink/public/strings/translations/blink_strings_vi.xtb index ab46f946..05e3253 100644 --- a/third_party/blink/public/strings/translations/blink_strings_vi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Có vẻ như nội dung là: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">tham chiếu bảng thuật ngữ</translation> <translation id="4522570452068850558">Chi tiết</translation> -<translation id="4542388879936266156">thời gian còn lại: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">biểu mẫu</translation> <translation id="4661075872484491155">cây</translation> <translation id="4664250907885839816">Phần đứng sau '<ph name="ATSIGN" />' không được chứa biểu tượng '<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb b/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb index 2033147..4cf67757 100644 --- a/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">似乎是说:<ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">词汇表参考资料</translation> <translation id="4522570452068850558">详细信息</translation> -<translation id="4542388879936266156">剩余时间:<ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">表单</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">“<ph name="ATSIGN" />”后面的内容不应包含符号“<ph name="INVALIDCHARACTER" />”。</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zh-HK.xtb b/third_party/blink/public/strings/translations/blink_strings_zh-HK.xtb index 1102d13..2bda4c2 100644 --- a/third_party/blink/public/strings/translations/blink_strings_zh-HK.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_zh-HK.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">圖片上面嘅字似乎係:<ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">詞彙表參考資料</translation> <translation id="4522570452068850558">詳情</translation> -<translation id="4542388879936266156">剩餘時間:<ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">表格</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">「<ph name="ATSIGN" />」後面的部分不應包含「<ph name="INVALIDCHARACTER" />」符號。</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb b/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb index 13ca39f..16fb8bf 100644 --- a/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">圖片上的文字似乎是:<ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">詞彙解釋參考資料</translation> <translation id="4522570452068850558">詳細資訊</translation> -<translation id="4542388879936266156">剩餘時間:<ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">表單</translation> <translation id="4661075872484491155">tree</translation> <translation id="4664250907885839816">「<ph name="ATSIGN" />」後面的部分不應包含「<ph name="INVALIDCHARACTER" />」符號。</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zu.xtb b/third_party/blink/public/strings/translations/blink_strings_zu.xtb index e1776f3..992b7e8 100644 --- a/third_party/blink/public/strings/translations/blink_strings_zu.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_zu.xtb
@@ -101,7 +101,6 @@ <translation id="4444765639179266822">Ibonakala ithi: <ph name="OCR_TEXT" /></translation> <translation id="4446524499724042288">ireferensi yeglosari</translation> <translation id="4522570452068850558">Imininingwane</translation> -<translation id="4542388879936266156">isikhathi esisele: <ph name="REMAINING_TIME" /></translation> <translation id="4597532268155981612">ifomu</translation> <translation id="4661075872484491155">isihlahla</translation> <translation id="4664250907885839816">Ingxenye elandelai-'<ph name="ATSIGN" />' akumele iqukathe isimbuli engu-'<ph name="INVALIDCHARACTER" />'.</translation>
diff --git a/third_party/blink/public/web/web_performance.h b/third_party/blink/public/web/web_performance.h index 3fb8396..730f436 100644 --- a/third_party/blink/public/web/web_performance.h +++ b/third_party/blink/public/web/web_performance.h
@@ -98,10 +98,10 @@ BLINK_EXPORT double LargestTextPaint() const; BLINK_EXPORT uint64_t LargestTextPaintSize() const; BLINK_EXPORT double FirstInputOrScrollNotifiedTimestamp() const; - BLINK_EXPORT double FirstInputDelay() const; - BLINK_EXPORT double FirstInputTimestamp() const; - BLINK_EXPORT double LongestInputDelay() const; - BLINK_EXPORT double LongestInputTimestamp() const; + BLINK_EXPORT base::Optional<base::TimeDelta> FirstInputDelay() const; + BLINK_EXPORT base::Optional<base::TimeDelta> FirstInputTimestamp() const; + BLINK_EXPORT base::Optional<base::TimeDelta> LongestInputDelay() const; + BLINK_EXPORT base::Optional<base::TimeDelta> LongestInputTimestamp() const; BLINK_EXPORT double TotalInputDelay() const; BLINK_EXPORT double TotalAdjustedInputDelay() const; BLINK_EXPORT uint64_t NumInputEvents() const;
diff --git a/third_party/blink/renderer/bindings/.style.yapf b/third_party/blink/renderer/.style.yapf similarity index 100% rename from third_party/blink/renderer/bindings/.style.yapf rename to third_party/blink/renderer/.style.yapf
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni index e03f8c7..c1a56964 100644 --- a/third_party/blink/renderer/bindings/generated_in_modules.gni +++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -966,6 +966,8 @@ "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_push_subscription_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_quic_transport.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_quic_transport.h", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_receive_stream.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_receive_stream.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_relative_orientation_sensor.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_relative_orientation_sensor.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_remote_playback.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni index 6b1718b..d7d2cd1 100644 --- a/third_party/blink/renderer/bindings/idl_in_modules.gni +++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -896,8 +896,10 @@ "//third_party/blink/renderer/modules/websockets/websocket_connection.idl", "//third_party/blink/renderer/modules/websockets/websocket_stream.idl", "//third_party/blink/renderer/modules/websockets/websocket_stream_options.idl", + "//third_party/blink/renderer/modules/webtransport/incoming_stream.idl", "//third_party/blink/renderer/modules/webtransport/outgoing_stream.idl", "//third_party/blink/renderer/modules/webtransport/quic_transport.idl", + "//third_party/blink/renderer/modules/webtransport/receive_stream.idl", "//third_party/blink/renderer/modules/webtransport/send_stream.idl", "//third_party/blink/renderer/modules/webtransport/stream_abort_info.idl", "//third_party/blink/renderer/modules/webtransport/web_transport_close_info.idl",
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py index 11c0aef..dbcbc660 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
@@ -423,7 +423,8 @@ "${exception_state}", ] if "StringContext" in idl_type.effective_annotations: - arguments.append("${execution_context}") + arguments.append( + "bindings::ExecutionContextFromV8Wrappable(${blink_receiver})") blink_value_expr = _format( "NativeValueTraits<{_1}>::{_2}({_3})", _1=native_value_tag(idl_type), @@ -490,7 +491,8 @@ str(v8_array_start_index), "${exception_state}" ] if "StringContext" in idl_type.element_type.effective_annotations: - arguments.append("${execution_context}") + arguments.append( + "bindings::ExecutionContextFromV8Wrappable(${blink_receiver})") text = _format( pattern, _1=blink_var_name,
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py index d77693d..523d465 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py
@@ -1501,11 +1501,13 @@ body = func_def.body if cg_context.operation_group: + body.append(make_operation_entry(cg_context)) + body.append(EmptyNode()) body.append(make_cooperative_scheduling_safepoint(cg_context)) body.append(EmptyNode()) if cg_context.constructor_group: - body.append(make_check_constructor_call(cg_context)) + body.append(make_constructor_entry(cg_context)) body.append(EmptyNode()) body.append(make_overload_dispatcher(cg_context)) @@ -1513,6 +1515,17 @@ return func_def +def make_constructor_entry(cg_context): + assert isinstance(cg_context, CodeGenContext) + + return SequenceNode([ + make_runtime_call_timer_scope(cg_context), + make_bindings_trace_event(cg_context), + EmptyNode(), + make_check_constructor_call(cg_context), + ]) + + def make_constructor_function_def(cg_context, function_name): assert isinstance(cg_context, CodeGenContext) assert isinstance(function_name, str) @@ -1522,9 +1535,11 @@ func_def = _make_empty_callback_def(cg_context, function_name) body = func_def.body + if len(cg_context.constructor_group) == 1: + body.append(make_constructor_entry(cg_context)) + body.append(EmptyNode()) + body.extend([ - make_runtime_call_timer_scope(cg_context), - make_bindings_trace_event(cg_context), make_report_deprecate_as(cg_context), make_report_measure_as(cg_context), make_log_activity(cg_context), @@ -1606,6 +1621,15 @@ return func_def +def make_operation_entry(cg_context): + assert isinstance(cg_context, CodeGenContext) + + return SequenceNode([ + make_runtime_call_timer_scope(cg_context), + make_bindings_trace_event(cg_context), + ]) + + def make_operation_function_def(cg_context, function_name): assert isinstance(cg_context, CodeGenContext) assert isinstance(function_name, str) @@ -1613,9 +1637,11 @@ func_def = _make_empty_callback_def(cg_context, function_name) body = func_def.body + if not cg_context.operation_group or len(cg_context.operation_group) == 1: + body.append(make_operation_entry(cg_context)) + body.append(EmptyNode()) + body.extend([ - make_runtime_call_timer_scope(cg_context), - make_bindings_trace_event(cg_context), make_report_deprecate_as(cg_context), make_report_measure_as(cg_context), make_log_activity(cg_context),
diff --git a/third_party/blink/renderer/build/scripts/.style.yapf b/third_party/blink/renderer/build/scripts/.style.yapf deleted file mode 100644 index 557fa7b..0000000 --- a/third_party/blink/renderer/build/scripts/.style.yapf +++ /dev/null
@@ -1,2 +0,0 @@ -[style] -based_on_style = pep8
diff --git a/third_party/blink/renderer/build/scripts/blinkbuild/PRESUBMIT.py b/third_party/blink/renderer/build/scripts/blinkbuild/PRESUBMIT.py index 393539e..e0735b1 100644 --- a/third_party/blink/renderer/build/scripts/blinkbuild/PRESUBMIT.py +++ b/third_party/blink/renderer/build/scripts/blinkbuild/PRESUBMIT.py
@@ -13,8 +13,8 @@ print('Running ' + cmd_name) else: cmd.append('--suppress-diff') - test_cmd = input_api.Command(name=cmd_name, cmd=cmd, - kwargs={}, message=output_api.PresubmitError) + test_cmd = input_api.Command( + name=cmd_name, cmd=cmd, kwargs={}, message=output_api.PresubmitError) return input_api.RunTests([test_cmd])
diff --git a/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter.py b/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter.py index 1940904..dd1978d 100644 --- a/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter.py +++ b/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter.py
@@ -66,7 +66,9 @@ 'XR', ] -_SPECIAL_TOKENS_WITH_NUMBERS = [token for token in SPECIAL_TOKENS if re.search(r'[0-9]', token)] +_SPECIAL_TOKENS_WITH_NUMBERS = [ + token for token in SPECIAL_TOKENS if re.search(r'[0-9]', token) +] # Applying _TOKEN_PATTERNS repeatedly should capture any sequence of a-z, A-Z, # 0-9. @@ -80,7 +82,8 @@ '[0-9]+', ] -_TOKEN_RE = re.compile(r'(' + '|'.join(SPECIAL_TOKENS + _TOKEN_PATTERNS) + r')') +_TOKEN_RE = re.compile(r'(' + '|'.join(SPECIAL_TOKENS + _TOKEN_PATTERNS) + + r')') def tokenize_name(name): @@ -103,7 +106,8 @@ # In case |name| is written in lowerCamelCase, we try to match special # tokens that contains numbers ignoring cases only at the first step. tokens = [] - match = re.search(r'^(' + '|'.join(_SPECIAL_TOKENS_WITH_NUMBERS) + r')', name, re.IGNORECASE) + match = re.search(r'^(' + '|'.join(_SPECIAL_TOKENS_WITH_NUMBERS) + r')', + name, re.IGNORECASE) if match: tokens.append(match.group(0)) name = name[match.end(0):] @@ -176,7 +180,8 @@ """ if not self.tokens: return '' - return self.tokens[0].lower() + ''.join([token[0].upper() + token[1:] for token in self.tokens[1:]]) + return self.tokens[0].lower() + ''.join( + [token[0].upper() + token[1:] for token in self.tokens[1:]]) def to_macro_case(self): """Macro case is the macro name style per Google C++ Style Guide:
diff --git a/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter_test.py b/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter_test.py index 4b5e7170..5102efa 100644 --- a/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter_test.py +++ b/third_party/blink/renderer/build/scripts/blinkbuild/name_style_converter_test.py
@@ -3,7 +3,6 @@ # found in the LICENSE file. # pylint: disable=import-error,print-statement,relative-import,protected-access - """Unit tests for name_style_converter.py.""" import unittest @@ -29,118 +28,178 @@ self.assertEqual(tokenize_name('foo2'), ['foo', '2']) def test_tricky_cases(self): - self.assertEqual(tokenize_name('XMLHttpRequest'), ['XML', 'Http', 'Request']) + self.assertEqual( + tokenize_name('XMLHttpRequest'), ['XML', 'Http', 'Request']) self.assertEqual(tokenize_name('HTMLElement'), ['HTML', 'Element']) - self.assertEqual(tokenize_name('WebGLRenderingContext'), - ['WebGL', 'Rendering', 'Context']) + self.assertEqual( + tokenize_name('WebGLRenderingContext'), + ['WebGL', 'Rendering', 'Context']) - self.assertEqual(tokenize_name('CanvasRenderingContext2D'), - ['Canvas', 'Rendering', 'Context', '2D']) - self.assertEqual(tokenize_name('CanvasRenderingContext2DAPITest'), - ['Canvas', 'Rendering', 'Context', '2D', 'API', 'Test']) + self.assertEqual( + tokenize_name('CanvasRenderingContext2D'), + ['Canvas', 'Rendering', 'Context', '2D']) + self.assertEqual( + tokenize_name('CanvasRenderingContext2DAPITest'), + ['Canvas', 'Rendering', 'Context', '2D', 'API', 'Test']) - self.assertEqual(tokenize_name('SVGSVGElement'), ['SVG', 'SVG', 'Element']) + self.assertEqual( + tokenize_name('SVGSVGElement'), ['SVG', 'SVG', 'Element']) - self.assertEqual(tokenize_name('CanvasRenderingContext2D'), - ['Canvas', 'Rendering', 'Context', '2D']) + self.assertEqual( + tokenize_name('CanvasRenderingContext2D'), + ['Canvas', 'Rendering', 'Context', '2D']) - self.assertEqual(tokenize_name('CSSURLImageValue'), ['CSS', 'URL', 'Image', 'Value']) - self.assertEqual(tokenize_name('CSSPropertyAPID'), ['CSS', 'Property', 'API', 'D']) - self.assertEqual(tokenize_name('AXARIAGridCell'), ['AX', 'ARIA', 'Grid', 'Cell']) + self.assertEqual( + tokenize_name('CSSURLImageValue'), + ['CSS', 'URL', 'Image', 'Value']) + self.assertEqual( + tokenize_name('CSSPropertyAPID'), ['CSS', 'Property', 'API', 'D']) + self.assertEqual( + tokenize_name('AXARIAGridCell'), ['AX', 'ARIA', 'Grid', 'Cell']) self.assertEqual(tokenize_name('CDATASection'), ['CDATA', 'Section']) self.assertEqual(tokenize_name('ASCIICType'), ['ASCII', 'CType']) - self.assertEqual(tokenize_name('HTMLDListElement'), ['HTML', 'DList', 'Element']) - self.assertEqual(tokenize_name('HTMLOListElement'), ['HTML', 'OList', 'Element']) - self.assertEqual(tokenize_name('HTMLIFrameElement'), ['HTML', 'IFrame', 'Element']) - self.assertEqual(tokenize_name('HTMLPlugInElement'), ['HTML', 'PlugIn', 'Element']) + self.assertEqual( + tokenize_name('HTMLDListElement'), ['HTML', 'DList', 'Element']) + self.assertEqual( + tokenize_name('HTMLOListElement'), ['HTML', 'OList', 'Element']) + self.assertEqual( + tokenize_name('HTMLIFrameElement'), ['HTML', 'IFrame', 'Element']) + self.assertEqual( + tokenize_name('HTMLPlugInElement'), ['HTML', 'PlugIn', 'Element']) # No special handling for OptGroup, FieldSet, and TextArea. - self.assertEqual(tokenize_name('HTMLOptGroupElement'), ['HTML', 'Opt', 'Group', 'Element']) - self.assertEqual(tokenize_name('HTMLFieldSetElement'), ['HTML', 'Field', 'Set', 'Element']) - self.assertEqual(tokenize_name('HTMLTextAreaElement'), ['HTML', 'Text', 'Area', 'Element']) + self.assertEqual( + tokenize_name('HTMLOptGroupElement'), + ['HTML', 'Opt', 'Group', 'Element']) + self.assertEqual( + tokenize_name('HTMLFieldSetElement'), + ['HTML', 'Field', 'Set', 'Element']) + self.assertEqual( + tokenize_name('HTMLTextAreaElement'), + ['HTML', 'Text', 'Area', 'Element']) self.assertEqual(tokenize_name('Path2D'), ['Path', '2D']) self.assertEqual(tokenize_name('Point2D'), ['Point', '2D']) - self.assertEqual(tokenize_name('CanvasRenderingContext2DState'), - ['Canvas', 'Rendering', 'Context', '2D', 'State']) - self.assertEqual(tokenize_name('Accelerated2dCanvas'), ['Accelerated', '2d', 'Canvas']) + self.assertEqual( + tokenize_name('CanvasRenderingContext2DState'), + ['Canvas', 'Rendering', 'Context', '2D', 'State']) + self.assertEqual( + tokenize_name('Accelerated2dCanvas'), + ['Accelerated', '2d', 'Canvas']) - self.assertEqual(tokenize_name('RTCDTMFSender'), ['RTC', 'DTMF', 'Sender']) + self.assertEqual( + tokenize_name('RTCDTMFSender'), ['RTC', 'DTMF', 'Sender']) - self.assertEqual(tokenize_name('WebGLCompressedTextureS3TCsRGB'), - ['WebGL', 'Compressed', 'Texture', 'S3TC', 'sRGB']) - self.assertEqual(tokenize_name('WebGL2CompressedTextureETC1'), - ['WebGL2', 'Compressed', 'Texture', 'ETC1']) + self.assertEqual( + tokenize_name('WebGLCompressedTextureS3TCsRGB'), + ['WebGL', 'Compressed', 'Texture', 'S3TC', 'sRGB']) + self.assertEqual( + tokenize_name('WebGL2CompressedTextureETC1'), + ['WebGL2', 'Compressed', 'Texture', 'ETC1']) self.assertEqual(tokenize_name('EXTsRGB'), ['EXT', 'sRGB']) # 'PVRTC' contains a special token 'RTC', but it should be a # single token. - self.assertEqual(tokenize_name('WebGLCompressedTexturePVRTC'), - ['WebGL', 'Compressed', 'Texture', 'PVRTC']) + self.assertEqual( + tokenize_name('WebGLCompressedTexturePVRTC'), + ['WebGL', 'Compressed', 'Texture', 'PVRTC']) - self.assertEqual(tokenize_name('SVGFEBlendElement'), ['SVG', 'FE', 'Blend', 'Element']) - self.assertEqual(tokenize_name('SVGMPathElement'), ['SVG', 'MPath', 'Element']) - self.assertEqual(tokenize_name('SVGTSpanElement'), ['SVG', 'TSpan', 'Element']) - self.assertEqual(tokenize_name('SVGURIReference'), ['SVG', 'URI', 'Reference']) + self.assertEqual( + tokenize_name('SVGFEBlendElement'), + ['SVG', 'FE', 'Blend', 'Element']) + self.assertEqual( + tokenize_name('SVGMPathElement'), ['SVG', 'MPath', 'Element']) + self.assertEqual( + tokenize_name('SVGTSpanElement'), ['SVG', 'TSpan', 'Element']) + self.assertEqual( + tokenize_name('SVGURIReference'), ['SVG', 'URI', 'Reference']) - self.assertEqual(tokenize_name('UTF16TextIterator'), ['UTF16', 'Text', 'Iterator']) + self.assertEqual( + tokenize_name('UTF16TextIterator'), ['UTF16', 'Text', 'Iterator']) self.assertEqual(tokenize_name('UTF8Decoder'), ['UTF8', 'Decoder']) self.assertEqual(tokenize_name('Uint8Array'), ['Uint8', 'Array']) - self.assertEqual(tokenize_name('DOMWindowBase64'), ['DOM', 'Window', 'Base64']) - self.assertEqual(tokenize_name('TextCodecLatin1'), ['Text', 'Codec', 'Latin1']) - self.assertEqual(tokenize_name('V8BindingForCore'), ['V8', 'Binding', 'For', 'Core']) + self.assertEqual( + tokenize_name('DOMWindowBase64'), ['DOM', 'Window', 'Base64']) + self.assertEqual( + tokenize_name('TextCodecLatin1'), ['Text', 'Codec', 'Latin1']) + self.assertEqual( + tokenize_name('V8BindingForCore'), + ['V8', 'Binding', 'For', 'Core']) self.assertEqual(tokenize_name('V8DOMRect'), ['V8', 'DOM', 'Rect']) - self.assertEqual(tokenize_name('String16MojomTraits'), ['String16', 'Mojom', 'Traits']) + self.assertEqual( + tokenize_name('String16MojomTraits'), + ['String16', 'Mojom', 'Traits']) - self.assertEqual(tokenize_name('V0InsertionPoint'), ['V0', 'Insertion', 'Point']) - self.assertEqual(tokenize_name('ShadowDOMV0Test'), ['Shadow', 'DOM', 'V0', 'Test']) - self.assertEqual(tokenize_name('ElementShadowV0'), ['Element', 'Shadow', 'V0']) - self.assertEqual(tokenize_name('StubChromeClientForSPv2'), - ['Stub', 'Chrome', 'Client', 'For', 'SPv2']) + self.assertEqual( + tokenize_name('V0InsertionPoint'), ['V0', 'Insertion', 'Point']) + self.assertEqual( + tokenize_name('ShadowDOMV0Test'), ['Shadow', 'DOM', 'V0', 'Test']) + self.assertEqual( + tokenize_name('ElementShadowV0'), ['Element', 'Shadow', 'V0']) + self.assertEqual( + tokenize_name('StubChromeClientForSPv2'), + ['Stub', 'Chrome', 'Client', 'For', 'SPv2']) - self.assertEqual(tokenize_name('SQLiteAuthorizer'), ['SQLite', 'Authorizer']) - self.assertEqual(tokenize_name('XPathEvaluator'), ['XPath', 'Evaluator']) + self.assertEqual( + tokenize_name('SQLiteAuthorizer'), ['SQLite', 'Authorizer']) + self.assertEqual( + tokenize_name('XPathEvaluator'), ['XPath', 'Evaluator']) - self.assertEqual(tokenize_name('IsXHTMLDocument'), ['Is', 'XHTML', 'Document']) - self.assertEqual(tokenize_name('isHTMLDocument'), ['is', 'HTML', 'Document']) + self.assertEqual( + tokenize_name('IsXHTMLDocument'), ['Is', 'XHTML', 'Document']) + self.assertEqual( + tokenize_name('isHTMLDocument'), ['is', 'HTML', 'Document']) self.assertEqual(tokenize_name('matrix3d'), ['matrix', '3d']) - self.assertEqual(tokenize_name('uint8ArrayMember'), ['uint8', 'Array', 'Member']) + self.assertEqual( + tokenize_name('uint8ArrayMember'), ['uint8', 'Array', 'Member']) self.assertEqual(tokenize_name('webgl2Element'), ['webgl2', 'Element']) self.assertEqual(tokenize_name('webGL2Element'), ['webGL2', 'Element']) self.assertEqual(tokenize_name('xssError'), ['xss', 'Error']) self.assertEqual(tokenize_name('FileURLs'), ['File', 'URLs']) - self.assertEqual(tokenize_name('XRDOMOverlay'), ['XR', 'DOM', 'Overlay']) + self.assertEqual( + tokenize_name('XRDOMOverlay'), ['XR', 'DOM', 'Overlay']) def test_ignoring_characters(self): self.assertEqual(tokenize_name('Animation.idl'), ['Animation', 'idl']) - self.assertEqual(tokenize_name('-webkit-appearance'), ['webkit', 'appearance']) + self.assertEqual( + tokenize_name('-webkit-appearance'), ['webkit', 'appearance']) self.assertEqual(tokenize_name(' foo_bar!#"$'), ['foo', 'bar']) class NameStyleConverterTest(unittest.TestCase): def test_original(self): - self.assertEqual(NameStyleConverter('-webkit-appearance').original, '-webkit-appearance') + self.assertEqual( + NameStyleConverter('-webkit-appearance').original, + '-webkit-appearance') def test_snake_case(self): converter = NameStyleConverter('HTMLElement') self.assertEqual(converter.to_snake_case(), 'html_element') - self.assertEqual(NameStyleConverter('FileURLs').to_snake_case(), 'file_urls') + self.assertEqual( + NameStyleConverter('FileURLs').to_snake_case(), 'file_urls') def test_to_class_data_member(self): converter = NameStyleConverter('HTMLElement') self.assertEqual(converter.to_class_data_member(), 'html_element_') - self.assertEqual(converter.to_class_data_member(prefix='is'), 'is_html_element_') - self.assertEqual(converter.to_class_data_member(suffix='enabled'), 'html_element_enabled_') - self.assertEqual(converter.to_class_data_member(prefix='is', suffix='enabled'), 'is_html_element_enabled_') - self.assertEqual(converter.to_class_data_member(prefix='fooBar', suffix='V0V8'), 'foobar_html_element_v0v8_') + self.assertEqual( + converter.to_class_data_member(prefix='is'), 'is_html_element_') + self.assertEqual( + converter.to_class_data_member(suffix='enabled'), + 'html_element_enabled_') + self.assertEqual( + converter.to_class_data_member(prefix='is', suffix='enabled'), + 'is_html_element_enabled_') + self.assertEqual( + converter.to_class_data_member(prefix='fooBar', suffix='V0V8'), + 'foobar_html_element_v0v8_') def test_upper_camel_case(self): converter = NameStyleConverter('someSuperThing') @@ -148,7 +207,8 @@ converter = NameStyleConverter('SVGElement') self.assertEqual(converter.to_upper_camel_case(), 'SVGElement') converter = NameStyleConverter('cssExternalScannerPreload') - self.assertEqual(converter.to_upper_camel_case(), 'CSSExternalScannerPreload') + self.assertEqual(converter.to_upper_camel_case(), + 'CSSExternalScannerPreload') converter = NameStyleConverter('xpathExpression') self.assertEqual(converter.to_upper_camel_case(), 'XPathExpression') converter = NameStyleConverter('feDropShadow') @@ -156,9 +216,14 @@ def test_to_class_name(self): self.assertEqual(NameStyleConverter('').to_class_name(), '') - self.assertEqual(NameStyleConverter('').to_class_name(prefix='s', suffix='d'), 'SD') - self.assertEqual(NameStyleConverter('').to_class_name(prefix='style', suffix='data'), 'StyleData') - self.assertEqual(NameStyleConverter('foo').to_class_name(prefix='style', suffix='data'), 'StyleFooData') + self.assertEqual( + NameStyleConverter('').to_class_name(prefix='s', suffix='d'), 'SD') + self.assertEqual( + NameStyleConverter('').to_class_name( + prefix='style', suffix='data'), 'StyleData') + self.assertEqual( + NameStyleConverter('foo').to_class_name( + prefix='style', suffix='data'), 'StyleFooData') self.assertEqual(NameStyleConverter('xpath').to_class_name(), 'XPath') def test_to_function_name(self): @@ -166,11 +231,17 @@ self.assertEqual(converter.to_function_name(), 'FooBar') self.assertEqual(converter.to_function_name(prefix='is'), 'IsFooBar') self.assertEqual(converter.to_function_name(suffix='BAZ'), 'FooBarBaz') - self.assertEqual(converter.to_function_name(prefix='IS', suffix='baz'), 'IsFooBarBaz') - self.assertEqual(converter.to_function_name(prefix='prefixPrefix', suffix=['a', 'b']), 'PrefixprefixFooBarAB') + self.assertEqual( + converter.to_function_name(prefix='IS', suffix='baz'), + 'IsFooBarBaz') + self.assertEqual( + converter.to_function_name( + prefix='prefixPrefix', suffix=['a', 'b']), + 'PrefixprefixFooBarAB') def test_to_enum_value(self): - self.assertEqual(NameStyleConverter('fooBar').to_enum_value(), 'kFooBar') + self.assertEqual( + NameStyleConverter('fooBar').to_enum_value(), 'kFooBar') def test_lower_camel_case(self): converter = NameStyleConverter('someSuperThing') @@ -182,7 +253,8 @@ converter = NameStyleConverter('-webkit-margin-start') self.assertEqual(converter.to_lower_camel_case(), 'webkitMarginStart') converter = NameStyleConverter('Accelerated2dCanvas') - self.assertEqual(converter.to_lower_camel_case(), 'accelerated2dCanvas') + self.assertEqual(converter.to_lower_camel_case(), + 'accelerated2dCanvas') def test_macro_case(self): converter = NameStyleConverter('WebGLBaz2D') @@ -190,15 +262,19 @@ def test_all_cases(self): converter = NameStyleConverter('SVGScriptElement') - self.assertEqual(converter.to_all_cases(), { - 'snake_case': 'svg_script_element', - 'upper_camel_case': 'SVGScriptElement', - 'macro_case': 'SVG_SCRIPT_ELEMENT', - }) + self.assertEqual( + converter.to_all_cases(), { + 'snake_case': 'svg_script_element', + 'upper_camel_case': 'SVGScriptElement', + 'macro_case': 'SVG_SCRIPT_ELEMENT', + }) def test_to_header_guard(self): - converter = NameStyleConverter('third_party/blink/renderer/bindings/modules/v8/v8_path_2d.h') - self.assertEqual(converter.to_header_guard(), 'THIRD_PARTY_BLINK_RENDERER_BINDINGS_MODULES_V8_V8_PATH_2D_H_') + converter = NameStyleConverter( + 'third_party/blink/renderer/bindings/modules/v8/v8_path_2d.h') + self.assertEqual( + converter.to_header_guard(), + 'THIRD_PARTY_BLINK_RENDERER_BINDINGS_MODULES_V8_V8_PATH_2D_H_') def test_equality(self): a_1 = NameStyleConverter('a')
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py index 9a4bcaf..1c3cfe3 100755 --- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py +++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -10,16 +10,10 @@ from name_utilities import enum_key_for_css_property, id_for_css_property from name_utilities import enum_key_for_css_property_alias, id_for_css_property_alias - # These values are converted using CSSPrimitiveValue in the setter function, # if applicable. PRIMITIVE_TYPES = [ - 'short', - 'unsigned short', - 'int', - 'unsigned int', - 'unsigned', - 'float', + 'short', 'unsigned short', 'int', 'unsigned int', 'unsigned', 'float', 'LineClampValue' ] @@ -104,7 +98,8 @@ for feature in origin_trials_writer.origin_trial_features: origin_trial_features[str(feature['name'])] = True - self.add_properties(css_properties_file.name_dictionaries, origin_trial_features) + self.add_properties(css_properties_file.name_dictionaries, + origin_trial_features) assert self._first_enum_value + len(self._properties_by_id) < \ self._alias_offset, \ @@ -117,8 +112,7 @@ self._extra_fields = [] for i in range(3, len(file_paths)): fields = json5_generator.Json5File.load_from_files( - [file_paths[i]], - default_parameters=self._default_parameters) + [file_paths[i]], default_parameters=self._default_parameters) self._extra_fields.extend(fields.name_dictionaries) for field in self._extra_fields: self.expand_parameters(field) @@ -134,12 +128,15 @@ self.expand_surrogate(property_) self._aliases = [ - property_ for property_ in properties if property_['alias_for']] + property_ for property_ in properties if property_['alias_for'] + ] self._shorthands = [ - property_ for property_ in properties if property_['longhands']] + property_ for property_ in properties if property_['longhands'] + ] self._longhands = [ - property_ for property_ in properties if ( - not property_['alias_for'] and not property_['longhands'])] + property_ for property_ in properties + if (not property_['alias_for'] and not property_['longhands']) + ] # Sort the properties by priority, then alphabetically. Ensure that # the resulting order is deterministic. @@ -215,14 +212,15 @@ "Property '{}' is an alias with a runtime_flag, "\ "but runtime flags do not currently work for aliases.".format( alias['name']) - aliased_property = self._properties_by_id[ - id_for_css_property(alias['alias_for'])] + aliased_property = self._properties_by_id[id_for_css_property( + alias['alias_for'])] aliased_property.setdefault('aliases', []) aliased_property['aliases'].append(alias['name'].original) updated_alias = aliased_property.copy() updated_alias['name'] = alias['name'] updated_alias['alias_for'] = alias['alias_for'] - updated_alias['aliased_property'] = aliased_property['name'].to_upper_camel_case() + updated_alias['aliased_property'] = aliased_property[ + 'name'].to_upper_camel_case() updated_alias['property_id'] = id_for_css_property_alias( alias['name']) updated_alias['enum_key'] = enum_key_for_css_property_alias( @@ -256,24 +254,26 @@ set_if_none(property_, 'name_for_methods', method_name) set_if_none(property_, 'type_name', 'E' + method_name) set_if_none( - property_, - 'getter', - method_name if simple_type_name != method_name else 'Get' + method_name) + property_, 'getter', method_name + if simple_type_name != method_name else 'Get' + method_name) set_if_none(property_, 'setter', 'Set' + method_name) if property_['inherited']: - property_['is_inherited_setter'] = 'Set' + method_name + 'IsInherited' - property_['is_animation_property'] = property_['priority'] == 'Animation' + property_['is_inherited_setter'] = ( + 'Set' + method_name + 'IsInherited') + property_['is_animation_property'] = ( + property_['priority'] == 'Animation') # Figure out whether this property should have style builders at all. # E.g. shorthands do not get style builders. - property_['style_builder_declare'] = (property_['is_property'] and - not property_['longhands']) + property_['style_builder_declare'] = (property_['is_property'] + and not property_['longhands']) # Figure out whether we should generate style builder implementations. for x in ['initial', 'inherit', 'value']: suppressed = x in property_['style_builder_custom_functions'] declared = property_['style_builder_declare'] - property_['style_builder_generate_%s' % x] = declared and not suppressed + property_['style_builder_generate_%s' % x] = (declared + and not suppressed) # Expand StyleBuilderConverter params where necessary. if property_['type_name'] in PRIMITIVE_TYPES: @@ -281,7 +281,8 @@ else: set_if_none(property_, 'converter', 'CSSIdentifierValue') - assert not property_['alias_for'], 'Use expand_aliases to expand aliases' + assert not property_['alias_for'], \ + 'Use expand_aliases to expand aliases' if not property_['longhands']: property_['superclass'] = 'Longhand' property_['namespace_group'] = 'Longhand' @@ -294,13 +295,13 @@ self._field_alias_expander.expand_field_alias(property_) type_name = property_['type_name'] - if (property_['field_template'] == 'keyword' or - property_['field_template'] == 'multi_keyword'): + if (property_['field_template'] == 'keyword' + or property_['field_template'] == 'multi_keyword'): default_value = (type_name + '::' + NameStyleConverter( property_['default_value']).to_enum_value()) - elif (property_['field_template'] == 'external' or - property_['field_template'] == 'primitive' or - property_['field_template'] == 'pointer'): + elif (property_['field_template'] == 'external' + or property_['field_template'] == 'primitive' + or property_['field_template'] == 'pointer'): default_value = property_['default_value'] else: assert property_['field_template'] == 'monotonic_flag', \ @@ -329,7 +330,8 @@ assert 'resolver' in options, 'resolver option is required' assert 'physical_group' in options, 'physical_group option is required' options['resolver_name'] = NameStyleConverter(options['resolver']) - options['physical_group_name'] = NameStyleConverter(options['physical_group']) + options['physical_group_name'] = NameStyleConverter( + options['physical_group']) @property def default_parameters(self): @@ -353,7 +355,9 @@ @property def longhands_including_aliases(self): - return self._longhands + [x for x in self._aliases if not x['longhands']] + return self._longhands + [ + x for x in self._aliases if not x['longhands'] + ] @property def properties_by_id(self):
diff --git a/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py b/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py index d4b4cf8f..d714d5b 100644 --- a/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py +++ b/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py
@@ -13,10 +13,12 @@ should point to core/css/computed_style_field_aliases.json5) and uses that to inform which fields in a given property should be set. """ + def __init__(self, file_path): loaded_file = json5_generator.Json5File.load_from_files([file_path]) - self._field_aliases = dict([(alias["name"], alias) - for alias in loaded_file.name_dictionaries]) + self._field_aliases = dict([ + (alias["name"], alias) for alias in loaded_file.name_dictionaries + ]) def expand_field_alias(self, property_): """
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_primitive_value_unit_trie.py b/third_party/blink/renderer/build/scripts/core/css/make_css_primitive_value_unit_trie.py index 318d113..16edce109 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_primitive_value_unit_trie.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_primitive_value_unit_trie.py
@@ -12,13 +12,17 @@ def __init__(self, json5_file_paths, output_dir): super(UnitTrieWriter, self).__init__(json5_file_paths, output_dir) - self._units = {entry['name'].original: entry['unit_type'] for entry in self.json5_file.name_dictionaries} + self._units = { + entry['name'].original: entry['unit_type'] + for entry in self.json5_file.name_dictionaries + } self._outputs = { 'css_primitive_value_unit_trie.cc': self.generate_implementation } - @template_expander.use_jinja('core/css/templates/css_primitive_value_unit_trie.cc.tmpl') + @template_expander.use_jinja( + 'core/css/templates/css_primitive_value_unit_trie.cc.tmpl') def generate_implementation(self): return { 'input_files': self._input_files,
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_property_names.py b/third_party/blink/renderer/build/scripts/core/css/make_css_property_names.py index 016215c..e20639af8 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_property_names.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_property_names.py
@@ -11,7 +11,8 @@ file_basename = "css_property_names" def __init__(self, json5_file_path, output_dir): - super(CSSPropertyNamesWriter, self).__init__(json5_file_path, output_dir) + super(CSSPropertyNamesWriter, self).__init__(json5_file_path, + output_dir) self._outputs = { (self.file_basename + ".h"): self.generate_header, (self.file_basename + ".cc"): self.generate_implementation, @@ -24,32 +25,40 @@ def _array_item(self, property_): return " CSSPropertyID::%(enum_key)s," % property_ - @template_expander.use_jinja('core/css/templates/css_property_names.h.tmpl') + @template_expander.use_jinja( + 'core/css/templates/css_property_names.h.tmpl') def generate_header(self): return { - 'alias_offset': self._css_properties.alias_offset, - 'class_name': self.class_name, - 'property_enums': "\n".join(map( - self._enum_declaration, - self._css_properties.properties_including_aliases)), - 'property_aliases': "\n".join( - map(self._array_item, self._css_properties.aliases)), - 'first_property_id': self._css_properties.first_property_id, + 'alias_offset': + self._css_properties.alias_offset, + 'class_name': + self.class_name, + 'property_enums': + "\n".join( + map(self._enum_declaration, + self._css_properties.properties_including_aliases)), + 'property_aliases': + "\n".join(map(self._array_item, self._css_properties.aliases)), + 'first_property_id': + self._css_properties.first_property_id, 'properties_count': - len(self._css_properties.properties_including_aliases), - 'last_property_id': self._css_properties.last_property_id, + len(self._css_properties.properties_including_aliases), + 'last_property_id': + self._css_properties.last_property_id, 'last_unresolved_property_id': - self._css_properties.last_unresolved_property_id, + self._css_properties.last_unresolved_property_id, 'max_name_length': - max(map(len, self._css_properties.properties_by_id)), + max(map(len, self._css_properties.properties_by_id)), } - @gperf.use_jinja_gperf_template('core/css/templates/css_property_names.cc.tmpl', - ['-Q', 'CSSPropStringPool']) + @gperf.use_jinja_gperf_template( + 'core/css/templates/css_property_names.cc.tmpl', + ['-Q', 'CSSPropStringPool']) def generate_implementation(self): enum_value_to_name = {} for property_ in self._css_properties.properties_including_aliases: - enum_value_to_name[property_['enum_value']] = property_['name'].original + enum_value_to_name[property_['enum_value']] = \ + property_['name'].original property_offsets = [] property_names = [] current_offset = 0 @@ -64,7 +73,8 @@ css_name_and_enum_pairs = [ (property_['name'].original, 'static_cast<int>(CSSPropertyID::' + property_['enum_key'] + ')') - for property_ in self._css_properties.properties_including_aliases] + for property_ in self._css_properties.properties_including_aliases + ] property_keys = [ property_['enum_key'] @@ -72,15 +82,21 @@ ] return { - 'class_name': 'CSSPropertyNames', - 'file_basename': self.file_basename, - 'property_keys': property_keys, - 'property_names': property_names, - 'property_offsets': property_offsets, + 'class_name': + 'CSSPropertyNames', + 'file_basename': + self.file_basename, + 'property_keys': + property_keys, + 'property_names': + property_names, + 'property_offsets': + property_offsets, 'property_to_enum_map': - '\n'.join('%s, %s' % property_ - for property_ in css_name_and_enum_pairs), - 'gperf_path': self.gperf_path, + '\n'.join( + '%s, %s' % property_ for property_ in css_name_and_enum_pairs), + 'gperf_path': + self.gperf_path, }
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_tokenizer_codepoints.py b/third_party/blink/renderer/build/scripts/core/css/make_css_tokenizer_codepoints.py index a51c5917..3c76325 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_tokenizer_codepoints.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_tokenizer_codepoints.py
@@ -27,31 +27,32 @@ def token_type(i): - codepoints = {'(': 'LeftParenthesis', - ')': 'RightParenthesis', - '[': 'LeftBracket', - ']': 'RightBracket', - '{': 'LeftBrace', - '}': 'RightBrace', - '+': 'PlusOrFullStop', - '.': 'PlusOrFullStop', - '-': 'HyphenMinus', - '*': 'Asterisk', - '<': 'LessThan', - ',': 'Comma', - '/': 'Solidus', - '\\': 'ReverseSolidus', - ':': 'Colon', - ';': 'SemiColon', - '#': 'Hash', - '^': 'CircumflexAccent', - '$': 'DollarSign', - '|': 'VerticalLine', - '~': 'Tilde', - '@': 'CommercialAt', - 'u': 'LetterU', - 'U': 'LetterU', - } + codepoints = { + '(': 'LeftParenthesis', + ')': 'RightParenthesis', + '[': 'LeftBracket', + ']': 'RightBracket', + '{': 'LeftBrace', + '}': 'RightBrace', + '+': 'PlusOrFullStop', + '.': 'PlusOrFullStop', + '-': 'HyphenMinus', + '*': 'Asterisk', + '<': 'LessThan', + ',': 'Comma', + '/': 'Solidus', + '\\': 'ReverseSolidus', + ':': 'Colon', + ';': 'SemiColon', + '#': 'Hash', + '^': 'CircumflexAccent', + '$': 'DollarSign', + '|': 'VerticalLine', + '~': 'Tilde', + '@': 'CommercialAt', + 'u': 'LetterU', + 'U': 'LetterU', + } c = chr(i) if c in codepoints: return codepoints[c] @@ -79,10 +80,15 @@ def generate(self): array_size = 128 # SCHAR_MAX + 1 - token_lines = [' &CSSTokenizer::%s,' % token_type(i) - if token_type(i) else ' 0,' - for i in range(array_size)] - return CPP_TEMPLATE.format(array_size=array_size, token_lines='\n'.join(token_lines), module_pyname=module_pyname) + token_lines = [ + ' &CSSTokenizer::%s,' % token_type(i) + if token_type(i) else ' 0,' for i in range(array_size) + ] + return CPP_TEMPLATE.format( + array_size=array_size, + token_lines='\n'.join(token_lines), + module_pyname=module_pyname) + if __name__ == '__main__': in_generator.Maker(MakeCSSTokenizerCodePointsWriter).main(sys.argv)
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py b/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py index 6b1b676f..996b82d 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_value_id_mappings.py
@@ -40,8 +40,8 @@ for i in range(len(number_list_sorted) - 1): # continuous segment is a segment which the number in pair is 1 unit # more than the previous pair - if (number_list_sorted[i + 1][0] - number_list_sorted[i][0] != 1 - or number_list_sorted[i + 1][1] - number_list_sorted[i][1] != 1): + if (number_list_sorted[i + 1][0] - number_list_sorted[i][0] != 1 or + number_list_sorted[i + 1][1] - number_list_sorted[i][1] != 1): segments.append(i + 1) segments.append(len(number_list_sorted)) return segments, number_list_sorted @@ -62,7 +62,8 @@ return max(segment_list, key=lambda x: x[1] - x[0]) -def _find_enum_longest_continuous_segment(property_, name_to_position_dictionary): +def _find_enum_longest_continuous_segment(property_, + name_to_position_dictionary): """Find the longest continuous segment in the list of keywords Finding the continuous segment will allows us to do the subtraction between keywords so that the distance between 2 keywords in this @@ -85,7 +86,9 @@ segment. Enums in the segment will be computed in default clause. """ property_enum_order = range(len(property_['keywords'])) - css_enum_order = [name_to_position_dictionary[x] for x in property_['keywords']] + css_enum_order = [ + name_to_position_dictionary[x] for x in property_['keywords'] + ] enum_pair_list = zip(css_enum_order, property_enum_order) enum_segment, enum_pair_list = _find_continuous_segment(enum_pair_list) longest_segment = _find_largest_segment(enum_segment) @@ -99,9 +102,11 @@ class CSSValueIDMappingsWriter(make_style_builder.StyleBuilderWriter): def __init__(self, json5_file_paths, output_dir): - super(CSSValueIDMappingsWriter, self).__init__(json5_file_paths, output_dir) + super(CSSValueIDMappingsWriter, self).__init__(json5_file_paths, + output_dir) self._outputs = { - 'css_value_id_mappings_generated.h': self.generate_css_value_mappings, + 'css_value_id_mappings_generated.h': + self.generate_css_value_mappings, } self.css_values_dictionary_file = json5_file_paths[3] css_properties = self.css_properties.longhands @@ -114,24 +119,28 @@ css_properties = keyword_utils.sort_keyword_properties_by_canonical_order( css_properties, json5_file_paths[3], self.default_parameters) - @template_expander.use_jinja('core/css/templates/css_value_id_mappings_generated.h.tmpl') + @template_expander.use_jinja( + 'core/css/templates/css_value_id_mappings_generated.h.tmpl') def generate_css_value_mappings(self): mappings = {} include_paths = set() css_values_dictionary = json5_generator.Json5File.load_from_files( [self.css_values_dictionary_file], - default_parameters=self.default_parameters - ).name_dictionaries - name_to_position_dictionary = dict(zip([x['name'].original for x in css_values_dictionary], - range(len(css_values_dictionary)))) + default_parameters=self.default_parameters).name_dictionaries + name_to_position_dictionary = dict( + zip([x['name'].original for x in css_values_dictionary], + range(len(css_values_dictionary)))) for property_ in self.css_properties.properties_including_aliases: include_paths.update(property_['include_paths']) if property_['field_template'] == 'multi_keyword': mappings[property_['type_name']] = { - 'default_value': property_['default_value'], - 'mapping': [enum_key_for_css_keyword(k) - for k in property_['keywords']], + 'default_value': + property_['default_value'], + 'mapping': [ + enum_key_for_css_keyword(k) + for k in property_['keywords'] + ], } elif property_['field_template'] == 'keyword': enum_pair_list, enum_segment, p_segment = _find_enum_longest_continuous_segment( @@ -151,5 +160,6 @@ 'mappings': mappings, } + if __name__ == '__main__': json5_generator.Maker(CSSValueIDMappingsWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py b/third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py index 077bb9a1..eabb6ae 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py
@@ -33,14 +33,21 @@ 'value keywords should have the prefix "-internal-".' self._keyword_count = len(self._value_keywords) + first_keyword_id - @template_expander.use_jinja('core/css/templates/css_value_keywords.h.tmpl') + @template_expander.use_jinja( + 'core/css/templates/css_value_keywords.h.tmpl') def generate_header(self): return { - 'value_keywords': self._value_keywords, - 'value_keywords_count': self._keyword_count, + 'value_keywords': + self._value_keywords, + 'value_keywords_count': + self._keyword_count, 'max_value_keyword_length': - max(len(keyword['name'].original) for keyword in self._value_keywords), - 'header_guard': self.make_header_guard(self._relative_output_dir + self._FILE_BASENAME + '.h') + max( + len(keyword['name'].original) + for keyword in self._value_keywords), + 'header_guard': + self.make_header_guard(self._relative_output_dir + + self._FILE_BASENAME + '.h') } def _value_keywords_with_mode(self, mode): @@ -60,14 +67,18 @@ current_offset += len(keyword["name"].original) + 1 return { - 'value_keywords': self._value_keywords, - 'value_keyword_offsets': keyword_offsets, + 'value_keywords': + self._value_keywords, + 'value_keyword_offsets': + keyword_offsets, 'ua_sheet_mode_values_keywords': - self._value_keywords_with_mode('UASheet'), + self._value_keywords_with_mode('UASheet'), 'quirks_mode_or_ua_sheet_mode_values_keywords': - self._value_keywords_with_mode('QuirksOrUASheet'), - 'gperf_path': self.gperf_path, + self._value_keywords_with_mode('QuirksOrUASheet'), + 'gperf_path': + self.gperf_path, } + if __name__ == "__main__": json5_generator.Maker(CSSValueKeywordsWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_cssom_types.py b/third_party/blink/renderer/build/scripts/core/css/make_cssom_types.py index e16d7a3..ef5c5f5 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_cssom_types.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_cssom_types.py
@@ -15,6 +15,7 @@ utility methods for determining whether a given CSSStyleValue is valid for a given CSS property. The header files live in core/css/cssom. """ + def __init__(self, json5_file_paths, output_dir): super(CSSOMTypesWriter, self).__init__([], output_dir) @@ -30,8 +31,8 @@ property_['typedom_types'] = types # Generate CSSValueID values from keywords. - property_['keywordIDs'] = map( - enum_key_for_css_keyword, property_['keywords']) + property_['keywordIDs'] = map(enum_key_for_css_keyword, + property_['keywords']) self._outputs = { 'cssom_types.cc': self.generate_types, @@ -52,5 +53,6 @@ 'properties': self._properties, } + if __name__ == '__main__': json5_generator.Maker(CSSOMTypesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_media_feature_names.py b/third_party/blink/renderer/build/scripts/core/css/make_media_feature_names.py index e58585b9..6ae5b44f 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_media_feature_names.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_media_feature_names.py
@@ -10,11 +10,12 @@ class MakeMediaFeatureNamesWriter(make_names.MakeNamesWriter): - def __init__(self, json5_file_path, output_dir): - super(MakeMediaFeatureNamesWriter, self).__init__(json5_file_path, output_dir) + super(MakeMediaFeatureNamesWriter, self).__init__( + json5_file_path, output_dir) MakeMediaFeatureNamesWriter.filters['symbol'] = ( - media_feature_symbol.getMediaFeatureSymbolWithSuffix('MediaFeature')) + media_feature_symbol.getMediaFeatureSymbolWithSuffix( + 'MediaFeature')) if __name__ == "__main__":
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_media_features.py b/third_party/blink/renderer/build/scripts/core/css/make_media_features.py index 7e8aeec..5ea622f 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_media_features.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_media_features.py
@@ -16,26 +16,35 @@ 'export': '', } filters = { - 'symbol': media_feature_symbol.getMediaFeatureSymbolWithSuffix(''), + 'symbol': + media_feature_symbol.getMediaFeatureSymbolWithSuffix(''), # symbol[1:] removes the leading 'k' produced by the above function. - 'to_function_name': lambda symbol: NameStyleConverter(symbol[1:]).to_function_name(), + 'to_function_name': + lambda symbol: NameStyleConverter(symbol[1:]).to_function_name(), } def __init__(self, json5_file_path, output_dir): - super(MakeMediaFeaturesWriter, self).__init__(json5_file_path, output_dir) + super(MakeMediaFeaturesWriter, self).__init__(json5_file_path, + output_dir) self._outputs = { ('media_features.h'): self.generate_header, } self._template_context = { - 'entries': self.json5_file.name_dictionaries, - 'input_files': self._input_files, - 'header_guard': self.make_header_guard(self._relative_output_dir + 'media_features.h') + 'entries': + self.json5_file.name_dictionaries, + 'input_files': + self._input_files, + 'header_guard': + self.make_header_guard(self._relative_output_dir + + 'media_features.h') } - @template_expander.use_jinja('core/css/templates/media_features.h.tmpl', filters=filters) + @template_expander.use_jinja( + 'core/css/templates/media_features.h.tmpl', filters=filters) def generate_header(self): return self._template_context + if __name__ == '__main__': json5_generator.Maker(MakeMediaFeaturesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py b/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py index 3a18d15..a3cab6f 100755 --- a/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py +++ b/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py
@@ -43,9 +43,9 @@ self._input_files = json5_file_paths self._outputs = { (self._FILE_BASENAME + '.cc'): - self.generate_style_property_shorthand_cpp, + self.generate_style_property_shorthand_cpp, (self._FILE_BASENAME + '.h'): - self.generate_style_property_shorthand_h + self.generate_style_property_shorthand_h } json5_properties = css_properties.CSSProperties(json5_file_paths) @@ -53,10 +53,10 @@ self._longhand_dictionary = defaultdict(list) for property_ in json5_properties.shorthands: - property_['longhand_enum_keys'] = map( - enum_key_for_css_property, property_['longhands']) - property_['longhand_property_ids'] = map( - id_for_css_property, property_['longhands']) + property_['longhand_enum_keys'] = map(enum_key_for_css_property, + property_['longhands']) + property_['longhand_property_ids'] = map(id_for_css_property, + property_['longhands']) for longhand_enum_key in property_['longhand_enum_keys']: self._longhand_dictionary[longhand_enum_key].append(property_) @@ -64,8 +64,8 @@ # Sort first by number of longhands in decreasing order, then # alphabetically longhands.sort( - key=lambda property_: ( - -len(property_['longhand_property_ids']), property_['name'].original) + key= + lambda property_: (-len(property_['longhand_property_ids']), property_['name'].original) ) @template_expander.use_jinja( @@ -81,10 +81,15 @@ 'core/css/templates/style_property_shorthand.h.tmpl') def generate_style_property_shorthand_h(self): return { - 'input_files': self._input_files, - 'properties': self._shorthands, - 'header_guard': self.make_header_guard(self._relative_output_dir + self._FILE_BASENAME + '.h') + 'input_files': + self._input_files, + 'properties': + self._shorthands, + 'header_guard': + self.make_header_guard(self._relative_output_dir + + self._FILE_BASENAME + '.h') } + if __name__ == '__main__': json5_generator.Maker(StylePropertyShorthandWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/parser/make_atrule_names.py b/third_party/blink/renderer/build/scripts/core/css/parser/make_atrule_names.py index 2a7d6365..57af289c 100755 --- a/third_party/blink/renderer/build/scripts/core/css/parser/make_atrule_names.py +++ b/third_party/blink/renderer/build/scripts/core/css/parser/make_atrule_names.py
@@ -13,6 +13,7 @@ Generates AtRuleNames. This class provides utility methods for parsing @rules (e.g. @font-face, @viewport, etc) """ + def __init__(self, json5_file_paths, output_dir): super(AtRuleNamesWriter, self).__init__(json5_file_paths, output_dir) @@ -36,8 +37,7 @@ self._character_offsets.append(chars_used) chars_used += len(descriptor['name'].original) self._longest_name_length = max( - len(descriptor['name'].original), - len(descriptor['alias']), + len(descriptor['name'].original), len(descriptor['alias']), self._longest_name_length) @template_expander.use_jinja( @@ -59,5 +59,6 @@ 'gperf_path': self.gperf_path } + if __name__ == '__main__': json5_generator.Maker(AtRuleNamesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py b/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py index 3d408bb..75030ac 100755 --- a/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py +++ b/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py
@@ -9,8 +9,12 @@ from collections import namedtuple from core.css import css_properties + class PropertyClassData( - namedtuple('PropertyClassData', 'enum_key,enum_value,property_id,classname,namespace_group,filename')): + namedtuple( + 'PropertyClassData', + 'enum_key,enum_value,property_id,classname,namespace_group,filename' + )): pass @@ -19,17 +23,16 @@ super(CSSPropertyInstancesWriter, self).__init__([], output_dir) self._input_files = json5_file_paths self._outputs = { - 'css_property_instances.h': self.generate_property_instances_header, + 'css_property_instances.h': + self.generate_property_instances_header, 'css_property_instances.cc': - self.generate_property_instances_implementation + self.generate_property_instances_implementation } # These files are no longer generated. If the files are present from # a previous build, we remove them. This avoids accidentally #including # a stale generated header. self._cleanup = set([ - 'css_property.cc', - 'css_property.h', - 'css_unresolved_property.cc', + 'css_property.cc', 'css_property.h', 'css_unresolved_property.cc', 'css_unresolved_property.h' ]) @@ -85,5 +88,6 @@ 'alias_classes_by_property_id': self._alias_classes_by_id, } + if __name__ == '__main__': json5_generator.Maker(CSSPropertyInstancesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_subclasses.py b/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_subclasses.py index a5a2352..2730c96 100755 --- a/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_subclasses.py +++ b/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_subclasses.py
@@ -28,7 +28,8 @@ property_methods = json5_generator.Json5File.load_from_files( [json5_file_paths[3]]) for property_method in property_methods.name_dictionaries: - self._property_methods[property_method['name'].original] = property_method + self._property_methods[property_method['name']. + original] = property_method all_properties = self._css_properties.properties_including_aliases @@ -86,5 +87,6 @@ 'is_longhand': False, } + if __name__ == '__main__': json5_generator.Maker(CSSPropertiesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py b/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py index f7bf935..6de3f6a3 100644 --- a/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py +++ b/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py
@@ -35,6 +35,7 @@ fields: List of Field instances stored directly under this group. parent: The parent group, or None if this is the root group. """ + def __init__(self, name, subgroups, fields): self.name = name self.subgroups = subgroups @@ -45,12 +46,11 @@ self.type_name = converter.to_class_name(prefix='style', suffix='data') self.member_name = converter.to_class_data_member(suffix='data') self.num_32_bit_words_for_bit_fields = _num_32_bit_words_for_bit_fields( - field for field in fields if field.is_bit_field - ) + field for field in fields if field.is_bit_field) # Recursively get all the fields in the subgroups as well - self.all_fields = _flatten_list( - subgroup.all_fields for subgroup in subgroups) + fields + self.all_fields = _flatten_list(subgroup.all_fields + for subgroup in subgroups) + fields # Ensure that all fields/subgroups on this group link to it for field in fields: @@ -75,10 +75,12 @@ class Enum(object): """Represents a generated enum in ComputedStyleBaseConstants.""" + def __init__(self, type_name, keywords, is_set): self.type_name = type_name - self.values = [NameStyleConverter(keyword).to_enum_value() - for keyword in keywords] + self.values = [ + NameStyleConverter(keyword).to_enum_value() for keyword in keywords + ] self.is_set = is_set @@ -92,6 +94,7 @@ expressions: List of expression that are on this group that need to be diffed. """ + def __init__(self, group): self.group = group self.subgroups = [] @@ -155,11 +158,15 @@ # Method names self.getter_method_name = getter_method_name self.setter_method_name = setter_method_name - self.internal_getter_method_name = name_source.to_function_name(suffix='internal') - self.internal_mutable_method_name = name_source.to_function_name(prefix='mutable', suffix='internal') - self.internal_setter_method_name = NameStyleConverter(setter_method_name).to_function_name(suffix='internal') + self.internal_getter_method_name = name_source.to_function_name( + suffix='internal') + self.internal_mutable_method_name = name_source.to_function_name( + prefix='mutable', suffix='internal') + self.internal_setter_method_name = NameStyleConverter( + setter_method_name).to_function_name(suffix='internal') self.initial_method_name = initial_method_name - self.resetter_method_name = name_source.to_function_name(prefix='reset') + self.resetter_method_name = name_source.to_function_name( + prefix='reset') self.computed_style_custom_functions = computed_style_custom_functions # Only bitfields have sizes. self.is_bit_field = self.size is not None @@ -176,6 +183,7 @@ assert self.is_inherited or not self.is_independent, \ 'Only inherited fields can be independent' - self.is_inherited_method_name = name_source.to_function_name(suffix=['is', 'inherited']) + self.is_inherited_method_name = name_source.to_function_name( + suffix=['is', 'inherited']) assert len(kwargs) == 0, \ 'Unexpected arguments provided to Field: ' + str(kwargs)
diff --git a/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py b/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py index 4375d751..160d3a6 100755 --- a/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py +++ b/third_party/blink/renderer/build/scripts/core/style/make_computed_style_base.py
@@ -88,6 +88,7 @@ # FIXME: Improve documentation and add docstrings. + def _flatten_list(x): """Flattens a list of lists into a single list.""" return list(chain.from_iterable(x)) @@ -109,6 +110,7 @@ Returns: Group: The root group of the tree. The name of the group is set to None. """ + # We first convert properties into a dictionary structure. Each dictionary # represents a group. The None key corresponds to the fields directly stored # on that group. The other keys map from group name to another dictionary. @@ -127,8 +129,9 @@ def _dict_to_group(name, group_dict): fields_in_current_group = group_dict.pop(None) subgroups = [ - _dict_to_group(subgroup_name, subgroup_dict) for subgroup_name, - subgroup_dict in group_dict.items()] + _dict_to_group(subgroup_name, subgroup_dict) + for subgroup_name, subgroup_dict in group_dict.items() + ] return Group(name, subgroups, _reorder_fields(fields_in_current_group)) root_group_dict = {None: []} @@ -171,32 +174,32 @@ return field_dependencies -def _create_diff_groups(fields_to_diff, - methods_to_diff, - predicates_to_test, +def _create_diff_groups(fields_to_diff, methods_to_diff, predicates_to_test, root_group): diff_group = DiffGroup(root_group) - field_dependencies = _list_field_dependencies( - methods_to_diff + predicates_to_test) + field_dependencies = _list_field_dependencies(methods_to_diff + + predicates_to_test) for subgroup in root_group.subgroups: - if any(field.property_name in (fields_to_diff + field_dependencies) - for field in subgroup.all_fields): - diff_group.subgroups.append(_create_diff_groups( - fields_to_diff, methods_to_diff, predicates_to_test, subgroup)) + if any( + field.property_name in (fields_to_diff + field_dependencies) + for field in subgroup.all_fields): + diff_group.subgroups.append( + _create_diff_groups(fields_to_diff, methods_to_diff, + predicates_to_test, subgroup)) for entry in fields_to_diff: for field in root_group.fields: if not field.is_inherited_flag and entry == field.property_name: diff_group.fields.append(field) for entry in methods_to_diff: for field in root_group.fields: - if (not field.is_inherited_flag and - field.property_name in entry['field_dependencies'] and - entry['method'] not in diff_group.expressions): + if (not field.is_inherited_flag + and field.property_name in entry['field_dependencies'] + and entry['method'] not in diff_group.expressions): diff_group.expressions.append(entry['method']) for entry in predicates_to_test: for field in root_group.fields: - if (not field.is_inherited_flag and - field.property_name in entry['field_dependencies'] + if (not field.is_inherited_flag + and field.property_name in entry['field_dependencies'] and entry['predicate'] not in diff_group.predicates): diff_group.predicates.append(entry['predicate']) return diff_group @@ -208,10 +211,12 @@ for property_ in properties: # Only generate enums for keyword properties that do not # require includes. - if (property_['field_template'] in ('keyword', 'multi_keyword') and - len(property_['include_paths']) == 0): - enum = Enum(property_['type_name'], property_['keywords'], - is_set=(property_['field_template'] == 'multi_keyword')) + if (property_['field_template'] in ('keyword', 'multi_keyword') + and len(property_['include_paths']) == 0): + enum = Enum( + property_['type_name'], + property_['keywords'], + is_set=(property_['field_template'] == 'multi_keyword')) if property_['field_template'] == 'multi_keyword': assert property_['keywords'][0] == 'none', \ "First keyword in a 'multi_keyword' field must be " \ @@ -290,7 +295,9 @@ Create the field used for an inheritance fast path from an independent CSS property, and return the Field object. """ - name_for_methods = NameStyleConverter(property_['name_for_methods']).to_function_name(suffix=['is', 'inherited']) + name_for_methods = NameStyleConverter( + property_['name_for_methods']).to_function_name( + suffix=['is', 'inherited']) name_source = NameStyleConverter(name_for_methods) return Field( 'inherited_flag', @@ -365,8 +372,10 @@ assert field.alignment_type in ALIGNMENT_ORDER, \ "Type {} has unknown alignment. Please update ALIGNMENT_ORDER " \ "to include it.".format(field.name) - return list(sorted( - non_bit_fields, key=lambda f: ALIGNMENT_ORDER.index(f.alignment_type))) + return list( + sorted( + non_bit_fields, + key=lambda f: ALIGNMENT_ORDER.index(f.alignment_type))) def _reorder_fields(fields): @@ -378,12 +387,12 @@ non_bit_fields = [field for field in fields if not field.is_bit_field] # Non bit fields go first, then the bit fields. - return _reorder_non_bit_fields( - non_bit_fields) + _reorder_bit_fields(bit_fields) + return _reorder_non_bit_fields(non_bit_fields) + _reorder_bit_fields( + bit_fields) -def _get_properties_ranking_using_partition_rule( - properties_ranking, partition_rule): +def _get_properties_ranking_using_partition_rule(properties_ranking, + partition_rule): """Take the contents of the properties ranking file and produce a dictionary of css properties with their group number based on the partition_rule @@ -398,9 +407,10 @@ """ return dict( zip(properties_ranking, [ - bisect.bisect_left( - partition_rule, float(i) / len(properties_ranking)) + 1 - for i in range(len(properties_ranking))])) + bisect.bisect_left(partition_rule, + float(i) / len(properties_ranking)) + 1 + for i in range(len(properties_ranking)) + ])) def _best_rank(prop, ranking_map): @@ -418,8 +428,10 @@ return best_rank if best_rank != worst_rank else -1 -def _evaluate_rare_non_inherited_group(properties, properties_ranking, - num_layers, partition_rule=None): +def _evaluate_rare_non_inherited_group(properties, + properties_ranking, + num_layers, + partition_rule=None): """Re-evaluate the grouping of RareNonInherited groups based on each property's popularity. @@ -432,15 +444,15 @@ """ if partition_rule is None: partition_rule = [ - 1.0 * (i + 1) / num_layers for i in range(num_layers)] + 1.0 * (i + 1) / num_layers for i in range(num_layers) + ] assert num_layers == len(partition_rule), \ "Length of rule and num_layers mismatch" layers_name = [ "rare-non-inherited-usage-less-than-{}-percent".format( - int(round(partition_rule[i] * 100))) - for i in range(num_layers) + int(round(partition_rule[i] * 100))) for i in range(num_layers) ] properties_ranking = _get_properties_ranking_using_partition_rule( properties_ranking, partition_rule) @@ -464,8 +476,10 @@ property_["field_group"] = "->".join(group_tree) -def _evaluate_rare_inherit_group(properties, properties_ranking, - num_layers, partition_rule=None): +def _evaluate_rare_inherit_group(properties, + properties_ranking, + num_layers, + partition_rule=None): """Re-evaluate the grouping of RareInherited groups based on each property's popularity. @@ -486,8 +500,7 @@ layers_name = [ "rare-inherited-usage-less-than-{}-percent".format( - int(round(partition_rule[i] * 100))) - for i in range(num_layers) + int(round(partition_rule[i] * 100))) for i in range(num_layers) ] properties_ranking = _get_properties_ranking_using_partition_rule( @@ -526,8 +539,7 @@ # css_properties.json5 and we can get the longest continuous segment. # Thereby reduce the switch case statement to the minimum. properties = keyword_utils.sort_keyword_properties_by_canonical_order( - self._css_properties.longhands, - json5_file_paths[5], + self._css_properties.longhands, json5_file_paths[5], self.default_parameters) self._properties = properties + self._css_properties.extra_fields @@ -535,41 +547,43 @@ # Organise fields into a tree structure where the root group # is ComputedStyleBase. - group_parameters = dict([ - (conf["name"], conf["cumulative_distribution"]) for conf in - json5_generator.Json5File.load_from_files( - [json5_file_paths[7]]).name_dictionaries]) + group_parameters = dict( + [(conf["name"], conf["cumulative_distribution"]) + for conf in json5_generator.Json5File.load_from_files( + [json5_file_paths[7]]).name_dictionaries]) properties_ranking = [ - x["name"].original for x in json5_generator.Json5File.load_from_files( - [json5_file_paths[6]]).name_dictionaries + x["name"].original for x in json5_generator.Json5File. + load_from_files([json5_file_paths[6]]).name_dictionaries ] _evaluate_rare_non_inherited_group( - self._properties, - properties_ranking, + self._properties, properties_ranking, len(group_parameters["rare_non_inherited_properties_rule"]), group_parameters["rare_non_inherited_properties_rule"]) _evaluate_rare_inherit_group( - self._properties, - properties_ranking, + self._properties, properties_ranking, len(group_parameters["rare_inherited_properties_rule"]), group_parameters["rare_inherited_properties_rule"]) self._root_group = _create_groups(self._properties) self._diff_functions_map = _create_diff_groups_map( json5_generator.Json5File.load_from_files( - [json5_file_paths[4]]).name_dictionaries, - self._root_group) + [json5_file_paths[4]]).name_dictionaries, self._root_group) self._include_paths = _get_include_paths(self._properties) self._outputs = { - 'computed_style_base.h': self.generate_base_computed_style_h, - 'computed_style_base.cc': self.generate_base_computed_style_cpp, + 'computed_style_base.h': + self.generate_base_computed_style_h, + 'computed_style_base.cc': + self.generate_base_computed_style_cpp, 'computed_style_base_constants.h': - self.generate_base_computed_style_constants, + self.generate_base_computed_style_constants, } @template_expander.use_jinja( - 'core/style/templates/computed_style_base.h.tmpl', tests={'in': lambda a, b: a in b}) + 'core/style/templates/computed_style_base.h.tmpl', + tests={ + 'in': lambda a, b: a in b + }) def generate_base_computed_style_h(self): return { 'input_files': self._input_files, @@ -582,7 +596,9 @@ @template_expander.use_jinja( 'core/style/templates/computed_style_base.cc.tmpl', - tests={'in': lambda a, b: a in b}) + tests={ + 'in': lambda a, b: a in b + }) def generate_base_computed_style_cpp(self): return { 'input_files': self._input_files, @@ -593,7 +609,8 @@ 'diff_functions_map': self._diff_functions_map, } - @template_expander.use_jinja('core/style/templates/computed_style_base_constants.h.tmpl') + @template_expander.use_jinja( + 'core/style/templates/computed_style_base_constants.h.tmpl') def generate_base_computed_style_constants(self): return { 'input_files': self._input_files, @@ -601,5 +618,6 @@ 'enums': self._generated_enums, } + if __name__ == '__main__': json5_generator.Maker(ComputedStyleBaseWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/make_event_factory.py b/third_party/blink/renderer/build/scripts/make_event_factory.py index 39f664a..0050b386 100755 --- a/third_party/blink/renderer/build/scripts/make_event_factory.py +++ b/third_party/blink/renderer/build/scripts/make_event_factory.py
@@ -84,14 +84,10 @@ 'suffix': '', } filters = { - 'cpp_name': - name_utilities.cpp_name, - 'name': - lambda entry: entry['name'].original, - 'create_event_ignore_case_list': - create_event_ignore_case_list, - 'measure_name': - measure_name, + 'cpp_name': name_utilities.cpp_name, + 'name': lambda entry: entry['name'].original, + 'create_event_ignore_case_list': create_event_ignore_case_list, + 'measure_name': measure_name, } def __init__(self, json5_file_path, output_dir):
diff --git a/third_party/blink/renderer/build/scripts/make_origin_trials.py b/third_party/blink/renderer/build/scripts/make_origin_trials.py index 4c00e4d8..672f9d7 100755 --- a/third_party/blink/renderer/build/scripts/make_origin_trials.py +++ b/third_party/blink/renderer/build/scripts/make_origin_trials.py
@@ -47,6 +47,9 @@ } self._implied_mappings = self._make_implied_mappings() self._trial_to_features_map = self._make_trial_to_features_map() + self._max_features_per_trial = max( + len(features) + for features in self._trial_to_features_map.itervalues()) self._set_trial_types() @property @@ -116,6 +119,7 @@ 'origin_trial_features': self._origin_trial_features, 'implied_origin_trial_features': self._implied_mappings, 'trial_to_features_map': self._trial_to_features_map, + 'max_features_per_trial': self._max_features_per_trial, 'input_files': self._input_files, }
diff --git a/third_party/blink/renderer/build/scripts/templates/origin_trials.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/origin_trials.cc.tmpl index 9787ab3..6dfbb285 100644 --- a/third_party/blink/renderer/build/scripts/templates/origin_trials.cc.tmpl +++ b/third_party/blink/renderer/build/scripts/templates/origin_trials.cc.tmpl
@@ -5,49 +5,45 @@ #include "third_party/blink/renderer/core/origin_trials/origin_trials.h" +#include <algorithm> +#include <array> +#include <iterator> +#include "base/stl_util.h" #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" -#include "third_party/blink/renderer/platform/wtf/hash_map.h" namespace blink { -using TrialToFeaturesMap = HashMap<String, Vector<OriginTrialFeature>>; - namespace { -const TrialToFeaturesMap& GetTrialToFeaturesMap() { - // The object needs to be thread-safe because service workers can call this - // function as well. - DEFINE_THREAD_SAFE_STATIC_LOCAL(TrialToFeaturesMap, trial_to_features_map, ()); - if (trial_to_features_map.IsEmpty()) { +static constexpr size_t kMaxFeaturesPerTrial = {{max_features_per_trial}}; +static constexpr struct { + const char* trial_name; + unsigned feature_count; + std::array<OriginTrialFeature, kMaxFeaturesPerTrial> features; +} kTrialToFeaturesMap[] = { {% for trial_name, features_list in trial_to_features_map.items() %} - trial_to_features_map.Set("{{trial_name}}", - Vector<OriginTrialFeature>({ - {%- for trial_feature in features_list %} -OriginTrialFeature::k{{trial_feature.name}}, - {%- endfor %} - })); + { "{{trial_name}}", {{features_list|length}}, { {%- for trial_feature in features_list %}OriginTrialFeature::k{{trial_feature.name}}, {%- endfor %} } }, {% endfor %} // For testing - trial_to_features_map.Set("This trial does not exist", - Vector<OriginTrialFeature>({OriginTrialFeature::kNonExisting})); - } - return trial_to_features_map; -} + { "This trial does not exist", 1, { OriginTrialFeature::kNonExisting } }, +}; } // namespace -bool origin_trials::IsTrialValid(const String& trial_name) { - return GetTrialToFeaturesMap().Contains(trial_name); +bool origin_trials::IsTrialValid(const StringView& trial_name) { + return std::any_of( + std::begin(kTrialToFeaturesMap), std::end(kTrialToFeaturesMap), + [&](const auto& entry) { return entry.trial_name == trial_name; }); } -bool origin_trials::IsTrialEnabledForInsecureContext(const String& trial_name) { - {% for feature in origin_trial_features if feature.origin_trial_allows_insecure %} - if (trial_name == "{{feature.origin_trial_feature_name}}") { - return true; - } +bool origin_trials::IsTrialEnabledForInsecureContext(const StringView& trial_name) { + static const char* const kEnabledForInsecureContext[] = { + {% for trial in origin_trial_features|selectattr('origin_trial_allows_insecure')|map(attribute='origin_trial_feature_name')|unique %} + "{{trial}}", {% endfor %} - return false; + }; + return base::Contains(kEnabledForInsecureContext, trial_name); } OriginTrialType origin_trials::GetTrialType(OriginTrialFeature feature) { @@ -61,15 +57,21 @@ } } -const Vector<OriginTrialFeature>& origin_trials::FeaturesForTrial(const String& trial_name) { - DCHECK(IsTrialValid(trial_name)); - return GetTrialToFeaturesMap().find(trial_name)->value; + +base::span<const OriginTrialFeature> origin_trials::FeaturesForTrial( + const StringView& trial_name) { + auto it = std::find_if( + std::begin(kTrialToFeaturesMap), std::end(kTrialToFeaturesMap), + [&](const auto& entry) { return entry.trial_name == trial_name; }); + DCHECK(it != std::end(kTrialToFeaturesMap)); + return {it->features.begin(), it->feature_count}; } -Vector<OriginTrialFeature> origin_trials::GetImpliedFeatures(OriginTrialFeature feature) { +base::span<const OriginTrialFeature> origin_trials::GetImpliedFeatures( + OriginTrialFeature feature) { {% for implied_by_name, implied_list in implied_origin_trial_features.items() %} if (feature == OriginTrialFeature::k{{implied_by_name}}) { - Vector<OriginTrialFeature> implied_features = { + static constexpr OriginTrialFeature implied_features[] = { {%- for implied_name in implied_list %} OriginTrialFeature::k{{implied_name}}, {%- endfor %} @@ -77,7 +79,7 @@ return implied_features; } {% endfor %} - return Vector<OriginTrialFeature>(); + return {}; } bool origin_trials::FeatureEnabledForOS(OriginTrialFeature feature) {
diff --git a/third_party/blink/renderer/build/scripts/templates/web_origin_trials.cc.tmpl b/third_party/blink/renderer/build/scripts/templates/web_origin_trials.cc.tmpl index 3253a62..83a54424 100644 --- a/third_party/blink/renderer/build/scripts/templates/web_origin_trials.cc.tmpl +++ b/third_party/blink/renderer/build/scripts/templates/web_origin_trials.cc.tmpl
@@ -16,8 +16,7 @@ if (!web_document) return false; if (!origin_trials::IsTrialValid(trial)) return false; - const Vector<OriginTrialFeature>& features = origin_trials::FeaturesForTrial(trial); - for (OriginTrialFeature feature : features) { + for (OriginTrialFeature feature : origin_trials::FeaturesForTrial(trial)) { switch (feature) { {% for feature in features %} {% if feature.origin_trial_feature_name %}
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index d8ae753..c5bd628a 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -423,7 +423,9 @@ int compositor_group, const PaintArtifactCompositor* paint_artifact_compositor, bool start_on_compositor) { - if (timeline_ && !timeline_->IsActive()) + // TODO(crbug.com/916117): Revisit this condition as part of handling + // inactive timelines work. + if (timeline_ && timeline_->IsScrollTimeline() && !timeline_->IsActive()) return false; bool soft_change = @@ -836,6 +838,59 @@ // Notify of a potential state change. NotifyProbe(); + + // The remaining steps are for handling CSS animation and transition events. + // Both use an event delegate to dispatch events, which must be reattached to + // the new effect. + + // When the animation no longer has an associated effect, calls to + // Animation::Update will no longer update the animation timing and, + // consequently, do not trigger animation or transition events. + // Each transitionrun or transitionstart requires a corresponding + // transitionend or transitioncancel. + // https://drafts.csswg.org/css-transitions-2/#event-dispatch + // Similarly, each animationstart requires a corresponding animationend or + // animationcancel. + // https://drafts.csswg.org/css-animations-2/#event-dispatch + AnimationEffect::EventDelegate* old_event_delegate = + old_effect ? old_effect->GetEventDelegate() : nullptr; + if (!new_effect && old_effect && old_event_delegate) { + // If the animation|transition has no target effect, the timing phase is set + // according to the first matching condition from below: + // If the current time is unresolved, + // The timing phase is ‘idle’. + // If current time < 0, + // The timing phase is ‘before’. + // Otherwise, + // The timing phase is ‘after’. + base::Optional<double> current_time = CurrentTimeInternal(); + Timing::Phase phase; + if (!current_time) + phase = Timing::kPhaseNone; + else if (current_time < 0) + phase = Timing::kPhaseBefore; + else + phase = Timing::kPhaseAfter; + old_event_delegate->OnEventCondition(*old_effect, phase); + return; + } + + if (!new_effect || !old_effect) + return; + + // Use the original target for event targeting. + Element* target = To<KeyframeEffect>(old_effect)->target(); + if (!target) + return; + + // Attach an event delegate to the new effect. + AnimationEffect::EventDelegate* new_event_delegate = + CreateEventDelegate(target, old_event_delegate); + new_effect->SetEventDelegate(new_event_delegate); + + // Force an update to the timing model to ensure correct ordering of + // animation or transition events. + Update(kTimingUpdateOnDemand); } String Animation::PlayStateString() const {
diff --git a/third_party/blink/renderer/core/animation/animation.h b/third_party/blink/renderer/core/animation/animation.h index b5d6f94..3b8f9c8 100644 --- a/third_party/blink/renderer/core/animation/animation.h +++ b/third_party/blink/renderer/core/animation/animation.h
@@ -222,7 +222,7 @@ const AnimationEffect* effect() const { return content_.Get(); } AnimationEffect* effect() { return content_.Get(); } - virtual void setEffect(AnimationEffect*); + void setEffect(AnimationEffect*); void setId(const String& id) { id_ = id; } const String& id() const { return id_; } @@ -304,6 +304,11 @@ void AddedEventListener(const AtomicString& event_type, RegisteredEventListener&) override; base::Optional<double> CurrentTimeInternal() const; + virtual AnimationEffect::EventDelegate* CreateEventDelegate( + Element* target, + const AnimationEffect::EventDelegate* old_event_delegate) { + return nullptr; + } private: void SetCurrentTimeInternal(double new_current_time);
diff --git a/third_party/blink/renderer/core/animation/animation_effect.h b/third_party/blink/renderer/core/animation/animation_effect.h index c4b0b3f0..6d24e321 100644 --- a/third_party/blink/renderer/core/animation/animation_effect.h +++ b/third_party/blink/renderer/core/animation/animation_effect.h
@@ -72,6 +72,7 @@ virtual ~EventDelegate() = default; virtual bool RequiresIterationEvents(const AnimationEffect&) = 0; virtual void OnEventCondition(const AnimationEffect&, Timing::Phase) = 0; + virtual bool IsAnimationEventDelegate() const { return false; } virtual bool IsTransitionEventDelegate() const { return false; } virtual void Trace(Visitor* visitor) {} };
diff --git a/third_party/blink/renderer/core/animation/compositor_animations.cc b/third_party/blink/renderer/core/animation/compositor_animations.cc index 48c03da0..bdb1f1b8 100644 --- a/third_party/blink/renderer/core/animation/compositor_animations.cc +++ b/third_party/blink/renderer/core/animation/compositor_animations.cc
@@ -276,8 +276,10 @@ layout_object->GetDocument())) reasons |= kUnsupportedCSSProperty; // TODO: Add support for keyframes containing different types - if (keyframes.front()->GetCompositorKeyframeValue()->GetType() != - keyframe_value->GetType()) { + if (!keyframes.front() || + !keyframes.front()->GetCompositorKeyframeValue() || + keyframes.front()->GetCompositorKeyframeValue()->GetType() != + keyframe_value->GetType()) { reasons |= kMixedKeyframeValueTypes; } } else {
diff --git a/third_party/blink/renderer/core/animation/css/css_animation.cc b/third_party/blink/renderer/core/animation/css/css_animation.cc index e476d357..bb2d6b7 100644 --- a/third_party/blink/renderer/core/animation/css/css_animation.cc +++ b/third_party/blink/renderer/core/animation/css/css_animation.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/animation/css/css_animation.h" #include "third_party/blink/renderer/core/animation/animation.h" +#include "third_party/blink/renderer/core/animation/css/css_animations.h" #include "third_party/blink/renderer/core/dom/document.h" namespace blink { @@ -52,6 +53,13 @@ Animation::setStartTime(start_time_ms, exception_state); } +AnimationEffect::EventDelegate* CSSAnimation::CreateEventDelegate( + Element* target, + const AnimationEffect::EventDelegate* old_event_delegate) { + return CSSAnimations::CreateEventDelegate(target, animation_name_, + old_event_delegate); +} + void CSSAnimation::FlushStyles() const { // TODO(1043778): Flush is likely not required once the CSSAnimation is // disassociated from its owning element.
diff --git a/third_party/blink/renderer/core/animation/css/css_animation.h b/third_party/blink/renderer/core/animation/css/css_animation.h index 4d5083d..f2d0641 100644 --- a/third_party/blink/renderer/core/animation/css/css_animation.h +++ b/third_party/blink/renderer/core/animation/css/css_animation.h
@@ -49,6 +49,11 @@ bool getIgnoreCSSPlayState() { return ignore_css_play_state_; } void resetIgnoreCSSPlayState() { ignore_css_play_state_ = false; } + protected: + AnimationEffect::EventDelegate* CreateEventDelegate( + Element* target, + const AnimationEffect::EventDelegate* old_event_delegate) override; + private: void FlushStyles() const; @@ -64,7 +69,7 @@ bool was_paused_; }; - String animation_name_; + AtomicString animation_name_; // When set, the web-animation API is overruling the animation-play-state // style.
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc index e2ae7cf..a6c7b117 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.cc +++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -454,8 +454,8 @@ AnimationEffect::EventDelegate* CSSAnimations::CreateEventDelegate( Element* element, const PropertyHandle& property_handle, - AnimationEffect::EventDelegate* old_event_delegate) { - CSSAnimations::TransitionEventDelegate* old_transition_delegate = + const AnimationEffect::EventDelegate* old_event_delegate) { + const CSSAnimations::TransitionEventDelegate* old_transition_delegate = DynamicTo<CSSAnimations::TransitionEventDelegate>(old_event_delegate); Timing::Phase previous_phase = old_transition_delegate ? old_transition_delegate->getPreviousPhase() @@ -464,6 +464,22 @@ previous_phase); } +AnimationEffect::EventDelegate* CSSAnimations::CreateEventDelegate( + Element* element, + const AtomicString& animation_name, + const AnimationEffect::EventDelegate* old_event_delegate) { + const CSSAnimations::AnimationEventDelegate* old_animation_delegate = + DynamicTo<CSSAnimations::AnimationEventDelegate>(old_event_delegate); + Timing::Phase previous_phase = + old_animation_delegate ? old_animation_delegate->getPreviousPhase() + : Timing::kPhaseNone; + base::Optional<double> previous_iteration = + old_animation_delegate ? old_animation_delegate->getPreviousIteration() + : base::nullopt; + return MakeGarbageCollected<AnimationEventDelegate>( + element, animation_name, previous_phase, previous_iteration); +} + void CSSAnimations::SnapshotCompositorKeyframes( Element& element, CSSAnimationUpdate& update,
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 2afeb80..b6b99f74c 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.h +++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -78,7 +78,12 @@ static AnimationEffect::EventDelegate* CreateEventDelegate( Element* element, const PropertyHandle& property_handle, - AnimationEffect::EventDelegate* old_event_delegate); + const AnimationEffect::EventDelegate* old_event_delegate); + + static AnimationEffect::EventDelegate* CreateEventDelegate( + Element* element, + const AtomicString& animation_name, + const AnimationEffect::EventDelegate* old_event_delegate); // Specifies whether to process custom or standard CSS properties. enum class PropertyPass { kCustom, kStandard }; @@ -203,12 +208,24 @@ class AnimationEventDelegate final : public AnimationEffect::EventDelegate { public: - AnimationEventDelegate(Element* animation_target, const AtomicString& name) + AnimationEventDelegate( + Element* animation_target, + const AtomicString& name, + Timing::Phase previous_phase = Timing::kPhaseNone, + base::Optional<double> previous_iteration = base::nullopt) : animation_target_(animation_target), name_(name), - previous_phase_(Timing::kPhaseNone) {} + previous_phase_(previous_phase), + previous_iteration_(previous_iteration) {} bool RequiresIterationEvents(const AnimationEffect&) override; void OnEventCondition(const AnimationEffect&, Timing::Phase) override; + + bool IsAnimationEventDelegate() const override { return true; } + Timing::Phase getPreviousPhase() const { return previous_phase_; } + base::Optional<double> getPreviousIteration() const { + return previous_iteration_; + } + void Trace(Visitor*) override; private: @@ -260,6 +277,13 @@ }; template <> +struct DowncastTraits<CSSAnimations::AnimationEventDelegate> { + static bool AllowFrom(const AnimationEffect::EventDelegate& delegate) { + return delegate.IsAnimationEventDelegate(); + } +}; + +template <> struct DowncastTraits<CSSAnimations::TransitionEventDelegate> { static bool AllowFrom(const AnimationEffect::EventDelegate& delegate) { return delegate.IsTransitionEventDelegate();
diff --git a/third_party/blink/renderer/core/animation/css/css_transition.cc b/third_party/blink/renderer/core/animation/css/css_transition.cc index f91c1b9f..d02c129b 100644 --- a/third_party/blink/renderer/core/animation/css/css_transition.cc +++ b/third_party/blink/renderer/core/animation/css/css_transition.cc
@@ -5,7 +5,6 @@ #include "third_party/blink/renderer/core/animation/css/css_transition.h" #include "third_party/blink/renderer/core/animation/css/css_animations.h" -#include "third_party/blink/renderer/core/animation/keyframe.h" #include "third_party/blink/renderer/core/dom/document.h" namespace blink { @@ -29,57 +28,11 @@ return Animation::playState(); } -void CSSTransition::setEffect(AnimationEffect* new_effect) { - AnimationEffect* old_effect = effect(); - Animation::setEffect(new_effect); - if (new_effect == old_effect) - return; - - AnimationEffect::EventDelegate* old_event_delegate = - old_effect ? old_effect->GetEventDelegate() : nullptr; - - // When the animation no longer has an associated effect, calls to - // Animation::Update will no longer update the animation timing and, - // consequently, do not trigger transition events. Each transitionrun or - // transitionstart requires a corresponding transitionend or transitioncancel. - // https://drafts.csswg.org/css-transitions-2/#event-dispatch - if (!new_effect && old_effect && old_event_delegate) { - // If the transition has no target effect, the transition phase is set - // according to the first matching condition from below: - // If the transition has an unresolved current time, - // The transition phase is ‘idle’. - // If the transition has a current time < 0, - // The transition phase is ‘before’. - // Otherwise, - // The transition phase is ‘after’. - base::Optional<double> current_time = CurrentTimeInternal(); - Timing::Phase phase; - if (!current_time) - phase = Timing::kPhaseNone; - else if (current_time < 0) - phase = Timing::kPhaseBefore; - else - phase = Timing::kPhaseAfter; - old_event_delegate->OnEventCondition(*old_effect, phase); - return; - } - - if (!new_effect) - return; - - // TODO(crbug.com/1043778): Determine if changing the properties being - // animated should reset the owning element. - - // Attach an event delegate to the new effect. - Element* target = To<KeyframeEffect>(new_effect)->target(); - AnimationEffect::EventDelegate* new_event_delegate = - CSSAnimations::CreateEventDelegate(target, transition_property_, - old_event_delegate); - new_effect->SetEventDelegate(new_event_delegate); - - // Force an update to the timing model to ensure correct ordering of - // transition events. - Update(kTimingUpdateOnDemand); +AnimationEffect::EventDelegate* CSSTransition::CreateEventDelegate( + Element* target, + const AnimationEffect::EventDelegate* old_event_delegate) { + return CSSAnimations::CreateEventDelegate(target, transition_property_, + old_event_delegate); } } // namespace blink
diff --git a/third_party/blink/renderer/core/animation/css/css_transition.h b/third_party/blink/renderer/core/animation/css/css_transition.h index 62091543..458b546 100644 --- a/third_party/blink/renderer/core/animation/css/css_transition.h +++ b/third_party/blink/renderer/core/animation/css/css_transition.h
@@ -38,12 +38,10 @@ // https://drafts.csswg.org/css-transitions-2/#requirements-on-pending-style-changes String playState() const override; - // Effects associated with a CSSTransition use an event delegate to queue - // transition events triggered from changes to the timing phase of an - // animation. This override ensures that an event delegate is associated with - // the new effect, or that the transition is properly ended|canceled in the - // case of a null effect. - void setEffect(AnimationEffect* effect) override; + protected: + AnimationEffect::EventDelegate* CreateEventDelegate( + Element* target, + const AnimationEffect::EventDelegate* old_event_delegate) override; private: PropertyHandle transition_property_;
diff --git a/third_party/blink/renderer/core/animation/pending_animations.cc b/third_party/blink/renderer/core/animation/pending_animations.cc index b98e283..bdc657ed 100644 --- a/third_party/blink/renderer/core/animation/pending_animations.cc +++ b/third_party/blink/renderer/core/animation/pending_animations.cc
@@ -49,7 +49,14 @@ document->View()->ScheduleAnimation(); bool visible = document->GetPage() && document->GetPage()->IsPageVisible(); - if (!visible && !timer_.IsActive()) { + if (!visible && !timer_.IsActive() && + // TODO(crbug.com/916117): Firing a timer for animations linked to + // inactive timelines creates an unnecessary cycle of unsuccessfully + // starting such animations. Instead, let the animation frame call + // PendingAnimations::Update when the timeline becomes active. + // Revisit this condition and add a test as part of inactive timeline + // implementation. + animation->timeline() && animation->timeline()->IsActive()) { timer_.StartOneShot(base::TimeDelta(), FROM_HERE); } } @@ -77,8 +84,13 @@ started_synchronized_on_compositor = true; } - if (!animation->timeline()) + // TODO(crbug.com/916117): Revisit this condition as part of handling + // inactive timelines work. + if (!animation->timeline() || !animation->timeline()->IsActive()) { + DCHECK(!animation->timeline() || + !animation->timeline()->IsScrollTimeline()); continue; + } if (animation->Playing() && !animation->startTime()) { waiting_for_start_time.push_back(animation.Get());
diff --git a/third_party/blink/renderer/core/css/css_uri_value.cc b/third_party/blink/renderer/core/css/css_uri_value.cc index ce4e757..18e3b74 100644 --- a/third_party/blink/renderer/core/css/css_uri_value.cc +++ b/third_party/blink/renderer/core/css/css_uri_value.cc
@@ -34,8 +34,6 @@ } void CSSURIValue::ReResolveUrl(const Document& document) const { - if (is_local_) - return; KURL url = document.CompleteURL(relative_url_); AtomicString url_string(url.GetString()); if (url_string == absolute_url_) @@ -49,8 +47,8 @@ } AtomicString CSSURIValue::FragmentIdentifier() const { - if (is_local_) - return AtomicString(relative_url_.GetString().Substring(1)); + // Always use KURL's FragmentIdentifier to ensure that we're handling the + // fragment in a consistent manner. return AtomicString(AbsoluteUrl().FragmentIdentifier()); }
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index fa89062..f8c94cb 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -981,11 +981,11 @@ } ExecutionContext* Document::ToExecutionContext() { - return domWindow(); + return GetExecutionContext(); } const ExecutionContext* Document::ToExecutionContext() const { - return domWindow(); + return GetExecutionContext(); } bool Document::FeatureEnabled(OriginTrialFeature feature) const {
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc index 45832eb..5d3721c 100644 --- a/third_party/blink/renderer/core/dom/document_test.cc +++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -1200,6 +1200,25 @@ EXPECT_FALSE(ukm::TestUkmRecorder::EntryHasMetric(entries[1], "DidSearch")); } +TEST_F(DocumentTest, AtPageMarginWithDeviceScaleFactor) { + GetDocument().GetFrame()->SetPageZoomFactor(2); + SetBodyInnerHTML("<style>@page { margin: 50px; size: 400px 10in; }</style>"); + + constexpr FloatSize initial_page_size(800, 600); + + GetDocument().GetFrame()->StartPrinting(initial_page_size, initial_page_size); + GetDocument().View()->UpdateLifecyclePhasesForPrinting(); + + DoubleSize page_size; + int margin[4]; + GetDocument().PageSizeAndMarginsInPixels(0, page_size, margin[0], margin[1], + margin[2], margin[3]); + + for (int side_margin : margin) + EXPECT_EQ(50, side_margin); + EXPECT_EQ(DoubleSize(400, 960), page_size); +} + /** * Tests for viewport-fit propagation. */
diff --git a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc index 6bde84a..07e5ba4f 100644 --- a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc +++ b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
@@ -159,7 +159,8 @@ // A genuine mouse click cannot be triggered by script so we don't expect // there to be any script in the stack. DCHECK(!frame->GetAdTracker() || - !frame->GetAdTracker()->IsAdScriptInStackSlow()); + !frame->GetAdTracker()->IsAdScriptInStackSlow( + AdTracker::StackType::kBottomAndTop)); if (frame->IsAdSubframe()) { UseCounter::Count(document, WebFeature::kAdClick); }
diff --git a/third_party/blink/renderer/core/events/application_cache_error_event.cc b/third_party/blink/renderer/core/events/application_cache_error_event.cc index 1897d0bd..2bf16a6 100644 --- a/third_party/blink/renderer/core/events/application_cache_error_event.cc +++ b/third_party/blink/renderer/core/events/application_cache_error_event.cc
@@ -57,6 +57,7 @@ const AtomicString& event_type, const ApplicationCacheErrorEventInit* initializer) : Event(event_type, initializer), status_(0) { + DCHECK(RuntimeEnabledFeatures::AppCacheEnabled()); if (initializer->hasReason()) reason_ = initializer->reason(); if (initializer->hasUrl())
diff --git a/third_party/blink/renderer/core/events/application_cache_error_event.idl b/third_party/blink/renderer/core/events/application_cache_error_event.idl index 80db4d8..c5c59b4 100644 --- a/third_party/blink/renderer/core/events/application_cache_error_event.idl +++ b/third_party/blink/renderer/core/events/application_cache_error_event.idl
@@ -9,6 +9,7 @@ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22702 [ + RuntimeEnabled=AppCache, SecureContext=RestrictAppCacheToSecureContexts ] interface ApplicationCacheErrorEvent : Event { constructor(DOMString type, optional ApplicationCacheErrorEventInit eventInitDict = {});
diff --git a/third_party/blink/renderer/core/exported/web_performance.cc b/third_party/blink/renderer/core/exported/web_performance.cc index 9e18a942..f927ef9 100644 --- a/third_party/blink/renderer/core/exported/web_performance.cc +++ b/third_party/blink/renderer/core/exported/web_performance.cc
@@ -196,20 +196,20 @@ private_->timing()->FirstInputOrScrollNotifiedTimestamp()); } -double WebPerformance::FirstInputDelay() const { - return MillisecondsToSeconds(private_->timing()->FirstInputDelay()); +base::Optional<base::TimeDelta> WebPerformance::FirstInputDelay() const { + return private_->timing()->FirstInputDelay(); } -double WebPerformance::FirstInputTimestamp() const { - return MillisecondsToSeconds(private_->timing()->FirstInputTimestamp()); +base::Optional<base::TimeDelta> WebPerformance::FirstInputTimestamp() const { + return private_->timing()->FirstInputTimestamp(); } -double WebPerformance::LongestInputDelay() const { - return MillisecondsToSeconds(private_->timing()->LongestInputDelay()); +base::Optional<base::TimeDelta> WebPerformance::LongestInputDelay() const { + return private_->timing()->LongestInputDelay(); } -double WebPerformance::LongestInputTimestamp() const { - return MillisecondsToSeconds(private_->timing()->LongestInputTimestamp()); +base::Optional<base::TimeDelta> WebPerformance::LongestInputTimestamp() const { + return private_->timing()->LongestInputTimestamp(); } double WebPerformance::TotalInputDelay() const {
diff --git a/third_party/blink/renderer/core/exported/web_view_test.cc b/third_party/blink/renderer/core/exported/web_view_test.cc index 671c05fe..5239942b 100644 --- a/third_party/blink/renderer/core/exported/web_view_test.cc +++ b/third_party/blink/renderer/core/exported/web_view_test.cc
@@ -5385,7 +5385,7 @@ InteractiveDetector* interactive_detector = GetTestInteractiveDetector(*document); - EXPECT_TRUE(interactive_detector->GetFirstInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetFirstInputDelay().has_value()); WebKeyboardEvent key_event1(WebInputEvent::kRawKeyDown, WebInputEvent::kNoModifiers, @@ -5397,9 +5397,11 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event1)); - EXPECT_NEAR(50, interactive_detector->GetFirstInputDelay().InMillisecondsF(), + EXPECT_TRUE(interactive_detector->GetFirstInputDelay().has_value()); + EXPECT_NEAR(50, + (*interactive_detector->GetFirstInputDelay()).InMillisecondsF(), 0.01); - EXPECT_EQ(70, (interactive_detector->GetFirstInputTimestamp() - start_time) + EXPECT_EQ(70, (*interactive_detector->GetFirstInputTimestamp() - start_time) .InMillisecondsF()); // Sending a second event won't change the FirstInputDelay. @@ -5413,9 +5415,10 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event2)); - EXPECT_NEAR(50, interactive_detector->GetFirstInputDelay().InMillisecondsF(), + EXPECT_NEAR(50, + (*interactive_detector->GetFirstInputDelay()).InMillisecondsF(), 0.01); - EXPECT_EQ(70, (interactive_detector->GetFirstInputTimestamp() - start_time) + EXPECT_EQ(70, (*interactive_detector->GetFirstInputTimestamp() - start_time) .InMillisecondsF()); } @@ -5437,7 +5440,7 @@ InteractiveDetector* interactive_detector = GetTestInteractiveDetector(*document); - EXPECT_TRUE(interactive_detector->GetLongestInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetLongestInputDelay().has_value()); WebKeyboardEvent key_event1(WebInputEvent::kRawKeyDown, WebInputEvent::kNoModifiers, @@ -5472,7 +5475,7 @@ WebCoalescedInputEvent(key_event3)); EXPECT_NEAR(100, - interactive_detector->GetLongestInputDelay().InMillisecondsF(), + (*interactive_detector->GetLongestInputDelay()).InMillisecondsF(), 0.01); EXPECT_EQ(longest_input_timestamp, interactive_detector->GetLongestInputTimestamp()); @@ -5563,7 +5566,7 @@ InteractiveDetector* interactive_detector = GetTestInteractiveDetector(*document); - EXPECT_TRUE(interactive_detector->GetLongestInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetLongestInputDelay().has_value()); WebKeyboardEvent key_event1(WebInputEvent::kRawKeyDown, WebInputEvent::kNoModifiers, @@ -5593,8 +5596,9 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event2)); - EXPECT_NEAR( - 50, interactive_detector->GetLongestInputDelay().InMillisecondsF(), 0.01); + EXPECT_NEAR(50, + (*interactive_detector->GetLongestInputDelay()).InMillisecondsF(), + 0.01); EXPECT_EQ(key_event1_time, interactive_detector->GetLongestInputTimestamp()); } @@ -5632,7 +5636,7 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event)); - EXPECT_TRUE(interactive_detector->GetLongestInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetLongestInputDelay().has_value()); } // Tests page backgrounding outside of input queuing time does not affect @@ -5654,7 +5658,7 @@ InteractiveDetector* interactive_detector = GetTestInteractiveDetector(*document); - EXPECT_TRUE(interactive_detector->GetLongestInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetLongestInputDelay().has_value()); web_view->SetVisibilityState(PageVisibilityState::kHidden, /*initial_state=*/false); @@ -5674,8 +5678,9 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event)); - EXPECT_NEAR( - 50, interactive_detector->GetLongestInputDelay().InMillisecondsF(), 0.01); + EXPECT_NEAR(50, + (*interactive_detector->GetLongestInputDelay()).InMillisecondsF(), + 0.01); EXPECT_EQ(key_event_time, interactive_detector->GetLongestInputTimestamp()); } @@ -5718,7 +5723,7 @@ // We don't know if this pointer event will result in a scroll or not, so we // can't report its delay. We don't consider a scroll to be meaningful input. - EXPECT_TRUE(interactive_detector->GetFirstInputDelay().is_zero()); + EXPECT_FALSE(interactive_detector->GetFirstInputDelay().has_value()); // When we receive a pointer up, we report the delay of the pointer down. WebPointerEvent pointer_up( @@ -5729,9 +5734,10 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(pointer_up)); - EXPECT_NEAR(50, interactive_detector->GetFirstInputDelay().InMillisecondsF(), + EXPECT_NEAR(50, + (*interactive_detector->GetFirstInputDelay()).InMillisecondsF(), 0.01); - EXPECT_EQ(70, (interactive_detector->GetFirstInputTimestamp() - start_time) + EXPECT_EQ(70, (*interactive_detector->GetFirstInputTimestamp() - start_time) .InMillisecondsF()); } @@ -5797,8 +5803,9 @@ web_view->MainFrameWidget()->HandleInputEvent( WebCoalescedInputEvent(key_event)); + EXPECT_TRUE(interactive_detector->GetFirstInputDelay().has_value()); base::TimeDelta first_input_delay = - interactive_detector->GetFirstInputDelay(); + *interactive_detector->GetFirstInputDelay(); EXPECT_EQ(5000, first_input_delay.InMillisecondsF()); web_view_helper_.Reset(); // Remove dependency on locally scoped client. @@ -5843,7 +5850,7 @@ WebCoalescedInputEvent(key_event)); base::TimeDelta longest_input_delay = - interactive_detector->GetLongestInputDelay(); + *interactive_detector->GetLongestInputDelay(); EXPECT_EQ(5000, longest_input_delay.InMillisecondsF()); web_view_helper_.Reset(); // Remove dependency on locally scoped client.
diff --git a/third_party/blink/renderer/core/frame/ad_tracker.cc b/third_party/blink/renderer/core/frame/ad_tracker.cc index 14c4351..4356a10 100644 --- a/third_party/blink/renderer/core/frame/ad_tracker.cc +++ b/third_party/blink/renderer/core/frame/ad_tracker.cc
@@ -38,10 +38,10 @@ // Controls whether the AdTracker will look across async stacks to determine if // the currently running stack is ad related. const base::Feature kAsyncStackAdTagging{"AsyncStackAdTagging", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; -// Controls whether the AdTracker analyzes the whole pseudo-stack or just the -// top of the stack when detecting ads. +// Controls whether the AdTracker analyzes the bottom and top of the stack or +// just the top of the stack when detecting ads. const base::Feature kTopOfStackAdTagging{"TopOfStackAdTagging", base::FEATURE_DISABLED_BY_DEFAULT}; } // namespace features @@ -156,8 +156,9 @@ bool known_ad) { // Check if the document loading the resource is an ad or if any executing // script is an ad. - known_ad = known_ad || IsKnownAdExecutionContext(execution_context) || - IsAdScriptInStackForContext(execution_context); + known_ad = + known_ad || IsKnownAdExecutionContext(execution_context) || + IsAdScriptInStackForContext(StackType::kBottomAndTop, execution_context); // If it is a script marked as an ad and it's not in an ad context, append it // to the known ad script set. We don't need to keep track of ad scripts in ad @@ -177,7 +178,7 @@ if (!async_stack_enabled_) return; - if (IsAdScriptInStackForContext(execution_context)) + if (IsAdScriptInStackForContext(StackType::kBottomOnly, execution_context)) task->SetAdTask(); } @@ -200,6 +201,7 @@ } bool AdTracker::IsAdScriptInStackForContext( + StackType stack_type, ExecutionContext* execution_context) { if (num_ads_in_stack_ > 0 || running_ad_async_tasks_ > 0) return true; @@ -212,9 +214,13 @@ if (IsKnownAdExecutionContext(execution_context)) return true; - // The pseudo-stack contains entry points into the stack (e.g., when v8 is - // executed) but not the entire stack. It's cheap to retrieve the top of the - // stack so scan that as well. + if (stack_type == StackType::kBottomOnly) + return false; + + // The stack scanned by the AdTracker contains entry points into the stack + // (e.g., when v8 is executed) but not the entire stack. For a small cost we + // can also check the top of the stack (this is much cheaper than getting the + // full stack from v8). String top_script = ScriptAtTopOfStack(execution_context); if (!top_script.IsEmpty() && IsKnownAdScript(execution_context, top_script)) @@ -223,8 +229,8 @@ return false; } -bool AdTracker::IsAdScriptInStackSlow() { - return IsAdScriptInStackForContext(GetCurrentExecutionContext()); +bool AdTracker::IsAdScriptInStackSlow(StackType stack_type) { + return IsAdScriptInStackForContext(stack_type, GetCurrentExecutionContext()); } bool AdTracker::IsKnownAdScript(ExecutionContext* execution_context,
diff --git a/third_party/blink/renderer/core/frame/ad_tracker.h b/third_party/blink/renderer/core/frame/ad_tracker.h index 7ed7dc59..c7cae5c6 100644 --- a/third_party/blink/renderer/core/frame/ad_tracker.h +++ b/third_party/blink/renderer/core/frame/ad_tracker.h
@@ -35,6 +35,7 @@ // The tracker is maintained per local root. class CORE_EXPORT AdTracker : public GarbageCollected<AdTracker> { public: + enum class StackType { kBottomOnly, kBottomAndTop }; // Finds an AdTracker for a given ExecutionContext. static AdTracker* FromExecutionContext(ExecutionContext*); @@ -72,13 +73,17 @@ // Returns true if any script in the pseudo call stack has previously been // identified as an ad resource, if |execution_context| is a known ad // execution context, or if the script at the top of |execution_context|'s - // stack is ad script. - bool IsAdScriptInStackForContext(ExecutionContext* execution_context); + // stack is ad script. Whether to look at just the bottom of the + // stack or the top and bottom is indicated by |stack_type|. kBottomAndTop is + // generally best as it catches more ads, but if you're calling very + // frequently then consider just the bottom of the stack for performance sake. + bool IsAdScriptInStackForContext(StackType stack_type, + ExecutionContext* execution_context); // Determines the current ExecutionContext and then calls // IsAdScriptInStackForContext with it. If you know the ExecutionContext*, // call IsAdScriptInStackForContext, as it's faster than looking it up. - bool IsAdScriptInStackSlow(); + bool IsAdScriptInStackSlow(StackType stack_type); virtual void Trace(Visitor*); @@ -115,7 +120,13 @@ // The number of ad-related async tasks currently running in the stack. uint32_t running_ad_async_tasks_ = 0; + // True if the AdTracker looks not only at the current V8 stack for ad script + // but also at the previous asynchronous stacks that caused this current + // callstack to run (e.g., registered callbacks). const bool async_stack_enabled_; + + // True if the TopOfStack experiment is running, which forces the AdTracker to + // ignore the bottom of stack frames when looking for ad script. const bool top_of_stack_only_; DISALLOW_COPY_AND_ASSIGN(AdTracker);
diff --git a/third_party/blink/renderer/core/frame/ad_tracker_test.cc b/third_party/blink/renderer/core/frame/ad_tracker_test.cc index a11b410..40877c747 100644 --- a/third_party/blink/renderer/core/frame/ad_tracker_test.cc +++ b/third_party/blink/renderer/core/frame/ad_tracker_test.cc
@@ -117,7 +117,13 @@ void DidExecuteScript() { ad_tracker_->DidExecuteScript(); } bool AnyExecutingScriptsTaggedAsAdResource() { - return ad_tracker_->IsAdScriptInStackSlow(); + return AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomAndTop); + } + + bool AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType stack_type) { + return ad_tracker_->IsAdScriptInStackSlow(stack_type); } void AppendToKnownAdScripts(const String& url) { @@ -147,6 +153,29 @@ EXPECT_TRUE(AnyExecutingScriptsTaggedAsAdResource()); } +TEST_F(AdTrackerTest, BottomScriptTaggedAsAdResource) { + AppendToKnownAdScripts("https://example.com/ad.js"); + + WillExecuteScript("https://example.com/ad.js"); + ad_tracker_->SetScriptAtTopOfStack("https://example.com/vanilla.js"); + EXPECT_TRUE(AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomAndTop)); + EXPECT_TRUE(AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomOnly)); +} + +TEST_F(AdTrackerTest, TopScriptTaggedAsAdResource) { + AppendToKnownAdScripts("https://example.com/ad.js"); + + WillExecuteScript("https://example.com/vanilla.js"); + ad_tracker_->SetScriptAtTopOfStack("https://example.com/ad.js"); + + EXPECT_TRUE(AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomAndTop)); + EXPECT_FALSE(AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomOnly)); +} + TEST_F(AdTrackerTest, TopOfStackOnly_NoAdsOnTop) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature(features::kTopOfStackAdTagging); @@ -198,6 +227,8 @@ ad_tracker_->SetScriptAtTopOfStack(ad_script_url); EXPECT_TRUE(AnyExecutingScriptsTaggedAsAdResource()); + EXPECT_FALSE(AnyExecutingScriptsTaggedAsAdResourceWithStackType( + AdTracker::StackType::kBottomOnly)); ad_tracker_->SetScriptAtTopOfStack("https://www.example.com/baz.js"); EXPECT_FALSE(AnyExecutingScriptsTaggedAsAdResource()); @@ -366,14 +397,15 @@ // Run vanilla script in the main frame context. It shouldn't be an ad. ad_tracker_->SetScriptAtTopOfStack("foo.js"); EXPECT_FALSE(ad_tracker_->IsAdScriptInStackForContext( - GetDocument().ToExecutionContext())); + AdTracker::StackType::kBottomAndTop, GetDocument().ToExecutionContext())); // Run the same vanilla script in the child's context. It should be considered // an ad based on context alone. This also tests IsAdScriptInStack's // |execution_context| param. ExecutionContext* execution_context = child_frame->GetDocument()->ToExecutionContext(); - EXPECT_TRUE(ad_tracker_->IsAdScriptInStackForContext(execution_context)); + EXPECT_TRUE(ad_tracker_->IsAdScriptInStackForContext( + AdTracker::StackType::kBottomAndTop, execution_context)); } TEST_F(AdTrackerSimTest, RedirectToAdUrl) {
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc index 286b15d..046000ed 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -737,6 +737,8 @@ } ApplicationCache* LocalDOMWindow::applicationCache() const { + DCHECK(RuntimeEnabledFeatures::AppCacheEnabled( + document()->ToExecutionContext())); if (!IsCurrentlyDisplayedInFrame()) return nullptr; if (!isSecureContext()) {
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 032fbf1..65259471 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -1277,7 +1277,8 @@ bool parent_is_ad = parent->IsAdSubframe(); - if (parent_is_ad || ad_tracker_->IsAdScriptInStackSlow()) { + if (parent_is_ad || + ad_tracker_->IsAdScriptInStackSlow(AdTracker::StackType::kBottomAndTop)) { SetIsAdSubframe(parent_is_ad ? blink::mojom::AdFrameType::kChildAd : blink::mojom::AdFrameType::kRootAd); }
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 7c71590..1e1f413 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -1221,6 +1221,7 @@ media_type_when_not_printing_ = g_null_atom; } + frame_->GetDocument()->GetStyleEngine().MarkViewportStyleDirty(); frame_->GetDocument()->GetStyleEngine().MarkAllElementsForStyleRecalc( StyleChangeReasonForTracing::Create( style_change_reason::kStyleSheetChange));
diff --git a/third_party/blink/renderer/core/frame/window.idl b/third_party/blink/renderer/core/frame/window.idl index 4333fd1..47dd13ef 100644 --- a/third_party/blink/renderer/core/frame/window.idl +++ b/third_party/blink/renderer/core/frame/window.idl
@@ -74,7 +74,7 @@ // the user agent [Affects=Nothing, LogActivity=GetterOnly] readonly attribute Navigator navigator; - [LogActivity=GetterOnly, SecureContext=RestrictAppCacheToSecureContexts] readonly attribute ApplicationCache applicationCache; + [LogActivity=GetterOnly, SecureContext=RestrictAppCacheToSecureContexts, RuntimeEnabled=AppCache] readonly attribute ApplicationCache applicationCache; // user prompts [Measure, CallWith=ScriptState] void alert();
diff --git a/third_party/blink/renderer/core/html/forms/resources/PRESUBMIT.py b/third_party/blink/renderer/core/html/forms/resources/PRESUBMIT.py index f284658..26b84f5f 100644 --- a/third_party/blink/renderer/core/html/forms/resources/PRESUBMIT.py +++ b/third_party/blink/renderer/core/html/forms/resources/PRESUBMIT.py
@@ -2,13 +2,15 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. + def _CheckChangeOnUploadOrCommit(input_api, output_api): - return input_api.canned_checks.CheckPatchFormatted(input_api, output_api, - check_js=True) + return input_api.canned_checks.CheckPatchFormatted( + input_api, output_api, check_js=True) + def CheckChangeOnUpload(input_api, output_api): - return _CheckChangeOnUploadOrCommit(input_api, output_api) + return _CheckChangeOnUploadOrCommit(input_api, output_api) def CheckChangeOnCommit(input_api, output_api): - return _CheckChangeOnUploadOrCommit(input_api, output_api) + return _CheckChangeOnUploadOrCommit(input_api, output_api)
diff --git a/third_party/blink/renderer/core/html/html_body_element.cc b/third_party/blink/renderer/core/html/html_body_element.cc index a2298dd..eedcfd69 100644 --- a/third_party/blink/renderer/core/html/html_body_element.cc +++ b/third_party/blink/renderer/core/html/html_body_element.cc
@@ -215,7 +215,7 @@ GetDocument().SetWindowAttributeEventListener( event_type_names::kLanguagechange, CreateAttributeEventListener(GetDocument().GetFrame(), name, value)); - } else if (RuntimeEnabledFeatures::PortalsEnabled() && + } else if (RuntimeEnabledFeatures::PortalsEnabled(&GetDocument()) && name == html_names::kOnportalactivateAttr) { GetDocument().SetWindowAttributeEventListener( event_type_names::kPortalactivate,
diff --git a/third_party/blink/renderer/core/html/html_frame_set_element.cc b/third_party/blink/renderer/core/html/html_frame_set_element.cc index 3d2407af..39dece16 100644 --- a/third_party/blink/renderer/core/html/html_frame_set_element.cc +++ b/third_party/blink/renderer/core/html/html_frame_set_element.cc
@@ -202,7 +202,7 @@ GetDocument().SetWindowAttributeEventListener( event_type_names::kLanguagechange, CreateAttributeEventListener(GetDocument().GetFrame(), name, value)); - } else if (RuntimeEnabledFeatures::PortalsEnabled() && + } else if (RuntimeEnabledFeatures::PortalsEnabled(&GetDocument()) && name == html_names::kOnportalactivateAttr) { GetDocument().SetWindowAttributeEventListener( event_type_names::kPortalactivate,
diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 0d86017..8ada7d3 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc
@@ -306,20 +306,10 @@ return; LayoutBox* scrollable = LayoutBox::FindAutoscrollable( layout_object, /*is_middle_click_autoscroll*/ true); - Page* page = frame_->GetPage(); - bool vertical_scroll_offset = false; - bool horizontal_scroll_offset = false; - if (page) { - ScrollOffset maximum_scroll_offset = - page->GetVisualViewport().MaximumScrollOffset(); - vertical_scroll_offset = maximum_scroll_offset.Height() > 0; - horizontal_scroll_offset = maximum_scroll_offset.Width() > 0; - } controller->StartMiddleClickAutoscroll( - layout_object->GetFrame(), LastKnownMousePositionInRootFrame(), - mouse_event_manager_->LastKnownMouseScreenPosition(), - scrollable->HasScrollableOverflowY() || vertical_scroll_offset, - scrollable->HasScrollableOverflowX() || horizontal_scroll_offset); + layout_object->GetFrame(), scrollable, + LastKnownMousePositionInRootFrame(), + mouse_event_manager_->LastKnownMouseScreenPosition()); mouse_event_manager_->InvalidateClick(); }
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 69ad9cf..25a1433 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -783,9 +783,6 @@ if (params->stop_at_main_frame_layout_viewport && IsGlobalRootScroller()) return absolute_rect; - // Presumably the same issue as in setScrollTop. See crbug.com/343132. - DisableCompositingQueryAsserts disabler; - PhysicalRect absolute_rect_to_scroll = absolute_rect; if (absolute_rect_to_scroll.Width() <= 0) absolute_rect_to_scroll.SetWidth(LayoutUnit(1));
diff --git a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc index 1b3d327..b76fe8c 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
@@ -324,6 +324,16 @@ return ratio; } +namespace { + +LayoutUnit CalculateFixedCrossSize(LayoutUnit available_size, + const MinMaxSizes& cross_axis_min_max, + LayoutUnit margin_sum) { + return cross_axis_min_max.ClampSizeToMinAndMax(available_size - margin_sum); +} + +} // namespace + NGConstraintSpace NGFlexLayoutAlgorithm::BuildSpaceForIntrinsicBlockSize( const NGBlockNode& flex_item, const NGPhysicalBoxStrut& physical_margins, @@ -345,13 +355,14 @@ if (is_column_) { space_builder.SetIsFixedInlineSize(true); child_available_size.inline_size = - cross_axis_min_max.ClampSizeToMinAndMax( - child_available_size.inline_size - margins.InlineSum()); + CalculateFixedCrossSize(child_available_size.inline_size, + cross_axis_min_max, margins.InlineSum()); } else { space_builder.SetIsFixedBlockSize(true); DCHECK_NE(content_box_size_.block_size, kIndefiniteSize); - child_available_size.block_size = cross_axis_min_max.ClampSizeToMinAndMax( - child_available_size.block_size - margins.BlockSum()); + child_available_size.block_size = + CalculateFixedCrossSize(child_available_size.block_size, + cross_axis_min_max, margins.BlockSum()); } } @@ -790,11 +801,19 @@ space_builder.SetIsPaintedAtomically(true); LogicalSize available_size; + NGBoxStrut margins = flex_item.physical_margins.ConvertToLogical( + ConstraintSpace().GetWritingMode(), Style().Direction()); if (is_column_) { available_size.inline_size = content_box_size_.inline_size; available_size.block_size = flex_item.flexed_content_size + flex_item.main_axis_border_padding; space_builder.SetIsFixedBlockSize(true); + if (WillChildCrossSizeBeContainerCrossSize(flex_item.ng_input_node)) { + space_builder.SetIsFixedInlineSize(true); + available_size.inline_size = CalculateFixedCrossSize( + available_size.inline_size, flex_item.min_max_cross_sizes.value(), + margins.InlineSum()); + } // https://drafts.csswg.org/css-flexbox/#definite-sizes // If the flex container has a definite main size, a flex item's // post-flexing main size is treated as definite, even though it can @@ -808,14 +827,12 @@ flex_item.flexed_content_size + flex_item.main_axis_border_padding; available_size.block_size = content_box_size_.block_size; space_builder.SetIsFixedInlineSize(true); - } - if (WillChildCrossSizeBeContainerCrossSize(flex_item.ng_input_node)) { - // TODO(dgrogan): These need margins subtracted and min/max sizes - // applied, like in BuildSpaceForIntrinsicBlockSize. - if (is_column_) - space_builder.SetIsFixedInlineSize(true); - else + if (WillChildCrossSizeBeContainerCrossSize(flex_item.ng_input_node)) { space_builder.SetIsFixedBlockSize(true); + available_size.block_size = CalculateFixedCrossSize( + available_size.block_size, flex_item.min_max_cross_sizes.value(), + margins.BlockSum()); + } } space_builder.SetNeedsBaseline(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc index 273d8fc2..167e141 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.cc
@@ -5,25 +5,39 @@ #include "third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h" #include "third_party/blink/renderer/core/layout/layout_box.h" +#include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h" +#include "third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h" #include "third_party/blink/renderer/core/layout/ng/ng_layout_input_node.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" namespace blink { NGFragmentChildIterator::NGFragmentChildIterator( - const NGPhysicalBoxFragment& parent) - : parent_fragment_(&parent) { + const NGPhysicalBoxFragment& parent, + const NGBlockBreakToken* parent_break_token) + : parent_fragment_(&parent), + parent_break_token_(parent_break_token), + is_fragmentation_context_root_(parent.IsFragmentationContextRoot()) { DCHECK(RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()); current_.link_.fragment = nullptr; + if (parent_break_token) + child_break_tokens_ = parent_break_token->ChildBreakTokens(); if (parent.HasItems()) { current_.cursor_.emplace(*parent.Items()); + current_.block_break_token_ = parent_break_token; UpdateSelfFromCursor(); } else { UpdateSelfFromFragment(); } } -NGFragmentChildIterator::NGFragmentChildIterator(const NGInlineCursor& parent) { +NGFragmentChildIterator::NGFragmentChildIterator( + const NGInlineCursor& parent, + const NGBlockBreakToken* parent_break_token, + base::span<const NGBreakToken* const> child_break_tokens) + : parent_break_token_(parent_break_token), + child_break_tokens_(child_break_tokens) { + current_.block_break_token_ = parent_break_token; current_.link_.fragment = nullptr; current_.cursor_ = parent.CursorForDescendants(); UpdateSelfFromCursor(); @@ -34,16 +48,24 @@ const NGFragmentItem* item = current_.cursor_->CurrentItem(); // Descend using the cursor if the current item doesn't establish a new // formatting context. - if (!item->IsFormattingContextRoot()) - return NGFragmentChildIterator(*current_.cursor_); + if (!item->IsFormattingContextRoot()) { + return NGFragmentChildIterator( + *current_.cursor_, + current_.BlockBreakToken() ? parent_break_token_ : nullptr, + child_break_tokens_.subspan(child_break_token_idx_)); + } } DCHECK(current_.BoxFragment()); - return NGFragmentChildIterator(*current_.BoxFragment()); + return NGFragmentChildIterator(*current_.BoxFragment(), + current_.BlockBreakToken()); } bool NGFragmentChildIterator::AdvanceChildFragment() { DCHECK(parent_fragment_); const auto children = parent_fragment_->Children(); + const NGPhysicalBoxFragment* previous_fragment = + To<NGPhysicalBoxFragment>(current_.link_.fragment); + DCHECK(previous_fragment); if (child_fragment_idx_ < children.size()) child_fragment_idx_++; // There may be line box fragments among the children, and we're not @@ -52,22 +74,81 @@ SkipToBoxFragment(); if (child_fragment_idx_ >= children.size()) return false; - UpdateSelfFromFragment(); + if (child_break_token_idx_ < child_break_tokens_.size()) + child_break_token_idx_++; + UpdateSelfFromFragment(previous_fragment); return true; } -void NGFragmentChildIterator::UpdateSelfFromFragment() { +void NGFragmentChildIterator::UpdateSelfFromFragment( + const NGPhysicalBoxFragment* previous_fragment) { DCHECK(parent_fragment_); const auto children = parent_fragment_->Children(); if (child_fragment_idx_ >= children.size()) return; current_.link_ = children[child_fragment_idx_]; DCHECK(current_.link_.fragment); + SkipToBlockBreakToken(); + if (child_break_token_idx_ < child_break_tokens_.size()) { + current_.block_break_token_ = + To<NGBlockBreakToken>(child_break_tokens_[child_break_token_idx_]); + DCHECK(!current_.link_.fragment->GetLayoutObject() || + current_.block_break_token_->InputNode().GetLayoutBox() == + current_.link_.fragment->GetLayoutObject()); + current_.break_token_for_fragmentainer_only_ = false; + } else if (is_fragmentation_context_root_ && previous_fragment) { + if (previous_fragment->IsColumnBox()) { + // The outgoing break token from one fragmentainer is the incoming break + // token to the next one. This is also true when there are column spanners + // between two columns (fragmentainers); the outgoing break token from the + // former column will be ignored by any intervening spanners, and then fed + // into the first column that comes after them, as an incoming break + // token. + current_.block_break_token_ = + To<NGBlockBreakToken>(previous_fragment->BreakToken()); + current_.break_token_for_fragmentainer_only_ = true; + } else { + // This is a column spanner. We'll leave |current_block_break_token_| + // alone here, as it will be used as in incoming break token when we get + // to the next column. + DCHECK( + NGBlockNode(ToLayoutBox(previous_fragment->GetMutableLayoutObject())) + .IsColumnSpanAll()); + + // If the previous fragment is a column spanner, it's not expected to have + // a break token; if a spanner runs out of space, no columns (or spanners) + // would fit after it. + DCHECK(!previous_fragment->BreakToken()); + } + } else { + current_.block_break_token_ = nullptr; + } } bool NGFragmentChildIterator::AdvanceWithCursor() { DCHECK(current_.cursor_); - current_.cursor_->MoveToNextSkippingChildren(); + const NGFragmentItem* item = current_.cursor_->CurrentItem(); + if (item->HasChildren()) { + // If we're advancing past a non-atomic inline, we also need to advance past + // any break tokens for fragments in there. + for (wtf_size_t remaining = item->DescendantsCount(); remaining; + remaining--) { + if (item->IsFloating()) { + SkipToBlockBreakToken(); + if (child_break_token_idx_ < child_break_tokens_.size()) { + DCHECK_EQ(child_break_tokens_[child_break_token_idx_] + ->InputNode() + .GetLayoutBox(), + item->GetLayoutObject()); + child_break_token_idx_++; + } + } + current_.cursor_->MoveToNext(); + item = current_.cursor_->CurrentItem(); + } + } else { + current_.cursor_->MoveToNext(); + } UpdateSelfFromCursor(); if (current_.cursor_->CurrentItem()) return true; @@ -83,12 +164,34 @@ void NGFragmentChildIterator::UpdateSelfFromCursor() { DCHECK(current_.cursor_); + // For inline items we just use the incoming break token to the containing + // block. + current_.block_break_token_ = parent_break_token_; const NGFragmentItem* item = current_.cursor_->CurrentItem(); if (!item) { current_.link_.fragment = nullptr; return; } current_.link_ = {item->BoxFragment(), item->OffsetInContainerBlock()}; + if (!current_.link_.fragment || !current_.link_.fragment->IsFloating()) { + DCHECK(!current_.link_.fragment || + current_.link_.fragment->GetLayoutObject()->IsInline()); + return; + } + if (!parent_break_token_) + return; + // Floats may fragment, in which case there's a designated break token for + // them. + SkipToBlockBreakToken(); + if (child_break_token_idx_ >= child_break_tokens_.size()) { + current_.block_break_token_ = nullptr; + return; + } + current_.block_break_token_ = + To<NGBlockBreakToken>(child_break_tokens_[child_break_token_idx_]); + DCHECK(!current_.link_.fragment->GetLayoutObject() || + current_.block_break_token_->InputNode().GetLayoutBox() == + current_.link_.fragment->GetLayoutObject()); } void NGFragmentChildIterator::SkipToBoxFragment() { @@ -99,4 +202,11 @@ } } +void NGFragmentChildIterator::SkipToBlockBreakToken() { + // There may be inline break tokens here. Ignore them. + while (child_break_token_idx_ < child_break_tokens_.size() && + !child_break_tokens_[child_break_token_idx_]->IsBlockType()) + child_break_token_idx_++; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h index de1a3d4e4..c4927f0a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h +++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h
@@ -16,10 +16,11 @@ namespace blink { class LayoutObject; +class NGBlockBreakToken; -// Iterator for children of a box fragment. Supports fragment items. To advance -// to the next sibling, call |Advance()|. To descend into children of the -// current child, call |Descend()|. +// Iterator for children of a box fragment. Supports fragment items and break +// tokens. To advance to the next sibling, call |Advance()|. To descend into +// children of the current child, call |Descend()|. // // Using this class requires LayoutNGFragmentItem to be enabled. While fragment // items are in a flat list representing the contents of an inline formatting @@ -30,7 +31,9 @@ STACK_ALLOCATED(); public: - explicit NGFragmentChildIterator(const NGPhysicalBoxFragment& parent); + explicit NGFragmentChildIterator( + const NGPhysicalBoxFragment& parent, + const NGBlockBreakToken* parent_break_token = nullptr); // Create a child iterator for the current child. NGFragmentChildIterator Descend() const; @@ -69,6 +72,29 @@ return cursor_->CurrentItem(); } + // Get the incoming break token for the current child, i.e. the context at + // which layout of this child's node was resumed. Note that for text and + // non-atomic inlines this will be the incoming block break token to the + // inline formatting context root. For monolithic content, no break token + // will be returned (since such content isn't considered to participate in a + // fragmentation context). + const NGBlockBreakToken* BlockBreakToken() const { + if (LIKELY(!block_break_token_)) + return nullptr; + if (link_.fragment) { + // Don't pass the break token into monolithic content. + if (link_.fragment->IsMonolithic()) + return nullptr; + // If the break token we've found is from a fragmentainer, it's only to + // be used by a subsequent fragmentainer. Other fragment types (such as + // column spanners) need to ignore it. + if (break_token_for_fragmentainer_only_ && + !link_.fragment->IsColumnBox()) + return nullptr; + } + return block_break_token_; + } + const LayoutObject* GetLayoutObject() const { if (const NGFragmentItem* item = FragmentItem()) return item->GetLayoutObject(); @@ -78,6 +104,8 @@ private: NGLink link_; base::Optional<NGInlineCursor> cursor_; + const NGBlockBreakToken* block_break_token_ = nullptr; + bool break_token_for_fragmentainer_only_ = false; }; const Current& GetCurrent() const { return current_; } @@ -85,18 +113,27 @@ const Current* operator->() const { return ¤t_; } private: - explicit NGFragmentChildIterator(const NGInlineCursor& parent); + NGFragmentChildIterator( + const NGInlineCursor& parent, + const NGBlockBreakToken* parent_break_token, + base::span<const NGBreakToken* const> child_break_tokens); bool AdvanceChildFragment(); - void UpdateSelfFromFragment(); + void UpdateSelfFromFragment( + const NGPhysicalBoxFragment* previous_fragment = nullptr); bool AdvanceWithCursor(); void UpdateSelfFromCursor(); void SkipToBoxFragment(); + void SkipToBlockBreakToken(); const NGPhysicalBoxFragment* parent_fragment_ = nullptr; + const NGBlockBreakToken* parent_break_token_ = nullptr; Current current_; + base::span<const NGBreakToken* const> child_break_tokens_; wtf_size_t child_fragment_idx_ = 0; + wtf_size_t child_break_token_idx_ = 0; + bool is_fragmentation_context_root_ = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator_test.cc b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator_test.cc index ce6776a..f0304c0 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator_test.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_fragment_child_iterator.h" #include "third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.h" +#include "third_party/blink/renderer/core/layout/ng/ng_block_break_token.h" #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" namespace blink { @@ -270,5 +271,538 @@ EXPECT_FALSE(iterator1.Advance()); } +TEST_F(NGFragmentChildIteratorTest, BasicMulticol) { + SetBodyInnerHTML(R"HTML( + <div id="container"> + <div id="mc" style="columns:3; padding:2px; column-fill:auto; column-gap:10px; width:320px; height:100px;"> + <div id="child" style="margin-top:30px; margin-left:4px; height:200px;"></div> + </div> + </div> + )HTML"); + + const LayoutObject* mc = GetLayoutObjectByElementId("mc"); + const LayoutObject* child = GetLayoutObjectByElementId("child"); + + scoped_refptr<const NGPhysicalBoxFragment> container = + RunBlockLayoutAlgorithm(GetElementById("container")); + NGFragmentChildIterator iterator(*container.get()); + + const NGPhysicalBoxFragment* fragment = iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), mc); + + // First column. + NGFragmentChildIterator child_iterator = iterator.Descend(); + fragment = child_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(child_iterator->Link().offset.top, LayoutUnit(2)); + EXPECT_EQ(child_iterator->Link().offset.left, LayoutUnit(2)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(100)); + EXPECT_FALSE(fragment->GetLayoutObject()); + EXPECT_FALSE(child_iterator->BlockBreakToken()); + + NGFragmentChildIterator grandchild_iterator = child_iterator.Descend(); + fragment = grandchild_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(grandchild_iterator->Link().offset.top, LayoutUnit(30)); + EXPECT_EQ(grandchild_iterator->Link().offset.left, LayoutUnit(4)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(70)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + EXPECT_FALSE(grandchild_iterator.Advance()); + EXPECT_FALSE(grandchild_iterator->BlockBreakToken()); + + // Second column. + ASSERT_TRUE(child_iterator.Advance()); + fragment = child_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(child_iterator->Link().offset.top, LayoutUnit(2)); + EXPECT_EQ(child_iterator->Link().offset.left, LayoutUnit(112)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(100)); + EXPECT_FALSE(fragment->GetLayoutObject()); + const auto* break_token = child_iterator->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(100)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc); + + grandchild_iterator = child_iterator.Descend(); + fragment = grandchild_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(grandchild_iterator->Link().offset.top, LayoutUnit(0)); + EXPECT_EQ(grandchild_iterator->Link().offset.left, LayoutUnit(4)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(100)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + EXPECT_FALSE(grandchild_iterator.Advance()); + break_token = grandchild_iterator->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(70)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child); + + // Third column. + ASSERT_TRUE(child_iterator.Advance()); + fragment = child_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(child_iterator->Link().offset.top, LayoutUnit(2)); + EXPECT_EQ(child_iterator->Link().offset.left, LayoutUnit(222)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(100)); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = child_iterator->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(200)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc); + + grandchild_iterator = child_iterator.Descend(); + fragment = grandchild_iterator->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(grandchild_iterator->Link().offset.top, LayoutUnit(0)); + EXPECT_EQ(grandchild_iterator->Link().offset.left, LayoutUnit(4)); + EXPECT_EQ(fragment->Size().height, LayoutUnit(30)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + EXPECT_FALSE(grandchild_iterator.Advance()); + break_token = grandchild_iterator->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(170)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child); + + EXPECT_FALSE(child_iterator.Advance()); + EXPECT_FALSE(iterator.Advance()); +} + +TEST_F(NGFragmentChildIteratorTest, ColumnSpanner) { + SetBodyInnerHTML(R"HTML( + <div id="container"> + <div id="mc" style="columns:2;"> + <div id="child"> + <div id="grandchild1" style="height:150px;"></div> + <div id="spanner" style="column-span:all; height:11px;"></div> + <div id="grandchild2" style="height:66px;"></div> + </div> + </div> + </div> + )HTML"); + + scoped_refptr<const NGPhysicalBoxFragment> container = + RunBlockLayoutAlgorithm(GetElementById("container")); + NGFragmentChildIterator iterator1(*container.get()); + + const LayoutObject* mc = GetLayoutObjectByElementId("mc"); + const LayoutObject* child = GetLayoutObjectByElementId("child"); + const LayoutObject* spanner = GetLayoutObjectByElementId("spanner"); + const LayoutObject* grandchild1 = GetLayoutObjectByElementId("grandchild1"); + const LayoutObject* grandchild2 = GetLayoutObjectByElementId("grandchild2"); + + const NGPhysicalBoxFragment* fragment = iterator1->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), mc); + + // First column before spanner. + NGFragmentChildIterator iterator2 = iterator1.Descend(); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_FALSE(fragment->GetLayoutObject()); + EXPECT_FALSE(iterator2->BlockBreakToken()); + + // First fragment for #child. + NGFragmentChildIterator iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + EXPECT_FALSE(iterator3->BlockBreakToken()); + + // First fragment for #grandchild1. + NGFragmentChildIterator iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_EQ(fragment->GetLayoutObject(), grandchild1); + EXPECT_FALSE(iterator4->BlockBreakToken()); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + + // Second column before spanner. + EXPECT_TRUE(iterator2.Advance()); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_FALSE(fragment->GetLayoutObject()); + const auto* break_token = iterator2->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(75)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc); + + // Second fragment for #child. + iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + break_token = iterator3->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(75)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child); + + // Second fragment for #grandchild1. + iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(75)); + EXPECT_EQ(fragment->GetLayoutObject(), grandchild1); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(75)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), grandchild1); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + + // The spanner. + EXPECT_TRUE(iterator2.Advance()); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(11)); + EXPECT_EQ(fragment->GetLayoutObject(), spanner); + EXPECT_FALSE(iterator2->BlockBreakToken()); + + // First column after spanner. + EXPECT_TRUE(iterator2.Advance()); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator2->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(150)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc); + + // Third fragment for #child. + iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + break_token = iterator3->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(150)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child); + + // First fragment for #grandchild2. + iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_EQ(fragment->GetLayoutObject(), grandchild2); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_TRUE(break_token->IsBreakBefore()); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), grandchild2); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + + // Second column after spanner. + EXPECT_TRUE(iterator2.Advance()); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator2->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(183)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc); + + // Fourth fragment for #child. + iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_EQ(fragment->GetLayoutObject(), child); + break_token = iterator3->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(183)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child); + + // Second fragment for #grandchild2. + iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->Size().height, LayoutUnit(33)); + EXPECT_EQ(fragment->GetLayoutObject(), grandchild2); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(33)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), grandchild2); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + + EXPECT_FALSE(iterator2.Advance()); + EXPECT_FALSE(iterator1.Advance()); +} + +TEST_F(NGFragmentChildIteratorTest, NestedWithColumnSpanner) { + SetBodyInnerHTML(R"HTML( + <div id="container"> + <div id="mc1" style="columns:2; column-fill:auto; height:100px;"> + <div id="mc2" style="columns:2;"> + <div id="child1" style="height:150px;"></div> + <div id="spanner1" style="column-span:all;"> + <div id="spanner1child" style="height:55px;"></div> + </div> + <div id="child2" style="height:50px;"></div> + <div id="spanner2" style="column-span:all;"> + <div id="spanner2child" style="height:20px;"></div> + </div> + <div id="child3" style="height:20px;"></div> + </div> + </div> + </div> + )HTML"); + + scoped_refptr<const NGPhysicalBoxFragment> container = + RunBlockLayoutAlgorithm(GetElementById("container")); + NGFragmentChildIterator iterator1(*container.get()); + + const LayoutObject* mc1 = GetLayoutObjectByElementId("mc1"); + const LayoutObject* mc2 = GetLayoutObjectByElementId("mc2"); + const LayoutObject* child1 = GetLayoutObjectByElementId("child1"); + const LayoutObject* child2 = GetLayoutObjectByElementId("child2"); + const LayoutObject* child3 = GetLayoutObjectByElementId("child3"); + const LayoutObject* spanner1 = GetLayoutObjectByElementId("spanner1"); + const LayoutObject* spanner2 = GetLayoutObjectByElementId("spanner2"); + const LayoutObject* spanner1child = + GetLayoutObjectByElementId("spanner1child"); + const LayoutObject* spanner2child = + GetLayoutObjectByElementId("spanner2child"); + + const NGPhysicalBoxFragment* fragment = iterator1->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), mc1); + + // First outer column. + NGFragmentChildIterator iterator2 = iterator1.Descend(); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + EXPECT_FALSE(iterator2->BlockBreakToken()); + + // First fragment for #mc2. + NGFragmentChildIterator iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), mc2); + EXPECT_FALSE(iterator3->BlockBreakToken()); + + // First inner column in first outer column. + NGFragmentChildIterator iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + EXPECT_FALSE(iterator4->BlockBreakToken()); + + // First fragment for #child1. + NGFragmentChildIterator iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child1); + EXPECT_FALSE(iterator5->BlockBreakToken()); + EXPECT_FALSE(iterator5.Advance()); + + // Second inner column in first outer column. + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + const auto* break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(75)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // Second fragment for #child1. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child1); + break_token = iterator5->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(75)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child1); + + // First fragment for #spanner1 (it's split into the first and second outer + // columns). + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner1); + EXPECT_FALSE(iterator4->BlockBreakToken()); + + // First fragment for #spanner1child + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner1child); + EXPECT_FALSE(iterator5->BlockBreakToken()); + EXPECT_FALSE(iterator5.Advance()); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + + // Second outer column + EXPECT_TRUE(iterator2.Advance()); + fragment = iterator2->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator2->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(100)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc1); + + // Second fragment for #mc2. + iterator3 = iterator2.Descend(); + fragment = iterator3->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), mc2); + break_token = iterator3->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(100)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // Second fragment for #spanner1 (it's split into the first and second outer + // columns). + iterator4 = iterator3.Descend(); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner1); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(25)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), spanner1); + + // Second fragment for #spanner1child. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner1child); + break_token = iterator5->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(25)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), spanner1child); + EXPECT_FALSE(iterator5.Advance()); + + // First inner column after first spanner in second outer column. + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(150)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // First fragment for #child2. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child2); + break_token = iterator5->BlockBreakToken(); + EXPECT_TRUE(break_token); + EXPECT_TRUE(break_token->IsBreakBefore()); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child2); + EXPECT_FALSE(iterator5.Advance()); + + // Second inner column after first spanner in second outer column. + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(175)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // Second fragment for #child2. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child2); + break_token = iterator5->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(25)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child2); + EXPECT_FALSE(iterator5.Advance()); + + // The only fragment for #spanner2 + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner2); + EXPECT_FALSE(iterator4->BlockBreakToken()); + + // First fragment for #spanner2child + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), spanner2child); + EXPECT_FALSE(iterator5->BlockBreakToken()); + EXPECT_FALSE(iterator5.Advance()); + + // First inner column after second spanner in second outer column. + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(200)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // First fragment for #child3. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child3); + break_token = iterator5->BlockBreakToken(); + EXPECT_TRUE(break_token); + EXPECT_TRUE(break_token->IsBreakBefore()); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child3); + EXPECT_FALSE(iterator5.Advance()); + + // Second inner column after second spanner in second outer column. + EXPECT_TRUE(iterator4.Advance()); + fragment = iterator4->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_TRUE(fragment->IsColumnBox()); + EXPECT_FALSE(fragment->GetLayoutObject()); + break_token = iterator4->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(210)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), mc2); + + // Second fragment for #child3. + iterator5 = iterator4.Descend(); + fragment = iterator5->BoxFragment(); + ASSERT_TRUE(fragment); + EXPECT_EQ(fragment->GetLayoutObject(), child3); + break_token = iterator5->BlockBreakToken(); + ASSERT_TRUE(break_token); + EXPECT_EQ(break_token->ConsumedBlockSize(), LayoutUnit(10)); + EXPECT_EQ(break_token->InputNode().GetLayoutBox(), child3); + EXPECT_FALSE(iterator5.Advance()); + EXPECT_FALSE(iterator4.Advance()); + EXPECT_FALSE(iterator3.Advance()); + EXPECT_FALSE(iterator2.Advance()); + EXPECT_FALSE(iterator1.Advance()); +} + } // anonymous namespace } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h index fe4422e0..a219555 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -240,6 +240,10 @@ return IsCSSBox() && layout_object_->ShouldClipOverflow(); } + bool IsFragmentationContextRoot() const { + return !IsColumnBox() && IsBlockFlow() && Style().SpecifiesColumns(); + } + // Return whether we can traverse this fragment and its children directly, for // painting, hit-testing and other layout read operations. If false is // returned, we need to traverse the layout object tree instead. @@ -251,6 +255,16 @@ // information. Used for `text-overflow: ellipsis`. bool IsHiddenForPaint() const { return is_hidden_for_paint_; } + // Return true if this fragment is monolithic, as far as block fragmentation + // is concerned. + bool IsMonolithic() const { + const LayoutObject* layout_object = GetLayoutObject(); + if (!layout_object || !IsBox() || !layout_object->IsBox()) + return false; + return ToLayoutBox(layout_object)->GetPaginationBreakability() == + LayoutBox::kForbidBreaks; + } + // GetLayoutObject should only be used when necessary for compatibility // with LegacyLayout. //
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache.cc b/third_party/blink/renderer/core/loader/appcache/application_cache.cc index 2e783c13..f554a26f1 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache.cc +++ b/third_party/blink/renderer/core/loader/appcache/application_cache.cc
@@ -40,6 +40,8 @@ namespace blink { ApplicationCache::ApplicationCache(LocalFrame* frame) : DOMWindowClient(frame) { + DCHECK(RuntimeEnabledFeatures::AppCacheEnabled( + frame->GetDocument()->ToExecutionContext())); ApplicationCacheHostForFrame* cache_host = GetApplicationCacheHost(); if (cache_host) cache_host->SetApplicationCache(this);
diff --git a/third_party/blink/renderer/core/loader/appcache/application_cache.idl b/third_party/blink/renderer/core/loader/appcache/application_cache.idl index a23cef92..0efa107 100644 --- a/third_party/blink/renderer/core/loader/appcache/application_cache.idl +++ b/third_party/blink/renderer/core/loader/appcache/application_cache.idl
@@ -28,6 +28,7 @@ [ Exposed=Window, DoNotCheckConstants, + RuntimeEnabled=AppCache, SecureContext=RestrictAppCacheToSecureContexts ] interface ApplicationCache : EventTarget { // update status
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.cc b/third_party/blink/renderer/core/loader/interactive_detector.cc index e7b1d40..52d98d6 100644 --- a/third_party/blink/renderer/core/loader/interactive_detector.cc +++ b/third_party/blink/renderer/core/loader/interactive_detector.cc
@@ -133,19 +133,23 @@ } } -base::TimeDelta InteractiveDetector::GetFirstInputDelay() const { +base::Optional<base::TimeDelta> InteractiveDetector::GetFirstInputDelay() + const { return page_event_times_.first_input_delay; } -base::TimeTicks InteractiveDetector::GetFirstInputTimestamp() const { +base::Optional<base::TimeTicks> InteractiveDetector::GetFirstInputTimestamp() + const { return page_event_times_.first_input_timestamp; } -base::TimeDelta InteractiveDetector::GetLongestInputDelay() const { +base::Optional<base::TimeDelta> InteractiveDetector::GetLongestInputDelay() + const { return page_event_times_.longest_input_delay; } -base::TimeTicks InteractiveDetector::GetLongestInputTimestamp() const { +base::Optional<base::TimeTicks> InteractiveDetector::GetLongestInputTimestamp() + const { return page_event_times_.longest_input_timestamp; } @@ -239,7 +243,7 @@ pending_pointerdown_delay_ = base::TimeDelta(); pending_pointerdown_timestamp_ = base::TimeTicks(); - if (page_event_times_.first_input_delay.is_zero()) { + if (!page_event_times_.first_input_delay.has_value()) { page_event_times_.first_input_delay = delay; page_event_times_.first_input_timestamp = event_timestamp; @@ -282,7 +286,8 @@ // Only update longest input delay if page was not backgrounded while the // input was queued. - if (delay > page_event_times_.longest_input_delay && + if ((!page_event_times_.longest_input_delay.has_value() || + delay > *page_event_times_.longest_input_delay) && !PageWasBackgroundedSinceEvent(event_timestamp)) { page_event_times_.longest_input_delay = delay; page_event_times_.longest_input_timestamp = event_timestamp;
diff --git a/third_party/blink/renderer/core/loader/interactive_detector.h b/third_party/blink/renderer/core/loader/interactive_detector.h index 9f46e63..3b504a2 100644 --- a/third_party/blink/renderer/core/loader/interactive_detector.h +++ b/third_party/blink/renderer/core/loader/interactive_detector.h
@@ -86,19 +86,19 @@ // The duration between the hardware timestamp and being queued on the main // thread for the first click, tap, key press, cancelable touchstart, or // pointer down followed by a pointer up. - base::TimeDelta GetFirstInputDelay() const; + base::Optional<base::TimeDelta> GetFirstInputDelay() const; // The timestamp of the event whose delay is reported by GetFirstInputDelay(). - base::TimeTicks GetFirstInputTimestamp() const; + base::Optional<base::TimeTicks> GetFirstInputTimestamp() const; // Queueing Time of the meaningful input event with longest delay. Meaningful // input events are click, tap, key press, cancellable touchstart, or pointer // down followed by a pointer up. - base::TimeDelta GetLongestInputDelay() const; + base::Optional<base::TimeDelta> GetLongestInputDelay() const; // The timestamp of the event whose delay is reported by // GetLongestInputDelay(). - base::TimeTicks GetLongestInputTimestamp() const; + base::Optional<base::TimeTicks> GetLongestInputTimestamp() const; // The number of user interactions. uint64_t GetNumInputEvents() const; @@ -147,10 +147,10 @@ // Interactive computation. This is used when reporting Time To Interactive // on a trace event. base::TimeTicks first_invalidating_input; - base::TimeDelta first_input_delay; - base::TimeDelta longest_input_delay; - base::TimeTicks first_input_timestamp; - base::TimeTicks longest_input_timestamp; + base::Optional<base::TimeDelta> first_input_delay; + base::Optional<base::TimeDelta> longest_input_delay; + base::Optional<base::TimeTicks> first_input_timestamp; + base::Optional<base::TimeTicks> longest_input_timestamp; base::TimeDelta total_input_delay; base::TimeDelta total_adjusted_input_delay; uint64_t num_input_events;
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc index 67deb68..37f0b2c 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc
@@ -6,6 +6,7 @@ #include "base/metrics/histogram_macros.h" #include "base/time/time.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/origin_trials/trial_token.h" #include "third_party/blink/public/common/origin_trials/trial_token_validator.h" #include "third_party/blink/public/platform/platform.h" @@ -326,28 +327,41 @@ } } +bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) { + if (trial_name == "Portals" && + !base::FeatureList::IsEnabled(features::kPortals)) { + return false; + } + + return true; +} + bool OriginTrialContext::EnableTrialFromName(const String& trial_name, base::Time expiry_time) { bool did_enable_feature = false; for (OriginTrialFeature feature : origin_trials::FeaturesForTrial(trial_name)) { - if (origin_trials::FeatureEnabledForOS(feature)) { - did_enable_feature = true; - enabled_features_.insert(feature); + if (!origin_trials::FeatureEnabledForOS(feature)) + continue; - // Use the latest expiry time for the feature. - if (GetFeatureExpiry(feature) < expiry_time) - feature_expiry_times_.Set(feature, expiry_time); + if (!CanEnableTrialFromName(trial_name)) + continue; - // Also enable any features implied by this feature. - for (OriginTrialFeature implied_feature : - origin_trials::GetImpliedFeatures(feature)) { - enabled_features_.insert(implied_feature); + did_enable_feature = true; + enabled_features_.insert(feature); - // Use the latest expiry time for the implied feature. - if (GetFeatureExpiry(implied_feature) < expiry_time) - feature_expiry_times_.Set(implied_feature, expiry_time); - } + // Use the latest expiry time for the feature. + if (GetFeatureExpiry(feature) < expiry_time) + feature_expiry_times_.Set(feature, expiry_time); + + // Also enable any features implied by this feature. + for (OriginTrialFeature implied_feature : + origin_trials::GetImpliedFeatures(feature)) { + enabled_features_.insert(implied_feature); + + // Use the latest expiry time for the implied feature. + if (GetFeatureExpiry(implied_feature) < expiry_time) + feature_expiry_times_.Set(implied_feature, expiry_time); } } return did_enable_feature;
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 ec1a7f6..c4b6352 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
@@ -123,6 +123,10 @@ void Trace(Visitor*); private: + // If this returns false, the trial cannot be enabled (e.g. due to it is + // invalid in the browser's present configuration). + bool CanEnableTrialFromName(const StringView& trial_name); + // Enable features by trial name. Returns true or false to indicate whether // some features are enabled as the result. bool EnableTrialFromName(const String& trial_name, base::Time expiry_time);
diff --git a/third_party/blink/renderer/core/origin_trials/origin_trials.h b/third_party/blink/renderer/core/origin_trials/origin_trials.h index 2ea4565..a2973300 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trials.h +++ b/third_party/blink/renderer/core/origin_trials/origin_trials.h
@@ -7,10 +7,11 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ORIGIN_TRIALS_ORIGIN_TRIALS_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_ORIGIN_TRIALS_ORIGIN_TRIALS_H_ +#include "base/containers/span.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" -#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" +#include "third_party/blink/renderer/platform/wtf/text/string_view.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace blink { @@ -22,10 +23,10 @@ namespace origin_trials { // Return true if there is a feature with the passed |trial_name|. -CORE_EXPORT bool IsTrialValid(const String& trial_name); +CORE_EXPORT bool IsTrialValid(const StringView& trial_name); // Return true if |trial_name| can be enabled in an insecure context. -CORE_EXPORT bool IsTrialEnabledForInsecureContext(const String& trial_name); +CORE_EXPORT bool IsTrialEnabledForInsecureContext(const StringView& trial_name); // Returns the trial type of the given |feature|. CORE_EXPORT OriginTrialType GetTrialType(OriginTrialFeature feature); @@ -33,12 +34,13 @@ // Return origin trials features that are enabled by the passed |trial_name|. // The trial name MUST be valid (call IsTrialValid() before calling this // function). -CORE_EXPORT const Vector<OriginTrialFeature>& FeaturesForTrial( - const String& trial_name); +CORE_EXPORT base::span<const OriginTrialFeature> FeaturesForTrial( + const StringView& trial_name); // Return the list of features which will also be enabled if the given // |feature| is enabled. -Vector<OriginTrialFeature> GetImpliedFeatures(OriginTrialFeature feature); +base::span<const OriginTrialFeature> GetImpliedFeatures( + OriginTrialFeature feature); bool FeatureEnabledForOS(OriginTrialFeature feature);
diff --git a/third_party/blink/renderer/core/page/autoscroll_controller.cc b/third_party/blink/renderer/core/page/autoscroll_controller.cc index 8ff730d..aee12d467 100644 --- a/third_party/blink/renderer/core/page/autoscroll_controller.cc +++ b/third_party/blink/renderer/core/page/autoscroll_controller.cc
@@ -31,12 +31,14 @@ #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" +#include "third_party/blink/renderer/core/frame/visual_viewport.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/input/event_handler.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" #include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/page/chrome_client.h" #include "third_party/blink/renderer/core/page/page.h" +#include "third_party/blink/renderer/core/scroll/scroll_types.h" #include "third_party/blink/renderer/platform/cursors.h" #include "ui/base/cursor/cursor.h" @@ -222,6 +224,30 @@ } } +bool CanScrollDirection(LayoutBox* layout_box, + Page* page, + ScrollOrientation orientation) { + DCHECK(layout_box); + + bool can_scroll = orientation == ScrollOrientation::kHorizontalScroll + ? layout_box->HasScrollableOverflowX() + : layout_box->HasScrollableOverflowY(); + + if (page) { + // TODO: Consider only doing this when the layout_box is the document to + // correctly handle autoscrolling a DIV when pinch-zoomed. + // See comments on crrev.com/c/2109286 + ScrollOffset maximum_scroll_offset = + page->GetVisualViewport().MaximumScrollOffset(); + can_scroll = + can_scroll || (orientation == ScrollOrientation::kHorizontalScroll + ? maximum_scroll_offset.Width() > 0 + : maximum_scroll_offset.Height() > 0); + } + + return can_scroll; +} + void AutoscrollController::HandleMouseMoveForMiddleClickAutoscroll( LocalFrame* frame, const FloatPoint& position_global, @@ -229,6 +255,11 @@ if (!MiddleClickAutoscrollInProgress()) return; + if (!autoscroll_layout_object_->CanBeScrolledAndHasScrollableArea()) { + StopMiddleClickAutoscroll(frame); + return; + } + LocalFrameView* view = frame->View(); if (!view) return; @@ -250,13 +281,20 @@ pow(fabs(distance.Width()), kExponent) * kMultiplier * x_signum, pow(fabs(distance.Height()), kExponent) * kMultiplier * y_signum); + bool can_scroll_vertically = + CanScrollDirection(autoscroll_layout_object_, frame->GetPage(), + ScrollOrientation::kVerticalScroll); + bool can_scroll_horizontally = + CanScrollDirection(autoscroll_layout_object_, frame->GetPage(), + ScrollOrientation::kHorizontalScroll); + if (velocity != last_velocity_) { last_velocity_ = velocity; if (middle_click_mode_ == kMiddleClickInitial) middle_click_mode_ = kMiddleClickHolding; page_->GetChromeClient().SetCursorOverridden(false); - view->SetCursor(MiddleClickAutoscrollCursor( - velocity, can_scroll_vertically_, can_scroll_horizontally_)); + view->SetCursor(MiddleClickAutoscrollCursor(velocity, can_scroll_vertically, + can_scroll_horizontally)); page_->GetChromeClient().SetCursorOverridden(true); page_->GetChromeClient().AutoscrollFling(velocity, frame); } @@ -286,6 +324,7 @@ autoscroll_type_ = kNoAutoscroll; page_->GetChromeClient().SetCursorOverridden(false); frame->LocalFrameRoot().GetEventHandler().ScheduleCursorUpdate(); + autoscroll_layout_object_ = nullptr; } bool AutoscrollController::MiddleClickAutoscrollInProgress() const { @@ -294,21 +333,27 @@ void AutoscrollController::StartMiddleClickAutoscroll( LocalFrame* frame, + LayoutBox* scrollable, const FloatPoint& position, - const FloatPoint& position_global, - bool scroll_vert, - bool scroll_horiz) { + const FloatPoint& position_global) { DCHECK(RuntimeEnabledFeatures::MiddleClickAutoscrollEnabled()); + DCHECK(scrollable); // We don't want to trigger the autoscroll or the middleClickAutoscroll if // it's already active. if (autoscroll_type_ != kNoAutoscroll) return; + autoscroll_layout_object_ = scrollable; autoscroll_type_ = kAutoscrollForMiddleClick; middle_click_mode_ = kMiddleClickInitial; middle_click_autoscroll_start_pos_global_ = position_global; - can_scroll_vertically_ = scroll_vert; - can_scroll_horizontally_ = scroll_horiz; + + bool can_scroll_vertically = + CanScrollDirection(autoscroll_layout_object_, frame->GetPage(), + ScrollOrientation::kVerticalScroll); + bool can_scroll_horizontally = + CanScrollDirection(autoscroll_layout_object_, frame->GetPage(), + ScrollOrientation::kHorizontalScroll); UseCounter::Count(frame->GetDocument(), WebFeature::kMiddleClickAutoscrollStart); @@ -317,7 +362,7 @@ if (LocalFrameView* view = frame->View()) { view->SetCursor(MiddleClickAutoscrollCursor( - last_velocity_, can_scroll_vertically_, can_scroll_horizontally_)); + last_velocity_, can_scroll_vertically, can_scroll_horizontally)); } page_->GetChromeClient().SetCursorOverridden(true); page_->GetChromeClient().AutoscrollStart(
diff --git a/third_party/blink/renderer/core/page/autoscroll_controller.h b/third_party/blink/renderer/core/page/autoscroll_controller.h index dfab11e7..4a6f4ed 100644 --- a/third_party/blink/renderer/core/page/autoscroll_controller.h +++ b/third_party/blink/renderer/core/page/autoscroll_controller.h
@@ -84,10 +84,9 @@ // Middle-click autoscroll. void StartMiddleClickAutoscroll(LocalFrame*, + LayoutBox*, const FloatPoint& position, - const FloatPoint& position_global, - bool scroll_vert, - bool scroll_horiz); + const FloatPoint& position_global); void HandleMouseMoveForMiddleClickAutoscroll( LocalFrame*, const FloatPoint& position_global, @@ -103,10 +102,10 @@ Member<Page> page_; AutoscrollType autoscroll_type_ = kNoAutoscroll; + LayoutBox* autoscroll_layout_object_ = nullptr; // Selection and drag-and-drop autoscroll. void ScheduleMainThreadAnimation(); - LayoutBox* autoscroll_layout_object_ = nullptr; LayoutBox* pressed_layout_object_ = nullptr; PhysicalOffset drag_and_drop_autoscroll_reference_position_; base::TimeTicks drag_and_drop_autoscroll_start_time_; @@ -115,13 +114,12 @@ FloatPoint middle_click_autoscroll_start_pos_global_; gfx::Vector2dF last_velocity_; MiddleClickMode middle_click_mode_ = kMiddleClickInitial; - bool can_scroll_vertically_ = false; - bool can_scroll_horizontally_ = false; FRIEND_TEST_ALL_PREFIXES(AutoscrollControllerTest, CrashWhenLayoutStopAnimationBeforeScheduleAnimation); FRIEND_TEST_ALL_PREFIXES(AutoscrollControllerTest, ContinueAutoscrollAfterMouseLeaveEvent); + FRIEND_TEST_ALL_PREFIXES(AutoscrollControllerTest, StopAutoscrollOnResize); }; } // namespace blink
diff --git a/third_party/blink/renderer/core/page/autoscroll_controller_test.cc b/third_party/blink/renderer/core/page/autoscroll_controller_test.cc index 27c3c134..db8e230 100644 --- a/third_party/blink/renderer/core/page/autoscroll_controller_test.cc +++ b/third_party/blink/renderer/core/page/autoscroll_controller_test.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/renderer/core/css_value_keywords.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/input/event_handler.h" +#include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/testing/sim/sim_request.h" #include "third_party/blink/renderer/core/testing/sim/sim_test.h" @@ -82,13 +83,31 @@ // Ensure that autoscrolling continues when the MouseLeave event is fired. TEST_F(AutoscrollControllerTest, ContinueAutoscrollAfterMouseLeaveEvent) { + WebView().MainFrameWidget()->Resize(WebSize(800, 600)); + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + request.Complete(R"HTML( + <!DOCTYPE html> + <style> + #scrollable { + width: 820px; + height: 620px; + } + </style> + <div id='scrollable'></div> + )HTML"); + + Compositor().BeginFrame(); + AutoscrollController& controller = GetAutoscrollController(); - LocalFrame* frame = GetDocument().GetFrame(); EXPECT_FALSE(controller.IsAutoscrolling()); - controller.StartMiddleClickAutoscroll(frame, FloatPoint(), FloatPoint(), - false, false); + LocalFrame* frame = GetDocument().GetFrame(); + Node* document_node = GetDocument().documentElement(); + controller.StartMiddleClickAutoscroll( + frame, document_node->parentNode()->GetLayoutBox(), FloatPoint(), + FloatPoint()); EXPECT_TRUE(controller.IsAutoscrolling()); @@ -102,4 +121,65 @@ EXPECT_TRUE(controller.IsAutoscrolling()); } +// Ensure that autoscrolling stops when scrolling is no longer available. +TEST_F(AutoscrollControllerTest, StopAutoscrollOnResize) { + WebView().MainFrameWidget()->Resize(WebSize(800, 600)); + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + request.Complete(R"HTML( + <!DOCTYPE html> + <style> + #scrollable { + width: 820px; + height: 620px; + } + </style> + <div id='scrollable'></div> + )HTML"); + + Compositor().BeginFrame(); + + AutoscrollController& controller = GetAutoscrollController(); + + EXPECT_FALSE(controller.IsAutoscrolling()); + + LocalFrame* frame = GetDocument().GetFrame(); + controller.StartMiddleClickAutoscroll(frame, GetDocument().GetLayoutView(), + FloatPoint(), FloatPoint()); + + EXPECT_TRUE(controller.IsAutoscrolling()); + + // Confirm that it correctly stops autoscrolling when scrolling is no longer + // possible + WebView().MainFrameWidget()->Resize(WebSize(840, 640)); + + WebMouseEvent mouse_move_event(WebInputEvent::kMouseMove, + WebInputEvent::kNoModifiers, + base::TimeTicks::Now()); + + frame->GetEventHandler().HandleMouseMoveEvent( + mouse_move_event, Vector<WebMouseEvent>(), Vector<WebMouseEvent>()); + + EXPECT_FALSE(controller.IsAutoscrolling()); + + // Confirm that autoscrolling doesn't restart when scrolling is available + // again + WebView().MainFrameWidget()->Resize(WebSize(800, 600)); + + WebMouseEvent mouse_move_event2(WebInputEvent::kMouseMove, + WebInputEvent::kNoModifiers, + base::TimeTicks::Now()); + + frame->GetEventHandler().HandleMouseMoveEvent( + mouse_move_event2, Vector<WebMouseEvent>(), Vector<WebMouseEvent>()); + + EXPECT_FALSE(controller.IsAutoscrolling()); + + // And finally confirm that autoscrolling can start again. + controller.StartMiddleClickAutoscroll(frame, GetDocument().GetLayoutView(), + FloatPoint(), FloatPoint()); + + EXPECT_TRUE(controller.IsAutoscrolling()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/page/create_window.cc b/third_party/blink/renderer/core/page/create_window.cc index 68ca07b0..d3fd892a 100644 --- a/third_party/blink/renderer/core/page/create_window.cc +++ b/third_party/blink/renderer/core/page/create_window.cc
@@ -203,7 +203,8 @@ return; bool is_ad_subframe = opener_frame.IsAdSubframe(); - bool is_ad_script_in_stack = ad_tracker->IsAdScriptInStackSlow(); + bool is_ad_script_in_stack = + ad_tracker->IsAdScriptInStackSlow(AdTracker::StackType::kBottomAndTop); FromAdState state = blink::GetFromAdState(is_ad_subframe, is_ad_script_in_stack);
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.cc b/third_party/blink/renderer/core/paint/paint_invalidator.cc index 5288553..a25e43dc 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/paint_invalidator.cc
@@ -172,6 +172,9 @@ void PaintInvalidator::UpdatePaintInvalidationContainer( const LayoutObject& object, PaintInvalidatorContext& context) { + if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) + return; + if (object.IsPaintInvalidationContainer()) { context.paint_invalidation_container = ToLayoutBoxModelObject(&object); if (object.StyleRef().IsStackingContext() || object.IsSVGRoot())
diff --git a/third_party/blink/renderer/core/streams/PRESUBMIT.py b/third_party/blink/renderer/core/streams/PRESUBMIT.py index c3243c4d5..7935e32c 100644 --- a/third_party/blink/renderer/core/streams/PRESUBMIT.py +++ b/third_party/blink/renderer/core/streams/PRESUBMIT.py
@@ -3,7 +3,6 @@ # found in the LICENSE file. # pylint: disable=invalid-name,import-error - """Run eslint on the Streams API Javascript files. See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts @@ -23,8 +22,8 @@ def common_checks(input_api, output_api): import sys - web_dev_style_path = input_api.os_path.join(input_api.change.RepositoryRoot(), - 'tools') + web_dev_style_path = input_api.os_path.join( + input_api.change.RepositoryRoot(), 'tools') oldpath = sys.path sys.path = [input_api.PresubmitLocalPath(), web_dev_style_path] + sys.path from web_dev_style import js_checker @@ -33,5 +32,5 @@ def is_resource(maybe_resource): return maybe_resource.AbsoluteLocalPath().endswith('.js') - return js_checker.JSChecker(input_api, output_api, - file_filter=is_resource).RunChecks() + return js_checker.JSChecker( + input_api, output_api, file_filter=is_resource).RunChecks()
diff --git a/third_party/blink/renderer/core/svg/svg_animate_element.cc b/third_party/blink/renderer/core/svg/svg_animate_element.cc index e77d63af..16e66af 100644 --- a/third_party/blink/renderer/core/svg/svg_animate_element.cc +++ b/third_party/blink/renderer/core/svg/svg_animate_element.cc
@@ -24,6 +24,7 @@ #include "third_party/blink/renderer/core/css/css_computed_style_declaration.h" #include "third_party/blink/renderer/core/css/css_property_value_set.h" +#include "third_party/blink/renderer/core/css/css_style_sheet.h" #include "third_party/blink/renderer/core/css/style_change_reason.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/qualified_name.h" @@ -488,11 +489,10 @@ MutableCSSPropertyValueSet* properties = target_element->EnsureAnimatedSMILStyleProperties(); auto animated_value_string = animated_value_->ValueAsString(); - auto secure_context_mode = - target_element->GetDocument().GetSecureContextMode(); - auto set_result = - properties->SetProperty(css_property_id_, animated_value_string, false, - secure_context_mode, nullptr); + auto& document = target_element->GetDocument(); + auto set_result = properties->SetProperty( + css_property_id_, animated_value_string, false, + document.GetSecureContextMode(), document.ElementSheet().Contents()); if (set_result.did_change) { target_element->SetNeedsStyleRecalc( kLocalStyleChange,
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc index b5719148..734d909 100644 --- a/third_party/blink/renderer/core/testing/internals.cc +++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -314,7 +314,7 @@ Internals::Internals(ExecutionContext* context) : runtime_flags_(InternalRuntimeFlags::create()), - document_(Document::From(context)) { + document_(To<LocalDOMWindow>(context)->document()) { document_->Fetcher()->EnableIsPreloadedForTest(); } @@ -1752,13 +1752,6 @@ InstanceCounters::kMediaKeySessionCounter); } -unsigned Internals::contextLifecycleStateObserverObjectCount( - Document* document) { - DCHECK(document); - return document->ToExecutionContext() - ->ContextLifecycleStateObserverCountForTesting(); -} - static unsigned EventHandlerCount( Document& document, EventHandlerRegistry::EventHandlerClass handler_class) { @@ -3250,13 +3243,13 @@ bool Internals::isCSSPropertyUseCounted(Document* document, const String& property_name) { return document->IsPropertyCounted( - unresolvedCSSPropertyID(document->ToExecutionContext(), property_name)); + unresolvedCSSPropertyID(document->GetExecutionContext(), property_name)); } bool Internals::isAnimatedCSSPropertyUseCounted(Document* document, const String& property_name) { return document->IsAnimatedPropertyCounted( - unresolvedCSSPropertyID(document->ToExecutionContext(), property_name)); + unresolvedCSSPropertyID(document->GetExecutionContext(), property_name)); } void Internals::clearUseCounter(Document* document, uint32_t feature) { @@ -3515,6 +3508,9 @@ } String Internals::getAgentId(DOMWindow* window) { + if (!window->IsLocalDOMWindow()) + return String(); + // Sounds like there's no notion of "process ID" in Blink, but the main // thread's thread ID serves for that purpose. PlatformThreadId process_id = Thread::MainThread()->ThreadId();
diff --git a/third_party/blink/renderer/core/testing/internals.h b/third_party/blink/renderer/core/testing/internals.h index 587f1ef..2920268 100644 --- a/third_party/blink/renderer/core/testing/internals.h +++ b/third_party/blink/renderer/core/testing/internals.h
@@ -282,7 +282,6 @@ unsigned mediaKeysCount(); unsigned mediaKeySessionCount(); - unsigned contextLifecycleStateObserverObjectCount(Document*); unsigned wheelEventHandlerCount(Document*) const; unsigned scrollEventHandlerCount(Document*) const; unsigned touchStartOrMoveEventHandlerCount(Document*) const;
diff --git a/third_party/blink/renderer/core/testing/internals.idl b/third_party/blink/renderer/core/testing/internals.idl index 991e673d..16b08a8 100644 --- a/third_party/blink/renderer/core/testing/internals.idl +++ b/third_party/blink/renderer/core/testing/internals.idl
@@ -153,7 +153,6 @@ unsigned long mediaKeysCount(); unsigned long mediaKeySessionCount(); - unsigned long contextLifecycleStateObserverObjectCount(Document document); unsigned long wheelEventHandlerCount(Document document); unsigned long scrollEventHandlerCount(Document document); unsigned long touchStartOrMoveEventHandlerCount(Document document);
diff --git a/third_party/blink/renderer/core/testing/page_test_base.cc b/third_party/blink/renderer/core/testing/page_test_base.cc index e8f886ec..3dee005 100644 --- a/third_party/blink/renderer/core/testing/page_test_base.cc +++ b/third_party/blink/renderer/core/testing/page_test_base.cc
@@ -165,8 +165,8 @@ StringOrArrayBufferOrArrayBufferView buffer = StringOrArrayBufferOrArrayBufferView::FromArrayBuffer( DOMArrayBuffer::Create(shared_buffer)); - FontFace* ahem = FontFace::Create(document.ToExecutionContext(), "Ahem", - buffer, FontFaceDescriptors::Create()); + FontFace* ahem = FontFace::Create(frame.DomWindow(), "Ahem", buffer, + FontFaceDescriptors::Create()); ScriptState* script_state = ToScriptStateForMainWorld(&frame); DummyExceptionStateForTesting exception_state;
diff --git a/third_party/blink/renderer/core/testing/v8/web_core_test_support.cc b/third_party/blink/renderer/core/testing/v8/web_core_test_support.cc index ada41d6..24f9248 100644 --- a/third_party/blink/renderer/core/testing/v8/web_core_test_support.cc +++ b/third_party/blink/renderer/core/testing/v8/web_core_test_support.cc
@@ -29,6 +29,7 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_origin_trials_test.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/testing/internal_settings.h" #include "third_party/blink/renderer/core/testing/internals.h" @@ -128,10 +129,8 @@ ScriptState* script_state = ScriptState::From(context); ScriptState::Scope scope(script_state); - Document* document = Document::From(ExecutionContext::From(script_state)); - DCHECK(document); - LocalFrame* frame = document->GetFrame(); - // Should the document have been detached, the page is assumed being destroyed + LocalFrame* frame = LocalDOMWindow::From(script_state)->GetFrame(); + // Should the frame have been detached, the page is assumed being destroyed // (=> no reset required.) if (!frame) return;
diff --git a/third_party/blink/renderer/core/timing/performance_timing.cc b/third_party/blink/renderer/core/timing/performance_timing.cc index 9323724..902bb05a 100644 --- a/third_party/blink/renderer/core/timing/performance_timing.cc +++ b/third_party/blink/renderer/core/timing/performance_timing.cc
@@ -55,6 +55,8 @@ static uint64_t ToIntegerMilliseconds(base::TimeDelta duration) { // TODO(npm): add histograms to understand when/why |duration| is sometimes // negative. + // TODO(crbug.com/1063989): stop clamping when it is not needed (i.e. for + // methods which do not expose the timestamp to a web perf API). double clamped_seconds = Performance::ClampTimeResolution(duration.InSecondsF()); return static_cast<uint64_t>(clamped_seconds * 1000.0); @@ -411,37 +413,38 @@ paint_timing_detector->FirstInputOrScrollNotifiedTimestamp()); } -uint64_t PerformanceTiming::FirstInputDelay() const { +base::Optional<base::TimeDelta> PerformanceTiming::FirstInputDelay() const { const InteractiveDetector* interactive_detector = GetInteractiveDetector(); if (!interactive_detector) - return 0; + return base::nullopt; - return ToIntegerMilliseconds(interactive_detector->GetFirstInputDelay()); + return interactive_detector->GetFirstInputDelay(); } -uint64_t PerformanceTiming::FirstInputTimestamp() const { +base::Optional<base::TimeDelta> PerformanceTiming::FirstInputTimestamp() const { const InteractiveDetector* interactive_detector = GetInteractiveDetector(); if (!interactive_detector) - return 0; + return base::nullopt; - return MonotonicTimeToIntegerMilliseconds( + return MonotonicTimeToPseudoWallTime( interactive_detector->GetFirstInputTimestamp()); } -uint64_t PerformanceTiming::LongestInputDelay() const { +base::Optional<base::TimeDelta> PerformanceTiming::LongestInputDelay() const { const InteractiveDetector* interactive_detector = GetInteractiveDetector(); if (!interactive_detector) - return 0; + return base::nullopt; - return ToIntegerMilliseconds(interactive_detector->GetLongestInputDelay()); + return interactive_detector->GetLongestInputDelay(); } -uint64_t PerformanceTiming::LongestInputTimestamp() const { +base::Optional<base::TimeDelta> PerformanceTiming::LongestInputTimestamp() + const { const InteractiveDetector* interactive_detector = GetInteractiveDetector(); if (!interactive_detector) - return 0; + return base::nullopt; - return MonotonicTimeToIntegerMilliseconds( + return MonotonicTimeToPseudoWallTime( interactive_detector->GetLongestInputTimestamp()); } @@ -600,6 +603,19 @@ return &view->GetPaintTimingDetector(); } +base::Optional<base::TimeDelta> +PerformanceTiming::MonotonicTimeToPseudoWallTime( + const base::Optional<base::TimeTicks>& time) const { + if (!time.has_value()) + return base::nullopt; + + const DocumentLoadTiming* timing = GetDocumentLoadTiming(); + if (!timing) + return base::nullopt; + + return timing->MonotonicTimeToPseudoWallTime(*time); +} + std::unique_ptr<TracedValue> PerformanceTiming::GetNavigationTracingData() { auto data = std::make_unique<TracedValue>(); data->SetString("navigationId",
diff --git a/third_party/blink/renderer/core/timing/performance_timing.h b/third_party/blink/renderer/core/timing/performance_timing.h index a07aa69ba..32e5068 100644 --- a/third_party/blink/renderer/core/timing/performance_timing.h +++ b/third_party/blink/renderer/core/timing/performance_timing.h
@@ -130,15 +130,15 @@ // The duration between the hardware timestamp and being queued on the main // thread for the first click, tap, key press, cancellable touchstart, or // pointer down followed by a pointer up. - uint64_t FirstInputDelay() const; + base::Optional<base::TimeDelta> FirstInputDelay() const; // The timestamp of the event whose delay is reported by FirstInputDelay(). - uint64_t FirstInputTimestamp() const; + base::Optional<base::TimeDelta> FirstInputTimestamp() const; // The longest duration between the hardware timestamp and being queued on the // main thread for the click, tap, key press, cancellable touchstart, or // pointer down followed by a pointer up. - uint64_t LongestInputDelay() const; + base::Optional<base::TimeDelta> LongestInputDelay() const; // The timestamp of the event whose delay is reported by LongestInputDelay(). - uint64_t LongestInputTimestamp() const; + base::Optional<base::TimeDelta> LongestInputTimestamp() const; // The sum of all input delay. uint64_t TotalInputDelay() const; // The sum of all adjusted input delay. @@ -175,6 +175,8 @@ DocumentLoadTiming* GetDocumentLoadTiming() const; ResourceLoadTiming* GetResourceLoadTiming() const; InteractiveDetector* GetInteractiveDetector() const; + base::Optional<base::TimeDelta> MonotonicTimeToPseudoWallTime( + const base::Optional<base::TimeTicks>&) const; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/xml/xslt_processor.cc b/third_party/blink/renderer/core/xml/xslt_processor.cc index db61654..575ec97 100644 --- a/third_party/blink/renderer/core/xml/xslt_processor.cc +++ b/third_party/blink/renderer/core/xml/xslt_processor.cc
@@ -120,6 +120,7 @@ result->InitContentSecurityPolicy(csp); } } else { + init = init.WithContextDocument(owner_document->ContextDocument()); result = LocalDOMWindow::CreateDocument(init, force_xhtml); }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index edda59c..9062c639 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -354,7 +354,6 @@ {ax::mojom::Role::kLabelText, "Label"}, {ax::mojom::Role::kLayoutTable, "LayoutTable"}, {ax::mojom::Role::kLayoutTableCell, "LayoutCellTable"}, - {ax::mojom::Role::kLayoutTableColumn, "LayoutColumnTable"}, {ax::mojom::Role::kLayoutTableRow, "LayoutRowTable"}, {ax::mojom::Role::kLegend, "Legend"}, {ax::mojom::Role::kLink, "Link"}, @@ -3689,7 +3688,6 @@ case ax::mojom::Role::kInlineTextBox: case ax::mojom::Role::kLabelText: case ax::mojom::Role::kLayoutTable: - case ax::mojom::Role::kLayoutTableColumn: case ax::mojom::Role::kLayoutTableRow: case ax::mojom::Role::kLegend: case ax::mojom::Role::kList:
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py index 39bd805..9c3f101 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py
@@ -1,7 +1,6 @@ # Copyright 2016 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. - """Script that runs tests before uploading a patch.""" @@ -10,10 +9,7 @@ cmd_name = 'all_python_tests' cmd = ['python', '-m', 'unittest', 'discover', '-p', '*test.py'] test_cmd = input_api.Command( - name=cmd_name, - cmd=cmd, - kwargs={}, - message=output_api.PresubmitError) + name=cmd_name, cmd=cmd, kwargs={}, message=output_api.PresubmitError) if input_api.verbose: print 'Running ' + cmd_name return input_api.RunTests([test_cmd])
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/constraints.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/constraints.py index 11c31764..01e2f10 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/constraints.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/constraints.py
@@ -1,7 +1,6 @@ # Copyright 2016 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 to get random numbers, strings, etc. The values returned by the various functions can be replaced in @@ -23,7 +22,6 @@ import gatt_aliases import wbt_fakes - # Strings that are used to generate the beginning of a test. The replacement # fields are replaced by Get*Base() functions below to generate valid test # cases. @@ -102,8 +100,8 @@ length = utils.UniformExpoInteger(0, math.log(max_length, 2)) exp_max_value = math.log(max_value, 2) return '[{}]'.format(', '.join( - str(utils.UniformExpoInteger(0, exp_max_value)) for _ in xrange(length)) - ) + str(utils.UniformExpoInteger(0, exp_max_value)) + for _ in xrange(length))) def _get_typed_array(): @@ -133,10 +131,10 @@ A string made up of a randomly chosen type and argument type from the lists above. """ - array_type = random.choice(['Int8Array', 'Int16Array', 'Int32Array', - 'Uint8Array', 'Uint16Array', 'Uint32Array', - 'Uint8ClampedArray', 'Float32Array', - 'Float64Array']) + array_type = random.choice([ + 'Int8Array', 'Int16Array', 'Int32Array', 'Uint8Array', 'Uint16Array', + 'Uint32Array', 'Uint8ClampedArray', 'Float32Array', 'Float64Array' + ]) # Choose an argument type at random. arguments = random.choice([ @@ -147,13 +145,13 @@ # typedArray e.g. new Uint8Array([1,2,3]) _get_typed_array, # object e.g. [1,2,3] - lambda: _get_array_of_random_ints(max_length=1000, max_value=2 ** 64), + lambda: _get_array_of_random_ints(max_length=1000, max_value=2**64), # buffer e.g. new Uint8Array(10).buffer lambda: _get_typed_array() + '.buffer', ]) - return 'new {array_type}({arguments})'.format(array_type=array_type, - arguments=arguments()) + return 'new {array_type}({arguments})'.format( + array_type=array_type, arguments=arguments()) def GetAdvertisedServiceUUIDFromFakes(): @@ -343,8 +341,8 @@ optional_service_uuid = random.choice(['', service_uuid]) optional_characteristic_uuid = random.choice(['', characteristic_uuid]) - services_base = random.choice([SERVICE_RETRIEVED_BASE, - SERVICES_RETRIEVED_BASE]) + services_base = random.choice( + [SERVICE_RETRIEVED_BASE, SERVICES_RETRIEVED_BASE]) characteristics_base = services_base + random.choice([ CHARACTERISTIC_RETRIEVED_BASE, @@ -360,8 +358,10 @@ def get_get_primary_services_call(): - call = random.choice([u'getPrimaryService({service_uuid})', - u'getPrimaryServices({optional_service_uuid})']) + call = random.choice([ + u'getPrimaryService({service_uuid})', + u'getPrimaryServices({optional_service_uuid})' + ]) return call.format( service_uuid=get_service_uuid(),
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py index 4080b8a..9b37e5a1 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py
@@ -1,7 +1,6 @@ # Copyright 2016 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. - """Test that the fuzzer works the way ClusterFuzz invokes it.""" import glob @@ -15,7 +14,6 @@ class WebBluetoothFuzzerTest(unittest.TestCase): - def setUp(self): self._output_dir = tempfile.mkdtemp() self._resources_path = setup.RetrieveResources() @@ -25,9 +23,10 @@ shutil.rmtree(self._resources_path) def testCanGenerate100Files(self): - sys.argv = ['fuzz_main_run.py', '--no_of_files=100', - '--input_dir={}'.format(self._output_dir), - '--output_dir={}'.format(self._output_dir)] + sys.argv = [ + 'fuzz_main_run.py', '--no_of_files=100', '--input_dir={}'.format( + self._output_dir), '--output_dir={}'.format(self._output_dir) + ] import fuzz_main_run fuzz_main_run.main() @@ -40,5 +39,6 @@ for test_case in written_files: self.assertFalse('TRANSFORM' in open(test_case).read()) + if __name__ == '__main__': unittest.main()
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py index d4f2f055..1703291 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py
@@ -1,7 +1,6 @@ # Copyright 2016 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. - """Script to generate Web Bluetooth web tests that can be run in ClusterFuzz. This script uses templates in the templates/ directory to generate html files @@ -21,10 +20,10 @@ import parameter_fuzzer import test_case_fuzzer -JS_FILES_AND_PARAMETERS = ( - ('testharness.js', 'INCLUDE_TESTHARNESS'), - ('testharnessreport.js', 'INCLUDE_REPORT'), - ('bluetooth-helpers.js', 'INCLUDE_BLUETOOTH_HELPERS')) +JS_FILES_AND_PARAMETERS = (('testharness.js', 'INCLUDE_TESTHARNESS'), + ('testharnessreport.js', + 'INCLUDE_REPORT'), ('bluetooth-helpers.js', + 'INCLUDE_BLUETOOTH_HELPERS')) SCRIPT_PREFIX = '<script type="text/javascript">\n' SCRIPT_SUFFIX = '\n</script>\n' @@ -39,20 +38,30 @@ parser = argparse.ArgumentParser() # Arguments used by ClusterFuzz: - parser.add_argument('-n', '--no_of_files', type=int, required=True, - help='The number of test cases that the fuzzer is ' - 'expected to generate') - parser.add_argument('-i', '--input_dir', - help='The directory containing the fuzzer\'s data ' - 'bundle.') - parser.add_argument('-o', '--output_dir', required=True, - help='The directory where test case files should be ' - 'written to.') + parser.add_argument( + '-n', + '--no_of_files', + type=int, + required=True, + help='The number of test cases that the fuzzer is ' + 'expected to generate') + parser.add_argument( + '-i', + '--input_dir', + help='The directory containing the fuzzer\'s data ' + 'bundle.') + parser.add_argument( + '-o', + '--output_dir', + required=True, + help='The directory where test case files should be ' + 'written to.') - parser.add_argument('--content_shell_dir', - help='The directory of content shell. If present the ' - 'program will print a command to run the ' - 'generated test file.') + parser.add_argument( + '--content_shell_dir', + help='The directory of content shell. If present the ' + 'program will print a command to run the ' + 'generated test file.') return parser.parse_args() @@ -93,9 +102,10 @@ js_file_data = (SCRIPT_PREFIX + js_file_data + SCRIPT_SUFFIX) - fuzzed_file_data = FillInParameter(include_parameter, - lambda data=js_file_data: data, - fuzzed_file_data) + fuzzed_file_data = FillInParameter( + include_parameter, + lambda data=js_file_data: data, + fuzzed_file_data) return fuzzed_file_data.encode('utf-8') @@ -113,13 +123,11 @@ """ file_descriptor, file_path = tempfile.mkstemp( - prefix=test_file_prefix, - suffix='.html', - dir=output_dir) + prefix=test_file_prefix, suffix='.html', dir=output_dir) with os.fdopen(file_descriptor, 'wb') as output: - print 'Writing {} bytes to \'{}\''.format(len(test_file_data), - file_path) + print 'Writing {} bytes to \'{}\''.format( + len(test_file_data), file_path) output.write(test_file_data) return file_path @@ -135,9 +143,8 @@ # Get Templates current_path = os.path.dirname(os.path.realpath(__file__)) - available_templates = glob.glob(os.path.join(current_path, - 'templates', - '*.html')) + available_templates = glob.glob( + os.path.join(current_path, 'templates', '*.html')) # Generate Test Files resources_path = os.path.join(current_path, 'resources') @@ -149,12 +156,10 @@ # Get Test File template_name = os.path.splitext(os.path.basename(template_path))[0] - test_file_name = 'fuzz-{}-{}-{}'.format(template_name, - int(start_time), + test_file_name = 'fuzz-{}-{}-{}'.format(template_name, int(start_time), int(file_no)) - test_file_path = WriteTestFile(test_file_data, - test_file_name, + test_file_path = WriteTestFile(test_file_data, test_file_name, args.output_dir) if args.content_shell_dir:
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py index 798fe86..9b6ccceb 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py
@@ -1,7 +1,6 @@ # Copyright 2016 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 that includes classes and functions used by fuzzers."""
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py index e28d502..86ce0100 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py
@@ -1,7 +1,6 @@ # Copyright 2016 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. - """Contains Services, Characteristics and Descriptor aliases. These values are copied from: @@ -11,7 +10,6 @@ https://www.bluetooth.com/specifications/gatt/characteristics """ - SERVICES = [ 'alert_notification', 'automation_io', @@ -51,7 +49,6 @@ 'weight_scale', ] - CHARACTERISTICS = [ 'aerobic_heart_rate_lower_limit', 'aerobic_heart_rate_upper_limit',
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py index 0c9bdb5..cb06b6e7 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py
@@ -1,7 +1,6 @@ # Copyright 2016 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 to fuzz parameters of a template.""" import constraints @@ -23,8 +22,7 @@ """ test_file_data = FillInParameter('TRANSFORM_BASIC_BASE', - constraints.GetBasicBase, - test_file_data) + constraints.GetBasicBase, test_file_data) test_file_data = FillInParameter('TRANSFORM_DEVICE_DISCOVERY_BASE', constraints.GetDeviceDiscoveryBase, @@ -38,9 +36,9 @@ constraints.get_services_retrieved_base, test_file_data) - test_file_data = FillInParameter('TRANSFORM_CHARACTERISTICS_RETRIEVED_BASE', - constraints.get_characteristics_retrieved_base, - test_file_data) + test_file_data = FillInParameter( + 'TRANSFORM_CHARACTERISTICS_RETRIEVED_BASE', + constraints.get_characteristics_retrieved_base, test_file_data) test_file_data = FillInParameter('TRANSFORM_REQUEST_DEVICE_OPTIONS', constraints.GetRequestDeviceOptions, @@ -62,12 +60,10 @@ constraints.get_pick_a_characteristic, test_file_data) - test_file_data = FillInParameter('TRANSFORM_VALUE', - constraints.get_buffer_source, - test_file_data) + test_file_data = FillInParameter( + 'TRANSFORM_VALUE', constraints.get_buffer_source, test_file_data) test_file_data = FillInParameter('TRANSFORM_RELOAD_ID', - constraints.get_reload_id, - test_file_data) + constraints.get_reload_id, test_file_data) return test_file_data
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/setup.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/setup.py index 3805fbc0..c54da3c 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/setup.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/setup.py
@@ -1,7 +1,6 @@ # Copyright 2016 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. - """Script that helps run the fuzzer locally and in ClusterFuzz. To prepare to run the fuzzer locally, this script copies the necessary @@ -19,15 +18,15 @@ import sys # src path from this file's path. -SRC_PATH = os.path.join( - os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir) -WEB_TESTS_RESOURCES_PATH = os.path.join( - SRC_PATH, 'third_party', 'blink', 'web_tests', 'resources') +SRC_PATH = os.path.join(os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, + os.pardir, os.pardir) +WEB_TESTS_RESOURCES_PATH = os.path.join(SRC_PATH, 'third_party', 'blink', + 'web_tests', 'resources') WEB_PLATFORM_TESTS_RESOURCES_PATH = os.path.join( SRC_PATH, 'third_party', 'blink', 'web_tests', 'external', 'wpt', 'bluetooth', 'resources') -COMMON_FUZZER_RESOURCES_PATH = os.path.join( - SRC_PATH, 'testing', 'clusterfuzz', 'common') +COMMON_FUZZER_RESOURCES_PATH = os.path.join(SRC_PATH, 'testing', 'clusterfuzz', + 'common') RESOURCES = [ os.path.join(WEB_TESTS_RESOURCES_PATH, 'testharness.js'), os.path.join(WEB_TESTS_RESOURCES_PATH, 'testharnessreport.js'), @@ -69,13 +68,19 @@ # Get arguments. parser = argparse.ArgumentParser() - parser.add_argument('-c', '--cluster_fuzz', action='store_true', - help='If present, this script generates tar.bz2 file ' - 'containing the fuzzer. This file can be uploaded ' - 'and run on ClusterFuzz.') - parser.add_argument('-l', '--local', action='store_true', - help='If present, this script retrieves the files ' - 'necessary to run the fuzzer locally.') + parser.add_argument( + '-c', + '--cluster_fuzz', + action='store_true', + help='If present, this script generates tar.bz2 file ' + 'containing the fuzzer. This file can be uploaded ' + 'and run on ClusterFuzz.') + parser.add_argument( + '-l', + '--local', + action='store_true', + help='If present, this script retrieves the files ' + 'necessary to run the fuzzer locally.') args = parser.parse_args() @@ -107,5 +112,6 @@ base_dir='clusterfuzz') print 'File wrote to: ' + compressed_file_path + '.tar.bz2' + if __name__ == '__main__': sys.exit(main())
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py index c493270..8e6bb14 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py
@@ -1,7 +1,6 @@ # Copyright 2016 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 to generate a test file with random calls to the Web Bluetooth API.""" import random @@ -27,9 +26,7 @@ '.then(() => {', ], # Request Device Tokens - [ - ' requestDeviceWithKeyDown(TRANSFORM_REQUEST_DEVICE_OPTIONS);' - ], + [' requestDeviceWithKeyDown(TRANSFORM_REQUEST_DEVICE_OPTIONS);'], [ ' return requestDeviceWithKeyDown(TRANSFORM_REQUEST_DEVICE_OPTIONS);', '})', @@ -194,5 +191,4 @@ """ return FillInParameter('TRANSFORM_RANDOM_TOKENS', - _GenerateSequenceOfRandomTokens, - template_file_data) + _GenerateSequenceOfRandomTokens, template_file_data)
diff --git a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py index dddb407..1f582aee 100644 --- a/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py +++ b/third_party/blink/renderer/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py
@@ -1,7 +1,6 @@ # Copyright 2016 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 that contains information about Web Bluetooth's Fake Adapters.""" BLOCKLISTED_UUID = '611c954a-263b-4f4a-aab6-01ddb953f985' @@ -67,13 +66,11 @@ ] # Tuples of common service uuid and their characteristics uuids. -GENERIC_ACCESS_SERVICE = ( - 'generic_access', ['gap.device_name', 'gap.peripheral_privacy_flag'] -) +GENERIC_ACCESS_SERVICE = ('generic_access', + ['gap.device_name', 'gap.peripheral_privacy_flag']) -HEART_RATE_SERVICE = ( - 'heart_rate', ['heart_rate_measurement', 'body_sensor_location'] -) +HEART_RATE_SERVICE = ('heart_rate', + ['heart_rate_measurement', 'body_sensor_location']) # List of available fake adapters. ALL_ADAPTERS = [ @@ -123,8 +120,10 @@ ), ( 'BlocklistTestAdapter', - [BLOCKLISTED_UUID, 'device_information', 'generic_access', - 'heart_rate', 'human_interface_device'], + [ + BLOCKLISTED_UUID, 'device_information', 'generic_access', + 'heart_rate', 'human_interface_device' + ], ), ( 'FailingConnectionsAdapter', @@ -140,7 +139,9 @@ ), ( 'DeviceNameLongerThan29BytesAdapter', - ['a_device_name_that_is_longer_than_29_bytes_but_shorter_than_248_bytes'], + [ + 'a_device_name_that_is_longer_than_29_bytes_but_shorter_than_248_bytes' + ], ), ] @@ -164,17 +165,16 @@ ), ( 'BlocklistTestAdapter', - [BLOCKLISTED_UUID, 'device_information', 'generic_access', - 'heart_rate', 'human_interface_device'], + [ + BLOCKLISTED_UUID, 'device_information', 'generic_access', + 'heart_rate', 'human_interface_device' + ], ), ( 'FailingGATTOperationsAdapter', [GATT_ERROR_UUID], ), - ( - 'DelayedServicesDiscoveryAdapter', - ['heart_rate'] - ), + ('DelayedServicesDiscoveryAdapter', ['heart_rate']), ] ADAPTERS_WITH_CHARACTERISTICS = [ @@ -186,19 +186,20 @@ 'TwoHeartRateServicesAdapter', [HEART_RATE_SERVICE], ), - ( - 'DisconnectingHeartRateAdapter', - [GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE, - (DISCONNECTION_UUID, ['01d7d88a-7451-419f-aeb8-d65e7b9277af'])] - ), - ( - 'BlocklistTestAdapter', - [GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE, ( - BLOCKLISTED_UUID, ['bad1c9a2-9a5b-4015-8b60-1579bbbf2135'], + ('DisconnectingHeartRateAdapter', [ + GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE, + (DISCONNECTION_UUID, ['01d7d88a-7451-419f-aeb8-d65e7b9277af']) + ]), + ('BlocklistTestAdapter', [ + GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE, + ( + BLOCKLISTED_UUID, + ['bad1c9a2-9a5b-4015-8b60-1579bbbf2135'], ), ( - 'device_information', ['serial_number_string'], - )] - ), + 'device_information', + ['serial_number_string'], + ) + ]), ( 'FailingGATTOperationsAdapter', [(GATT_ERROR_UUID, [
diff --git a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.cc b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.cc index 4d0a8f1..4b8bfa76 100644 --- a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.cc +++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.cc
@@ -335,8 +335,7 @@ DCHECK(IsMainThread()); // Don't check |recording_| since we can go directly from pause() to stop(). - if (recording_) - Pause(); + invalidated_ = true; recording_ = false; timeslice_ = base::TimeDelta::FromMilliseconds(0); @@ -496,6 +495,10 @@ base::TimeTicks timestamp, bool is_key_frame) { DCHECK(IsMainThread()); + + if (invalidated_) + return; + auto params_with_codec = params; params_with_codec.codec = MediaVideoCodecFromCodecId(video_codec_id_); HandleEncodedVideo(params_with_codec, std::move(encoded_data), @@ -524,9 +527,6 @@ bool is_key_frame) { DCHECK(IsMainThread()); - if (video_recorders_.IsEmpty()) - return; - if (UpdateTracksAndCheckIfChanged()) { recorder_->OnError("Amount of tracks in MediaStream has changed."); return; @@ -557,7 +557,7 @@ base::TimeTicks timestamp) { DCHECK(IsMainThread()); - if (audio_recorders_.IsEmpty()) + if (invalidated_) return; if (UpdateTracksAndCheckIfChanged()) { @@ -576,7 +576,7 @@ void MediaRecorderHandler::WriteData(base::StringPiece data) { DCHECK(IsMainThread()); - if (!recording_) + if (invalidated_) return; const base::TimeTicks now = base::TimeTicks::Now();
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 00d6df64..34bc9434 100644 --- a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h +++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler.h
@@ -144,6 +144,7 @@ // The last seen video codec of the last received encoded video frame. base::Optional<media::VideoCodec> last_seen_codec_; + bool invalidated_ = false; bool recording_; // The MediaStream being recorded. Member<MediaStreamDescriptor> media_stream_;
diff --git a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler_unittest.cc b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler_unittest.cc index b8d5cef..47c053b 100644 --- a/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler_unittest.cc +++ b/third_party/blink/renderer/modules/mediarecorder/media_recorder_handler_unittest.cc
@@ -137,6 +137,16 @@ media_recorder_handler_->OnVideoFrameForTesting(std::move(frame), base::TimeTicks::Now()); } + + void OnEncodedVideoForTesting(const media::WebmMuxer::VideoParameters& params, + std::string encoded_data, + std::string encoded_alpha, + base::TimeTicks timestamp, + bool is_key_frame) { + media_recorder_handler_->OnEncodedVideo(params, encoded_data, encoded_alpha, + timestamp, is_key_frame); + } + void OnAudioBusForTesting(const media::AudioBus& audio_bus) { media_recorder_handler_->OnAudioBusForTesting(audio_bus, base::TimeTicks::Now()); @@ -505,6 +515,37 @@ media_recorder_handler_ = nullptr; } +TEST_P(MediaRecorderHandlerTest, PauseRecorderForVideo) { + // Video-only test: Audio would be very similar. + if (GetParam().has_audio) + return; + + AddTracks(); + + V8TestingScope scope; + auto* recorder = MakeGarbageCollected<MockMediaRecorder>(scope); + + const String mime_type(GetParam().mime_type); + const String codecs(GetParam().codecs); + + EXPECT_TRUE(media_recorder_handler_->Initialize( + recorder, registry_.test_stream(), mime_type, codecs, 0, 0)); + EXPECT_TRUE(media_recorder_handler_->Start(0)); + + Mock::VerifyAndClearExpectations(recorder); + media_recorder_handler_->Pause(); + + EXPECT_CALL(*recorder, WriteData).Times(AtLeast(1)); + media::WebmMuxer::VideoParameters params(gfx::Size(), 1, media::kCodecVP9, + gfx::ColorSpace()); + OnEncodedVideoForTesting(params, "vp9 frame", "", base::TimeTicks::Now(), + true); + + // Expect a last call on destruction. + EXPECT_CALL(*recorder, WriteData(_, _, true, _)).Times(1); + media_recorder_handler_ = nullptr; +} + struct MediaRecorderPassthroughTestParams { const char* mime_type; media::VideoCodec codec; @@ -621,8 +662,8 @@ // transfer doesn't crash the media recorder. OnVideoFrameForTesting(FakeEncodedVideoFrame::Builder() .WithKeyFrame(true) - .WithCodec(media::kCodecVP9) - .WithData(std::string("vp9 frame")) + .WithCodec(media::kCodecVP8) + .WithData(std::string("vp8 frame")) .BuildRefPtr()); platform_->RunUntilIdle(); }
diff --git a/third_party/blink/renderer/modules/webtransport/incoming_stream.idl b/third_party/blink/renderer/modules/webtransport/incoming_stream.idl index 35039b9..4af3c3a 100644 --- a/third_party/blink/renderer/modules/webtransport/incoming_stream.idl +++ b/third_party/blink/renderer/modules/webtransport/incoming_stream.idl
@@ -8,5 +8,5 @@ interface mixin IncomingStream { readonly attribute ReadableStream readable; readonly attribute Promise<StreamAbortInfo> readingAborted; - void abortReading(optional StreamAbortInfo abortInfo); + void abortReading(optional StreamAbortInfo abortInfo = {}); };
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc b/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc index 63d9319..d72ffdd 100644 --- a/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc +++ b/third_party/blink/renderer/modules/xr/xr_webgl_layer.cc
@@ -6,6 +6,7 @@ #include "third_party/blink/renderer/core/frame/web_feature.h" #include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" +#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/modules/webgl/webgl2_rendering_context.h" #include "third_party/blink/renderer/modules/webgl/webgl_framebuffer.h" #include "third_party/blink/renderer/modules/webgl/webgl_rendering_context.h" @@ -24,6 +25,12 @@ namespace { const double kFramebufferMinScale = 0.2; +const uint32_t kCleanFrameWarningLimit = 5; + +const char kCleanFrameWarning[] = + "Note: The XRSession has completed multiple animation frames without " + "drawing anything to the baseLayer's framebuffer, resulting in no visible " + "output."; // Because including base::ClampToRange would be a dependency violation double ClampToRange(const double value, const double min, const double max) { @@ -275,9 +282,31 @@ // Submit the frame to the XR compositor. if (session()->immersive()) { + bool framebuffer_dirty = framebuffer_->HaveContentsChanged(); + + // Not drawing to the framebuffer during a session's rAF callback is + // usually a sign that something is wrong, such as the app drawing to the + // wrong render target. Show a warning in the console if we see that + // happen too many times. + if (!framebuffer_dirty) { + // If the session doesn't have a pose then the framebuffer being clean + // may be expected, so we won't count those frames. + bool frame_had_pose = !!session()->MojoFromViewer(); + if (frame_had_pose) { + clean_frame_count++; + if (clean_frame_count == kCleanFrameWarningLimit) { + session()->xr()->GetExecutionContext()->AddConsoleMessage( + MakeGarbageCollected<ConsoleMessage>( + mojom::blink::ConsoleMessageSource::kRendering, + mojom::blink::ConsoleMessageLevel::kWarning, + kCleanFrameWarning)); + } + } + } + // Always call submit, but notify if the contents were changed or not. - session()->xr()->frameProvider()->SubmitWebGLLayer( - this, framebuffer_->HaveContentsChanged()); + session()->xr()->frameProvider()->SubmitWebGLLayer(this, + framebuffer_dirty); } } }
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_layer.h b/third_party/blink/renderer/modules/xr/xr_webgl_layer.h index eb031c6..03db133 100644 --- a/third_party/blink/renderer/modules/xr/xr_webgl_layer.h +++ b/third_party/blink/renderer/modules/xr/xr_webgl_layer.h
@@ -92,6 +92,8 @@ bool viewports_dirty_ = true; bool is_direct_draw_frame = false; bool ignore_depth_values_ = false; + + uint32_t clean_frame_count = 0; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index ffe76258..476cd2fc 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1230,6 +1230,7 @@ "mojo/heap_mojo_receiver_set.h", "mojo/heap_mojo_remote.h", "mojo/heap_mojo_unique_receiver_set.h", + "mojo/heap_mojo_wrapper_mode.h", "mojo/kurl_mojom_traits.h", "mojo/mojo_helper.h", "mojo/security_origin_mojom_traits.h",
diff --git a/third_party/blink/renderer/platform/PRESUBMIT.py b/third_party/blink/renderer/platform/PRESUBMIT.py index e053782..fe39215 100644 --- a/third_party/blink/renderer/platform/PRESUBMIT.py +++ b/third_party/blink/renderer/platform/PRESUBMIT.py
@@ -1,7 +1,6 @@ # Copyright 2017 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. - """Presubmit script for changes affecting Source/platform. See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts @@ -42,9 +41,12 @@ # Diff the sorted/unsorted versions. differ = difflib.Differ() diff = differ.compare(features, features_sorted) - return [output_api.PresubmitError( - 'runtime_enabled_features.json5 features must be sorted alphabetically. ' - 'Diff of feature order follows:', long_text='\n'.join(diff))] + return [ + output_api.PresubmitError( + 'runtime_enabled_features.json5 features must be sorted alphabetically. ' + 'Diff of feature order follows:', + long_text='\n'.join(diff)) + ] def _CommonChecks(input_api, output_api):
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc index d366a041..c6fd0ea1 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -67,6 +67,8 @@ // no longer exists. Abandon(); } else { + if (provider_) + provider_->OnDestroyResource(); TearDown(); } #if DCHECK_IS_ON()
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 921ac29..3216246 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -1008,6 +1008,8 @@ } CanvasResourceProvider::~CanvasResourceProvider() { + UMA_HISTOGRAM_EXACT_LINEAR("Blink.Canvas.MaximumInflightResources", + max_inflight_resources_, 20); if (context_provider_wrapper_) context_provider_wrapper_->RemoveObserver(this); } @@ -1234,9 +1236,17 @@ canvas_resources_.clear(); } +void CanvasResourceProvider::OnDestroyResource() { + --num_inflight_resources_; +} + scoped_refptr<CanvasResource> CanvasResourceProvider::NewOrRecycledResource() { - if (canvas_resources_.IsEmpty()) + if (canvas_resources_.IsEmpty()) { canvas_resources_.push_back(CreateResource()); + ++num_inflight_resources_; + if (num_inflight_resources_ > max_inflight_resources_) + max_inflight_resources_ = num_inflight_resources_; + } if (IsSingleBuffered()) { DCHECK_EQ(canvas_resources_.size(), 1u);
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h index 4dbac2f..b30ce4d6 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -225,6 +225,8 @@ ResourceProviderType GetType() const { return type_; } bool HasRecordedDrawOps() const; + void OnDestroyResource(); + protected: gpu::gles2::GLES2Interface* ContextGL() const; gpu::raster::RasterInterface* RasterInterface() const; @@ -308,6 +310,9 @@ // underlying GrContext is flushed. static constexpr int kMaxDrawsBeforeContextFlush = 50; + size_t num_inflight_resources_ = 0; + size_t max_inflight_resources_ = 0; + RestoreMatrixClipStackCb restore_clip_stack_callback_; base::WeakPtrFactory<CanvasResourceProvider> weak_ptr_factory_{this};
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc index 2112941..015e3f9 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -746,14 +746,18 @@ upcast_state->SetEffect(unaliased_parent_effect); // Exotic blending layer can be decomposited only if its parent group - // (which defines the scope of the blending) has only one layer before it, + // (which defines the scope of the blending) has zero or one layer before it, // and it can be merged into that layer. if (unaliased_effect.BlendMode() != SkBlendMode::kSrcOver) { - if (layer_index - 1 != first_layer_in_parent_group_index) - return false; - if (!pending_layers_[first_layer_in_parent_group_index].CanMerge( - layer, *upcast_state)) - return false; + auto num_previous_siblings = + layer_index - first_layer_in_parent_group_index; + if (num_previous_siblings) { + if (num_previous_siblings > 1) + return false; + if (!pending_layers_[first_layer_in_parent_group_index].CanMerge( + layer, *upcast_state)) + return false; + } } layer.Upcast(*upcast_state);
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc index 52a7d72..34024cd 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor_test.cc
@@ -2539,6 +2539,36 @@ GetPropertyTrees().effect_tree.parent(masking_group)->HasRenderSurface()); } +TEST_P(PaintArtifactCompositorTest, DecompositeExoticBlendModeWithoutBackdrop) { + auto parent_effect = CreateOpacityEffect( + e0(), 1.0, CompositingReason::kIsolateCompositedDescendants); + EffectPaintPropertyNode::State blend_state1; + blend_state1.local_transform_space = &t0(); + blend_state1.blend_mode = SkBlendMode::kScreen; + auto blend_effect1 = + EffectPaintPropertyNode::Create(*parent_effect, std::move(blend_state1)); + EffectPaintPropertyNode::State blend_state2; + blend_state2.local_transform_space = &t0(); + blend_state2.blend_mode = SkBlendMode::kScreen; + auto blend_effect2 = + EffectPaintPropertyNode::Create(*parent_effect, std::move(blend_state2)); + + Update(TestPaintArtifact() + .Chunk(t0(), c0(), *blend_effect1) + .RectDrawing(IntRect(100, 100, 200, 200), Color::kGray) + .Chunk(t0(), c0(), *blend_effect2) + .RectDrawing(IntRect(100, 100, 200, 200), Color::kBlack) + .Build()); + + ASSERT_EQ(1u, LayerCount()); + const auto* effect = + GetPropertyTrees().effect_tree.Node(LayerAt(0)->effect_tree_index()); + EXPECT_EQ(1.0f, effect->opacity); + EXPECT_EQ(SkBlendMode::kSrcOver, effect->blend_mode); + // Don't need a render surface because all blend effects are decomposited. + EXPECT_FALSE(effect->HasRenderSurface()); +} + TEST_P(PaintArtifactCompositorTest, UpdateProducesNewSequenceNumber) { // A 90 degree clockwise rotation about (100, 100). auto transform = CreateTransform(t0(), TransformationMatrix().Rotate(90),
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc index 6f2aa63..07ded51 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.cc
@@ -203,7 +203,8 @@ return true; } -bool PropertyTreeManager::DirectlySetScrollOffset( +// static +void PropertyTreeManager::DirectlySetScrollOffset( cc::LayerTreeHost& host, CompositorElementId element_id, const gfx::ScrollOffset& scroll_offset) { @@ -213,7 +214,6 @@ layer->SetNeedsPushProperties(); host.SetNeedsCommit(); } - return true; } cc::TransformTree& PropertyTreeManager::GetTransformTree() {
diff --git a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.h b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.h index 976d54d..4c807b5 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.h +++ b/third_party/blink/renderer/platform/graphics/compositing/property_tree_manager.h
@@ -140,7 +140,7 @@ cc::LayerTreeHost&, const TransformPaintPropertyNode&); - static bool DirectlySetScrollOffset(cc::LayerTreeHost&, + static void DirectlySetScrollOffset(cc::LayerTreeHost&, CompositorElementId, const gfx::ScrollOffset&);
diff --git a/third_party/blink/renderer/platform/heap/concurrent_marking_test.cc b/third_party/blink/renderer/platform/heap/concurrent_marking_test.cc index 464fec4a..8f02fc2 100644 --- a/third_party/blink/renderer/platform/heap/concurrent_marking_test.cc +++ b/third_party/blink/renderer/platform/heap/concurrent_marking_test.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. +#if defined(THREAD_SANITIZER) + #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" @@ -481,3 +483,5 @@ } // namespace concurrent_marking_test } // namespace blink + +#endif // defined(THREAD_SANITIZER)
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h index cfc8b6e..bfc774c 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h
@@ -8,6 +8,7 @@ #include "mojo/public/cpp/bindings/receiver.h" #include "third_party/blink/renderer/platform/context_lifecycle_observer.h" #include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { @@ -17,7 +18,11 @@ // HeapMojoReceiver's constructor takes context as a mandatory parameter. // HeapMojoReceiver resets the mojo connection when 1) the owner object is // garbage-collected and 2) the associated ExecutionContext is detached. -template <typename Interface> + +// TODO(crbug.com/1058076) HeapMojoWrapperMode should be removed once we ensure +// that the interface is not used after ContextDestroyed(). +template <typename Interface, + HeapMojoWrapperMode Mode = HeapMojoWrapperMode::kWithContextObserver> class HeapMojoReceiver { DISALLOW_NEW(); @@ -72,7 +77,10 @@ mojo::Receiver<Interface>& receiver() { return receiver_; } // ContextLifecycleObserver methods - void ContextDestroyed() override { receiver_.reset(); } + void ContextDestroyed() override { + if (Mode == HeapMojoWrapperMode::kWithContextObserver) + receiver_.reset(); + } private: mojo::Receiver<Interface> receiver_;
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h index 3927d9b..36b7a74 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set.h
@@ -9,6 +9,7 @@ #include "mojo/public/cpp/bindings/receiver_set.h" #include "third_party/blink/renderer/platform/context_lifecycle_observer.h" #include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { @@ -18,7 +19,11 @@ // HeapMojoReceiverSet's constructor takes context as a mandatory parameter. // HeapMojoReceiverSet resets the mojo connection when 1) the owner object is // garbage-collected or 2) the associated ExecutionContext is detached. -template <typename Interface> + +// TODO(crbug.com/1058076) HeapMojoWrapperMode should be removed once we ensure +// that the interface is not used after ContextDestroyed(). +template <typename Interface, + HeapMojoWrapperMode Mode = HeapMojoWrapperMode::kWithContextObserver> class HeapMojoReceiverSet { DISALLOW_NEW(); @@ -72,10 +77,13 @@ mojo::ReceiverSet<Interface>& receiver_set() { return receiver_set_; } // ContextLifecycleObserver methods - void ContextDestroyed() override { receiver_set_.Clear(); } + void ContextDestroyed() override { + if (Mode == HeapMojoWrapperMode::kWithContextObserver) + receiver_set_.Clear(); + } private: - ::mojo::ReceiverSet<Interface> receiver_set_; + mojo::ReceiverSet<Interface> receiver_set_; }; Member<Wrapper> wrapper_;
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set_test.cc b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set_test.cc index c57f182b..aa13bc2b 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set_test.cc +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_set_test.cc
@@ -13,6 +13,7 @@ #include "third_party/blink/renderer/platform/heap/heap_test_utilities.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/heap_observer_list.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { @@ -60,47 +61,56 @@ void GetPort(mojo::PendingReceiver<sample::blink::Port> receiver) override {} }; -class GCOwner : public GarbageCollected<GCOwner> { +template <HeapMojoWrapperMode Mode> +class GCOwner : public GarbageCollected<GCOwner<Mode>> { public: explicit GCOwner(FakeContextNotifier* context) : receiver_set_(context) {} void Trace(Visitor* visitor) { visitor->Trace(receiver_set_); } - HeapMojoReceiverSet<sample::blink::Service>& receiver_set() { + HeapMojoReceiverSet<sample::blink::Service, Mode>& receiver_set() { return receiver_set_; } private: - HeapMojoReceiverSet<sample::blink::Service> receiver_set_; + HeapMojoReceiverSet<sample::blink::Service, Mode> receiver_set_; }; -} // namespace - -class HeapMojoReceiverSetTest : public TestSupportingGC { +template <HeapMojoWrapperMode Mode> +class HeapMojoReceiverSetGCBaseTest : public TestSupportingGC { public: FakeContextNotifier* context() { return context_; } scoped_refptr<base::NullTaskRunner> task_runner() { return null_task_runner_; } - GCOwner* owner() { return owner_; } + GCOwner<Mode>* owner() { return owner_; } void ClearOwner() { owner_ = nullptr; } protected: void SetUp() override { context_ = MakeGarbageCollected<FakeContextNotifier>(); - owner_ = MakeGarbageCollected<GCOwner>(context()); + owner_ = MakeGarbageCollected<GCOwner<Mode>>(context()); } void TearDown() override {} Persistent<FakeContextNotifier> context_; - Persistent<GCOwner> owner_; + Persistent<GCOwner<Mode>> owner_; scoped_refptr<base::NullTaskRunner> null_task_runner_ = base::MakeRefCounted<base::NullTaskRunner>(); }; -// GC the HeapMojoReceiverSet and verify that the receiver is no longer -// part of the set, and that the service was deleted. -TEST_F(HeapMojoReceiverSetTest, RemovesReceiver) { +} // namespace + +class HeapMojoReceiverSetGCWithContextObserverTest + : public HeapMojoReceiverSetGCBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoReceiverSetGCWithoutContextObserverTest + : public HeapMojoReceiverSetGCBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; + +// GC the HeapMojoReceiverSet with context observer and verify that the receiver +// is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoReceiverSetGCWithContextObserverTest, RemovesReceiver) { auto receiver_set = owner()->receiver_set(); MockService service; auto receiver = mojo::PendingReceiver<sample::blink::Service>( @@ -115,7 +125,43 @@ EXPECT_FALSE(receiver_set.HasReceiver(rid)); } -TEST_F(HeapMojoReceiverSetTest, ClearLeavesSetEmpty) { +// GC the HeapMojoReceiverSet without context observer and verify that the +// receiver is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoReceiverSetGCWithoutContextObserverTest, RemovesReceiver) { + auto receiver_set = owner()->receiver_set(); + MockService service; + auto receiver = mojo::PendingReceiver<sample::blink::Service>( + mojo::MessagePipe().handle0); + + mojo::ReceiverId rid = + receiver_set.Add(&service, std::move(receiver), task_runner()); + EXPECT_TRUE(receiver_set.HasReceiver(rid)); + + receiver_set.Remove(rid); + + EXPECT_FALSE(receiver_set.HasReceiver(rid)); +} + +// GC the HeapMojoReceiverSet with context observer and verify that the receiver +// is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoReceiverSetGCWithContextObserverTest, ClearLeavesSetEmpty) { + auto receiver_set = owner()->receiver_set(); + MockService service; + auto receiver = mojo::PendingReceiver<sample::blink::Service>( + mojo::MessagePipe().handle0); + + mojo::ReceiverId rid = + receiver_set.Add(&service, std::move(receiver), task_runner()); + EXPECT_TRUE(receiver_set.HasReceiver(rid)); + + receiver_set.Clear(); + + EXPECT_FALSE(receiver_set.HasReceiver(rid)); +} + +// GC the HeapMojoReceiverSet without context observer and verify that the +// receiver is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoReceiverSetGCWithoutContextObserverTest, ClearLeavesSetEmpty) { auto receiver_set = owner()->receiver_set(); MockService service; auto receiver = mojo::PendingReceiver<sample::blink::Service>(
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_test.cc b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_test.cc index f5bee09d..2f348ab5 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_test.cc +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_receiver_test.cc
@@ -8,9 +8,12 @@ #include "third_party/blink/renderer/platform/heap/heap_test_utilities.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/heap_observer_list.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { +namespace { + class MockContext final : public GarbageCollected<MockContext>, public ContextLifecycleNotifier { USING_GARBAGE_COLLECTED_MIXIN(MockContext); @@ -42,12 +45,15 @@ HeapObserverList<ContextLifecycleObserver> observers_; }; -class ReceiverOwner : public GarbageCollected<ReceiverOwner>, +template <HeapMojoWrapperMode Mode> +class ReceiverOwner : public GarbageCollected<ReceiverOwner<Mode>>, public sample::blink::Service { public: explicit ReceiverOwner(MockContext* context) : receiver_(this, context) {} - HeapMojoReceiver<sample::blink::Service>& receiver() { return receiver_; } + HeapMojoReceiver<sample::blink::Service, Mode>& receiver() { + return receiver_; + } void Trace(Visitor* visitor) { visitor->Trace(receiver_); } @@ -59,10 +65,11 @@ sample::blink::Service::FrobinateCallback callback) override {} void GetPort(mojo::PendingReceiver<sample::blink::Port> port) override {} - HeapMojoReceiver<sample::blink::Service> receiver_; + HeapMojoReceiver<sample::blink::Service, Mode> receiver_; }; -class HeapMojoReceiverTest : public TestSupportingGC { +template <HeapMojoWrapperMode Mode> +class HeapMojoReceiverGCBaseTest : public TestSupportingGC { public: base::RunLoop& run_loop() { return run_loop_; } bool& disconnected() { return disconnected_; } @@ -73,13 +80,13 @@ void SetUp() override { CHECK(!disconnected_); context_ = MakeGarbageCollected<MockContext>(); - owner_ = MakeGarbageCollected<ReceiverOwner>(context_); + owner_ = MakeGarbageCollected<ReceiverOwner<Mode>>(context_); scoped_refptr<base::NullTaskRunner> null_task_runner = base::MakeRefCounted<base::NullTaskRunner>(); remote_ = mojo::Remote<sample::blink::Service>( owner_->receiver().BindNewPipeAndPassRemote(null_task_runner)); remote_.set_disconnect_handler(WTF::Bind( - [](HeapMojoReceiverTest* receiver_test) { + [](HeapMojoReceiverGCBaseTest* receiver_test) { receiver_test->run_loop().Quit(); receiver_test->disconnected() = true; }, @@ -88,29 +95,82 @@ void TearDown() override { CHECK(disconnected_); } Persistent<MockContext> context_; - Persistent<ReceiverOwner> owner_; + Persistent<ReceiverOwner<Mode>> owner_; base::RunLoop run_loop_; mojo::Remote<sample::blink::Service> remote_; bool disconnected_ = false; }; -// Make HeapMojoReceiver garbage collected and check that the connection is -// disconnected right after the marking phase. -TEST_F(HeapMojoReceiverTest, ResetsOnGC) { +template <HeapMojoWrapperMode Mode> +class HeapMojoReceiverDestroyContextBaseTest : public TestSupportingGC { + protected: + void SetUp() override { + context_ = MakeGarbageCollected<MockContext>(); + owner_ = MakeGarbageCollected<ReceiverOwner<Mode>>(context_); + scoped_refptr<base::NullTaskRunner> null_task_runner = + base::MakeRefCounted<base::NullTaskRunner>(); + remote_ = mojo::Remote<sample::blink::Service>( + owner_->receiver().BindNewPipeAndPassRemote(null_task_runner)); + } + + Persistent<MockContext> context_; + Persistent<ReceiverOwner<Mode>> owner_; + mojo::Remote<sample::blink::Service> remote_; +}; + +} // namespace + +class HeapMojoReceiverGCWithContextObserverTest + : public HeapMojoReceiverGCBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoReceiverGCWithoutContextObserverTest + : public HeapMojoReceiverGCBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; +class HeapMojoReceiverDestroyContextWithContextObserverTest + : public HeapMojoReceiverDestroyContextBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoReceiverDestroyContextWithoutContextObserverTest + : public HeapMojoReceiverDestroyContextBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; + +// Make HeapMojoReceiver with context observer garbage collected and check that +// the connection is disconnected right after the marking phase. +TEST_F(HeapMojoReceiverGCWithContextObserverTest, ResetsOnGC) { ClearOwner(); EXPECT_FALSE(disconnected()); - PreciselyCollectGarbage(BlinkGC::kConcurrentAndLazySweeping); + PreciselyCollectGarbage(); run_loop().Run(); EXPECT_TRUE(disconnected()); CompleteSweepingIfNeeded(); } -// Destroy the context and check that the connection is disconnected. -TEST_F(HeapMojoReceiverTest, ResetsOnContextDestroyed) { +// Make HeapMojoReceiver without context observer garbage collected and check +// that the connection is disconnected right after the marking phase. +TEST_F(HeapMojoReceiverGCWithoutContextObserverTest, ResetsOnGC) { + ClearOwner(); EXPECT_FALSE(disconnected()); - context_->NotifyContextDestroyed(); + PreciselyCollectGarbage(); run_loop().Run(); EXPECT_TRUE(disconnected()); + CompleteSweepingIfNeeded(); +} + +// Destroy the context with context observer and check that the connection is +// disconnected. +TEST_F(HeapMojoReceiverDestroyContextWithContextObserverTest, + ResetsOnContextDestroyed) { + EXPECT_TRUE(owner_->receiver().is_bound()); + context_->NotifyContextDestroyed(); + EXPECT_FALSE(owner_->receiver().is_bound()); +} + +// Destroy the context without context observer and check that the connection is +// still connected. +TEST_F(HeapMojoReceiverDestroyContextWithoutContextObserverTest, + ResetsOnContextDestroyed) { + EXPECT_TRUE(owner_->receiver().is_bound()); + context_->NotifyContextDestroyed(); + EXPECT_TRUE(owner_->receiver().is_bound()); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h index 49cc53d..cf456d9 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_remote.h
@@ -10,6 +10,7 @@ #include "mojo/public/cpp/bindings/remote.h" #include "third_party/blink/renderer/platform/context_lifecycle_observer.h" #include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { @@ -19,7 +20,11 @@ // HeapMojoRemote's constructor takes context as a mandatory parameter. // HeapMojoRemote resets the mojo connection when 1) the owner object is // garbage-collected and 2) the associated ExecutionContext is detached. -template <typename Interface> + +// TODO(crbug.com/1058076) HeapMojoWrapperMode should be removed once we ensure +// that the interface is not used after ContextDestroyed(). +template <typename Interface, + HeapMojoWrapperMode Mode = HeapMojoWrapperMode::kWithContextObserver> class HeapMojoRemote { DISALLOW_NEW(); @@ -72,7 +77,10 @@ mojo::Remote<Interface>& remote() { return remote_; } // ContextLifecycleObserver methods - void ContextDestroyed() override { remote_.reset(); } + void ContextDestroyed() override { + if (Mode == HeapMojoWrapperMode::kWithContextObserver) + remote_.reset(); + } private: mojo::Remote<Interface> remote_;
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc b/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc index 4ddbad3..5af34d0 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_remote_test.cc
@@ -8,9 +8,12 @@ #include "third_party/blink/renderer/platform/heap/heap_test_utilities.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/heap_observer_list.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { +namespace { + class MockContext final : public GarbageCollected<MockContext>, public ContextLifecycleNotifier { USING_GARBAGE_COLLECTED_MIXIN(MockContext); @@ -59,18 +62,20 @@ mojo::Receiver<sample::blink::Service> receiver_{this}; }; -class RemoteOwner : public GarbageCollected<RemoteOwner> { +template <HeapMojoWrapperMode Mode> +class RemoteOwner : public GarbageCollected<RemoteOwner<Mode>> { public: explicit RemoteOwner(MockContext* context) : remote_(context) {} - HeapMojoRemote<sample::blink::Service>& remote() { return remote_; } + HeapMojoRemote<sample::blink::Service, Mode>& remote() { return remote_; } void Trace(Visitor* visitor) { visitor->Trace(remote_); } - HeapMojoRemote<sample::blink::Service> remote_; + HeapMojoRemote<sample::blink::Service, Mode> remote_; }; -class HeapMojoRemoteTest : public TestSupportingGC { +template <HeapMojoWrapperMode Mode> +class HeapMojoRemoteGCBaseTest : public TestSupportingGC { public: base::RunLoop& run_loop() { return run_loop_; } bool& disconnected() { return disconnected_; } @@ -81,46 +86,96 @@ void SetUp() override { CHECK(!disconnected_); context_ = MakeGarbageCollected<MockContext>(); - owner_ = MakeGarbageCollected<RemoteOwner>(context_); + owner_ = MakeGarbageCollected<RemoteOwner<Mode>>(context_); scoped_refptr<base::NullTaskRunner> null_task_runner = base::MakeRefCounted<base::NullTaskRunner>(); impl_.receiver().Bind( owner_->remote().BindNewPipeAndPassReceiver(null_task_runner)); impl_.receiver().set_disconnect_handler(WTF::Bind( - [](HeapMojoRemoteTest* remote_test) { + [](HeapMojoRemoteGCBaseTest* remote_test) { remote_test->run_loop().Quit(); remote_test->disconnected() = true; }, WTF::Unretained(this))); } - void TearDown() override { - // CHECK(disconnected_); - } ServiceImpl impl_; Persistent<MockContext> context_; - Persistent<RemoteOwner> owner_; + Persistent<RemoteOwner<Mode>> owner_; base::RunLoop run_loop_; bool disconnected_ = false; }; -// Make HeapMojoRemote garbage collected and check that the connection is -// disconnected right after the marking phase. -TEST_F(HeapMojoRemoteTest, ResetsOnGC) { +template <HeapMojoWrapperMode Mode> +class HeapMojoRemoteDestroyContextBaseTest : public TestSupportingGC { + protected: + void SetUp() override { + context_ = MakeGarbageCollected<MockContext>(); + owner_ = MakeGarbageCollected<RemoteOwner<Mode>>(context_); + scoped_refptr<base::NullTaskRunner> null_task_runner = + base::MakeRefCounted<base::NullTaskRunner>(); + impl_.receiver().Bind( + owner_->remote().BindNewPipeAndPassReceiver(null_task_runner)); + } + + ServiceImpl impl_; + Persistent<MockContext> context_; + Persistent<RemoteOwner<Mode>> owner_; +}; + +} // namespace + +class HeapMojoRemoteGCWithContextObserverTest + : public HeapMojoRemoteGCBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoRemoteGCWithoutContextObserverTest + : public HeapMojoRemoteGCBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; +class HeapMojoRemoteDestroyContextWithContextObserverTest + : public HeapMojoRemoteDestroyContextBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoRemoteDestroyContextWithoutContextObserverTest + : public HeapMojoRemoteDestroyContextBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; + +// Make HeapMojoRemote with context observer garbage collected and check that +// the connection is disconnected right after the marking phase. +TEST_F(HeapMojoRemoteGCWithContextObserverTest, ResetsOnGC) { ClearOwner(); EXPECT_FALSE(disconnected()); - PreciselyCollectGarbage(BlinkGC::kConcurrentAndLazySweeping); + PreciselyCollectGarbage(); run_loop().Run(); EXPECT_TRUE(disconnected()); CompleteSweepingIfNeeded(); } -// Destroy the context and check that the connection is disconnected. -TEST_F(HeapMojoRemoteTest, ResetsOnContextDestroyed) { +// Make HeapMojoRemote without context observer garbage collected and check that +// the connection is disconnected right after the marking phase. +TEST_F(HeapMojoRemoteGCWithoutContextObserverTest, ResetsOnGC) { + ClearOwner(); EXPECT_FALSE(disconnected()); - context_->NotifyContextDestroyed(); + PreciselyCollectGarbage(); run_loop().Run(); EXPECT_TRUE(disconnected()); + CompleteSweepingIfNeeded(); +} + +// Destroy the context with context observer and check that the connection is +// disconnected. +TEST_F(HeapMojoRemoteDestroyContextWithContextObserverTest, + ResetsOnContextDestroyed) { + EXPECT_TRUE(owner_->remote().is_bound()); + context_->NotifyContextDestroyed(); + EXPECT_FALSE(owner_->remote().is_bound()); +} + +// Destroy the context without context observer and check that the connection is +// still connected. +TEST_F(HeapMojoRemoteDestroyContextWithoutContextObserverTest, + ResetsOnContextDestroyed) { + EXPECT_TRUE(owner_->remote().is_bound()); + context_->NotifyContextDestroyed(); + EXPECT_TRUE(owner_->remote().is_bound()); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h index bcb0eba4..8479bf54 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set.h
@@ -9,6 +9,7 @@ #include "mojo/public/cpp/bindings/unique_receiver_set.h" #include "third_party/blink/renderer/platform/context_lifecycle_observer.h" #include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { @@ -19,7 +20,9 @@ // context as a mandatory parameter. HeapMojoUniqueReceiverSet resets the mojo // connection when 1) the owner object is garbage-collected or 2) the associated // ExecutionContext is detached. -template <typename Interface, typename Deleter = std::default_delete<Interface>> +template <typename Interface, + typename Deleter = std::default_delete<Interface>, + HeapMojoWrapperMode Mode = HeapMojoWrapperMode::kWithContextObserver> class HeapMojoUniqueReceiverSet { DISALLOW_NEW(); @@ -76,7 +79,10 @@ } // ContextLifecycleObserver methods - void ContextDestroyed() override { receiver_set_.Clear(); } + void ContextDestroyed() override { + if (Mode == HeapMojoWrapperMode::kWithContextObserver) + receiver_set_.Clear(); + } private: mojo::UniqueReceiverSet<Interface, void, Deleter> receiver_set_;
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set_test.cc b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set_test.cc index e0fcb60..5438160 100644 --- a/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set_test.cc +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_unique_receiver_set_test.cc
@@ -11,10 +11,12 @@ #include "third_party/blink/renderer/platform/heap/heap_test_utilities.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/heap_observer_list.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" namespace blink { namespace { + class FakeContextNotifier final : public GarbageCollected<FakeContextNotifier>, public ContextLifecycleNotifier { USING_GARBAGE_COLLECTED_MIXIN(FakeContextNotifier); @@ -46,27 +48,34 @@ HeapObserverList<ContextLifecycleObserver> observers_; }; -class GCOwner : public GarbageCollected<GCOwner> { +template <HeapMojoWrapperMode Mode> +class GCOwner : public GarbageCollected<GCOwner<Mode>> { public: explicit GCOwner(FakeContextNotifier* context) : receiver_set_(context) {} void Trace(Visitor* visitor) { visitor->Trace(receiver_set_); } - HeapMojoUniqueReceiverSet<sample::blink::Service>& receiver_set() { + HeapMojoUniqueReceiverSet<sample::blink::Service, + std::default_delete<sample::blink::Service>, + Mode>& + receiver_set() { return receiver_set_; } private: - HeapMojoUniqueReceiverSet<sample::blink::Service> receiver_set_; + HeapMojoUniqueReceiverSet<sample::blink::Service, + std::default_delete<sample::blink::Service>, + Mode> + receiver_set_; }; -} // namespace -class HeapMojoUniqueReceiverSetTest : public TestSupportingGC { +template <HeapMojoWrapperMode Mode> +class HeapMojoUniqueReceiverSetBaseTest : public TestSupportingGC { public: FakeContextNotifier* context() { return context_; } scoped_refptr<base::NullTaskRunner> task_runner() { return null_task_runner_; } - GCOwner* owner() { return owner_; } + GCOwner<Mode>* owner() { return owner_; } void ClearOwner() { owner_ = nullptr; } @@ -75,22 +84,32 @@ protected: void SetUp() override { context_ = MakeGarbageCollected<FakeContextNotifier>(); - owner_ = MakeGarbageCollected<GCOwner>(context()); + owner_ = MakeGarbageCollected<GCOwner<Mode>>(context()); } void TearDown() override {} Persistent<FakeContextNotifier> context_; - Persistent<GCOwner> owner_; + Persistent<GCOwner<Mode>> owner_; scoped_refptr<base::NullTaskRunner> null_task_runner_ = base::MakeRefCounted<base::NullTaskRunner>(); bool service_deleted_ = false; }; +class HeapMojoUniqueReceiverSetWithContextObserverTest + : public HeapMojoUniqueReceiverSetBaseTest< + HeapMojoWrapperMode::kWithContextObserver> {}; +class HeapMojoUniqueReceiverSetWithoutContextObserverTest + : public HeapMojoUniqueReceiverSetBaseTest< + HeapMojoWrapperMode::kWithoutContextObserver> {}; + +} // namespace + namespace { +template <typename T> class MockService : public sample::blink::Service { public: - explicit MockService(HeapMojoUniqueReceiverSetTest* test) : test_(test) {} + explicit MockService(T* test) : test_(test) {} // Notify the test when the service is deleted by the UniqueReceiverSet. ~MockService() override { test_->MarkServiceDeleted(); } @@ -101,16 +120,17 @@ void GetPort(mojo::PendingReceiver<sample::blink::Port> receiver) override {} private: - HeapMojoUniqueReceiverSetTest* test_; + T* test_; }; } // namespace -// GC the HeapMojoUniqueReceiverSet and verify that the receiver is no longer -// part of the set, and that the service was deleted. -TEST_F(HeapMojoUniqueReceiverSetTest, ResetsOnGC) { +// GC the HeapMojoUniqueReceiverSet with context observer and verify that the +// receiver is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoUniqueReceiverSetWithContextObserverTest, ResetsOnGC) { auto receiver_set = owner()->receiver_set(); - auto service = std::make_unique<MockService>(this); + auto service = std::make_unique< + MockService<HeapMojoUniqueReceiverSetWithContextObserverTest>>(this); auto receiver = mojo::PendingReceiver<sample::blink::Service>( mojo::MessagePipe().handle0); @@ -120,18 +140,63 @@ EXPECT_FALSE(service_deleted_); ClearOwner(); - PreciselyCollectGarbage(BlinkGC::kConcurrentAndLazySweeping); + PreciselyCollectGarbage(); EXPECT_TRUE(service_deleted_); CompleteSweepingIfNeeded(); } -// Destroy the context and verify that the receiver is no longer -// part of the set, and that the service was deleted. -TEST_F(HeapMojoUniqueReceiverSetTest, ResetsOnContextDestroyed) { +// GC the HeapMojoUniqueReceiverSet without context observer and verify that the +// receiver is no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoUniqueReceiverSetWithoutContextObserverTest, ResetsOnGC) { + auto receiver_set = owner()->receiver_set(); + auto service = std::make_unique< + MockService<HeapMojoUniqueReceiverSetWithoutContextObserverTest>>(this); + auto receiver = mojo::PendingReceiver<sample::blink::Service>( + mojo::MessagePipe().handle0); + + mojo::ReceiverId rid = + receiver_set.Add(std::move(service), std::move(receiver), task_runner()); + EXPECT_TRUE(receiver_set.HasReceiver(rid)); + EXPECT_FALSE(service_deleted_); + + ClearOwner(); + PreciselyCollectGarbage(); + + EXPECT_TRUE(service_deleted_); + + CompleteSweepingIfNeeded(); +} + +// Destroy the context with context observer and verify that the receiver is no +// longer part of the set, and that the service was deleted. +TEST_F(HeapMojoUniqueReceiverSetWithContextObserverTest, + ResetsOnContextDestroyed) { HeapMojoUniqueReceiverSet<sample::blink::Service> receiver_set(context()); - auto service = std::make_unique<MockService>(this); + auto service = std::make_unique< + MockService<HeapMojoUniqueReceiverSetWithContextObserverTest>>(this); + auto receiver = mojo::PendingReceiver<sample::blink::Service>( + mojo::MessagePipe().handle0); + + mojo::ReceiverId rid = + receiver_set.Add(std::move(service), std::move(receiver), task_runner()); + EXPECT_TRUE(receiver_set.HasReceiver(rid)); + EXPECT_FALSE(service_deleted_); + + context_->NotifyContextDestroyed(); + + EXPECT_FALSE(receiver_set.HasReceiver(rid)); + EXPECT_TRUE(service_deleted_); +} + +// Destroy the context without context observer and verify that the receiver is +// no longer part of the set, and that the service was deleted. +TEST_F(HeapMojoUniqueReceiverSetWithoutContextObserverTest, + ResetsOnContextDestroyed) { + HeapMojoUniqueReceiverSet<sample::blink::Service> receiver_set(context()); + auto service = std::make_unique< + MockService<HeapMojoUniqueReceiverSetWithoutContextObserverTest>>(this); auto receiver = mojo::PendingReceiver<sample::blink::Service>( mojo::MessagePipe().handle0);
diff --git a/third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h b/third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h new file mode 100644 index 0000000..f59f0e0 --- /dev/null +++ b/third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h
@@ -0,0 +1,25 @@ +// Copyright 2020 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_WRAPPER_MODE_H_ +#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_WRAPPER_MODE_H_ + +namespace blink { + +// A list of modes for HeapMojo wrappers. +// TODO(crbug.com/1058076) This is just a temporary thing to keep the existing +// behavior during the release freeze. +enum class HeapMojoWrapperMode { + // Resets the mojo connection when 1) the owner object is garbage-collected + // and 2) the associated ExecutionContext is detached. + kWithContextObserver, + // Resets the mojo connection when the owner object is garbage-collected. + // But, it will not reset the mojo connection when the associated + // ExecutionContext is detached. + kWithoutContextObserver, +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_HEAP_MOJO_WRAPPER_MODE_H_
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index f4cbd124..30bafb3 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -159,6 +159,10 @@ status: "experimental", }, { + name: "AppCache", + status: "stable", + }, + { // Use an aspect ratio from the HTML attributes even when we use sizing // from CSS. // https://github.com/WICG/intrinsicsize-attribute/issues/16 @@ -377,6 +381,9 @@ status: "stable", }, { + name: "CSSAspectRatioProperty", + }, + { name: "CSSCalcAsInt", status: "test", }, @@ -1357,6 +1364,7 @@ { name: "Portals", status: "test", + origin_trial_feature_name: "Portals", }, { name: "PostAnimationFrame",
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint index 827587d..761f7ca 100644 --- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint +++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -96,12 +96,6 @@ crbug.com/765003 paint/invalidation/compositing/should-not-repaint-composited-opacity.html [ Failure ] crbug.com/765003 compositing/contents-opaque/layer-opacity.html [ Failure ] -# Should allow DecompositeEffect() to upcast to an intermediate isolation group -# that doesn't have a paint chunk. -external/wpt/svg/render/reftests/blending-001.svg [ Failure ] -external/wpt/svg/render/reftests/blending-002.svg [ Failure ] -css3/blending/svg-isolation-add-clipper-text.html [ Failure ] - # Extra layers for non-fast scrolling areas. compositing/overflow/textarea-scroll-touch.html [ Failure ]
diff --git a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item index 009a234..053397dd 100644 --- a/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item +++ b/third_party/blink/web_tests/FlagExpectations/layout-ng-fragment-item
@@ -660,7 +660,6 @@ crbug.com/982194 external/wpt/html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html [ Pass ] crbug.com/982194 external/wpt/html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html [ Pass ] crbug.com/982194 external/wpt/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html [ Pass ] -crbug.com/982194 external/wpt/html/user-activation/activation-hierarchy-parent-manual.sub.tentative.html [ Timeout ] crbug.com/982194 external/wpt/html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html [ Pass Timeout ] crbug.com/982194 external/wpt/infrastructure/assumptions/blank.html [ Failure ] crbug.com/982194 external/wpt/infrastructure/reftest/legacy/reftest_fuzzy_chain_ini.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 14983915..3039965 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -893,8 +893,6 @@ crbug.com/591099 [ Win ] virtual/text-antialias/international/shape-across-elements-simple.html [ Failure ] crbug.com/591099 [ Mac ] virtual/text-antialias/word-space-monospace.html [ Failure ] crbug.com/591099 [ Win ] virtual/text-antialias/word-space-monospace.html [ Failure ] -crbug.com/591099 [ Fuchsia ] editing/selection/4402375.html [ Failure ] -crbug.com/591099 [ Fuchsia ] fast/block/float/centered-float-avoidance-complexity.html [ Failure Timeout ] crbug.com/591099 [ Fuchsia ] fast/block/float/float-in-float-painting.html [ Failure ] crbug.com/591099 [ Fuchsia ] fast/css/clip-zooming.html [ Failure ] crbug.com/591099 [ Fuchsia ] fast/css/nth-child-dynamic.html [ Failure Timeout ] @@ -906,20 +904,11 @@ crbug.com/591099 [ Fuchsia ] fast/layers/opacity-transforms.html [ Failure ] crbug.com/591099 [ Fuchsia ] fast/lists/003.html [ Failure ] crbug.com/591099 [ Fuchsia ] fast/lists/scrolled-marker-paint.html [ Failure ] -crbug.com/591099 [ Fuchsia ] fast/table/border-collapsing/004.html [ Failure ] -crbug.com/591099 [ Fuchsia ] virtual/text-antialias/international/003.html [ Failure Timeout ] crbug.com/591099 [ Fuchsia ] virtual/text-antialias/international/bidi-LDB-2-HTML.html [ Failure ] crbug.com/591099 [ Fuchsia ] virtual/text-antialias/international/bidi-LDB-2-formatting-characters.html [ Failure ] crbug.com/591099 [ Fuchsia ] virtual/text-antialias/international/bidi-neutral-directionality-paragraph-start.html [ Failure ] -crbug.com/591099 [ Fuchsia ] fast/writing-mode/english-lr-text.html [ Failure ] -crbug.com/591099 [ Fuchsia ] tables/mozilla/bugs/bug2479-3.html [ Failure Timeout ] -crbug.com/591099 [ Fuchsia ] tables/mozilla/bugs/bug2479-4.html [ Failure ] -crbug.com/591099 [ Fuchsia ] tables/mozilla/bugs/bug59354.html [ Failure Timeout ] -crbug.com/591099 [ Fuchsia ] tables/mozilla/bugs/bug7342.html [ Failure ] -crbug.com/591099 [ Fuchsia ] tables/mozilla/core/bloomberg.html [ Failure Timeout ] crbug.com/591099 [ Fuchsia ] tables/mozilla_expected_failures/bugs/bug1010.html [ Failure ] crbug.com/591099 [ Fuchsia ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ] -crbug.com/591099 [ Fuchsia ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure ] crbug.com/591099 [ Mac ] css2.1/t1202-counter-09-b.html [ Failure ] crbug.com/591099 [ Mac ] css2.1/t1202-counters-09-b.html [ Failure ] crbug.com/591099 [ Mac ] external/wpt/css/CSS2/text/white-space-bidirectionality-001.xht [ Failure ] @@ -2948,6 +2937,33 @@ crbug.com/947951 [ Win ] external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Pass Timeout ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 [ Mac10.10 ] external/wpt/css/css-text/hyphens/hyphens-manual-013.html [ Failure ] +crbug.com/626703 [ Mac10.10 ] external/wpt/css/css-text/hyphens/hyphens-manual-011.html [ Failure ] +crbug.com/626703 [ Mac10.10 ] external/wpt/css/css-text/hyphens/hyphens-manual-012.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/css/css-text/hyphens/hyphens-auto-010.html [ Failure ] +crbug.com/626703 [ Mac ] external/wpt/css/css-text/hyphens/hyphens-auto-010.html [ Failure ] +crbug.com/626703 [ Win ] external/wpt/css/css-text/hyphens/hyphens-auto-010.html [ Failure ] +crbug.com/626703 [ Linux ] external/wpt/editing/run/caretnavigation.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/editing/run/caretnavigation.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/editing/run/caretnavigation.html [ Timeout ] +crbug.com/626703 [ Linux ] external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Linux ] external/wpt/html/cross-origin-embedder-policy/javascript.https.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/html/cross-origin-embedder-policy/javascript.https.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/html/cross-origin-embedder-policy/javascript.https.html [ Timeout ] +crbug.com/626703 [ Linux ] virtual/omt-worker-fetch/external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Mac ] virtual/omt-worker-fetch/external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Win ] virtual/omt-worker-fetch/external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Linux ] external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Linux ] virtual/omt-worker-fetch/external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Mac ] virtual/omt-worker-fetch/external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Win ] virtual/omt-worker-fetch/external/wpt/workers/shared-worker-parse-error-failure.html [ Timeout ] +crbug.com/626703 [ Linux ] external/wpt/html/cross-origin-embedder-policy/coep-frame-javascript.https.html [ Timeout ] +crbug.com/626703 [ Mac ] external/wpt/html/cross-origin-embedder-policy/coep-frame-javascript.https.html [ Timeout ] +crbug.com/626703 [ Win ] external/wpt/html/cross-origin-embedder-policy/coep-frame-javascript.https.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ] crbug.com/626703 [ Mac ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-text/line-break/line-break-strict-015.xht [ Failure ] @@ -5215,8 +5231,6 @@ # User Activation crbug.com/736415 external/wpt/html/user-activation/activation-api-iframe.tentative.html [ Failure ] -crbug.com/978620 external/wpt/html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html [ Timeout ] -crbug.com/978620 external/wpt/html/user-activation/activation-hierarchy-sameorigin-parent-manual.html [ Timeout ] # Sheriff 2018-07-05 crbug.com/860731 fast/scroll-snap/animate-fling-to-snap-points.html [ Failure Pass ] @@ -5555,6 +5569,8 @@ crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-canvas-context.html [ Pass Failure ] crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html [ Pass Failure ] crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html [ Pass Failure ] +crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-whitespace.html [ Pass Failure ] +crbug.com/1062984 virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace.html [ Pass Failure ] # Sheriff 2019-03-01 crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-htmlimports.js [ Pass Failure ] @@ -6642,210 +6658,6 @@ crbug.com/1059123 http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope.html [ Pass Failure ] crbug.com/1059123 virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/animationworklet-origin-trial-interfaces-worklet-scope.html [ Pass Failure ] -# Sheriff 2020-03-10 -crbug.com/1060175 [ Mac ] accessibility/scroll-div-horiz-sends-notification.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] editing/pasteboard/drag-selected-image-to-contenteditable.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/html/semantics/interactive-elements/the-dialog-element/inert-node-is-unfocusable.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/svg/interact/scripted/composed.window.svg [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/web-animations/interfaces/Animation/style-change-events.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/dom/MutationObserver/mutation-callback-dead-context-crash.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/dom/title-text-property-3.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/dom/title-text-property-assigning-empty-string.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/forms/calendar-picker/week-picker-appearance.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/forms/checkbox/checkbox-focus-by-mouse.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/forms/mailto/advanced-get.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/forms/mailto/advanced-put.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/frames/sandboxed-iframe-autofocus-denied.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/history/change-viewport-height-in-onpopstate.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/loader/scroll-restore-on-back-ordering.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/loader/stateobjects/pushstate-clears-forward-history.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/preloader/is-preloaded-after-load.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fast/workers/worker-exception-during-navigation.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] fullscreen/full-screen-iframe-allowed-video.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] html/details_summary/details-remove-summary-1-and-click.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] http/tests/asmjs/asm-warnings.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] http/tests/loading/bad-scheme-subframe.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] http/tests/security/isolatedWorld/isolated-world-eval-csp.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] http/tests/security/promise-access-control-allow.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] http/tests/xmlhttprequest/cross-origin-no-credential-prompt.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] media/audio-no-installed-engines.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] plugins/focus-change-1-no-change.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] plugins/mouse-click-iframe-to-plugin.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] plugins/plugin-persists.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] plugins/plugin-remove-subframe.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] plugins/refcount-leaks.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-click.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-key-enter.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-key-space.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-webkitdirectory-click.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-webkitdirectory-key-enter.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/file/file-input-webkitdirectory-key-space.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/form-submission-create-crash.xhtml [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/mailto/advanced-put.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/omt-worker-fetch/fast/workers/worker-exception-during-navigation.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/threaded-prefer-compositing/fast/scrolling/percentage-mousewheel-scroll.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/web-components-v0-disabled/fast/dom/MutationObserver/mutation-callback-dead-context-crash.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/web-components-v0-disabled/fast/dom/title-text-property-2.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] virtual/web-components-v0-disabled/fast/dom/title-text-property-3.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Mac ] wpt_internal/webxr/xrSession_dataProviderDisconnect_inline.https.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Win ] external/wpt/animation-worklet/worklet-animation-pause-resume.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/animation-worklet/worklet-animation-with-non-ascii-name.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/abspos/abspos-containing-block-initial-004d.xht [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/cascade-import/cascade-import-dynamic-003.xht [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/floats-clear/clear-applies-to-012.xht [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/floats/float-nowrap-5.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-table.xht [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-003l.xht [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/auto-block-size/negative.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/baseline/child-baseline.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/baseline/flex-baseline.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/child-constraints/available-block-size-htb-vrl.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/child-constraints/fixed-block-size-vrl.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/child-constraints/percentage-size-quirks-mode.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/constraints-data.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/constraints/fixed-block-size-block-none.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/constraints/fixed-block-size-percentage.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/constraints/fixed-inline-size-absolute-left-right.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/edges/padding-vrl.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/fallback-intrinsic-sizes/bad-return.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/fallback-layout/bad-return.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/fallback-layout/error.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/fallback-layout/unresolved-promise.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/intrinsic-sizes/child-replaced-percentage-02.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/intrinsic-sizes/child-size-03.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/intrinsic-sizes/negative-max.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/layout-child/inlines.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/layout-child/text-01.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/position-fragment/vrl-rtl.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/css/css-layout-api/style-map-multi.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/html/rendering/non-replaced-elements/tables/table-width-s.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/infrastructure/testdriver/actions/multiTouchPointsTwoTouchStarts.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/native-file-system/native_FileSystemWritableFileStream-manual.https.tentative.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/shadow-dom/layout-slot-no-longer-assigned.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/shadow-dom/untriaged/shadow-trees/nested-shadow-trees/nested_tree_reftest.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/svg/linking/reftests/use-hidden-attr-change.html [ Pass Failure ] -crbug.com/1060175 [ Win ] external/wpt/web-animations/interfaces/Animation/style-change-events.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/block/basic/adding-near-anonymous-block.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/block/basic/quirk-percent-height-table-cell.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/block/positioning/vertical-lr/005.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/body-propagation/background-image/009-xhtml.xhtml [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/css/namespaces/namespaces-invalid-at.xml [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/dom/outerText.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/dom/scroll-reveal-left-overflow.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/events/touch/gesture/gesture-tap-frame-overlap.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/forms/button/button-enter-click.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/lists/007.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/lists/list-marker-padding-overflow-hidden.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/mediastream/MediaStream-onactive-oninactive.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fast/scrolling/events/scrollend-event-fired-to-window.html [ Pass Failure ] -crbug.com/1060175 [ Win ] fullscreen/full-screen-iframe-allowed-video.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/accessibility/slow-document-load.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/css/css-resources-referrer-srcdoc.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/css/object-fit-delayed-img-svg.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/css/pending-stylesheet-offset-width.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/csspaint/entire-canvas-visible-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/csspaint/hidpi/geometry-with-hidpi-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/csspaint/line-dash-scale-with-page-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/csspaint/shadow-scale-with-page-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/csspaint/transform-with-page-zoom-002.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/devtools/portals/portals-elements-nesting-after-adoption.js [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/images/restyle-decode-error.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/inspector-protocol/target/target-expose-devtools-protocol.js [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/navigation/replacestate-base-illegal.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/origin_trials/feature-policy-reporting/feature-policy-reporting-no-trial.php [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/preload/warning/request-method.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/contentSecurityPolicy/object-src-none-allowed.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/contentSecurityPolicy/source-list-parsing-08.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/cross-origin-xsl-BLOCKED.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/local-image-from-remote-whitelisted.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/mixedContent/insecure-css-in-iframe.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/mixedContent/insecure-image-in-main-frame-allowed.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/mixedContent/insecure-script-in-iframe.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/referrer-policy-conflicting-policies-image-set.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/security/referrer-policy-conflicting-policies.html [ Pass Failure ] -crbug.com/1060175 [ Win ] http/tests/serviceworker/fetch-script-onerror.html [ Pass Failure ] -crbug.com/1060175 [ Win ] ietestcenter/css3/bordersbackgrounds/background-color-border-box.htm [ Pass Failure ] -crbug.com/1060175 [ Win ] ietestcenter/css3/bordersbackgrounds/background_repeat_space_content_box.htm [ Pass Failure ] -crbug.com/1060175 [ Win ] inspector-protocol/input/dispatchMouseEvent-emulated-viewport.js [ Pass Failure ] -crbug.com/1060175 [ Win ] media/video-persistence.html [ Pass Failure ] -crbug.com/1060175 [ Win ] media/video-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/audio-service/http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/audio-service/media/picture-in-picture/v2/detached-iframe.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/audio-service/media/video-persistence.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/geometry-border-image-001.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/geometry-border-image-004.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/invalid-image-constructor-error.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/parse-input-arguments-015.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/registered-property-interpolation-003.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/external/wpt/css/css-paint-api/registered-property-value-010.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/fast/backgrounds/mask-composite.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/fast/forms/date/date-appearance-basic.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/cascade/fast/forms/month/month-appearance-basic.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/compositor_threaded_scrollbar_scrolling/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/gpu-rasterization/images/feature-policy-oversized-images-edge-cases.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/gpu-rasterization/images/feature-policy-oversized-images-styles.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/gpu/fast/canvas/OffscreenCanvas-2d-pattern.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/custom-property-animation-on-main-thread.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-background-image-002.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-border-image-001.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-border-image-004.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/geometry-border-image-005.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-paint-error.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/non-registered-property-value.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/overdraw.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-composite.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-image.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-paths.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/parse-input-arguments-002.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/parse-input-arguments-005.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/parse-input-arguments-009.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/parse-input-arguments-012.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/parse-input-arguments-015.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-001.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-003.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-004.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-007.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-008.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-interpolation-009.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-invalidation-002.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-stylemap.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-007.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-009.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-011.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-013.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-014.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-017.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/registered-property-value-018.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/setTransform-002.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/setTransform-003.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/setTransform-004.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/valid-image-after-load.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/valid-image-before-load.https.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/http/tests/csspaint/border-color.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/off-main-thread-css-paint/http/tests/csspaint/line-dash-scale-with-page-zoom.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/threaded/fast/scroll-snap/snaps-after-scrollbar-scrolling.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/web-components-v0-disabled/fast/dom/HTMLDocument/set-focus-on-valid-element.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/web-components-v0-disabled/html/sections/remove-body-during-body-replacement2.html [ Pass Failure ] -crbug.com/1060175 [ Win ] virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Pass Failure ] -crbug.com/1060175 [ Win ] wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.html [ Pass Failure ] -crbug.com/1060175 [ Win ] wpt_internal/storage/estimate-usage-details-filesystem.https.tentative.any.worker.html [ Pass Failure ] -crbug.com/1060175 [ Win ] wpt_internal/virtual-scroller/large-child-comment.html [ Pass Failure ] -crbug.com/1060175 [ Win ] wpt_internal/webxr/xr_view_projection_detached.https.html [ Pass Failure ] - # Temporarily disabled to land https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2101972 crbug.com/174309 http/tests/devtools/quick-open/command-menu.js [ Pass Failure ] @@ -6853,19 +6665,6 @@ crbug.com/1058785 external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-shared-worker.https.html [ Timeout ] # Sheriff 2020-03-12 -crbug.com/1060175 [ Mac ] css3/calc/simple-calcs-prefixed.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] css3/calc/simple-calcs.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] editing/selection/programmatic-selection-on-mac-is-directionless.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] fast/events/platform-wheelevent-paging-x-in-scrolling-div.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] fast/events/platform-wheelevent-paging-y-in-scrolling-div.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] http/tests/websocket/multiple-connections-throttled.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/controls-refresh/datetimelocal-picker/datetimelocal-month-switcher-buttons-invalid.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/calendar-picker/week-picker-key-operations.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-ax-value-changed-notification.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/form-controls-refresh-disabled/fast/forms/form-control-with-state-eager-tracing-crashTest.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/threaded/printing/page-count-with-one-word.html [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/web-components-v0-disabled/fast/dom/SelectorAPI/resig-SelectorsAPI-test.xhtml [ Pass Timeout ] -crbug.com/1060175 [ Mac ] virtual/web-components-v0-disabled/fast/dom/zoom-scroll-page-test.html [ Pass Timeout ] crbug.com/1061131 [ Linux ] virtual/threaded-no-composited-antialiasing/animations/animationworklet/playback-rate-scroll-timeline-accelerated-property.html [ Pass Crash ] crbug.com/1061131 [ Linux ] virtual/threaded-no-composited-antialiasing/animations/animationworklet/scroll-timeline-non-scrollable.html [ Pass Crash ] crbug.com/1061131 [ Linux ] virtual/threaded/external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-root-scroller.https.html [ Pass Crash ] @@ -6894,8 +6693,6 @@ # Sheriff 2020-03-16 crbug.com/1061029 [ Win ] external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting.https.html [ Pass Failure ] crbug.com/1061029 [ Mac ] external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting.https.html [ Pass Failure ] -crbug.com/1060175 [ Linux ] http/tests/security/promise-access-control-allow.html [ Pass Failure Timeout ] -crbug.com/1060175 [ Win ] http/tests/security/promise-access-control-allow.html [ Pass Failure Timeout ] ### external/wpt/pointerevents/ crbug.com/1063163 external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html [ Failure ]
diff --git a/third_party/blink/web_tests/WPTOverrideExpectations b/third_party/blink/web_tests/WPTOverrideExpectations index 5c0ecae3..1adb6925 100644 --- a/third_party/blink/web_tests/WPTOverrideExpectations +++ b/third_party/blink/web_tests/WPTOverrideExpectations
@@ -13,9 +13,150 @@ # https://github.com/web-platform-tests/wpt/blob/master/bluetooth/README.md#web-bluetooth-testing external/wpt/bluetooth/* [ Skip ] -# These tests have subtest failures on WPT only. Normally we'd create baseline files for these -# but there's no good way to do that for WPTRunner only, so we mark all these tests with -# expected status PASS but include the "wpt_subtest_failure" annotation. +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-01.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-02.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-03.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-04.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-05.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-06.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-08.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-09.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-10.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-01.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-02.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-05.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-06.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-07.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-08.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-14.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-17.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-18.tentative.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-19.html [ Failure ] +crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-23.html [ Failure ] +crbug.com/1030387 external/wpt/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html [ Pass Failure ] +crbug.com/1030388 external/wpt/css/CSS2/text/bidi-span-001.html [ Failure ] +crbug.com/1030390 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html [ Failure Pass ] # wpt_subtest_failure +crbug.com/1030390 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html [ Failure Pass ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_input_source_recreation.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_input_sources_change.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset_inline.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_session_select.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/events_session_select_subframe.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/exclusive_requestFrame_nolayer.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/getInputPose_handedness.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_states.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/webxr_availability.http.sub.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/webxr_feature_policy.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrBoundedReferenceSpace_updates.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_disconnect_ends.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_immersive_unsupported.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_inline.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_no_mode.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_requiredFeatures_unknown.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrFrame_getPose.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrFrame_getViewerPose_getPose.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrFrame_lifetime.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrFrame_session_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrInputSource_add_remove.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrInputSource_emulatedPosition.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrInputSource_profiles.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrInputSource_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrPose_transform_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffset.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrRigidTransform_constructor.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrRigidTransform_inverse.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrRigidTransform_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_cancelAnimationFrame.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_end.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_features_deviceSupport.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_input_events_end.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestReferenceSpace.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_viewer_availability.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_viewer_referenceSpace.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrSession_visibilityState.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrView_eyes.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrView_match.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrView_oneframeupdate.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrView_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrViewerPose_views_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrViewport_valid.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_constructor.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https.html [ Failure ] # wpt_subtest_failure +crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_viewports.https.html [ Failure ] # wpt_subtest_failure +external/wpt/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm [ Pass Failure ] +external/wpt/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm [ Pass Failure ] +external/wpt/2dcontext/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html [ Pass Failure ] +external/wpt/BackgroundSync/periodicsync.https.window.html [ Failure ] +external/wpt/IndexedDB/idbfactory_open10.htm [ Pass ] # wpt_subtest_failure +external/wpt/IndexedDB/idbindex-rename-abort.html [ Failure ] +external/wpt/IndexedDB/idbobjectstore-rename-abort.html [ Pass ] # wpt_subtest_failure +external/wpt/IndexedDB/keypath-exceptions.htm [ Pass Failure ] +external/wpt/IndexedDB/nested-cloning-large.html [ Pass Failure ] +external/wpt/IndexedDB/request-event-ordering.html [ Pass Failure ] +external/wpt/IndexedDB/structured-clone.any.html [ Pass Failure ] +external/wpt/IndexedDB/transaction-abort-generator-revert.html [ Pass ] # wpt_subtest_failure +external/wpt/PeriodicBackgroundSync/periodicsync.https.window.html [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1-1000 [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1001-2000 [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?2001-3000 [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?3001-last [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1001-2000 [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?2001-3000 [ Pass Failure ] +external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?3001-last [ Pass Failure ] +external/wpt/ambient-light/AmbientLightSensor-iframe-access.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/animate-multiple-effects-on-different-targets-via-main-thread.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/multiple-effects-on-same-target-driven-by-individual-local-time.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/playback-rate.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/worklet-animation-creation.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/worklet-animation-with-effects-from-different-frames.https.html [ Pass ] # wpt_subtest_failure +external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-and-display-none.https.html [ Pass Failure ] +external/wpt/background-fetch/abort.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/background-fetch/fetch-uploads.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/background-fetch/fetch.https.window.html [ Pass Failure ] +external/wpt/background-fetch/get-ids.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/background-fetch/get.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/background-fetch/match.https.window.html [ Crash Pass ] # wpt_subtest_failure +external/wpt/background-fetch/mixed-content-and-allowed-schemes.https.window.html [ Pass Crash ] # wpt_subtest_failure +external/wpt/background-fetch/port-blocking.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/background-fetch/update-ui.https.window.html [ Pass ] # wpt_subtest_failure +external/wpt/battery-status/battery-iframe.https.html [ Failure ] +external/wpt/beacon/headers/header-referrer-no-referrer-when-downgrade.https.html [ Failure Pass ] +external/wpt/clear-site-data/executionContexts.sub.html [ Timeout ] # wpt_subtest_failure external/wpt/client-hints/accept-ch-cache-revalidation.https.html [ Pass ] # wpt_subtest_failure external/wpt/client-hints/accept-ch-feature-policy-navigation.https.html [ Pass ] # wpt_subtest_failure external/wpt/client-hints/accept-ch-no-feature-policy-navigation.https.html [ Pass ] # wpt_subtest_failure @@ -25,42 +166,931 @@ external/wpt/client-hints/accept-ch-stickiness/http-equiv-same-origin-navigation.https.html [ Pass ] # wpt_subtest_failure external/wpt/client-hints/accept-ch-stickiness/same-origin-iframe.https.html [ Pass ] # wpt_subtest_failure external/wpt/client-hints/accept-ch-stickiness/same-origin-navigation.https.html [ Pass ] # wpt_subtest_failure +external/wpt/client-hints/sec-ch-ua.https.html [ Pass ] # wpt_subtest_failure +external/wpt/compat/webkit-box-rtl-flex.html [ Failure ] +external/wpt/compat/webkit-text-fill-color-property-002.html [ Pass Failure ] +external/wpt/contacts/contacts-select.https.window.html [ Failure ] # wpt_subtest_failure +external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Pass Failure ] +external/wpt/content-security-policy/object-src/object-src-no-url-allowed.html [ Pass Failure ] +external/wpt/content-security-policy/plugin-types/plugintypes-nourl-allowed.html [ Pass Failure ] external/wpt/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html [ Pass ] # wpt_subtest_failure external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html [ Pass ] # wpt_subtest_failure external/wpt/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/content-security-policy/script-src/script-src-strict_dynamic_hashes.html [ Failure ] +external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/content-security-policy/securitypolicyviolation/inside-dedicated-worker.html [ Timeout ] # wpt_subtest_failure +external/wpt/content-security-policy/securitypolicyviolation/inside-service-worker.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/content-security-policy/securitypolicyviolation/inside-shared-worker.html [ Timeout ] # wpt_subtest_failure +external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/content-security-policy/securitypolicyviolation/targeting.html [ Timeout ] # wpt_subtest_failure +external/wpt/content-security-policy/worker-src/service-none.https.sub.html [ Pass Failure ] +external/wpt/cookie-store/cookieStore_delete_basic.tentative.https.any.html [ Pass Failure ] +external/wpt/cookie-store/cookieStore_subscribe_arguments.tentative.https.any.html [ Failure Pass ] external/wpt/cookies/domain/domain-attribute-missing.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/cookies/samesite-none-secure/cookies-without-samesite-must-be-secure.https.tentative.html [ Pass ] # wpt_subtest_failure external/wpt/cookies/samesite/fetch.https.html [ Pass ] # wpt_subtest_failure +external/wpt/cookies/samesite/form-get-blank-reload.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/cookies/samesite/form-post-blank-reload.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/cookies/samesite/form-post-blank.https.html [ Failure Pass ] # wpt_subtest_failure external/wpt/cookies/samesite/iframe-reload.https.html [ Pass ] # wpt_subtest_failure external/wpt/cookies/samesite/iframe.https.html [ Pass ] # wpt_subtest_failure external/wpt/cookies/samesite/img.https.html [ Pass ] # wpt_subtest_failure external/wpt/cookies/samesite/setcookie-lax.https.html [ Pass ] # wpt_subtest_failure +external/wpt/cookies/samesite/window-open-reload.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/CSS2/floats-clear/floats-143.xht [ Failure ] +external/wpt/css/CSS2/floats/float-nowrap-2.html [ Failure ] +external/wpt/css/CSS2/floats/float-nowrap-3-ref.html [ Pass Crash Failure ] +external/wpt/css/CSS2/floats/float-nowrap-4.html [ Pass Crash Failure ] +external/wpt/css/CSS2/linebox/vertical-align-baseline-003.xht [ Failure ] +external/wpt/css/CSS2/normal-flow/block-in-inline-remove-002.xht [ Failure ] +external/wpt/css/CSS2/normal-flow/block-in-inline-remove-004.xht [ Failure ] +external/wpt/css/CSS2/normal-flow/min-width-079.xht [ Pass Failure ] +external/wpt/css/CSS2/text/white-space-bidirectionality-001.xht [ Pass Failure ] +external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-overflow-hidden-and-border-radius.html [ Pass Failure ] +external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-element-overflow-scroll.html [ Failure ] +external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-border-radius.html [ Pass Failure ] +external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html [ Pass Failure ] +external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-video.html [ Pass Failure ] +external/wpt/css/css-animations/CSSAnimation-effect.tentative.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/css/css-animations/CSSAnimation-pausing.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-animations/CSSAnimation-ready.tentative.html [ Failure Pass ] +external/wpt/css/css-animations/CSSPseudoElement-getAnimations.tentative.html [ Failure ] +external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-animations/animationevent-marker-pseudoelement.html [ Timeout ] # wpt_subtest_failure +external/wpt/css/css-animations/event-dispatch.tentative.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/css/css-backgrounds/background-size/vector/background-size-vector-024.html [ Pass Failure ] +external/wpt/css/css-box/parsing/min-height-invalid.html [ Failure ] +external/wpt/css/css-box/parsing/min-width-invalid.html [ Failure ] +external/wpt/css/css-color-adjust/parsing/color-scheme-computed.tentative.html [ Failure ] +external/wpt/css/css-color/t422-rgba-onscreen-multiple-boxes-c.xht [ Pass Failure ] +external/wpt/css/css-color/t425-hsla-onscreen-b.xht [ Pass Failure ] +external/wpt/css/css-color/t425-hsla-onscreen-multiple-boxes-c.xht [ Pass Failure ] +external/wpt/css/css-contain/contain-paint-008.html [ Failure ] +external/wpt/css/css-contain/contain-size-002.html [ Failure ] +external/wpt/css/css-contain/contain-size-003.html [ Failure ] +external/wpt/css/css-content/quotes-006.html [ Pass Failure ] +external/wpt/css/css-content/quotes-007.html [ Pass Failure ] +external/wpt/css/css-content/quotes-009.html [ Pass Failure ] +external/wpt/css/css-content/quotes-012.html [ Pass Failure ] +external/wpt/css/css-content/quotes-014.html [ Pass Failure ] +external/wpt/css/css-display/display-contents-before-after-001.html [ Failure ] +external/wpt/css/css-display/display-contents-before-after-002.html [ Failure ] +external/wpt/css/css-display/display-contents-before-after-003.html [ Failure ] +external/wpt/css/css-display/display-contents-shadow-dom-1.html [ Failure ] +external/wpt/css/css-display/display-contents-td-001.html [ Failure ] +external/wpt/css/css-display/display-contents-unusual-html-elements-none.html [ Failure ] +external/wpt/css/css-flexbox/align-items-baseline-overflow-non-visible.html [ Failure ] +external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-basis-0percent.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-shorthand-number.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-flexbox/hittest-overlapping-order.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-flexbox/negative-margins-001.html [ Pass Failure ] +external/wpt/css/css-flexbox/select-element-zero-height-001.html [ Pass Failure ] +external/wpt/css/css-flexbox/select-element-zero-height-002.html [ Pass Failure ] +external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html [ Pass Failure ] +external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap.html [ Pass Failure ] +external/wpt/css/css-fonts/font-display/font-display-change.html [ Failure ] +external/wpt/css/css-fonts/font-display/font-display-preload.html [ Failure ] +external/wpt/css/css-fonts/font-display/font-display.html [ Failure ] +external/wpt/css/css-fonts/font-family-name-025.html [ Pass Failure ] +external/wpt/css/css-fonts/font-kerning-02.html [ Pass Failure ] +external/wpt/css/css-fonts/font-variant-ligatures-11.html [ Pass Failure ] +external/wpt/css/css-fonts/font-variant-position-01.html [ Pass Failure ] # overwrites fail +external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html [ Pass Failure ] +external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html [ Pass Failure ] +external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html [ Pass Failure ] +external/wpt/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-fonts/quoted-generic-ignored.html [ Failure ] +external/wpt/css/css-fonts/standard-font-family.html [ Pass Failure ] +external/wpt/css/css-fonts/variations/font-opentype-collections.html [ Pass Failure ] +external/wpt/css/css-fonts/variations/font-style-interpolation.html [ Timeout ] # wpt_subtest_failure +external/wpt/css/css-grid/grid-model/grid-button-001.html [ Failure Pass ] +external/wpt/css/css-grid/grid-model/grid-container-ignores-first-letter-002.html [ Pass Failure ] # overwrites fail +external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-images/inheritance.html [ Failure Pass ] +external/wpt/css/css-layout-api/fallback-intrinsic-sizes/constructor-error.https.html [ Pass Failure ] +external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html [ Pass Failure ] +external/wpt/css/css-lists/content-property/marker-text-matches-armenian.html [ Pass Failure ] +external/wpt/css/css-lists/content-property/marker-text-matches-georgian.html [ Pass Failure ] +external/wpt/css/css-lists/content-property/marker-text-matches-lower-greek.html [ Failure ] +external/wpt/css/css-lists/content-property/marker-text-matches-upper-latin.html [ Pass Failure ] +external/wpt/css/css-logical/animation-001.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-masking/clip-path-svg-content/clip-path-recursion-002.svg [ Pass Failure ] +external/wpt/css/css-masking/clip-path/clip-path-inline-001.html [ Failure ] +external/wpt/css/css-masking/clip-path/clip-path-inline-002.html [ Failure ] +external/wpt/css/css-masking/clip-path/clip-path-inline-003.html [ Failure ] +external/wpt/css/css-masking/mask-svg-content/mask-text-001.svg [ Failure ] +external/wpt/css/css-multicol/multicol-fill-auto-block-children-002.xht [ Failure ] +external/wpt/css/css-multicol/multicol-span-all-list-item-001.html [ Pass Failure ] +external/wpt/css/css-multicol/multicol-span-all-list-item-002.html [ Pass Failure ] +external/wpt/css/css-overflow/logical-overflow-001.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-overflow/overflow-codependent-scrollbars.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-paint-api/background-image-alpha.https.html [ Pass Failure ] +external/wpt/css/css-paint-api/color-custom-property-animation.https.html [ Pass Failure ] +external/wpt/css/css-paint-api/registered-property-value-007.https.html [ Failure ] +external/wpt/css/css-position/position-sticky-offset-overflow.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-position/position-sticky-parsing.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-properties-values-api/register-property-syntax-parsing.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-properties-values-api/registered-property-initial.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-properties-values-api/self-utils.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-properties-values-api/typedom.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-pseudo/first-letter-002.html [ Failure ] +external/wpt/css/css-pseudo/first-letter-003.html [ Failure ] +external/wpt/css/css-pseudo/first-letter-and-whitespace.html [ Failure ] +external/wpt/css/css-pseudo/selection-text-shadow-016.html [ Pass Failure ] +external/wpt/css/css-scroll-snap/input/keyboard.html [ Pass Failure ] +external/wpt/css/css-scroll-snap/parsing/scroll-padding-block-computed.html [ Failure ] +external/wpt/css/css-scroll-snap/parsing/scroll-padding-block-valid.html [ Failure ] +external/wpt/css/css-scroll-snap/parsing/scroll-padding-inline-computed.html [ Failure ] +external/wpt/css/css-scroll-snap/parsing/scroll-padding-inline-valid.html [ Failure ] +external/wpt/css/css-scroll-snap/snap-to-visible-areas.html [ Failure ] external/wpt/css/css-shapes/shape-outside/values/shape-margin-001.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-004.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-005.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-005.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-003.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-shapes/shape-outside/values/shape-outside-polygon-004.html [ Failure Pass ] # wpt_subtest_failure external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-syntax/input-preprocessing.html [ Failure Pass ] +external/wpt/css/css-tables/border-spacing-included-in-sizes-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-003.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-004.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/table-model-fixup-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-col-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-col-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-col-003.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-col-004-dynamic.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-col-005.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-colspan-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-colspan-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-rowcol-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-tables/visibility-collapse-rowcol-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-text/hyphens/hyphens-auto-001.html [ Pass Failure ] +external/wpt/css/css-text/hyphens/hyphens-span-002.html [ Pass Failure ] +external/wpt/css/css-text/i18n/css3-text-line-break-baspglwj-094.html [ Failure ] +external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/line-breaking/line-breaking-021.html [ Pass Failure ] +external/wpt/css/css-text/line-breaking/line-breaking-atomic-008.html [ Pass Failure ] # overwrites fail +external/wpt/css/css-text/line-breaking/line-breaking-replaced-005.html [ Pass Failure ] # overwrites fail +external/wpt/css/css-text/line-breaking/line-breaking-replaced-006.html [ Pass Failure ] # overwrites fail external/wpt/css/css-text/parsing/hyphens-computed.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/parsing/hyphens-valid.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/tab-size/tab-size.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/text-align/text-align-justify-004.html [ Pass Failure ] +external/wpt/css/css-text/text-transform/text-transform-shaping-001.html [ Pass Failure ] +external/wpt/css/css-text/text-transform/text-transform-shaping-002.html [ Pass Failure ] +external/wpt/css/css-text/text-transform/text-transform-shaping-003.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-001.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-002.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-003.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-004.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-005.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-006.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-007.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-008.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-00B.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-00C.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-00E.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-00F.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-010.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-011.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-012.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-013.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-014.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-015.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-016.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-017.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-018.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-019.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01A.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01B.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01C.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01D.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01E.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-01F.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-07F.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-080.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-081.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-082.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-083.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-084.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-085.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-086.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-087.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-088.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-089.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08A.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08B.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08C.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08D.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08E.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-08F.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-090.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-091.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-092.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-093.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-094.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-095.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-096.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-097.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-098.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-099.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09A.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09B.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09C.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09D.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09E.html [ Pass Failure ] +external/wpt/css/css-text/white-space/control-chars-09F.html [ Pass Failure ] +external/wpt/css/css-text/white-space/pre-wrap-018.html [ Pass Failure ] +external/wpt/css/css-text/white-space/seg-break-transformation-004.html [ Pass ] # wpt_subtest_failure external/wpt/css/css-text/white-space/trailing-space-position-001.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/white-space/white-space-collapse-002.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-text/word-break/word-break-break-all-004.html [ Pass Failure ] +external/wpt/css/css-text/word-break/word-break-keep-all-005.html [ Pass Failure ] +external/wpt/css/css-text/word-break/word-break-keep-all-006.html [ Pass Failure ] +external/wpt/css/css-text/word-break/word-break-keep-all-007.html [ Pass Failure ] +external/wpt/css/css-text/word-break/word-break-keep-all-008.html [ Pass Failure ] +external/wpt/css/css-text/word-break/word-break-normal-km-000.html [ Pass Failure ] +external/wpt/css/css-transforms/transform-inline-001.html [ Pass Failure ] +external/wpt/css/css-transitions/CSSPseudoElement-getAnimations.tentative.html [ Failure ] +external/wpt/css/css-transitions/Element-getAnimations.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-typed-om/interfaces.html [ Failure ] +external/wpt/css/css-typed-om/the-stylepropertymap/computed/get-auto-min-size.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/css-ui/appearance-textfield-001.html [ Pass Failure ] +external/wpt/css/css-ui/outline-006.html [ Pass Failure ] +external/wpt/css/css-ui/text-overflow-016.html [ Failure ] +external/wpt/css/css-ui/text-overflow-027.html [ Pass Failure ] +external/wpt/css/css-ui/text-overflow-028.html [ Failure ] +external/wpt/css/css-ui/webkit-appearance-textfield-001.html [ Pass Failure ] +external/wpt/css/css-values/calc-positive-fraction-001.html [ Failure ] +external/wpt/css/css-values/lh-rlh-on-root-001.html [ Pass ] # wpt_subtest_failure external/wpt/css/css-values/minmax-integer-computed.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-variables/variable-presentation-attribute.html [ Pass ] # wpt_subtest_failure +external/wpt/css/css-writing-modes/bidi-embed-002.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-embed-011.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-isolate-002.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-isolate-011.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-normal-011.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-override-006.html [ Pass Failure ] +external/wpt/css/css-writing-modes/bidi-plaintext-001.html [ Pass Failure ] +external/wpt/css/css-writing-modes/box-offsets-rel-pos-vlr-005.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/box-offsets-rel-pos-vrl-004.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/mongolian-orientation-002.html [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vlr-008.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vlr-020.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-008.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-013.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-020.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-vlr-in-htb-020.xht [ Pass Failure ] +external/wpt/css/css-writing-modes/sizing-orthog-vrl-in-htb-020.xht [ Pass Failure ] +external/wpt/css/cssom-view/MediaQueryList-addListener-handleEvent.html [ Pass Failure ] +external/wpt/css/cssom-view/interfaces.html [ Failure ] +external/wpt/css/cssom-view/offsetTopLeft-trailing-space-inline.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Failure Timeout ] +external/wpt/css/cssom/CSSStyleSheet-constructable-disallow-import.tentative.html [ Failure ] # wpt_subtest_failure +external/wpt/css/cssom/CSSStyleSheet-constructable.html [ Pass Failure ] +external/wpt/css/cssom/getComputedStyle-width-scroll.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/css/cssom/interfaces.html [ Failure ] +external/wpt/css/filter-effects/backdrop-filter-basic-opacity-2.html [ Pass Failure ] +external/wpt/css/filter-effects/backdrop-filter-plus-filter.html [ Failure ] +external/wpt/css/filter-effects/backdrop-filter-reference-filter.html [ Failure ] +external/wpt/css/filter-effects/css-filters-animation-blur.html [ Pass Failure ] +external/wpt/css/filter-effects/css-filters-animation-combined-001.html [ Pass Failure ] +external/wpt/css/filter-effects/css-filters-animation-opacity.html [ Failure ] +external/wpt/css/filter-effects/interfaces.any.html [ Failure ] +external/wpt/css/mediaqueries/test_media_queries.html [ Failure ] +external/wpt/css/selectors/remove-hovered-element.html [ Timeout ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html [ Pass Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html [ Pass Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html [ Pass Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-001.html [ Pass Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-002.html [ Pass Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html [ Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/remove-from-split-inline-2.html [ Failure ] +external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/remove-from-split-inline-4.html [ Failure ] external/wpt/custom-elements/Document-createElement.html [ Pass ] # wpt_subtest_failure external/wpt/custom-elements/Document-createElementNS.html [ Pass ] # wpt_subtest_failure +external/wpt/document-policy/required-policy/separate-document-policies.html [ Pass Failure ] +external/wpt/dom/events/Event-dispatch-on-disabled-elements.html [ Timeout ] # wpt_subtest_failure +external/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html [ Timeout ] # wpt_subtest_failure +external/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html [ Failure ] +external/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html [ Failure ] +external/wpt/dom/interfaces.html?exclude=Node [ Failure ] +external/wpt/dom/ranges/Range-set.html [ Pass Failure ] +external/wpt/domparsing/interfaces.any.worker.html [ Failure ] +external/wpt/editing/run/bold.html?1-1000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/bold.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/bold.html?2001-3000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/delete.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/italic.html?1-1000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/italic.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifycenter.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifycenter.html?2001-3000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifycenter.html?4001-5000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifycenter.html?5001-6000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyfull.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyfull.html?2001-3000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyfull.html?4001-last [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyright.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyright.html?2001-3000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/justifyright.html?4001-last [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/strikethrough.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/strikethrough.html?2001-last [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/subscript.html [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/superscript.html [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/underline.html?1001-2000 [ Pass ] # wpt_subtest_failure +external/wpt/editing/run/underline.html?2001-last [ Pass ] # wpt_subtest_failure +external/wpt/encoding/streams/realms.window.html [ Failure Pass ] +external/wpt/encrypted-media/clearkey-check-encryption-scheme.https.html [ Failure Pass ] +external/wpt/event-timing/buffered-flag.html [ Timeout ] # wpt_subtest_failure +external/wpt/event-timing/click-timing.html [ Timeout ] # wpt_subtest_failure +external/wpt/event-timing/crossiframe.html [ Timeout ] # wpt_subtest_failure +external/wpt/event-timing/retrievability.html [ Timeout ] # wpt_subtest_failure +external/wpt/event-timing/retrieve-firstInput.html [ Pass ] # wpt_subtest_failure +external/wpt/event-timing/timingconditions.html [ Timeout ] # wpt_subtest_failure +external/wpt/event-timing/toJSON.html [ Timeout ] # wpt_subtest_failure +external/wpt/eventsource/eventsource-constructor-url-bogus.any.html [ Pass Failure ] +external/wpt/feature-policy/experimental-features/lazyload/lazyload-disabled-tentative.sub.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/feature-policy/experimental-features/lazyload/lazyload-enabled-tentative.sub.html [ Pass Failure ] +external/wpt/feature-policy/experimental-features/lazyload/loading-frame-default-eager-disabled-tentative.sub.html [ Pass Failure ] +external/wpt/feature-policy/experimental-features/trust-token-redemption-default-feature-policy.tentative.https.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/feature-policy/experimental-features/trust-token-redemption-supported-by-feature-policy.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/feature-policy/reporting/fullscreen-report-only.html [ Timeout ] # wpt_subtest_failure +external/wpt/feature-policy/reporting/picture-in-picture-report-only.html [ Pass ] # wpt_subtest_failure +external/wpt/fetch/api/basic/accept-header.any.html [ Failure Pass ] +external/wpt/fetch/api/basic/accept-header.any.worker.html [ Failure Pass ] +external/wpt/fetch/api/idl.any.html [ Failure ] +external/wpt/fetch/api/idl.any.serviceworker.html [ Failure ] +external/wpt/fetch/api/idl.any.sharedworker.html [ Failure ] +external/wpt/fetch/api/idl.any.worker.html [ Failure ] +external/wpt/fetch/api/redirect/redirect-count.any.html [ Pass Failure ] +external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Pass Failure ] +external/wpt/fetch/api/request/destination/fetch-destination.https.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/fetch/content-type/response.window.html [ Timeout ] # wpt_subtest_failure +external/wpt/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html [ Timeout ] # wpt_subtest_failure +external/wpt/fetch/cross-origin-resource-policy/fetch.any.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.any.sharedworker.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.any.worker.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.serviceworker.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.sharedworker.html [ Pass Failure ] +external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.worker.html [ Pass Failure ] +external/wpt/fetch/metadata/portal.https.sub.html [ Failure Pass ] # wpt_precondition_failed wpt_subtest_failure +external/wpt/fetch/metadata/trailing-dot.https.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/fetch/sec-metadata/trailing-dot.tentative.https.sub.html [ Failure ] +external/wpt/fetch/sec-metadata/xslt.tentative.https.sub.html [ Failure ] +external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/fetch/stale-while-revalidate/fetch-sw.https.html [ Pass ] # wpt_subtest_failure +external/wpt/fetch/stale-while-revalidate/fetch.html [ Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-03.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-04.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-09.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-10.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-11.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-20.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-21.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/forced-colors-mode/forced-colors-mode-25.html [ Pass Failure ] +external/wpt/forced-colors-mode/forced-colors-mode-26.html [ Pass Failure ] +external/wpt/fullscreen/api/element-request-fullscreen.html [ Timeout ] # wpt_subtest_failure +external/wpt/fullscreen/rendering/fullscreen-css-transition.html [ Timeout ] # wpt_subtest_failure +external/wpt/geolocation-API/PositionOptions.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/gyroscope/Gyroscope-iframe-access.https.html [ Pass ] # wpt_subtest_failure +external/wpt/gyroscope/Gyroscope.https.html [ Pass ] # wpt_subtest_failure +external/wpt/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html [ Pass ] # wpt_subtest_failure +external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/004.html [ Failure ] +external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Failure ] # wpt_subtest_failure +external/wpt/html/browsers/history/the-location-interface/per-global.window.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Pass Failure ] +external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Pass Failure ] +external/wpt/html/browsers/windows/noreferrer-window-name.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https.html [ Timeout ] +external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-document.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-service-worker.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-shared-worker.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/coep-frame-javascript.https.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/javascript.https.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/reporting.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/html/cross-origin-embedder-policy/require-corp.https.html [ Pass ] # wpt_subtest_failure +external/wpt/html/cross-origin-opener-policy/blob-popup.https.html [ Pass Failure ] +external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/cross-origin-opener/new_window_null.tentative.html [ Failure ] +external/wpt/html/cross-origin-opener/new_window_same_origin.tentative.html [ Failure ] +external/wpt/html/cross-origin-opener/new_window_same_origin_unsafe_allow_outgoing.tentative.html [ Failure ] +external/wpt/html/cross-origin-opener/new_window_same_site.tentative.html [ Failure ] +external/wpt/html/cross-origin-opener/new_window_same_site_unsafe_allow_outgoing.tentative.html [ Failure ] +external/wpt/html/dom/documents/resource-metadata-management/document-lastModified-01.html [ Pass Failure ] +external/wpt/html/dom/elements/global-attributes/dir_auto-N-EN.html [ Failure Pass ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002b.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006b.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006c.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ] +external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ] +external/wpt/html/dom/interfaces.https.html?exclude=(Document|Window|HTML.\*) [ Failure Pass ] +external/wpt/html/dom/interfaces.https.html?include=(Document|Window) [ Failure ] +external/wpt/html/dom/interfaces.https.html?include=HTML.\* [ Failure ] +external/wpt/html/dom/interfaces.worker.html [ Failure ] +external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html [ Failure ] +external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html [ Failure ] +external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html [ Failure ] +external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/blob-data.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel.https.html [ Pass Failure ] +external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=utf8 [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=x-cp1251 [ Timeout ] # wpt_subtest_failure +external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Failure ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=workers [ Timeout Failure ] # wpt_subtest_failure +external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html [ Failure ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=workers [ Failure Timeout ] # wpt_subtest_failure +external/wpt/html/interaction/focus/the-autofocus-attribute/same-origin-autofocus.html [ Pass ] # wpt_subtest_failure external/wpt/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/form-controls/select-sizing-001.html [ Pass Failure ] +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-content-before-legend.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-generated-content.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html [ Pass ] # wpt_subtest_failure external/wpt/html/rendering/widgets/baseline-alignment-and-overflow.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/widgets/button-layout/abspos.html [ Pass ] # wpt_subtest_failure +external/wpt/html/rendering/widgets/button-layout/grid.html [ Failure Pass ] +external/wpt/html/rendering/widgets/button-layout/propagate-text-decoration.html [ Pass Failure ] +external/wpt/html/semantics/document-metadata/styling/LinkStyle.html [ Pass ] # wpt_subtest_failure +external/wpt/html/semantics/document-metadata/the-link-element/link-multiple-error-events.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/document-metadata/the-link-element/link-multiple-load-events.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Failure ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html [ Pass Failure ] +external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html [ Pass Failure ] external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html [ Failure ] external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html [ Failure ] +external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-in-cross-origin-ifame-001.sub.html [ Failure Pass ] +external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-in-cross-origin-ifame-002.sub.html [ Failure Pass ] +external/wpt/html/semantics/embedded-content/the-object-element/object-events.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/embedded-content/the-video-element/resize-during-playback.html [ Pass ] # wpt_subtest_failure +external/wpt/html/semantics/forms/textfieldselection/selection-not-application-textarea.html [ Pass ] # wpt_subtest_failure +external/wpt/html/semantics/forms/the-input-element/maxlength-number.html [ Pass Failure Timeout ] +external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Pass Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html [ Pass Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html [ Pass Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html [ Pass Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/json-module-service-worker-test.https.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/json-module/module.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.serviceworker.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.sharedworker.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.worker.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/parse-error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/json-module/utf8.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html [ Failure ] +external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/user-activation/activation-api-iframe.tenative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/user-activation/activation-api-iframe.tentative.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/html/user-activation/activation-transfer-cross-origin-with-click-two-child-frames.sub.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/user-activation/activation-transfer-cross-origin-with-click.sub.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/user-activation/activation-transfer-with-click.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/location-set-and-document-open.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.html [ Timeout ] # wpt_subtest_failure +external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.worker.html [ Failure Pass ] +external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.html [ Failure ] +external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Pass Failure ] +external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html [ Pass Failure ] +external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Pass ] # wpt_subtest_failure +external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html [ Pass ] # wpt_subtest_failure +external/wpt/idle-detection/basics.tentative.https.any.html [ Failure ] +external/wpt/idle-detection/basics.tentative.https.any.worker.html [ Failure ] +external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] +external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] +external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html [ Failure ] +external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html [ Failure ] +external/wpt/idle-detection/idlharness.https.any.html [ Failure ] +external/wpt/idle-detection/idlharness.https.any.worker.html [ Failure ] +external/wpt/idle-detection/interceptor.https.html [ Failure ] +external/wpt/import-maps/builtin-support.tentative/imported/parsing-schema.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/import-maps/builtin-support.tentative/imported/resolving-not-yet-implemented.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/import-maps/builtin-support.tentative/imported/resolving-scopes.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/import-maps/common/parsing.tentative.html [ Pass ] # wpt_subtest_failure external/wpt/import-maps/common/resolving.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/import-maps/resolving.tentative.html [ Failure ] +external/wpt/infrastructure/assumptions/ahem.html [ Failure ] +external/wpt/infrastructure/assumptions/blank.html [ Pass Failure ] +external/wpt/infrastructure/expected-fail/precondition-in-promise.html [ Failure ] # wpt_precondition_failed +external/wpt/infrastructure/expected-fail/precondition-in-setup.html [ Failure ] # wpt_precondition_failed +external/wpt/infrastructure/expected-fail/precondition-without-setup.html [ Failure ] # wpt_precondition_failed +external/wpt/infrastructure/expected-fail/timeout.html [ Timeout ] # wpt_subtest_failure +external/wpt/infrastructure/expected-fail/uncaught-exception-following-subtest.html [ Failure ] +external/wpt/infrastructure/expected-fail/uncaught-exception.html [ Failure ] +external/wpt/infrastructure/expected-fail/unhandled-rejection-following-subtest.html [ Failure ] +external/wpt/infrastructure/expected-fail/unhandled-rejection.html [ Failure ] +external/wpt/infrastructure/reftest/reftest_and_fail.html [ Failure ] +external/wpt/infrastructure/reftest/reftest_fuzzy_1.html [ Pass Failure ] +external/wpt/infrastructure/reftest/reftest_wait_TestRendered.html [ Pass Failure ] +external/wpt/infrastructure/server/http2-context.sub.h2.any.html [ Pass Failure ] # overwrites fail +external/wpt/infrastructure/server/http2-context.sub.h2.any.serviceworker.html [ Pass Failure ] # overwrites fail +external/wpt/infrastructure/server/http2-context.sub.h2.any.sharedworker.html [ Pass Failure ] # overwrites fail +external/wpt/infrastructure/server/http2-context.sub.h2.any.worker.html [ Pass Failure ] # overwrites fail +external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html [ Pass Failure ] +external/wpt/infrastructure/testdriver/actions/elementTiming.html [ Pass Failure ] +external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Pass Failure ] +external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Pass Failure ] +external/wpt/input-events/input-events-exec-command.html [ Failure Pass ] +external/wpt/input-events/input-events-typing.html [ Pass Failure ] +external/wpt/intersection-observer/v2/delay-test.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/js-self-profiling/idlharness.any.html [ Pass ] # wpt_subtest_failure +external/wpt/js-self-profiling/idlharness.any.worker.html [ Pass ] # wpt_subtest_failure +external/wpt/kv-storage/key-types.https.html [ Pass Failure ] +external/wpt/largest-contentful-paint/invisible-images-composited-2.html [ Pass ] # wpt_subtest_failure +external/wpt/layout-instability/buffer-layout-shift.html [ Timeout Pass ] +external/wpt/lifecycle/freeze.html [ Pass ] # wpt_subtest_failure +external/wpt/longtask-timing/idlharness.window.html [ Failure Pass ] +external/wpt/mathml/presentation-markup/direction/direction-007.html [ Failure Pass ] +external/wpt/mathml/presentation-markup/direction/direction-008.html [ Failure Pass ] +external/wpt/mathml/presentation-markup/direction/direction-010.html [ Failure Pass ] +external/wpt/mathml/presentation-markup/direction/direction-token.html [ Failure Pass ] +external/wpt/mathml/presentation-markup/direction/direction.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/fractions/frac-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/fractions/frac-linethickness-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/operators/operator-dictionary-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/operators/operator-dictionary-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-3.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-5.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/subsup-parameters-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/underover-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/spaces/space-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/spaces/space-like-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/spaces/space-like-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/spaces/space-like-003.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/tables/table-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/tables/table-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/presentation-markup/tables/table-axis-height.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/attribute-mapping-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/displaystyle-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/dynamic-dir-1.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/ignored-properties-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/lengths-2.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/mathbackground-001.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathbackground-002.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathbackground-003.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathcolor-001.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathcolor-002.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathcolor-003.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/mathsize-attribute.html [ Failure Pass ] +external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/css-styling/width-height-001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/html5-tree/color-attributes-1.html [ Failure Pass ] +external/wpt/mathml/relations/html5-tree/display-1.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/html5-tree/href-click-3.html [ Pass Failure ] +external/wpt/mathml/relations/html5-tree/integration-point-4.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Pass Failure ] +external/wpt/mathml/relations/html5-tree/tabindex-002.html [ Failure Timeout ] # wpt_subtest_failure +external/wpt/mathml/relations/text-and-math/use-typo-metrics-1.html [ Pass Failure ] +external/wpt/media-source/idlharness.any.html [ Failure ] +external/wpt/media-source/idlharness.any.worker.html [ Failure ] +external/wpt/media-source/mediasource-addsourcebuffer.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-avtracks.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-changetype-play-implicit.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-changetype-play-negative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-changetype-play-without-codecs-parameter.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-a-bitrate.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-av-audio-bitrate.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-av-framesize.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-av-video-bitrate.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-v-bitrate.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-v-framerate.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-mp4-v-framesize.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Pass Failure ] +external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Pass Failure ] +external/wpt/media-source/mediasource-correct-frames-after-reappend.html [ Failure ] # wpt_subtest_failure +external/wpt/media-source/mediasource-correct-frames.html [ Failure ] # wpt_subtest_failure +external/wpt/media-source/mediasource-detach.html [ Pass Failure ] +external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Pass Failure ] +external/wpt/media-source/mediasource-is-type-supported.html [ Pass ] # wpt_subtest_failure +external/wpt/media-source/mediasource-sourcebuffer-mode-timestamps.html [ Pass ] # wpt_subtest_failure +external/wpt/mediacapture-fromelement/ended.html [ Pass Failure ] +external/wpt/mediacapture-record/MediaRecorder-destroy-script-execution.html [ Pass Failure ] +external/wpt/mediacapture-record/MediaRecorder-no-sink.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html [ Failure ] +external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/mimesniff/mime-types/charset-parameter.window.html [ Failure Pass ] +external/wpt/mimesniff/mime-types/parsing.any.html [ Failure Pass ] +external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Pass Failure ] +external/wpt/mixed-content/gen/top.http-rp/opt-in/object-tag.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/object-tag/cross-https.swap-scheme.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/object-tag/same-https.swap-scheme.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data/same-https.keep-scheme.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module/same-https.keep-scheme.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/cross-http.keep-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/cross-http.no-redirect.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/cross-http.swap-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/same-http.keep-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/same-http.no-redirect.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/audio-tag/same-http.swap-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data/same-https.keep-scheme.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module/same-https.keep-scheme.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/cross-http.keep-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/cross-http.no-redirect.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/cross-http.swap-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/same-http.keep-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/same-http.no-redirect.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mixed-content/gen/top.meta/unset/video-tag/same-http.swap-scheme.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/mst-content-hint/MediaStreamTrack-contentHint.html [ Pass Failure ] +external/wpt/mst-content-hint/idlharness.window.html [ Pass Failure ] external/wpt/navigation-timing/test_performance_attributes.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/notifications/constructor-basic.html [ Failure Pass ] +external/wpt/notifications/constructor-invalid.html [ Failure Pass ] +external/wpt/notifications/event-onclose.html [ Failure Pass ] +external/wpt/notifications/event-onshow.html [ Failure Pass ] +external/wpt/notifications/instance.html [ Failure Pass ] +external/wpt/notifications/lang.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.copy.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-over.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.lighter.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-over.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.canvas.xor.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.globalAlpha.image.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.globalAlpha.imagepattern.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.copy.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-over.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.lighter.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.source-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.source-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.source-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.source-over.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.image.xor.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.copy.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.destination-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.destination-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.source-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.source-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.copy.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.destination-atop.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.destination-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.source-in.html [ Failure Pass ] +external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.source-out.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.3arg.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.5arg.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.destpos.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.destsize.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.alpha.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.broken.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.clip.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.composite.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.floatsource.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativedest.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativedir.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativesource.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.nowrap.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.path.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.svg.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.transform.html [ Failure Pass ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerosource.html [ Failure ] +external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html [ Pass Crash Failure Timeout ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html [ Failure ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html [ Failure ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html [ Failure Pass ] +external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html [ Failure Pass ] +external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.image.section.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html [ Failure Pass ] +external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html [ Failure Pass ] external/wpt/offscreen-canvas/text/2d.text.measure.actualBoundingBox.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.actualBoundingBox.worker.html [ Timeout ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.advances.worker.html [ Timeout ] # wpt_subtest_failure external/wpt/offscreen-canvas/text/2d.text.measure.baselines.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.baselines.worker.html [ Timeout ] # wpt_subtest_failure external/wpt/offscreen-canvas/text/2d.text.measure.emHeights.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.emHeights.worker.html [ Timeout ] # wpt_subtest_failure external/wpt/offscreen-canvas/text/2d.text.measure.fontBoundingBox.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.fontBoundingBox.worker.html [ Timeout ] # wpt_subtest_failure external/wpt/offscreen-canvas/text/2d.text.measure.width.basic.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.width.basic.worker.html [ Timeout ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.width.empty.worker.html [ Timeout ] # wpt_subtest_failure external/wpt/offscreen-canvas/text/2d.text.measure.width.space.html [ Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/text/2d.text.measure.width.space.worker.html [ Timeout ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit.html [ Failure ] +external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https.html [ Pass ] # wpt_subtest_failure external/wpt/orientation-sensor/AbsoluteOrientationSensor.https.html [ Pass ] # wpt_subtest_failure +external/wpt/orientation-sensor/RelativeOrientationSensor-iframe-access.https.html [ Pass ] # wpt_subtest_failure external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Pass ] # wpt_subtest_failure +external/wpt/paint-timing/sibling-painting-first-image.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/payment-request/payment-is-showing.https.html [ Failure ] # wpt_subtest_failure +external/wpt/payment-request/payment-request-canmakepayment-method-protection.https.html [ Pass ] # wpt_subtest_failure +external/wpt/payment-request/payment-request-canmakepayment-method.https.html [ Failure ] +external/wpt/payment-request/payment-request-hasenrolledinstrument-method.tentative.https.html [ Failure ] # wpt_subtest_failure +external/wpt/payment-request/payment-request-show-method.https.html [ Failure ] +external/wpt/picture-in-picture/css-selector.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/disable-picture-in-picture.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/enter-picture-in-picture.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/exit-picture-in-picture.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/idlharness.window.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/leave-picture-in-picture.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/mediastream.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/picture-in-picture-element.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/picture-in-picture-window.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/request-picture-in-picture.html [ Pass ] # wpt_subtest_failure +external/wpt/picture-in-picture/shadow-dom.html [ Pass ] # wpt_subtest_failure +external/wpt/pointerevents/extension/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Failure ] +external/wpt/pointerevents/idlharness.window.html [ Failure Pass ] +external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_pointercapture-in-custom-element.html [ Failure ] +external/wpt/pointerevents/pointerevent_pointercapture-in-shadow-dom.html [ Failure ] +external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html [ Failure Pass ] +external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-keyboard.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-pan-left-css_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerevent_touch-action-svg-none-test_touch.html [ Pass Failure ] +external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Timeout ] # wpt_subtest_failure external/wpt/pointerevents/pointerlock/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Pass ] # wpt_subtest_failure +external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Timeout ] # wpt_subtest_failure +external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Pass ] # wpt_subtest_failure +external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture.html [ Pass ] # wpt_subtest_failure +external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Timeout ] # wpt_subtest_failure +external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Timeout ] # wpt_subtest_failure +external/wpt/pointerlock/mouse_buttons_back_forward.html [ Timeout ] # wpt_subtest_failure +external/wpt/pointerlock/pointerlock_remove_target.html [ Timeout ] # wpt_subtest_failure +external/wpt/pointerlock/pointerlock_shadow.html [ Timeout ] # wpt_subtest_failure +external/wpt/portals/about-blank-cannot-host.html [ Pass ] # wpt_subtest_failure external/wpt/portals/csp/frame-ancestors.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/csp/frame-src.sub.html [ Pass ] # wpt_subtest_failure external/wpt/portals/history/history-manipulation-inside-portal-with-subframes.html [ Pass ] # wpt_subtest_failure external/wpt/portals/history/history-manipulation-inside-portal.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/htmlportalelement-event-handler-content-attributes.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portal-activate-data.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portal-activate-event-constructor.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portal-activate-event.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portal-non-http-navigation.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portal-onload-event.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-empty-browsing-context.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-inside-iframe.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-inside-portal.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-no-browsing-context.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-resolution.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-activate-twice.html [ Pass Timeout ] # wpt_precondition_failed wpt_subtest_failure +external/wpt/portals/portals-adopt-predecessor.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-api.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-cross-origin-load.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-focus.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-host-exposure.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-host-hidden-after-activation.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-host-null.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-host-post-message.sub.html [ Failure ] # wpt_precondition_failed wpt_subtest_failure +external/wpt/portals/portals-navigate-after-adoption.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-nested.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-post-message.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-referrer-inherit-header.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-referrer-inherit-meta.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-referrer.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-rendering.html [ Failure Timeout ] +external/wpt/portals/portals-repeated-activate.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/portals-set-src-after-activate.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/predecessor-fires-unload.html [ Pass ] # wpt_subtest_failure +external/wpt/portals/xfo/portals-xfo-deny.sub.html [ Pass Failure ] # wpt_precondition_failed wpt_subtest_failure +external/wpt/preload/modulepreload.html [ Pass ] # wpt_subtest_failure +external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/quirks/percentage-height-calculation.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/quirks/table-cell-nowrap-minimum-width-calculation.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/child-css/external-import-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/child-css/internal-import-stylesheet.html [ Failure Timeout Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure Timeout Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/font-face/external-import-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/font-face/external-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/font-face/internal-import-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/font-face/internal-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/font-face/processing-instruction.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/external-import-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/external-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/inline-style.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/internal-import-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/internal-stylesheet.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/presentation-attribute.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/image/processing-instruction.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Failure Pass ] # wpt_subtest_failure external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module/same-http.keep-origin.http.html [ Pass ] # wpt_subtest_failure external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module/same-http.no-redirect.http.html [ Pass ] # wpt_subtest_failure external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-module/same-http.keep-origin.http.html [ Pass ] # wpt_subtest_failure @@ -177,12 +1207,199 @@ external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-module/same-http.no-redirect.http.html [ Pass ] # wpt_subtest_failure external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-module/same-http.keep-origin.http.html [ Pass ] # wpt_subtest_failure external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-module/same-http.no-redirect.http.html [ Pass ] # wpt_subtest_failure +external/wpt/referrer-policy/generic/iframe-src-change.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-data.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-srcdoc-child.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-srcdoc.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/link-rel-prefetch.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/multiple-headers-and-values.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/multiple-headers-combined.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/multiple-headers-one-invalid.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/multiple-headers-one-unknown-token.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/multiple-headers.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/area-navigate.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/attr-referrer-invalid-value.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/fetch-messaging.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/iframe-messaging.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/image-decoding.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/link-navigate.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/script-messaging.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/worker-messaging.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/subresource-test/xhr-messaging.html [ Failure Timeout Pass ] +external/wpt/referrer-policy/generic/unsupported-csp-referrer-directive.html [ Failure Timeout Pass ] +external/wpt/reporting/bufferSize.html [ Pass Failure ] +external/wpt/reporting/disconnect.html [ Pass Failure ] +external/wpt/reporting/generateTestReport.html [ Pass Failure ] +external/wpt/reporting/idlharness.window.html [ Failure ] +external/wpt/reporting/nestedReport.html [ Pass Failure ] +external/wpt/reporting/order.html [ Pass Failure ] +external/wpt/reporting/path-absolute-endpoint.https.sub.html [ Pass ] # wpt_subtest_failure +external/wpt/requestidlecallback/callback-timeout-when-busy.html [ Pass Failure ] +external/wpt/requestidlecallback/callback-timeout.html [ Pass Failure ] +external/wpt/requestidlecallback/callback-xhr-sync.html [ Pass Failure ] +external/wpt/resize-observer/devicepixel.html [ Failure ] external/wpt/resize-observer/observe.html [ Pass ] # wpt_subtest_failure external/wpt/resize-observer/svg.html [ Pass ] # wpt_subtest_failure +external/wpt/resource-timing/crossorigin-sandwich-TAO.sub.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/screen-capture/feature-policy.https.html [ Failure Pass ] +external/wpt/screen-capture/getdisplaymedia.https.html [ Pass ] # wpt_subtest_failure +external/wpt/screen-orientation/active-lock.html [ Timeout ] # wpt_subtest_failure +external/wpt/screen-orientation/event-before-promise.html [ Timeout ] +external/wpt/screen-orientation/lock-basic.html [ Timeout ] +external/wpt/screen-orientation/lock-sandboxed-iframe.html [ Pass ] # wpt_subtest_failure +external/wpt/screen-orientation/lock-unlock-check.html [ Timeout ] +external/wpt/screen-orientation/onchange-event-subframe.html [ Failure Pass ] +external/wpt/scroll-animations/scroll-animation.html [ Failure Pass ] +external/wpt/scroll-animations/two-animations-attach-to-same-scroll-timeline-cancel-one.html [ Failure ] +external/wpt/scroll-behavior-smooth.html [ Failure Timeout ] +external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Pass Failure ] +external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/postmessage.https.html [ Pass Failure ] +external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Pass Failure Crash ] +external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/update.https.html [ Pass Failure ] +external/wpt/service-workers/service-worker/claim-fetch.https.html [ Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/claim-using-registration.https.html [ Pass Crash ] +external/wpt/service-workers/service-worker/claim-with-redirect.https.html [ Pass Crash ] +external/wpt/service-workers/service-worker/clients-get.https.html [ Pass Crash ] +external/wpt/service-workers/service-worker/clients-matchall-frozen.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/fetch-request-html-imports.https.html [ Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/installing.https.html [ Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/ready.https.window.html [ Timeout ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/referrer-toplevel-script-fetch.https.html [ Failure Pass ] +external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Pass Failure ] +external/wpt/service-workers/service-worker/register-wait-forever-in-install-worker.https.html [ Pass Failure ] +external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Timeout ] +external/wpt/service-workers/service-worker/rejections.https.html [ Failure Pass ] +external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/update-no-cache-request-headers.https.html [ Pass ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/waiting.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Failure ] # wpt_subtest_failure +external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/shadow-dom/slots-imperative-slot-api.tentative.html [ Pass Failure ] +external/wpt/shape-detection/detected-boundingBox-read-only.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detected-postMessage.https.html [ Pass Failure Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-HTMLCanvasElement.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-HTMLImageElement.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-HTMLVideoElement.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-ImageBitmap.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-ImageData.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-getSupportedFormats.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-on-worker.https.worker.html [ Pass ] # wpt_subtest_failure +external/wpt/shape-detection/detection-options.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/detection-security-test.https.html [ Pass Failure ] +external/wpt/shape-detection/detector-same-object.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/shape-detection/idlharness.https.any.html [ Timeout ] +external/wpt/shape-detection/idlharness.https.any.serviceworker.html [ Failure Pass ] +external/wpt/shape-detection/idlharness.https.any.sharedworker.html [ Failure Pass ] +external/wpt/shape-detection/idlharness.https.any.worker.html [ Failure Pass ] +external/wpt/shape-detection/shapedetection-cross-origin.sub.https.html [ Pass Failure ] +external/wpt/signed-exchange/appcache/sxg-inner-resp-over-appcache.tentative.https.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/check-cert-request.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/fallback-to-another-sxg.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/nested-sxg.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error-downgraded.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-failed-zero-success-fraction.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-invalid_integrity_header.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html [ Timeout Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-origin-referrer.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-parse_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error-downgraded.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error-downgraded.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error-downgraded.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-ok.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-parse_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error-downgraded.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/subresource/sxg-subresource.tentative.html [ Timeout ] +external/wpt/signed-exchange/sxg-data-cert-url.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-double-prefetch.tentative.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-fallback-with-fragment.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-hsts.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-invalid-validity-url.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-location-fragment.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-location.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-navigation-timing.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-non-secure-origin.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-noncacheable.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-prefetch-resource-timing.tentative.html [ Timeout ] # wpt_subtest_failure external/wpt/signed-exchange/sxg-prefetch.tentative.https.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-referrer-policy-header.tentative.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-utf8-inner-url.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-variants-match.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-variants-mismatch.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/signed-exchange/sxg-version1b2.tentative.html [ Pass ] # wpt_subtest_failure +external/wpt/sms/idlharness.https.any.html [ Failure Pass ] +external/wpt/sms/idlharness.https.any.worker.html [ Failure Pass ] +external/wpt/sms/interceptor.https.html [ Timeout Failure ] # wpt_subtest_failure +external/wpt/sms/sms-iframe.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/sms/sms-top-level-frame-only.https.html [ Timeout ] +external/wpt/speech-api/SpeechSynthesis-pause-resume.tentative.html [ Timeout ] # wpt_subtest_failure external/wpt/speech-api/SpeechSynthesis-speak-events.html [ Pass ] # wpt_subtest_failure +external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/speech-api/historical.html [ Failure Pass ] +external/wpt/storage-access-api/hasStorageAccess.sub.window.html [ Timeout ] # wpt_subtest_failure +external/wpt/storage-access-api/idlharness.tentative.window.html [ Pass ] # wpt_subtest_failure +external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Failure ] +external/wpt/storage-access-api/sandboxAttribute.window.html [ Pass ] # wpt_subtest_failure external/wpt/storage/estimate-indexeddb.https.any.worker.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/streams/readable-byte-streams/construct-byob-request.any.html [ Failure ] +external/wpt/streams/readable-byte-streams/construct-byob-request.any.serviceworker.html [ Failure ] +external/wpt/streams/readable-byte-streams/construct-byob-request.any.sharedworker.html [ Failure ] +external/wpt/streams/readable-byte-streams/construct-byob-request.any.worker.html [ Failure ] external/wpt/svg/animations/end-attribute-change-end-time.html [ Pass ] # wpt_subtest_failure +external/wpt/svg/linking/scripted/href-animate-element.html [ Timeout ] # wpt_subtest_failure +external/wpt/svg/linking/scripted/href-mpath-element.html [ Timeout ] # wpt_subtest_failure +external/wpt/svg/painting/inheritance.svg [ Failure Pass ] +external/wpt/svg/shapes/reftests/pathlength-002.svg [ Pass Failure ] +external/wpt/svg/text/inheritance.svg [ Failure Pass ] +external/wpt/svg/text/parsing/shape-inside-valid.svg [ Failure Pass ] +external/wpt/svg/text/parsing/shape-subtract-valid.svg [ Failure Pass ] +external/wpt/svg/text/parsing/text-decoration-fill-valid.svg [ Failure Pass ] +external/wpt/svg/text/parsing/text-decoration-stroke-valid.svg [ Failure Pass ] +external/wpt/svg/text/reftests/text-inline-size-003.svg [ Pass Failure ] +external/wpt/svg/text/reftests/text-multiline-003.svg [ Pass Failure ] +external/wpt/svg/types/elements/SVGGeometryElement-rect.svg [ Failure Pass ] +external/wpt/svg/types/scripted/SVGAnimatedRect.html [ Failure Pass ] +external/wpt/svg/types/scripted/SVGGeometryElement.isPointInFill-01.svg [ Failure Pass ] +external/wpt/svg/types/scripted/SVGGeometryElement.isPointInStroke-01.svg [ Failure Pass ] +external/wpt/svg/types/scripted/SVGGraphicsElement.svg [ Failure Pass ] +external/wpt/svg/types/scripted/SVGLength-px.html [ Failure Pass ] +external/wpt/touch-events/historical.html [ Pass ] # wpt_subtest_failure +external/wpt/touch-events/touch-globaleventhandler-interface.html [ Pass ] # wpt_subtest_failure +external/wpt/trust-tokens/trust-token-parameter-validation.tentative.https.html [ Pass ] # wpt_subtest_failure +external/wpt/trusted-types/block-string-assignment-to-DOMWindowTimers-setTimeout-setInterval.tentative.html [ Failure ] +external/wpt/trusted-types/block-string-assignment-to-DOMWindowTimers-setTimeout-setInterval.tentative.https.html [ Failure ] +external/wpt/trusted-types/eval-csp-no-tt.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/trusted-types/eval-no-csp-no-tt-default-policy.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/trusted-types/eval-no-csp-no-tt.tentative.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/cross-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/cross-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/cross-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/same-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/same-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag/same-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data/cross-http-downgrade.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data/cross-http-downgrade.no-redirect.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data/cross-https.downgrade.https.html [ Pass ] # wpt_subtest_failure @@ -190,6 +1407,13 @@ external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data/same-http-downgrade.no-redirect.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-module/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/cross-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/cross-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/cross-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/same-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/same-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag/same-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data/cross-http-downgrade.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data/cross-http-downgrade.no-redirect.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data/cross-https.downgrade.https.html [ Pass ] # wpt_subtest_failure @@ -198,6 +1422,13 @@ external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-module/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-module/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/cross-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/cross-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/cross-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/same-http-downgrade.downgrade.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/same-http-downgrade.no-redirect.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag/same-https.downgrade.https.html [ Timeout ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data/cross-http-downgrade.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data/cross-http-downgrade.no-redirect.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data/cross-https.downgrade.https.html [ Pass ] # wpt_subtest_failure @@ -205,833 +1436,6 @@ external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data/same-http-downgrade.no-redirect.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-module/same-https.downgrade.https.html [ Pass ] # wpt_subtest_failure -external/wpt/websockets/cookies/third-party-cookie-accepted.https.html [ Pass ] # wpt_subtest_failure -external/wpt/webxr/events_session_squeeze.https.html [ Pass Failure ] # wpt_subtest_failure - -# A precondition failure -external/wpt/infrastructure/expected-fail/precondition-in-promise.html [ Failure ] # wpt_precondition_failed - -# This is a mass dump of all the current WPT failures seen on Waterfall. They are untriaged. -external/wpt/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm [ Pass Failure ] -external/wpt/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm [ Pass Failure ] -external/wpt/2dcontext/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html [ Pass Failure ] -external/wpt/BackgroundSync/periodicsync.https.window.html [ Failure ] -external/wpt/IndexedDB/keypath-exceptions.htm [ Pass Failure ] -external/wpt/IndexedDB/structured-clone.any.html [ Pass Failure ] -external/wpt/PeriodicBackgroundSync/periodicsync.https.window.html [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1-1000 [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1001-2000 [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?2001-3000 [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?3001-last [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1001-2000 [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?2001-3000 [ Pass Failure ] -external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?3001-last [ Pass Failure ] -external/wpt/ambient-light/AmbientLightSensor-iframe-access.https.html [ Failure Pass ] -external/wpt/animation-worklet/animate-multiple-effects-on-different-targets-via-main-thread.https.html [ Failure Pass ] -external/wpt/animation-worklet/multiple-effects-on-same-target-driven-by-individual-local-time.https.html [ Failure Pass ] -external/wpt/animation-worklet/worklet-animation-creation.https.html [ Failure Pass ] -external/wpt/animation-worklet/worklet-animation-with-effects-from-different-frames.https.html [ Failure Pass ] -external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-and-display-none.https.html [ Pass Failure ] -external/wpt/battery-status/battery-iframe.https.html [ Failure ] -external/wpt/beacon/headers/header-referrer-no-referrer-when-downgrade.https.html [ Failure Pass ] -external/wpt/client-hints/sec-ch-ua.https.html [ Failure Pass ] -external/wpt/compat/webkit-text-fill-color-property-002.html [ Pass Failure ] -external/wpt/contacts/contacts-select.https.window.html [ Failure ] -external/wpt/content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Pass Failure ] -external/wpt/content-security-policy/object-src/object-src-no-url-allowed.html [ Pass Failure ] -external/wpt/content-security-policy/plugin-types/plugintypes-nourl-allowed.html [ Pass Failure ] -external/wpt/content-security-policy/script-src/script-src-strict_dynamic_hashes.html [ Failure ] -external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html [ Failure Pass ] -external/wpt/cookie-store/cookieStore_delete_basic.tentative.https.any.html [ Pass Failure ] -external/wpt/cookies/samesite-none-secure/cookies-without-samesite-must-be-secure.https.tentative.html [ Failure Pass ] -external/wpt/cookies/samesite/form-get-blank-reload.https.html [ Pass Failure ] -external/wpt/cookies/samesite/form-post-blank-reload.https.html [ Pass Failure ] -external/wpt/cookies/samesite/form-post-blank.https.html [ Pass Failure ] -external/wpt/cookies/samesite/window-open-reload.https.html [ Pass Failure ] -external/wpt/css/CSS2/floats-clear/floats-143.xht [ Failure ] -external/wpt/css/CSS2/floats/float-nowrap-2.html [ Failure ] -external/wpt/css/CSS2/linebox/vertical-align-baseline-003.xht [ Failure ] -external/wpt/css/CSS2/normal-flow/block-in-inline-remove-002.xht [ Failure ] -external/wpt/css/CSS2/normal-flow/block-in-inline-remove-004.xht [ Failure ] -external/wpt/css/CSS2/normal-flow/min-width-079.xht [ Pass Failure ] -external/wpt/css/CSS2/text/white-space-bidirectionality-001.xht [ Pass Failure ] -external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-overflow-hidden-and-border-radius.html [ Pass Failure ] -external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-border-radius.html [ Pass Failure ] -external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html [ Pass Failure ] -external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-video.html [ Pass Failure ] -external/wpt/css/css-animations/CSSAnimation-pausing.tentative.html [ Pass Failure ] -external/wpt/css/css-animations/CSSAnimation-ready.tentative.html [ Failure Pass ] -external/wpt/css/css-animations/CSSPseudoElement-getAnimations.tentative.html [ Failure ] -external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html [ Pass Failure ] -external/wpt/css/css-box/parsing/min-height-invalid.html [ Failure ] -external/wpt/css/css-box/parsing/min-width-invalid.html [ Failure ] -external/wpt/css/css-color-adjust/parsing/color-scheme-computed.tentative.html [ Failure ] -external/wpt/css/css-color/t422-rgba-onscreen-multiple-boxes-c.xht [ Pass Failure ] -external/wpt/css/css-color/t425-hsla-onscreen-b.xht [ Pass Failure ] -external/wpt/css/css-color/t425-hsla-onscreen-multiple-boxes-c.xht [ Pass Failure ] -external/wpt/css/css-contain/contain-paint-008.html [ Failure ] -external/wpt/css/css-contain/contain-size-002.html [ Failure ] -external/wpt/css/css-contain/contain-size-003.html [ Failure ] -external/wpt/css/css-content/quotes-006.html [ Pass Failure ] -external/wpt/css/css-content/quotes-007.html [ Pass Failure ] -external/wpt/css/css-content/quotes-009.html [ Pass Failure ] -external/wpt/css/css-content/quotes-012.html [ Pass Failure ] -external/wpt/css/css-content/quotes-014.html [ Pass Failure ] -external/wpt/css/css-display/display-contents-before-after-001.html [ Failure ] -external/wpt/css/css-display/display-contents-before-after-002.html [ Failure ] -external/wpt/css/css-display/display-contents-before-after-003.html [ Failure ] -external/wpt/css/css-display/display-contents-shadow-dom-1.html [ Failure ] -external/wpt/css/css-display/display-contents-td-001.html [ Failure ] -external/wpt/css/css-display/display-contents-unusual-html-elements-none.html [ Failure ] -external/wpt/css/css-flexbox/align-items-baseline-overflow-non-visible.html [ Failure ] -external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-basis-0percent.html [ Pass Failure ] -external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-shorthand-number.html [ Pass Failure ] -external/wpt/css/css-flexbox/hittest-overlapping-order.html [ Pass Failure ] -external/wpt/css/css-flexbox/negative-margins-001.html [ Pass Failure ] -external/wpt/css/css-flexbox/select-element-zero-height-001.html [ Pass Failure ] -external/wpt/css/css-flexbox/select-element-zero-height-002.html [ Pass Failure ] -external/wpt/css/css-fonts/font-display/font-display-preload.html [ Failure ] -external/wpt/css/css-fonts/font-display/font-display.html [ Failure ] -external/wpt/css/css-fonts/font-family-name-025.html [ Pass Failure ] -external/wpt/css/css-fonts/font-kerning-02.html [ Pass Failure ] -external/wpt/css/css-fonts/font-variant-position-01.html [ Pass Failure ] # overwrites fail -external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html [ Pass Failure ] -external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html [ Pass Failure ] -external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html [ Pass Failure ] -external/wpt/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html [ Failure Pass ] -external/wpt/css/css-fonts/quoted-generic-ignored.html [ Failure ] -external/wpt/css/css-fonts/standard-font-family.html [ Pass Failure ] -external/wpt/css/css-fonts/variations/font-opentype-collections.html [ Pass Failure ] -external/wpt/css/css-grid/grid-model/grid-button-001.html [ Failure Pass ] -external/wpt/css/css-grid/grid-model/grid-container-ignores-first-letter-002.html [ Pass Failure ] # overwrites fail -external/wpt/css/css-images/inheritance.html [ Failure Pass ] -external/wpt/css/css-lists/content-property/marker-text-matches-armenian.html [ Pass Failure ] -external/wpt/css/css-lists/content-property/marker-text-matches-georgian.html [ Pass Failure ] -external/wpt/css/css-lists/content-property/marker-text-matches-lower-greek.html [ Failure ] -external/wpt/css/css-lists/content-property/marker-text-matches-upper-latin.html [ Pass Failure ] -external/wpt/css/css-masking/clip-path-svg-content/clip-path-recursion-002.svg [ Pass Failure ] -external/wpt/css/css-masking/clip-path/clip-path-inline-001.html [ Failure ] -external/wpt/css/css-masking/clip-path/clip-path-inline-002.html [ Failure ] -external/wpt/css/css-masking/clip-path/clip-path-inline-003.html [ Failure ] -external/wpt/css/css-masking/mask-svg-content/mask-text-001.svg [ Failure ] -external/wpt/css/css-multicol/multicol-fill-auto-block-children-002.xht [ Failure ] -external/wpt/css/css-overflow/logical-overflow-001.html [ Failure Pass ] -external/wpt/css/css-overflow/overflow-codependent-scrollbars.html [ Pass Failure ] -external/wpt/css/css-paint-api/background-image-alpha.https.html [ Pass Failure ] -external/wpt/css/css-paint-api/color-custom-property-animation.https.html [ Pass Failure ] -external/wpt/css/css-paint-api/registered-property-value-007.https.html [ Failure ] -external/wpt/css/css-position/position-sticky-offset-overflow.html [ Pass Failure ] -external/wpt/css/css-position/position-sticky-parsing.html [ Pass Failure ] -external/wpt/css/css-properties-values-api/register-property-syntax-parsing.html [ Failure Pass ] -external/wpt/css/css-properties-values-api/registered-property-initial.html [ Failure Pass ] -external/wpt/css/css-properties-values-api/self-utils.html [ Failure Pass ] -external/wpt/css/css-properties-values-api/typedom.html [ Failure Pass ] -external/wpt/css/css-pseudo/first-letter-002.html [ Failure ] -external/wpt/css/css-pseudo/first-letter-003.html [ Failure ] -external/wpt/css/css-pseudo/first-letter-and-whitespace.html [ Failure ] -external/wpt/css/css-scroll-snap/input/keyboard.html [ Pass Failure ] -external/wpt/css/css-scroll-snap/parsing/scroll-padding-block-computed.html [ Failure ] -external/wpt/css/css-scroll-snap/parsing/scroll-padding-block-valid.html [ Failure ] -external/wpt/css/css-scroll-snap/parsing/scroll-padding-inline-computed.html [ Failure ] -external/wpt/css/css-scroll-snap/parsing/scroll-padding-inline-valid.html [ Failure ] -external/wpt/css/css-scroll-snap/snap-to-visible-areas.html [ Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-004.html [ Pass Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-005.html [ Pass Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html [ Pass Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-005.html [ Pass Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-003.html [ Pass Failure ] -external/wpt/css/css-shapes/shape-outside/values/shape-outside-polygon-004.html [ Pass Failure ] -external/wpt/css/css-syntax/input-preprocessing.html [ Failure Pass ] -external/wpt/css/css-tables/border-spacing-included-in-sizes-001.html [ Pass Failure ] -external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-003.html [ Pass Failure ] -external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-004.html [ Pass Failure ] -external/wpt/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html [ Failure Pass ] -external/wpt/css/css-tables/table-model-fixup-2.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-col-001.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-col-002.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-col-003.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-col-004-dynamic.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-col-005.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-colspan-001.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-colspan-002.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-rowcol-001.html [ Pass Failure ] -external/wpt/css/css-tables/visibility-collapse-rowcol-002.html [ Pass Failure ] -external/wpt/css/css-text/hyphens/hyphens-auto-001.html [ Pass Failure ] -external/wpt/css/css-text/hyphens/hyphens-span-002.html [ Pass Failure ] -external/wpt/css/css-text/i18n/css3-text-line-break-baspglwj-094.html [ Failure ] -external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html [ Failure Pass ] -external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html [ Failure Pass ] -external/wpt/css/css-text/line-breaking/line-breaking-021.html [ Pass Failure ] -external/wpt/css/css-text/line-breaking/line-breaking-atomic-008.html [ Pass Failure ] # overwrites fail -external/wpt/css/css-text/line-breaking/line-breaking-replaced-005.html [ Pass Failure ] # overwrites fail -external/wpt/css/css-text/line-breaking/line-breaking-replaced-006.html [ Pass Failure ] # overwrites fail -external/wpt/css/css-text/parsing/hyphens-valid.html [ Failure Pass ] -external/wpt/css/css-text/tab-size/tab-size.html [ Failure Pass ] -external/wpt/css/css-text/text-align/text-align-justify-004.html [ Pass Failure ] -external/wpt/css/css-text/text-transform/text-transform-shaping-001.html [ Pass Failure ] -external/wpt/css/css-text/text-transform/text-transform-shaping-002.html [ Pass Failure ] -external/wpt/css/css-text/text-transform/text-transform-shaping-003.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-001.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-002.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-003.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-004.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-005.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-006.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-007.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-008.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-00B.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-00C.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-00E.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-00F.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-010.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-011.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-012.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-013.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-014.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-015.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-016.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-017.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-018.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-019.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01A.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01B.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01C.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01D.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01E.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-01F.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-07F.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-080.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-081.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-082.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-083.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-084.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-085.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-086.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-087.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-088.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-089.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08A.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08B.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08C.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08E.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08F.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-091.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-092.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-093.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-094.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-095.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-096.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-097.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-098.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-099.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09A.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09B.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09C.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09F.html [ Pass Failure ] -external/wpt/css/css-text/white-space/seg-break-transformation-004.html [ Failure Pass ] -external/wpt/css/css-text/white-space/white-space-collapse-002.html [ Failure Pass ] -external/wpt/css/css-text/word-break/word-break-break-all-004.html [ Pass Failure ] -external/wpt/css/css-text/word-break/word-break-keep-all-005.html [ Pass Failure ] -external/wpt/css/css-text/word-break/word-break-keep-all-006.html [ Pass Failure ] -external/wpt/css/css-text/word-break/word-break-keep-all-007.html [ Pass Failure ] -external/wpt/css/css-text/word-break/word-break-keep-all-008.html [ Pass Failure ] -external/wpt/css/css-transitions/CSSPseudoElement-getAnimations.tentative.html [ Failure ] -external/wpt/css/css-typed-om/interfaces.html [ Failure ] -external/wpt/css/css-typed-om/the-stylepropertymap/computed/get-auto-min-size.html [ Pass Failure ] -external/wpt/css/css-ui/appearance-textfield-001.html [ Pass Failure ] -external/wpt/css/css-ui/outline-006.html [ Pass Failure ] -external/wpt/css/css-ui/text-overflow-016.html [ Failure ] -external/wpt/css/css-ui/webkit-appearance-textfield-001.html [ Pass Failure ] -external/wpt/css/css-values/calc-positive-fraction-001.html [ Failure ] -external/wpt/css/css-values/lh-rlh-on-root-001.html [ Failure Pass ] -external/wpt/css/css-variables/variable-presentation-attribute.html [ Failure Pass ] -external/wpt/css/css-writing-modes/bidi-embed-002.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-embed-011.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-isolate-002.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-isolate-011.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-normal-011.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-override-006.html [ Pass Failure ] -external/wpt/css/css-writing-modes/bidi-plaintext-001.html [ Pass Failure ] -external/wpt/css/css-writing-modes/box-offsets-rel-pos-vlr-005.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/box-offsets-rel-pos-vrl-004.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/mongolian-orientation-002.html [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-013.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-vlr-in-htb-020.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-vrl-in-htb-020.xht [ Pass Failure ] -external/wpt/css/cssom-view/MediaQueryList-addListener-handleEvent.html [ Pass Failure ] -external/wpt/css/cssom-view/interfaces.html [ Failure ] -external/wpt/css/cssom-view/offsetTopLeft-trailing-space-inline.html [ Pass Failure ] -external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Failure Timeout ] -external/wpt/css/cssom/CSSStyleSheet-constructable.html [ Pass Failure ] -external/wpt/css/cssom/getComputedStyle-width-scroll.tentative.html [ Failure Pass ] -external/wpt/css/cssom/interfaces.html [ Failure ] -external/wpt/css/filter-effects/backdrop-filter-basic-opacity-2.html [ Pass Failure ] -external/wpt/css/filter-effects/backdrop-filter-plus-filter.html [ Failure ] -external/wpt/css/filter-effects/backdrop-filter-reference-filter.html [ Failure ] -external/wpt/css/filter-effects/css-filters-animation-blur.html [ Pass Failure ] -external/wpt/css/filter-effects/css-filters-animation-combined-001.html [ Pass Failure ] -external/wpt/css/filter-effects/css-filters-animation-opacity.html [ Failure ] -external/wpt/css/filter-effects/interfaces.any.html [ Failure ] -external/wpt/css/mediaqueries/test_media_queries.html [ Failure ] -external/wpt/css/selectors/remove-hovered-element.html [ Timeout ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-001.html [ Pass Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-002.html [ Pass Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-select-elem-005.html [ Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/remove-from-split-inline-2.html [ Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/ib-split/remove-from-split-inline-4.html [ Failure ] -external/wpt/document-policy/required-policy/separate-document-policies.html [ Pass Failure ] -external/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html [ Failure ] -external/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html [ Failure ] -external/wpt/dom/interfaces.html?exclude=Node [ Failure ] -external/wpt/dom/ranges/Range-set.html [ Pass Failure ] -external/wpt/domparsing/interfaces.any.worker.html [ Failure ] -external/wpt/editing/run/bold.html?1-1000 [ Failure Pass ] -external/wpt/editing/run/bold.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/bold.html?2001-3000 [ Failure Pass ] -external/wpt/editing/run/delete.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/italic.html?1-1000 [ Failure Pass ] -external/wpt/editing/run/italic.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/justifycenter.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/justifycenter.html?2001-3000 [ Failure Pass ] -external/wpt/editing/run/justifycenter.html?4001-5000 [ Failure Pass ] -external/wpt/editing/run/justifycenter.html?5001-6000 [ Failure Pass ] -external/wpt/editing/run/justifyfull.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/justifyfull.html?2001-3000 [ Failure Pass ] -external/wpt/editing/run/justifyfull.html?4001-last [ Failure Pass ] -external/wpt/editing/run/justifyright.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/justifyright.html?2001-3000 [ Failure Pass ] -external/wpt/editing/run/justifyright.html?4001-last [ Failure Pass ] -external/wpt/editing/run/strikethrough.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/strikethrough.html?2001-last [ Failure Pass ] -external/wpt/editing/run/subscript.html [ Failure Pass ] -external/wpt/editing/run/superscript.html [ Failure Pass ] -external/wpt/editing/run/underline.html?1001-2000 [ Failure Pass ] -external/wpt/editing/run/underline.html?2001-last [ Failure Pass ] -external/wpt/encoding/streams/realms.window.html [ Failure Pass ] -external/wpt/encrypted-media/clearkey-check-encryption-scheme.https.html [ Failure Pass ] -external/wpt/event-timing/buffered-flag.html [ Timeout ] -external/wpt/event-timing/retrievability.html [ Timeout ] -external/wpt/event-timing/retrieve-firstInput.html [ Failure Pass ] -external/wpt/event-timing/timingconditions.html [ Timeout ] -external/wpt/eventsource/eventsource-constructor-url-bogus.any.html [ Pass Failure ] -external/wpt/feature-policy/experimental-features/lazyload/lazyload-disabled-tentative.sub.html [ Pass Failure ] -external/wpt/feature-policy/experimental-features/lazyload/lazyload-enabled-tentative.sub.html [ Pass Failure ] -external/wpt/feature-policy/experimental-features/lazyload/loading-frame-default-eager-disabled-tentative.sub.html [ Pass Failure ] -external/wpt/feature-policy/reporting/fullscreen-report-only.html [ Timeout ] -external/wpt/feature-policy/reporting/picture-in-picture-report-only.html [ Failure Pass ] -external/wpt/fetch/api/basic/accept-header.any.html [ Failure Pass ] -external/wpt/fetch/api/basic/accept-header.any.worker.html [ Failure Pass ] -external/wpt/fetch/api/idl.any.html [ Failure ] -external/wpt/fetch/api/idl.any.serviceworker.html [ Failure ] -external/wpt/fetch/api/idl.any.sharedworker.html [ Failure ] -external/wpt/fetch/api/idl.any.worker.html [ Failure ] -external/wpt/fetch/api/redirect/redirect-count.any.html [ Pass Failure ] -external/wpt/fetch/api/redirect/redirect-count.any.worker.html [ Pass Failure ] -external/wpt/fetch/sec-metadata/trailing-dot.tentative.https.sub.html [ Failure ] -external/wpt/fetch/sec-metadata/xslt.tentative.https.sub.html [ Failure ] -external/wpt/fetch/stale-while-revalidate/fetch-sw.https.html [ Failure Pass ] -external/wpt/fetch/stale-while-revalidate/fetch.html [ Failure Pass ] -external/wpt/forced-colors-mode/forced-colors-mode-03.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-04.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-09.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-10.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-11.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-20.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-21.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-25.html [ Pass Failure ] -external/wpt/forced-colors-mode/forced-colors-mode-26.html [ Pass Failure ] -external/wpt/fullscreen/api/element-request-fullscreen.html [ Timeout ] -external/wpt/fullscreen/rendering/fullscreen-css-transition.html [ Timeout ] -external/wpt/geolocation-API/PositionOptions.https.html [ Pass Failure ] -external/wpt/gyroscope/Gyroscope-iframe-access.https.html [ Failure Pass ] -external/wpt/gyroscope/Gyroscope.https.html [ Failure Pass ] -external/wpt/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html [ Failure Pass ] -external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/004.html [ Failure ] -external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Failure ] -external/wpt/html/browsers/history/the-location-interface/per-global.window.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Pass Failure ] -external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Pass Failure ] -external/wpt/html/cross-origin-opener-policy/blob-popup.https.html [ Pass Failure ] -external/wpt/html/cross-origin-opener/new_window_null.tentative.html [ Failure ] -external/wpt/html/cross-origin-opener/new_window_same_origin.tentative.html [ Failure ] -external/wpt/html/cross-origin-opener/new_window_same_origin_unsafe_allow_outgoing.tentative.html [ Failure ] -external/wpt/html/cross-origin-opener/new_window_same_site.tentative.html [ Failure ] -external/wpt/html/cross-origin-opener/new_window_same_site_unsafe_allow_outgoing.tentative.html [ Failure ] -external/wpt/html/dom/documents/resource-metadata-management/document-lastModified-01.html [ Pass Failure ] -external/wpt/html/dom/elements/global-attributes/dir_auto-N-EN.html [ Failure Pass ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002b.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006b.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006c.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009a.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009b.html [ Failure ] -external/wpt/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-009c.html [ Failure ] -external/wpt/html/dom/interfaces.https.html?exclude=(Document|Window|HTML.\*) [ Failure Pass ] -external/wpt/html/dom/interfaces.https.html?include=(Document|Window) [ Failure ] -external/wpt/html/dom/interfaces.https.html?include=HTML.\* [ Failure ] -external/wpt/html/dom/interfaces.worker.html [ Failure ] -external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-002.html [ Failure ] -external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-004.html [ Failure ] -external/wpt/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-005.html [ Failure ] -external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel.https.html [ Pass Failure ] -external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Failure ] -external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html [ Failure ] -external/wpt/html/rendering/non-replaced-elements/form-controls/select-sizing-001.html [ Pass Failure ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-content-before-legend.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-generated-content.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html [ Failure Pass ] -external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html [ Failure Pass ] -external/wpt/html/rendering/widgets/button-layout/abspos.html [ Failure Pass ] -external/wpt/html/rendering/widgets/button-layout/grid.html [ Failure Pass ] -external/wpt/html/rendering/widgets/button-layout/propagate-text-decoration.html [ Pass Failure ] -external/wpt/html/semantics/document-metadata/the-link-element/stylesheet-not-removed-until-next-stylesheet-loads.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ] -external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html [ Timeout ] -external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html [ Pass Failure ] -external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html [ Failure ] -external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html [ Failure ] -external/wpt/html/semantics/forms/textfieldselection/selection-not-application-textarea.html [ Failure Pass ] -external/wpt/html/semantics/forms/the-input-element/maxlength-number.html [ Pass Failure Timeout ] -external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/json-module-service-worker-test.https.tentative.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/module.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.serviceworker.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.sharedworker.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.any.worker.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/utf8.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html [ Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html [ Pass Failure ] -external/wpt/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml [ Pass Failure ] -external/wpt/html/user-activation/activation-api-iframe.tentative.html [ Pass Failure ] -external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.worker.html [ Failure Pass ] -external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.html [ Failure ] -external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Pass Failure ] -external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html [ Pass Failure ] -external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Failure Pass ] -external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html [ Failure Pass ] -external/wpt/idle-detection/basics.tentative.https.any.html [ Failure ] -external/wpt/idle-detection/basics.tentative.https.any.worker.html [ Failure ] -external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html [ Failure ] -external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html [ Failure ] -external/wpt/idle-detection/idlharness.https.any.html [ Failure ] -external/wpt/idle-detection/idlharness.https.any.worker.html [ Failure ] -external/wpt/idle-detection/interceptor.https.html [ Failure ] -external/wpt/import-maps/resolving.tentative.html [ Failure ] -external/wpt/infrastructure/assumptions/ahem.html [ Failure ] -external/wpt/infrastructure/assumptions/blank.html [ Pass Failure ] -external/wpt/infrastructure/reftest/reftest_and_fail.html [ Failure ] -external/wpt/infrastructure/reftest/reftest_fuzzy_1.html [ Pass Failure ] -external/wpt/infrastructure/reftest/reftest_wait_TestRendered.html [ Pass Failure ] -external/wpt/infrastructure/server/http2-context.sub.h2.any.html [ Pass Failure ] # overwrites fail -external/wpt/infrastructure/server/http2-context.sub.h2.any.serviceworker.html [ Pass Failure ] # overwrites fail -external/wpt/infrastructure/server/http2-context.sub.h2.any.sharedworker.html [ Pass Failure ] # overwrites fail -external/wpt/infrastructure/server/http2-context.sub.h2.any.worker.html [ Pass Failure ] # overwrites fail -external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html [ Pass Failure ] -external/wpt/infrastructure/testdriver/actions/elementTiming.html [ Pass Failure ] -external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Pass Failure ] -external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Pass Failure ] -external/wpt/input-events/input-events-exec-command.html [ Failure Pass ] -external/wpt/input-events/input-events-typing.html [ Pass Failure ] -external/wpt/kv-storage/key-types.https.html [ Pass Failure ] -external/wpt/layout-instability/buffer-layout-shift.html [ Timeout Pass ] -external/wpt/lifecycle/freeze.html [ Failure ] -external/wpt/longtask-timing/idlharness.window.html [ Failure ] -external/wpt/mathml/presentation-markup/direction/direction.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/operators/operator-dictionary-001.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/operators/operator-dictionary-002.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-2.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-3.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-5.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/subsup-parameters-2.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/underover-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/spaces/space-1.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/spaces/space-like-001.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/spaces/space-like-002.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/spaces/space-like-003.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/attribute-mapping-002.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/displaystyle-2.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/ignored-properties-001.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/lengths-2.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html [ Pass Failure ] -external/wpt/mathml/relations/css-styling/width-height-001.html [ Pass Failure ] -external/wpt/mathml/relations/html5-tree/display-1.html [ Pass Failure ] -external/wpt/mathml/relations/html5-tree/href-click-3.html [ Pass Failure ] -external/wpt/mathml/relations/html5-tree/integration-point-4.html [ Pass Failure ] -external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Pass Failure ] -external/wpt/mathml/relations/text-and-math/use-typo-metrics-1.html [ Pass Failure ] -external/wpt/media-source/idlharness.any.html [ Failure ] -external/wpt/media-source/idlharness.any.worker.html [ Failure ] -external/wpt/media-source/mediasource-avtracks.html [ Pass Failure ] -external/wpt/media-source/mediasource-changetype-play-implicit.html [ Pass Failure ] -external/wpt/media-source/mediasource-changetype-play-negative.html [ Pass Failure ] -external/wpt/media-source/mediasource-changetype-play-without-codecs-parameter.html [ Pass Failure ] -external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Pass Failure ] -external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Pass Failure ] -external/wpt/media-source/mediasource-detach.html [ Pass Failure ] -external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Pass Failure ] -external/wpt/mediacapture-fromelement/ended.html [ Pass Failure ] -external/wpt/mediacapture-record/MediaRecorder-destroy-script-execution.html [ Pass Failure ] -external/wpt/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html [ Failure ] -external/wpt/mimesniff/mime-types/charset-parameter.window.html [ Failure Pass ] -external/wpt/mimesniff/mime-types/parsing.any.html [ Failure Pass ] -external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Pass Failure ] -external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data/same-https.keep-scheme.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module/same-https.keep-scheme.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data/same-https.keep-scheme.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module/same-https.keep-scheme.https.html [ Pass Failure ] # subtest_failure -external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module/same-https.no-redirect.https.html [ Pass Failure ] # subtest_failure -external/wpt/notifications/constructor-basic.html [ Failure ] -external/wpt/notifications/constructor-invalid.html [ Failure ] -external/wpt/notifications/event-onclose.html [ Failure ] -external/wpt/notifications/event-onshow.html [ Failure ] -external/wpt/notifications/instance.html [ Failure ] -external/wpt/notifications/lang.html [ Failure ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.copy.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.destination-over.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.lighter.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.source-over.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.canvas.xor.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.globalAlpha.image.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.globalAlpha.imagepattern.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.copy.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.destination-over.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.lighter.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.source-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.source-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.source-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.source-over.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.image.xor.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.copy.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.destination-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.destination-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.source-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.image.source-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.copy.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.destination-atop.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.destination-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.source-in.html [ Failure Pass ] -external/wpt/offscreen-canvas/compositing/2d.composite.uncovered.pattern.source-out.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.3arg.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.5arg.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.basic.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.destpos.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.destsize.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcepos.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.9arg.sourcesize.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.alpha.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.broken.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.clip.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.composite.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.floatsource.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativedest.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativedir.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.negativesource.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.nonfinite.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.nowrap.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.path.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.svg.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.transform.html [ Failure Pass ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerosource.html [ Failure ] -external/wpt/offscreen-canvas/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html [ Failure ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html [ Failure ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html [ Failure Pass ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html [ Failure Pass ] -external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.section.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html [ Failure ] -external/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html [ Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit.html [ Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.resize.html [ Failure Pass ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.html [ Pass Failure ] -external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https.html [ Failure Pass ] -external/wpt/orientation-sensor/RelativeOrientationSensor-iframe-access.https.html [ Failure Pass ] -external/wpt/paint-timing/sibling-painting-first-image.html [ Pass Failure ] -external/wpt/payment-request/payment-is-showing.https.html [ Failure ] -external/wpt/payment-request/payment-request-canmakepayment-method-protection.https.html [ Failure Pass ] -external/wpt/payment-request/payment-request-canmakepayment-method.https.html [ Failure ] -external/wpt/payment-request/payment-request-hasenrolledinstrument-method.tentative.https.html [ Failure ] -external/wpt/payment-request/payment-request-show-method.https.html [ Failure ] -external/wpt/picture-in-picture/css-selector.html [ Failure Pass ] -external/wpt/picture-in-picture/disable-picture-in-picture.html [ Failure Pass ] -external/wpt/picture-in-picture/enter-picture-in-picture.html [ Failure Pass ] -external/wpt/picture-in-picture/exit-picture-in-picture.html [ Failure Pass ] -external/wpt/picture-in-picture/idlharness.window.html [ Failure Pass ] -external/wpt/picture-in-picture/leave-picture-in-picture.html [ Failure Pass ] -external/wpt/picture-in-picture/mediastream.html [ Failure Pass ] -external/wpt/picture-in-picture/picture-in-picture-element.html [ Failure Pass ] -external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure Pass ] -external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure Pass ] -external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure Pass ] -external/wpt/picture-in-picture/shadow-dom.html [ Failure Pass ] -external/wpt/pointerevents/extension/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Failure ] -external/wpt/pointerevents/idlharness.window.html [ Failure Pass ] -external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html [ Failure Pass ] -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-keyboard.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-pan-left-css_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerevent_touch-action-svg-none-test_touch.html [ Pass Failure ] -external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Timeout ] -external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Timeout ] -external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Failure Pass ] -external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture.html [ Failure Pass ] -external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Timeout ] -external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Timeout ] -external/wpt/pointerlock/mouse_buttons_back_forward.html [ Timeout ] -external/wpt/pointerlock/pointerlock_remove_target.html [ Timeout ] -external/wpt/pointerlock/pointerlock_shadow.html [ Timeout ] -external/wpt/portals/htmlportalelement-event-handler-content-attributes.html [ Failure ] -external/wpt/portals/portal-activate-data.html [ Timeout ] -external/wpt/portals/portal-activate-event-constructor.html [ Failure ] -external/wpt/portals/portal-activate-event.html [ Timeout ] -external/wpt/portals/portal-non-http-navigation.html [ Timeout ] -external/wpt/portals/portal-onload-event.html [ Timeout ] -external/wpt/portals/portals-activate-inside-iframe.html [ Failure ] -external/wpt/portals/portals-activate-inside-portal.html [ Timeout ] -external/wpt/portals/portals-activate-no-browsing-context.html [ Failure ] -external/wpt/portals/portals-activate-resolution.html [ Timeout ] -external/wpt/portals/portals-activate-twice.html [ Timeout ] -external/wpt/portals/portals-adopt-predecessor.html [ Timeout ] -external/wpt/portals/portals-cross-origin-load.sub.html [ Timeout ] -external/wpt/portals/portals-host-exposure.sub.html [ Timeout ] -external/wpt/portals/portals-host-hidden-after-activation.html [ Timeout ] -external/wpt/portals/portals-host-null.html [ Failure ] -external/wpt/portals/portals-host-post-message.sub.html [ Timeout ] -external/wpt/portals/portals-navigate-after-adoption.html [ Timeout ] -external/wpt/portals/portals-nested.html [ Timeout ] -external/wpt/portals/portals-post-message.sub.html [ Timeout ] -external/wpt/portals/portals-referrer-inherit-header.html [ Failure ] -external/wpt/portals/portals-referrer-inherit-meta.html [ Failure ] -external/wpt/portals/portals-referrer.html [ Failure ] -external/wpt/portals/portals-rendering.html [ Failure Timeout ] -external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Pass Failure ] -external/wpt/quirks/percentage-height-calculation.html [ Pass Failure ] -external/wpt/quirks/table-cell-nowrap-minimum-width-calculation.html [ Pass Failure ] -external/wpt/reporting/bufferSize.html [ Pass Failure ] -external/wpt/reporting/disconnect.html [ Pass Failure ] -external/wpt/reporting/generateTestReport.html [ Pass Failure ] -external/wpt/reporting/idlharness.window.html [ Failure ] -external/wpt/reporting/nestedReport.html [ Pass Failure ] -external/wpt/reporting/order.html [ Pass Failure ] -external/wpt/requestidlecallback/callback-timeout-when-busy.html [ Pass Failure ] -external/wpt/requestidlecallback/callback-timeout.html [ Pass Failure ] -external/wpt/requestidlecallback/callback-xhr-sync.html [ Pass Failure ] -external/wpt/resource-timing/crossorigin-sandwich-TAO.sub.html [ Pass Failure ] -external/wpt/screen-capture/feature-policy.https.html [ Failure ] -external/wpt/screen-capture/getdisplaymedia.https.html [ Failure ] -external/wpt/screen-orientation/active-lock.html [ Timeout ] -external/wpt/screen-orientation/event-before-promise.html [ Timeout ] -external/wpt/screen-orientation/lock-basic.html [ Timeout ] -external/wpt/screen-orientation/lock-sandboxed-iframe.html [ Failure ] -external/wpt/screen-orientation/lock-unlock-check.html [ Timeout ] -external/wpt/scroll-behavior-smooth.html [ Failure Timeout ] -external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Pass Failure ] -external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Failure ] -external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Timeout ] -external/wpt/service-workers/service-worker/update-no-cache-request-headers.https.html [ Failure ] -external/wpt/shape-detection/detected-boundingBox-read-only.https.html [ Timeout ] -external/wpt/shape-detection/detected-postMessage.https.html [ Pass Failure ] # subtest_failure -external/wpt/shape-detection/detection-HTMLCanvasElement.https.html [ Timeout ] -external/wpt/shape-detection/detection-HTMLImageElement.https.html [ Timeout ] -external/wpt/shape-detection/detection-HTMLVideoElement.https.html [ Timeout ] -external/wpt/shape-detection/detection-ImageBitmap.https.html [ Timeout ] -external/wpt/shape-detection/detection-ImageData.https.html [ Timeout ] -external/wpt/shape-detection/detection-getSupportedFormats.https.html [ Timeout ] -external/wpt/shape-detection/detection-on-worker.https.worker.html [ Failure Pass ] -external/wpt/shape-detection/detection-options.https.html [ Timeout ] -external/wpt/shape-detection/detection-security-test.https.html [ Pass Failure ] -external/wpt/shape-detection/detector-same-object.https.html [ Timeout ] -external/wpt/shape-detection/idlharness.https.any.html [ Timeout ] -external/wpt/shape-detection/idlharness.https.any.serviceworker.html [ Failure ] -external/wpt/shape-detection/idlharness.https.any.sharedworker.html [ Failure ] -external/wpt/shape-detection/idlharness.https.any.worker.html [ Failure ] -external/wpt/shape-detection/shapedetection-cross-origin.sub.https.html [ Pass Failure ] -external/wpt/signed-exchange/appcache/sxg-inner-resp-over-appcache.tentative.https.html [ Failure Pass ] -external/wpt/signed-exchange/check-cert-request.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/fallback-to-another-sxg.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/nested-sxg.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error-downgraded.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-failed-zero-success-fraction.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-invalid_integrity_header.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-origin-referrer.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-parse_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error-downgraded.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error-downgraded.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error-downgraded.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-ok.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-parse_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error-downgraded.tentative.html [ Timeout ] -external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error.tentative.html [ Timeout ] -external/wpt/signed-exchange/subresource/sxg-subresource.tentative.html [ Timeout ] -external/wpt/signed-exchange/sxg-data-cert-url.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-double-prefetch.tentative.html [ Timeout ] -external/wpt/signed-exchange/sxg-fallback-with-fragment.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-hsts.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-invalid-validity-url.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-location-fragment.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-location.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-navigation-timing.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-non-secure-origin.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-noncacheable.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-prefetch-resource-timing.tentative.html [ Timeout ] -external/wpt/signed-exchange/sxg-referrer-policy-header.tentative.https.html [ Timeout ] -external/wpt/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html [ Timeout ] -external/wpt/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html [ Timeout ] -external/wpt/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html [ Timeout ] -external/wpt/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html [ Timeout ] -external/wpt/signed-exchange/sxg-utf8-inner-url.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-variants-match.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-variants-mismatch.tentative.html [ Failure Pass ] -external/wpt/signed-exchange/sxg-version1b2.tentative.html [ Failure Pass ] -external/wpt/sms/idlharness.https.any.html [ Failure Pass ] -external/wpt/sms/idlharness.https.any.worker.html [ Failure Pass ] -external/wpt/sms/interceptor.https.html [ Timeout Failure ] -external/wpt/sms/sms-top-level-frame-only.https.html [ Timeout ] -external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Pass Failure ] -external/wpt/speech-api/historical.html [ Failure ] -external/wpt/streams/readable-byte-streams/construct-byob-request.any.html [ Failure ] -external/wpt/streams/readable-byte-streams/construct-byob-request.any.serviceworker.html [ Failure ] -external/wpt/streams/readable-byte-streams/construct-byob-request.any.sharedworker.html [ Failure ] -external/wpt/streams/readable-byte-streams/construct-byob-request.any.worker.html [ Failure ] -external/wpt/svg/painting/inheritance.svg [ Failure ] -external/wpt/svg/shapes/reftests/pathlength-002.svg [ Pass Failure ] -external/wpt/svg/text/inheritance.svg [ Failure ] -external/wpt/svg/text/parsing/shape-inside-valid.svg [ Failure Pass ] -external/wpt/svg/text/parsing/shape-subtract-valid.svg [ Failure Pass ] -external/wpt/svg/text/parsing/text-decoration-fill-valid.svg [ Failure Pass ] -external/wpt/svg/text/parsing/text-decoration-stroke-valid.svg [ Failure Pass ] -external/wpt/svg/text/reftests/text-inline-size-003.svg [ Pass Failure ] -external/wpt/svg/text/reftests/text-multiline-003.svg [ Pass Failure ] -external/wpt/svg/types/elements/SVGGeometryElement-rect.svg [ Failure ] -external/wpt/svg/types/scripted/SVGAnimatedRect.html [ Failure Pass ] -external/wpt/svg/types/scripted/SVGGeometryElement.isPointInFill-01.svg [ Failure Pass ] -external/wpt/svg/types/scripted/SVGGeometryElement.isPointInStroke-01.svg [ Failure Pass ] -external/wpt/svg/types/scripted/SVGGraphicsElement.svg [ Failure Pass ] -external/wpt/svg/types/scripted/SVGLength-px.html [ Failure Pass ] -external/wpt/touch-events/historical.html [ Failure Pass ] -external/wpt/touch-events/touch-globaleventhandler-interface.html [ Failure Pass ] -external/wpt/trusted-types/block-string-assignment-to-DOMWindowTimers-setTimeout-setInterval.tentative.html [ Failure ] -external/wpt/trusted-types/eval-csp-no-tt.tentative.html [ Pass Failure ] -external/wpt/trusted-types/eval-no-csp-no-tt-default-policy.tentative.html [ Pass Failure ] -external/wpt/trusted-types/eval-no-csp-no-tt.tentative.html [ Pass Failure ] external/wpt/upgrade-insecure-requests/module-worker-redirect-upgrade.https.html [ Failure ] external/wpt/upgrade-insecure-requests/module-worker-upgrade.https.html [ Failure ] external/wpt/upgrade-insecure-requests/shared-worker-redirect-upgrade.https.html [ Failure ] @@ -1039,23 +1443,27 @@ external/wpt/upgrade-insecure-requests/worker-redirect-upgrade.https.html [ Failure ] external/wpt/upgrade-insecure-requests/worker-subresource-fetch-upgrade.https.html [ Failure ] external/wpt/upgrade-insecure-requests/worker-upgrade.https.html [ Failure ] -external/wpt/url/a-element-origin-xhtml.xhtml [ Failure Pass ] -external/wpt/url/a-element-origin.html [ Failure Pass ] -external/wpt/url/a-element-xhtml.xhtml [ Failure Pass ] -external/wpt/url/a-element.html [ Failure Pass ] -external/wpt/url/failure.html [ Failure Pass ] -external/wpt/url/url-constructor.html [ Failure Pass ] -external/wpt/url/url-origin.html [ Failure Pass ] -external/wpt/url/url-setters.html [ Failure Pass ] +external/wpt/url/a-element-origin-xhtml.xhtml [ Pass ] # wpt_subtest_failure +external/wpt/url/a-element-origin.html [ Pass ] # wpt_subtest_failure +external/wpt/url/a-element-xhtml.xhtml [ Pass ] # wpt_subtest_failure +external/wpt/url/a-element.html [ Pass ] # wpt_subtest_failure +external/wpt/url/failure.html [ Pass ] # wpt_subtest_failure +external/wpt/url/url-constructor.html [ Pass ] # wpt_subtest_failure +external/wpt/url/url-origin.html [ Pass ] # wpt_subtest_failure +external/wpt/url/url-setters.html [ Pass ] # wpt_subtest_failure external/wpt/vibration/silent-ignore.html [ Failure Pass ] external/wpt/wake-lock/idlharness.https.any.html [ Pass Failure Crash ] -external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Pass Failure Crash ] -external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html [ Pass Failure Crash ] -external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html [ Pass Failure Crash ] -external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html [ Pass Failure Crash ] +external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.worker.html [ Failure ] +external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Timeout ] # wpt_subtest_failure +external/wpt/wasm/serialization/module/broadcastchannel-success.html [ Timeout ] # wpt_subtest_failure +external/wpt/wasm/serialization/module/no-transferring.html [ Failure Pass ] # wpt_subtest_failure external/wpt/web-animations/interfaces/Animatable/animate-no-browsing-context.html [ Failure Pass ] external/wpt/web-animations/interfaces/Animatable/animate.html [ Failure Pass ] -external/wpt/web-animations/interfaces/Animatable/getAnimations.html [ Failure Pass ] +external/wpt/web-animations/interfaces/Animatable/getAnimations.html [ Pass ] # wpt_subtest_failure external/wpt/web-animations/interfaces/Animation/idlharness.window.html [ Failure ] external/wpt/web-animations/interfaces/Document/getAnimations.html [ Failure ] external/wpt/web-animations/interfaces/KeyframeEffect/constructor.html [ Failure Pass ] @@ -1064,74 +1472,100 @@ external/wpt/web-animations/interfaces/KeyframeEffect/setKeyframes.html [ Failure Pass ] external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events.html [ Failure Pass ] external/wpt/web-animations/timing-model/animation-effects/phases-and-states.html [ Pass Failure ] -external/wpt/web-animations/timing-model/timelines/timelines.html [ Pass Failure ] -external/wpt/web-animations/timing-model/timelines/update-and-send-events.html [ Pass Failure ] -external/wpt/web-locks/clientids.tentative.https.html [ Failure ] +external/wpt/web-animations/timing-model/animations/reverse-running-animation.html [ Pass Failure ] +external/wpt/web-animations/timing-model/timelines/timelines.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/web-animations/timing-model/timelines/update-and-send-events-replacement.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/web-animations/timing-model/timelines/update-and-send-events.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/web-locks/clientids.tentative.https.html [ Failure Pass ] external/wpt/web-locks/query-ordering.tentative.https.html [ Pass Failure ] -external/wpt/web-nfc/NDEFWriter_write.https.html [ Failure Timeout ] +external/wpt/web-nfc/NDEFReader_scan.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/web-nfc/NDEFReader_scan_filter.https.html [ Timeout ] +external/wpt/web-nfc/NDEFReader_scan_iframe.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/web-nfc/NDEFWriter_write.https.html [ Failure Timeout ] # wpt_subtest_failure external/wpt/web-share/share-sharePromise-internal-slot.https.html [ Pass Failure ] -external/wpt/webaudio/the-audio-api/processing-model/cycle-without-delay.html [ Pass Failure ] -external/wpt/webaudio/the-audio-api/processing-model/delay-time-clamping.html [ Pass Failure ] -external/wpt/webaudio/the-audio-api/processing-model/feedback-delay-time.html [ Pass Failure ] +external/wpt/webaudio/the-audio-api/processing-model/cycle-without-delay.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webaudio/the-audio-api/processing-model/delay-time-clamping.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webaudio/the-audio-api/processing-model/feedback-delay-time.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html [ Timeout ] # wpt_subtest_failure +external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html [ Timeout ] # wpt_subtest_failure external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html [ Pass Crash ] external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html [ Pass Failure ] +external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/webaudio/the-audio-api/the-audioworklet-interface/suspended-context-messageport.https.html [ Pass Failure ] # wpt_subtest_failure external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html [ Pass Failure ] external/wpt/webaudio/the-audio-api/the-mediastreamaudiosourcenode-interface/mediastreamaudiosourcenode-routing.html [ Pass Failure ] -external/wpt/webauthn/createcredential-extensions.https.html [ Timeout ] +external/wpt/webaudio/the-audio-api/the-offlineaudiocontext-interface/offlineaudiocontext-detached-execution-context.tentative.html [ Failure ] +external/wpt/webauthn/createcredential-badargs-authnrselection.https.html [ Failure ] +external/wpt/webauthn/createcredential-excludecredentials.https.html [ Failure ] +external/wpt/webauthn/createcredential-extensions.https.html [ Failure Timeout ] +external/wpt/webauthn/createcredential-passing.https.html [ Failure ] +external/wpt/webauthn/createcredential-pubkeycredparams.https.html [ Failure ] external/wpt/webauthn/createcredential-timeout.https.html [ Failure Pass ] -external/wpt/webmessaging/broadcastchannel/sandbox.html [ Pass Failure ] -external/wpt/webmessaging/with-options/broken-origin.html [ Pass Failure ] -external/wpt/webmessaging/with-ports/001.html [ Pass Failure ] -external/wpt/webmessaging/without-ports/001.html [ Pass Failure ] -external/wpt/webrtc-identity/RTCPeerConnection-constructor.html [ Failure ] -external/wpt/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html [ Failure ] -external/wpt/webrtc-identity/RTCPeerConnection-peerIdentity.https.html [ Failure ] +external/wpt/webauthn/getcredential-badargs-rpid.https.html [ Failure ] +external/wpt/webauthn/getcredential-badargs-userverification.https.html [ Failure ] +external/wpt/webauthn/getcredential-extensions.https.html [ Failure ] +external/wpt/webauthn/getcredential-passing.https.html [ Failure ] +external/wpt/webauthn/getcredential-timeout.https.html [ Failure ] +external/wpt/webauthn/webauthn-testdriver-basic.https.html [ Failure ] +external/wpt/webmessaging/broadcastchannel/sandbox.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webmessaging/with-options/broken-origin.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webmessaging/with-ports/001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webmessaging/without-ports/001.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/webrtc-identity/RTCPeerConnection-constructor.html [ Failure Pass ] +external/wpt/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html [ Failure Pass ] +external/wpt/webrtc-identity/RTCPeerConnection-peerIdentity.https.html [ Failure Pass ] external/wpt/webrtc-stats/getStats-remote-candidate-address.html [ Failure Pass ] -external/wpt/webrtc/RTCCertificate-postMessage.html [ Failure ] -external/wpt/webrtc/RTCCertificate.html [ Failure ] -external/wpt/webrtc/RTCConfiguration-iceServers.html [ Failure ] -external/wpt/webrtc/RTCConfiguration-iceTransportPolicy.html [ Failure ] -external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html [ Failure ] -external/wpt/webrtc/RTCDataChannel-bufferedAmount.html [ Failure ] -external/wpt/webrtc/RTCDataChannel-send.html [ Failure ] -external/wpt/webrtc/RTCIceTransport.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-addTransceiver.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-canTrickleIceCandidates.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-constructor.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-createAnswer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-createDataChannel.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-createOffer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-generateCertificate.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-getStats.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-iceGatheringState.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-mandatory-getStats.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-restartIce.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback.html [ Failure ] +external/wpt/webrtc/RTCCertificate-postMessage.html [ Failure Pass ] +external/wpt/webrtc/RTCCertificate.html [ Failure Pass ] +external/wpt/webrtc/RTCConfiguration-iceServers.html [ Failure Pass ] +external/wpt/webrtc/RTCConfiguration-iceTransportPolicy.html [ Failure Pass ] +external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html [ Failure Pass ] +external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Failure ] +external/wpt/webrtc/RTCDataChannel-bufferedAmount.html [ Failure Pass ] +external/wpt/webrtc/RTCDataChannel-send.html [ Failure Pass ] +external/wpt/webrtc/RTCIceTransport.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-addTransceiver.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-canTrickleIceCandidates.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-constructor.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-createAnswer.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-createDataChannel.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-createOffer.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-generateCertificate.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-getDefaultIceServers.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-getStats.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-iceGatheringState.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-mandatory-getStats.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-operations.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/webrtc/RTCPeerConnection-restartIce.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback.html [ Failure Pass ] external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-setRemoteDescription.html [ Failure ] -external/wpt/webrtc/RTCPeerConnection-track-stats.https.html [ Failure ] -external/wpt/webrtc/RTCPeerConnectionIceEvent-constructor.html [ Failure ] -external/wpt/webrtc/RTCRtpParameters-degradationPreference.html [ Failure ] -external/wpt/webrtc/RTCRtpParameters-encodings.html [ Failure ] -external/wpt/webrtc/RTCRtpReceiver-getParameters.html [ Failure ] -external/wpt/webrtc/RTCRtpReceiver-getStats.https.html [ Failure ] -external/wpt/webrtc/RTCRtpSender-getStats.https.html [ Failure ] -external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Failure ] -external/wpt/webrtc/RTCRtpSender-setParameters.html [ Failure ] -external/wpt/webrtc/RTCRtpTransceiver-stop.html [ Failure ] -external/wpt/webrtc/RTCTrackEvent-constructor.html [ Failure ] -external/wpt/webrtc/RTCTrackEvent-fire.html [ Failure ] -external/wpt/webrtc/datachannel-emptystring.html [ Failure ] -external/wpt/webrtc/historical.html [ Failure ] -external/wpt/webrtc/idlharness.https.window.html [ Failure ] +external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html [ Timeout ] # wpt_subtest_failure +external/wpt/webrtc/RTCPeerConnection-setRemoteDescription.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnection-track-stats.https.html [ Failure Pass ] +external/wpt/webrtc/RTCPeerConnectionIceEvent-constructor.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpParameters-degradationPreference.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpParameters-encodings.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpReceiver-getParameters.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpReceiver-getStats.https.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpSender-getStats.https.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpSender-setParameters.html [ Failure Pass ] +external/wpt/webrtc/RTCRtpTransceiver-stop.html [ Failure Pass ] +external/wpt/webrtc/RTCTrackEvent-constructor.html [ Failure Pass ] +external/wpt/webrtc/RTCTrackEvent-fire.html [ Failure Pass ] +external/wpt/webrtc/datachannel-emptystring.html [ Failure Pass ] +external/wpt/webrtc/historical.html [ Failure Pass ] +external/wpt/webrtc/idlharness.https.window.html [ Failure Pass ] +external/wpt/webrtc/protocol/video-codecs.https.html [ Pass ] # wpt_subtest_failure external/wpt/websockets/Close-1000-reason.any.html [ Failure Pass ] external/wpt/websockets/Close-1000-reason.any.worker.html [ Failure Pass ] external/wpt/websockets/Close-1000.any.html [ Failure Pass ] @@ -1242,6 +1676,7 @@ external/wpt/websockets/closing-handshake/004.html?wss [ Failure Pass ] external/wpt/websockets/constructor/002.html [ Failure Pass ] external/wpt/websockets/constructor/002.html?wss [ Failure Pass ] +external/wpt/websockets/cookies/third-party-cookie-accepted.https.html [ Pass ] # wpt_subtest_failure external/wpt/websockets/interfaces/CloseEvent/clean-close.html [ Failure Pass ] external/wpt/websockets/interfaces/CloseEvent/clean-close.html?wss [ Failure Pass ] external/wpt/websockets/interfaces/WebSocket/close/close-connecting.html [ Failure Pass ] @@ -1254,12 +1689,17 @@ external/wpt/websockets/opening-handshake/003.html [ Failure Pass ] external/wpt/websockets/opening-handshake/003.html?wss [ Failure Pass ] external/wpt/websockets/opening-handshake/005.html [ Failure Pass ] +external/wpt/websockets/opening-handshake/005.html?wss [ Pass ] # wpt_subtest_failure +external/wpt/websockets/stream-tentative/close.any.html [ Pass Timeout ] +external/wpt/websockets/stream-tentative/close.any.serviceworker.html [ Timeout Pass ] +external/wpt/websockets/stream-tentative/close.any.sharedworker.html [ Timeout Pass ] +external/wpt/websockets/stream-tentative/close.any.worker.html [ Timeout Pass ] external/wpt/webstorage/storage_setitem.html [ Failure Pass ] -external/wpt/webusb/idlharness.https.any.html [ Failure ] -external/wpt/webusb/idlharness.https.any.worker.html [ Failure ] -external/wpt/webusb/usb.serviceworker.https.html [ Failure ] +external/wpt/webusb/idlharness.https.any.html [ Failure Pass ] +external/wpt/webusb/idlharness.https.any.worker.html [ Failure Pass ] +external/wpt/webusb/usb.serviceworker.https.html [ Failure Pass ] external/wpt/webvr/idlharness.https.html [ Failure ] -external/wpt/webvtt/api/idlharness.window.html [ Failure ] +external/wpt/webvtt/api/idlharness.window.html [ Failure Pass ] external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html [ Failure Pass ] external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html [ Failure Pass ] external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html [ Failure Pass ] @@ -1268,287 +1708,35 @@ external/wpt/webvtt/rendering/cues-with-video/processing-model/cue_too_long.html [ Pass Failure ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries.html [ Pass Failure ] external/wpt/webvtt/rendering/cues-with-video/processing-model/embedded_style_media_queries_resized.html [ Pass Failure ] -external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html [ Failure ] +external/wpt/webxr/ar-module/xrDevice_isSessionSupported_immersive-ar.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/dom-overlay/ar_dom_overlay.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/events_session_squeeze.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html [ Failure ] # wpt_subtest_failure +external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https.html [ Failure ] # wpt_subtest_failure +external/wpt/workers/abrupt-completion.html [ Pass Failure Timeout ] # wpt_subtest_failure +external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html [ Failure Pass ] external/wpt/workers/data-url-shared.html [ Pass Failure ] external/wpt/workers/interfaces.worker.html [ Failure ] external/wpt/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html [ Failure Pass ] external/wpt/workers/semantics/interface-objects/003.html [ Failure ] external/wpt/workers/semantics/interface-objects/004.html [ Failure ] external/wpt/workers/semantics/multiple-workers/005.html [ Failure Pass ] -external/wpt/xhr/abort-after-send.any.html [ Failure Pass ] +external/wpt/workers/semantics/multiple-workers/007.html [ Timeout ] # wpt_subtest_failure +external/wpt/workers/shared-worker-parse-error-failure.html [ Pass Timeout ] # wpt_subtest_failure +external/wpt/worklets/animation-worklet-service-worker-interception.https.html [ Pass Failure ] # wpt_subtest_failure +external/wpt/x-frame-options/multiple.sub.html [ Timeout ] # wpt_subtest_failure +external/wpt/xhr/abort-after-send.any.html [ Pass ] # wpt_subtest_failure external/wpt/xhr/abort-after-stop.any.worker.html [ Failure ] -external/wpt/xhr/event-readystatechange-loaded.any.html [ Pass Failure ] -external/wpt/xhr/event-readystatechange-loaded.any.worker.html [ Pass Failure ] -external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Pass Failure ] +external/wpt/xhr/event-readystatechange-loaded.any.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/xhr/event-readystatechange-loaded.any.worker.html [ Failure Pass ] # wpt_subtest_failure +external/wpt/xhr/open-url-multi-window-4.htm [ Timeout ] # wpt_subtest_failure +external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Failure Pass ] # wpt_subtest_failure external/wpt/xhr/responsexml-document-properties.htm [ Pass Failure ] external/wpt/xhr/send-accept-language.htm [ Failure Pass ] -external/wpt/xhr/setrequestheader-header-allowed.htm [ Pass Failure ] - -# Here are tests that were failing on WPT waterfall as of Dec. 2, 2019. They are triaged. -# --- -# Reftest with pixel diff. Fails locally. Fails on wpt.fyi -external/wpt/compat/webkit-box-rtl-flex.html [ Failure ] -external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-parent-element-overflow-scroll.html [ Failure ] -external/wpt/css/css-fonts/font-display/font-display-change.html [ Failure ] -external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html [ Pass Failure ] -external/wpt/mathml/presentation-markup/direction/direction-007.html [ Failure Pass ] -external/wpt/mathml/presentation-markup/direction/direction-008.html [ Failure Pass ] -external/wpt/mathml/presentation-markup/direction/direction-010.html [ Failure Pass ] -external/wpt/mathml/presentation-markup/direction/direction-token.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/dynamic-dir-1.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathbackground-001.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathbackground-002.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathbackground-003.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathcolor-001.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathcolor-002.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathcolor-003.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathsize-attribute-css-keywords.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathsize-attribute-legacy-values.html [ Failure Pass ] -external/wpt/mathml/relations/css-styling/mathsize-attribute.html [ Failure Pass ] -external/wpt/mathml/relations/html5-tree/color-attributes-1.html [ Failure Pass ] -# crbug.com/1029945: The forced-colors tests have a dir-level failure expectation in -# TestExpectations that we are not currently handling. -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-01.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-02.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-03.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-04.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-05.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-06.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-08.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-09.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/backplate/forced-colors-mode-backplate-10.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-01.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-02.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-05.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-06.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-07.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-08.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-14.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-17.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-18.tentative.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-19.html [ Failure ] -crbug.com/1029945 external/wpt/forced-colors-mode/forced-colors-mode-23.html [ Failure ] - -# Reftest with pixel diff. Pass locally. Fails on wpt.fyi -crbug.com/1030387 external/wpt/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html [ Failure ] - -# Reftest with pixel diff. Fails locally. Pass on wpt.fyi -crbug.com/1030388 external/wpt/css/CSS2/text/bidi-span-001.html [ Failure ] - -# Reftest with pixel diff. Flaky locally. Flaky on wpt.fyi -external/wpt/css/css-layout-api/fallback-intrinsic-sizes/constructor-error.https.html [ Pass Failure ] -external/wpt/web-animations/timing-model/animations/reverse-running-animation.html [ Pass Failure ] - -# Testharness test. Fail locally. Fail on wpt.fyi -external/wpt/portals/portals-repeated-activate.html [ Failure ] - -# Testharness test. Fail locally. Timeout on wpt.fyi and waterfall. -external/wpt/mathml/relations/html5-tree/tabindex-002.html [ Failure Timeout ] - -# WebXr tests fail because they need mojo stubs. crbug.com/1033611 -crbug.com/1033611 external/wpt/webxr/events_input_source_recreation.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_input_sources_change.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_referenceSpace_reset_inline.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_session_select.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/events_session_select_subframe.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/exclusive_requestFrame_nolayer.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/getInputPose_handedness.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/hit-test/ar_hittest_subscription_states.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/webxr_availability.http.sub.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/webxr_feature_policy.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrBoundedReferenceSpace_updates.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_disconnect_ends.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_immersive_unsupported.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_isSessionSupported_inline.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_no_mode.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_requestSession_requiredFeatures_unknown.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_immersive_unsupported.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrDevice_supportsSession_non_immersive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrFrame_getPose.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrFrame_getViewerPose_getPose.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrFrame_lifetime.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrFrame_session_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrInputSource_add_remove.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrInputSource_emulatedPosition.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrInputSource_profiles.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrInputSource_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrPose_transform_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffset.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrRigidTransform_constructor.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrRigidTransform_inverse.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrRigidTransform_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_cancelAnimationFrame.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_end.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_features_deviceSupport.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_input_events_end.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestReferenceSpace.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_viewer_availability.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_viewer_referenceSpace.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrSession_visibilityState.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrView_eyes.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrView_match.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrView_oneframeupdate.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrView_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrViewerPose_views_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrViewport_valid.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_constructor.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https.html [ Failure ] -crbug.com/1033611 external/wpt/webxr/xrWebGLLayer_viewports.https.html [ Failure ] - -# Testharness test. Timeout locally. Timeout on wpt.fyi -external/wpt/event-timing/click-timing.html [ Timeout ] -external/wpt/event-timing/crossiframe.html [ Timeout ] -external/wpt/event-timing/toJSON.html [ Timeout ] -external/wpt/portals/portals-set-src-after-activate.html [ Timeout ] -external/wpt/portals/portals-focus.sub.html [ Timeout ] -external/wpt/portals/predecessor-fires-unload.html [ Timeout ] -external/wpt/sms/sms-iframe.https.html [ Timeout ] -external/wpt/storage-access-api/hasStorageAccess.sub.window.html [ Timeout ] -external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Timeout ] -external/wpt/web-nfc/NDEFReader_scan_filter.https.html [ Timeout ] -external/wpt/web-nfc/NDEFReader_scan_iframe.https.html [ Timeout ] -external/wpt/web-nfc/NDEFReader_scan.https.html [ Timeout ] -external/wpt/websockets/stream-tentative/close.any.html [ Timeout ] -external/wpt/websockets/stream-tentative/close.any.serviceworker.html [ Timeout ] -external/wpt/websockets/stream-tentative/close.any.sharedworker.html [ Timeout ] -external/wpt/websockets/stream-tentative/close.any.worker.html [ Timeout ] - -# Testharness test. Pass locally (slow when headless). Pass on wpt.fyi -crbug.com/1030390 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html [ Failure Pass ] -crbug.com/1030390 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html [ Failure Pass ] - -# Referrer-policy tests had lots of refactoring going on recently. Tests below -# used to be flaky, but may not be anymore. Needs verification. -external/wpt/referrer-policy/css-integration/child-css/external-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/child-css/internal-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/child-css/processing-instruction.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/font-face/external-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/font-face/external-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/font-face/internal-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/font-face/internal-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/font-face/processing-instruction.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/external-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/external-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/inline-style.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/internal-import-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/internal-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/presentation-attribute.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/image/processing-instruction.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/iframe-src-change.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-data.html [ Failure Timeout ] -external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-srcdoc-child.html [ Failure Timeout ] -external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-srcdoc.html [ Failure Timeout ] -external/wpt/referrer-policy/generic/link-rel-prefetch.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/multiple-headers-and-values.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/multiple-headers-combined.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/multiple-headers-one-invalid.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/multiple-headers-one-unknown-token.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/multiple-headers.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/area-navigate.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/attr-referrer-invalid-value.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/fetch-messaging.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/iframe-messaging.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/image-decoding.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/link-navigate.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/script-messaging.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/worker-messaging.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/subresource-test/xhr-messaging.html [ Failure Timeout Pass ] -external/wpt/referrer-policy/generic/unsupported-csp-referrer-directive.html [ Failure Timeout Pass ] - -# portals/csp/frame-src.sub.html crashes because of a race between cancelling a -# speculative navigation in the browser, and committing the navigation in the -# renderer. -crbug.com/838348 external/wpt/portals/csp/frame-src.sub.html [ Pass Crash Timeout ] - -# ---- -# The following tests are ones that pass on the waterfall but fail on the CQ bot. -# The primary difference between the two setups is that CQ has DCHECK on while -# waterfall does not. So these tests usually fail because they hit a DCHECK -# on the CQ. -# We list both the waterfall and CQ status here so that the tests are accepted by -# both systems. -external/wpt/background-fetch/abort.https.window.html [ Pass Failure ] -external/wpt/background-fetch/fetch-uploads.https.window.html [ Pass Failure ] -external/wpt/background-fetch/fetch.https.window.html [ Pass Failure ] -external/wpt/background-fetch/get-ids.https.window.html [ Pass Failure ] -external/wpt/background-fetch/get.https.window.html [ Pass Failure ] -external/wpt/background-fetch/match.https.window.html [ Pass Failure ] -external/wpt/background-fetch/mixed-content-and-allowed-schemes.https.window.html [ Pass Failure ] -external/wpt/background-fetch/port-blocking.https.window.html [ Pass Failure ] -external/wpt/background-fetch/update-ui.https.window.html [ Pass Failure ] -external/wpt/css/CSS2/floats/float-nowrap-3-ref.html [ Pass Crash Failure ] -external/wpt/css/CSS2/floats/float-nowrap-4.html [ Pass Crash Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.any.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.any.sharedworker.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.any.worker.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.serviceworker.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.sharedworker.html [ Pass Failure ] -external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.worker.html [ Pass Failure ] -external/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html [ Pass Crash Failure Timeout ] -# This batch are ones where we have expectations but for the wrong platform. -# When eliminating post-processing, we only handle expectations for the -# platform on which the tests are running (ie: Linux), so some of these are -# omitted. -external/wpt/content-security-policy/worker-src/service-none.https.sub.html [ Pass Failure ] -external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap-reverse.html [ Pass Failure ] -external/wpt/css/css-flexbox/ttwf-reftest-flex-wrap.html [ Pass Failure ] -external/wpt/css/css-fonts/font-variant-ligatures-11.html [ Pass Failure ] -external/wpt/css/css-multicol/multicol-span-all-list-item-001.html [ Pass Failure ] -external/wpt/css/css-multicol/multicol-span-all-list-item-002.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-08D.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-090.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09D.html [ Pass Failure ] -external/wpt/css/css-text/white-space/control-chars-09E.html [ Pass Failure ] -external/wpt/css/css-text/white-space/pre-wrap-018.html [ Pass Failure ] -external/wpt/css/css-text/word-break/word-break-normal-km-000.html [ Pass Failure ] -external/wpt/css/css-transforms/transform-inline-001.html [ Pass Failure ] -external/wpt/css/css-ui/text-overflow-027.html [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vlr-008.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vlr-020.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-008.xht [ Pass Failure ] -external/wpt/css/css-writing-modes/sizing-orthog-htb-in-vrl-020.xht [ Pass Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html [ Pass Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html [ Pass Failure ] -external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html [ Pass Failure ] -external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/update.https.html [ Pass Failure ] -# ---- End tests differing between CQ and Waterfall +external/wpt/xhr/setrequestheader-header-allowed.htm [ Failure Pass ] # wpt_subtest_failure
diff --git a/third_party/blink/web_tests/animations/regression-1063652-crash-expected.txt b/third_party/blink/web_tests/animations/regression-1063652-crash-expected.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/third_party/blink/web_tests/animations/regression-1063652-crash-expected.txt
@@ -0,0 +1 @@ +
diff --git a/third_party/blink/web_tests/animations/regression-1063652-crash.html b/third_party/blink/web_tests/animations/regression-1063652-crash.html new file mode 100644 index 0000000..40d683b9 --- /dev/null +++ b/third_party/blink/web_tests/animations/regression-1063652-crash.html
@@ -0,0 +1,19 @@ +<!doctype html> +<div id=target></div> +<script> +// This is a regression test for crbug.com/1063652, the test pass as long as it +// doesn't crash. +CSS.registerProperty({ + name: '--c', + syntax: '<number> | initial-value', + initialValue: 'initial-value', + inherits: false, +}); +let animation = target.animate({ + '--c': [, '300' ], +}, { + duration: 1, +}); +if (window.testRunner) + testRunner.dumpAsText(); +</script>
diff --git a/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text-expected.html b/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text-expected.html index 45a878d..5644247 100644 --- a/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text-expected.html +++ b/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text-expected.html
@@ -1,7 +1,7 @@ <!DOCTYPE HTML> <html> <body> - <p>The test passes if you see a green square.</p> + <p>The test passes if you see green text.</p> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400px" height="60px"> <defs> <clipPath id="Clipper">
diff --git a/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text.html b/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text.html index 48f96c34..5794b8a 100644 --- a/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text.html +++ b/third_party/blink/web_tests/css3/blending/svg-isolation-add-clipper-text.html
@@ -14,7 +14,7 @@ }, false); </script> <body> - <p>The test passes if you see a green square.</p> + <p>The test passes if you see green text.</p> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400px" height="60px"> <defs> <clipPath id="Clipper">
diff --git a/third_party/blink/web_tests/css3/flexbox/anonymous-block.html b/third_party/blink/web_tests/css3/flexbox/anonymous-block.html deleted file mode 100644 index 2c7986b..0000000 --- a/third_party/blink/web_tests/css3/flexbox/anonymous-block.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!DOCTYPE html> -<html> -<link href="resources/flexbox.css" rel="stylesheet"> -<body> -<p>This tests that text nodes that have a flexbox as a parent are wrapped in -anonymous blocks.</p> -<div class="flexbox">This text should be visible.</div> -</body> -</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/box-sizing-min-max-sizes.html b/third_party/blink/web_tests/css3/flexbox/box-sizing-min-max-sizes.html deleted file mode 100644 index 74b012d0..0000000 --- a/third_party/blink/web_tests/css3/flexbox/box-sizing-min-max-sizes.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<link href="resources/flexbox.css" rel="stylesheet"> -<style> -.flexbox { - background-color: teal; -} -.flexbox > div { - box-sizing: border-box; -} -</style> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<body onload="checkLayout('.flexbox')"> -<div id=log></div> - -<div class="flexbox"> - <div style="border: 5px solid orange; padding: 5px; max-width: 30px; width: 40px;" data-expected-width=30></div> - <div style="border: 5px solid orange; padding: 5px; min-width: 30px; width: 10px;" data-expected-width=30></div> -</div> - -<div class="flexbox column"> - <div style="border: 5px solid orange; padding: 5px; max-height: 30px; height: 40px;" data-expected-height=30></div> - <div style="border: 5px solid orange; padding: 5px; min-height: 30px; height: 10px;" data-expected-height=30></div> -</div> - -</body> -</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/column-flex-child-with-overflow-scroll.html b/third_party/blink/web_tests/css3/flexbox/column-flex-child-with-overflow-scroll.html deleted file mode 100644 index 0dc617fd..0000000 --- a/third_party/blink/web_tests/css3/flexbox/column-flex-child-with-overflow-scroll.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<link href="resources/flexbox.css" rel="stylesheet"> -<style> -div { - box-sizing: border-box; -} - -.scroll { - overflow: scroll; -} - -.box { - width: 100px; - height: 75px; - padding: 5px; - border: 2px solid red; -} -</style> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<body onload="checkLayout('.flexbox')"> -<div id=log></div> -<div class="flexbox column"> - <div class="box" data-expected-width="100" data-expected-height="75"></div> - <div class="box scroll" id="box2" data-expected-width="100" data-expected-height="75"></div> -</div> - -<div class="flexbox column-reverse"> - <div class="box" data-expected-width="100" data-expected-height="75"></div> - <div class="box scroll" id="box4" data-expected-width="100" data-expected-height="75"></div> -</div> -</body> -</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json index c5fc6f4..13353f6c 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_7.json
@@ -6135,18 +6135,6 @@ {} ] ], - "html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html": [ - [ - "html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html", - {} - ] - ], - "html/user-activation/activation-hierarchy-sameorigin-parent-manual.html": [ - [ - "html/user-activation/activation-hierarchy-sameorigin-parent-manual.html", - {} - ] - ], "html/user-activation/activation-thru-contextmenu-event-manual.html": [ [ "html/user-activation/activation-thru-contextmenu-event-manual.html", @@ -33261,6 +33249,18 @@ {} ] ], + "css/css-animations/animation-important-002.html": [ + [ + "css/css-animations/animation-important-002.html", + [ + [ + "/css/css-animations/animation-important-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-animations/animation-opacity-pause-and-set-time.html": [ [ "css/css-animations/animation-opacity-pause-and-set-time.html", @@ -34125,6 +34125,18 @@ {} ] ], + "css/css-backgrounds/background-position-subpixel-at-border.tentative.html": [ + [ + "css/css-backgrounds/background-position-subpixel-at-border.tentative.html", + [ + [ + "/css/css-backgrounds/reference/background-position-subpixel-at-border-ref.tentative.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/background-repeat/background-repeat-no-repeat.xht": [ [ "css/css-backgrounds/background-repeat/background-repeat-no-repeat.xht", @@ -44145,6 +44157,18 @@ {} ] ], + "css/css-flexbox/align-baseline.html": [ + [ + "css/css-flexbox/align-baseline.html", + [ + [ + "/css/css-flexbox/reference/align-baseline-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/align-content-001.htm": [ [ "css/css-flexbox/align-content-001.htm", @@ -44457,6 +44481,18 @@ {} ] ], + "css/css-flexbox/anonymous-block.html": [ + [ + "css/css-flexbox/anonymous-block.html", + [ + [ + "/css/css-flexbox/reference/anonymous-block-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/anonymous-flex-item-001.html": [ [ "css/css-flexbox/anonymous-flex-item-001.html", @@ -44529,6 +44565,18 @@ {} ] ], + "css/css-flexbox/auto-height-with-flex.html": [ + [ + "css/css-flexbox/auto-height-with-flex.html", + [ + [ + "/css/css-flexbox/reference/auto-height-with-flex-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/auto-margins-001.html": [ [ "css/css-flexbox/auto-margins-001.html", @@ -49425,6 +49473,42 @@ {} ] ], + "css/css-flexbox/stretch-obeys-min-max-001.html": [ + [ + "css/css-flexbox/stretch-obeys-min-max-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-flexbox/stretch-obeys-min-max-002.html": [ + [ + "css/css-flexbox/stretch-obeys-min-max-002.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-flexbox/stretch-obeys-min-max-003.html": [ + [ + "css/css-flexbox/stretch-obeys-min-max-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/table-as-item-auto-min-width.html": [ [ "css/css-flexbox/table-as-item-auto-min-width.html", @@ -53383,6 +53467,30 @@ {} ] ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html": [ + [ + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html", + [ + [ + "/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html": [ + [ + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html", + [ + [ + "/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-definition/grid-layout-auto-tracks.html": [ [ "css/css-grid/grid-definition/grid-layout-auto-tracks.html", @@ -53419,6 +53527,30 @@ {} ] ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-002.html": [ + [ + "css/css-grid/grid-definition/grid-support-named-grid-lines-002.html", + [ + [ + "/css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-003.html": [ + [ + "css/css-grid/grid-definition/grid-support-named-grid-lines-003.html", + [ + [ + "/css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-definition/grid-template-columns-fit-content-001.html": [ [ "css/css-grid/grid-definition/grid-template-columns-fit-content-001.html", @@ -56023,6 +56155,18 @@ {} ] ], + "css/css-grid/subgrid/repeat-auto-fill-008.html": [ + [ + "css/css-grid/subgrid/repeat-auto-fill-008.html", + [ + [ + "/css/css-grid/subgrid/repeat-auto-fill-008-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/subgrid/subgrid-item-block-size-001.html": [ [ "css/css-grid/subgrid/subgrid-item-block-size-001.html", @@ -64543,6 +64687,54 @@ {} ] ], + "css/css-overflow/text-overflow-ellipsis-001.html": [ + [ + "css/css-overflow/text-overflow-ellipsis-001.html", + [ + [ + "/css/css-overflow/reference/text-overflow-ellipsis-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-overflow/text-overflow-ellipsis-rtl-001.html": [ + [ + "css/css-overflow/text-overflow-ellipsis-rtl-001.html", + [ + [ + "/css/css-overflow/reference/text-overflow-ellipsis-rtl-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-overflow/text-overflow-ellipsis-vertical-001.html": [ + [ + "css/css-overflow/text-overflow-ellipsis-vertical-001.html", + [ + [ + "/css/css-overflow/reference/text-overflow-ellipsis-vertical-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-overflow/text-overflow-ellipsis-vertical-rtl-001.html": [ + [ + "css/css-overflow/text-overflow-ellipsis-vertical-rtl-001.html", + [ + [ + "/css/css-overflow/reference/text-overflow-ellipsis-vertical-rtl-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-overflow/webkit-line-clamp-001.html": [ [ "css/css-overflow/webkit-line-clamp-001.html", @@ -71003,6 +71195,78 @@ {} ] ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-001.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-002.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-002.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-003.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-004.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-005.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-005.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-006.html": [ + [ + "css/css-sizing/intrinsic-percent-replaced-dynamic-006.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-sizing/ortho-writing-mode-001.html": [ [ "css/css-sizing/ortho-writing-mode-001.html", @@ -72911,6 +73175,78 @@ {} ] ], + "css/css-text/hyphens/hyphens-auto-010.html": [ + [ + "css/css-text/hyphens/hyphens-auto-010.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-auto-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/hyphens/hyphens-manual-010.html": [ + [ + "css/css-text/hyphens/hyphens-manual-010.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-manual-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/hyphens/hyphens-manual-011.html": [ + [ + "css/css-text/hyphens/hyphens-manual-011.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-manual-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/hyphens/hyphens-manual-012.html": [ + [ + "css/css-text/hyphens/hyphens-manual-012.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-manual-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/hyphens/hyphens-manual-013.html": [ + [ + "css/css-text/hyphens/hyphens-manual-013.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-manual-013-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/hyphens/hyphens-none-011.html": [ + [ + "css/css-text/hyphens/hyphens-none-011.html", + [ + [ + "/css/css-text/hyphens/reference/hyphens-manual-010-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/hyphens/hyphens-out-of-flow-001.html": [ [ "css/css-text/hyphens/hyphens-out-of-flow-001.html", @@ -79743,6 +80079,30 @@ {} ] ], + "css/css-text/white-space/break-spaces-051.html": [ + [ + "css/css-text/white-space/break-spaces-051.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-052.html": [ + [ + "css/css-text/white-space/break-spaces-052.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/break-spaces-before-first-char-001.html": [ [ "css/css-text/white-space/break-spaces-before-first-char-001.html", @@ -82091,6 +82451,42 @@ {} ] ], + "css/css-text/white-space/white-space-normal-011.html": [ + [ + "css/css-text/white-space/white-space-normal-011.html", + [ + [ + "/css/css-text/white-space/reference/white-space-normal-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/white-space-nowrap-011.html": [ + [ + "css/css-text/white-space/white-space-nowrap-011.html", + [ + [ + "/css/css-text/white-space/reference/white-space-nowrap-011-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/white-space-pre-011.html": [ + [ + "css/css-text/white-space/white-space-pre-011.html", + [ + [ + "/css/css-text/white-space/reference/white-space-pre-011-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [ [ "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html", @@ -106537,6 +106933,18 @@ {} ] ], + "css/filter-effects/backdrop-filter-root-element.html": [ + [ + "css/filter-effects/backdrop-filter-root-element.html", + [ + [ + "/css/filter-effects/backdrop-filter-root-element-ref.html", + "==" + ] + ], + {} + ] + ], "css/filter-effects/backdrop-filter-update.html": [ [ "css/filter-effects/backdrop-filter-update.html", @@ -122593,6 +123001,18 @@ {} ] ], + "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html": [ + [ + "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html", + [ + [ + "/html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip-ref.html", + "==" + ] + ], + {} + ] + ], "html/semantics/embedded-content/the-img-element/img-with-containment-and-size.html": [ [ "html/semantics/embedded-content/the-img-element/img-with-containment-and-size.html", @@ -126177,6 +126597,18 @@ {} ] ], + "svg/extensibility/foreignObject/foreign-object-with-position-under-clip-path.html": [ + [ + "svg/extensibility/foreignObject/foreign-object-with-position-under-clip-path.html", + [ + [ + "/svg/extensibility/foreignObject/foreign-object-size-ref.html", + "==" + ] + ], + {} + ] + ], "svg/extensibility/foreignObject/masked.html": [ [ "svg/extensibility/foreignObject/masked.html", @@ -126501,6 +126933,54 @@ {} ] ], + "svg/linking/reftests/url-processing-invalid-base.svg": [ + [ + "svg/linking/reftests/url-processing-invalid-base.svg", + [ + [ + "/svg/linking/reftests/reference/green-100x100.svg", + "==" + ] + ], + {} + ] + ], + "svg/linking/reftests/url-processing-whitespace-001.svg": [ + [ + "svg/linking/reftests/url-processing-whitespace-001.svg", + [ + [ + "/svg/linking/reftests/reference/green-100x100.svg", + "==" + ] + ], + {} + ] + ], + "svg/linking/reftests/url-processing-whitespace-002.svg": [ + [ + "svg/linking/reftests/url-processing-whitespace-002.svg", + [ + [ + "/svg/linking/reftests/reference/green-100x100.svg", + "==" + ] + ], + {} + ] + ], + "svg/linking/reftests/url-processing-whitespace-003.svg": [ + [ + "svg/linking/reftests/url-processing-whitespace-003.svg", + [ + [ + "/svg/linking/reftests/reference/green-100x100.svg", + "==" + ] + ], + {} + ] + ], "svg/linking/reftests/use-descendant-combinator-001.html": [ [ "svg/linking/reftests/use-descendant-combinator-001.html", @@ -133126,6 +133606,9 @@ "common/reftest-wait.js.headers": [ [] ], + "common/sab.js": [ + [] + ], "common/security-features/README.md": [ [] ], @@ -133174,6 +133657,9 @@ "common/security-features/subresource/shared-worker.py": [ [] ], + "common/security-features/subresource/static-import.py": [ + [] + ], "common/security-features/subresource/stylesheet.py": [ [] ], @@ -133198,6 +133684,9 @@ "common/security-features/subresource/template/shared-worker.js.template": [ [] ], + "common/security-features/subresource/template/static-import.js.template": [ + [] + ], "common/security-features/subresource/template/svg.css.template": [ [] ], @@ -138793,6 +139282,9 @@ "css/css-animations/animation-common-ref.html": [ [] ], + "css/css-animations/animation-important-002-ref.html": [ + [] + ], "css/css-animations/animation-opacity-pause-and-set-time-ref.html": [ [] ], @@ -139348,6 +139840,9 @@ "css/css-backgrounds/reference/background-position-negative-percentage-comparison-ref.html": [ [] ], + "css/css-backgrounds/reference/background-position-subpixel-at-border-ref.tentative.html": [ + [] + ], "css/css-backgrounds/reference/background-rounded-image-clip.html": [ [] ], @@ -139498,6 +139993,12 @@ "css/css-backgrounds/resources/green-100.png": [ [] ], + "css/css-backgrounds/resources/green1x50.png": [ + [] + ], + "css/css-backgrounds/resources/green50x1.png": [ + [] + ], "css/css-backgrounds/resources/stripes-100.png": [ [] ], @@ -141232,12 +141733,21 @@ "css/css-flexbox/reference/Flexible-order-ref.html": [ [] ], + "css/css-flexbox/reference/align-baseline-ref.html": [ + [] + ], "css/css-flexbox/reference/align-content-001-ref.html": [ [] ], "css/css-flexbox/reference/align-items-baseline-overflow-non-visible-ref.html": [ [] ], + "css/css-flexbox/reference/anonymous-block-ref.html": [ + [] + ], + "css/css-flexbox/reference/auto-height-with-flex-ref.html": [ + [] + ], "css/css-flexbox/reference/css-box-justify-content-ref.html": [ [] ], @@ -146977,9 +147487,21 @@ "css/css-grid/grid-definition/grid-auto-repeat-max-size-001-expected.txt": [ [] ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html": [ + [] + ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html": [ + [] + ], "css/css-grid/grid-definition/grid-limits-001-expected.txt": [ [] ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html": [ + [] + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html": [ + [] + ], "css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html": [ [] ], @@ -147274,6 +147796,9 @@ "css/css-grid/subgrid/repeat-auto-fill-007-ref.html": [ [] ], + "css/css-grid/subgrid/repeat-auto-fill-008-ref.html": [ + [] + ], "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ [] ], @@ -147283,6 +147808,9 @@ "css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html": [ [] ], + "css/css-grid/support/grid-child-utils.js": [ + [] + ], "css/css-grid/table-grid-item-dynamic-001-ref.html": [ [] ], @@ -148930,6 +149458,18 @@ "css/css-overflow/reference/overflow-recalc-001-ref.html": [ [] ], + "css/css-overflow/reference/text-overflow-ellipsis-001-ref.html": [ + [] + ], + "css/css-overflow/reference/text-overflow-ellipsis-rtl-001-ref.html": [ + [] + ], + "css/css-overflow/reference/text-overflow-ellipsis-vertical-001-ref.html": [ + [] + ], + "css/css-overflow/reference/text-overflow-ellipsis-vertical-rtl-001-ref.html": [ + [] + ], "css/css-overflow/reference/webkit-line-clamp-001-ref.html": [ [] ], @@ -150910,6 +151450,18 @@ "css/css-text/hyphens/reference/hyphens-auto-001-ref.html": [ [] ], + "css/css-text/hyphens/reference/hyphens-auto-010-ref.html": [ + [] + ], + "css/css-text/hyphens/reference/hyphens-manual-010-ref.html": [ + [] + ], + "css/css-text/hyphens/reference/hyphens-manual-011-ref.html": [ + [] + ], + "css/css-text/hyphens/reference/hyphens-manual-013-ref.html": [ + [] + ], "css/css-text/hyphens/reference/hyphens-out-of-flow-001-ref.html": [ [] ], @@ -152641,6 +153193,15 @@ "css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html": [ [] ], + "css/css-text/white-space/reference/white-space-normal-011-ref.html": [ + [] + ], + "css/css-text/white-space/reference/white-space-nowrap-011-ref.html": [ + [] + ], + "css/css-text/white-space/reference/white-space-pre-011-ref.html": [ + [] + ], "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [ [] ], @@ -152965,6 +153526,9 @@ "css/css-transforms/animation/transform-interpolation-001-expected.txt": [ [] ], + "css/css-transforms/animation/transform-interpolation-computed-value-expected.txt": [ + [] + ], "css/css-transforms/animation/translate-interpolation-expected.txt": [ [] ], @@ -157744,6 +158308,9 @@ "css/filter-effects/backdrop-filter-plus-opacity-ref.html": [ [] ], + "css/filter-effects/backdrop-filter-root-element-ref.html": [ + [] + ], "css/filter-effects/backdrop-filter-update-ref.html": [ [] ], @@ -161278,9 +161845,18 @@ "encoding/OWNERS": [ [] ], + "encoding/bom-handling.html.headers": [ + [] + ], "encoding/encodeInto.any-expected.txt": [ [] ], + "encoding/encodeInto.any.serviceworker-expected.txt": [ + [] + ], + "encoding/encodeInto.any.sharedworker-expected.txt": [ + [] + ], "encoding/encodeInto.any.worker-expected.txt": [ [] ], @@ -161833,12 +162409,24 @@ "encoding/textdecoder-copy.any-expected.txt": [ [] ], + "encoding/textdecoder-copy.any.serviceworker-expected.txt": [ + [] + ], + "encoding/textdecoder-copy.any.sharedworker-expected.txt": [ + [] + ], "encoding/textdecoder-copy.any.worker-expected.txt": [ [] ], "encoding/textdecoder-streaming.any-expected.txt": [ [] ], + "encoding/textdecoder-streaming.any.serviceworker-expected.txt": [ + [] + ], + "encoding/textdecoder-streaming.any.sharedworker-expected.txt": [ + [] + ], "encoding/textdecoder-streaming.any.worker-expected.txt": [ [] ], @@ -162748,6 +163336,9 @@ "fetch/api/redirect/redirect-location.any.worker-expected.txt": [ [] ], + "fetch/api/request/destination/fetch-destination.https-expected.txt": [ + [] + ], "fetch/api/request/destination/resources/dummy": [ [] ], @@ -165130,7 +165721,7 @@ "html/cross-origin-embedder-policy/blob.https.html.headers": [ [] ], - "html/cross-origin-embedder-policy/cache-storage-reporting.https-expected.txt": [ + "html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https-expected.txt": [ [] ], "html/cross-origin-embedder-policy/data.https.html.headers": [ @@ -165178,6 +165769,9 @@ "html/cross-origin-embedder-policy/resources/blob-url-factory.html.headers": [ [] ], + "html/cross-origin-embedder-policy/resources/cache-storage-reporting.js": [ + [] + ], "html/cross-origin-embedder-policy/resources/coep-frame.html": [ [] ], @@ -165268,6 +165862,9 @@ "html/cross-origin-opener-policy/blob-popup.https.html.headers": [ [] ], + "html/cross-origin-opener-policy/coep-blob-popup.https-expected.txt": [ + [] + ], "html/cross-origin-opener-policy/coep-blob-popup.https.html.headers": [ [] ], @@ -165736,9 +166333,6 @@ "html/dom/reflection-embedded-expected.txt": [ [] ], - "html/dom/reflection-forms-expected.txt": [ - [] - ], "html/dom/reflection-metadata-expected.txt": [ [] ], @@ -168253,6 +168847,12 @@ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt": [ [] ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker-expected.txt": [ + [] + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker-expected.txt": [ + [] + ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt": [ [] ], @@ -168388,9 +168988,6 @@ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.https.sub.html.headers": [ [] ], - "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https-expected.txt": [ - [] - ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html.headers": [ [] ], @@ -169951,6 +170548,9 @@ "html/semantics/embedded-content/the-img-element/image-loading-lazy-move-document-expected.txt": [ [] ], + "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip-ref.html": [ + [] + ], "html/semantics/embedded-content/the-img-element/image.png": [ [] ], @@ -169981,9 +170581,6 @@ "html/semantics/embedded-content/the-img-element/original-crossorigin-applied.sub-expected.txt": [ [] ], - "html/semantics/embedded-content/the-img-element/original-referrer-policy-applied.sub-expected.txt": [ - [] - ], "html/semantics/embedded-content/the-img-element/relevant-mutations-expected.txt": [ [] ], @@ -171496,28 +172093,19 @@ "html/tools/update_html5lib_tests.py": [ [] ], - "html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html": [ - [] - ], - "html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html": [ - [] - ], - "html/user-activation/resources/activation-hierarchy-sameorigin-child.html": [ - [] - ], - "html/user-activation/resources/activation-hierarchy-sameorigin-grandchild.html": [ - [] - ], - "html/user-activation/resources/child-four.html": [ + "html/user-activation/resources/child-message-event-api.html": [ [] ], "html/user-activation/resources/child-one.html": [ [] ], - "html/user-activation/resources/child-three.html": [ + "html/user-activation/resources/child-two.html": [ [] ], - "html/user-activation/resources/child-two.html": [ + "html/user-activation/resources/propagation-crossorigin-child.sub.html": [ + [] + ], + "html/user-activation/resources/propagation-sameorigin-child.html": [ [] ], "html/webappapis/dynamic-markup-insertion/closing-the-input-stream/OWNERS": [ @@ -173008,6 +173596,9 @@ "largest-contentful-paint/resources/iframe-stores-entry.html": [ [] ], + "largest-contentful-paint/resources/invisible-images.js": [ + [] + ], "largest-contentful-paint/resources/largest-contentful-paint-helpers.js": [ [] ], @@ -173176,12 +173767,6 @@ "mathml/presentation-markup/fractions/frac-numalign-denomalign-001-ref.html": [ [] ], - "mathml/presentation-markup/fractions/frac-parameters-1-expected.txt": [ - [] - ], - "mathml/presentation-markup/fractions/frac-parameters-2-expected.txt": [ - [] - ], "mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html": [ [] ], @@ -173215,9 +173800,15 @@ "mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html": [ [] ], + "mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt": [ + [] + ], "mathml/presentation-markup/mrow/spacing-expected.txt": [ [] ], + "mathml/presentation-markup/operators/embellished-operator-003-expected.txt": [ + [] + ], "mathml/presentation-markup/operators/mo-form-dynamic-ref.html": [ [] ], @@ -173422,6 +174013,9 @@ "mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html": [ [] ], + "mathml/relations/html5-tree/display-1-expected.txt": [ + [] + ], "mathml/relations/html5-tree/display-2-ref.html": [ [] ], @@ -174016,6 +174610,9 @@ "mediasession/mediametadata-expected.txt": [ [] ], + "mediasession/positionstate-expected.txt": [ + [] + ], "mimesniff/META.yml": [ [] ], @@ -174160,6 +174757,9 @@ "mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html.headers": [ [] ], + "mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html.headers": [ + [] + ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html.headers": [ [] ], @@ -174175,6 +174775,9 @@ "mixed-content/gen/top.http-rp/opt-in/worker-import-data.https.html.headers": [ [] ], + "mixed-content/gen/top.http-rp/opt-in/worker-import.https.html.headers": [ + [] + ], "mixed-content/gen/top.http-rp/opt-in/worker-module.https.html.headers": [ [] ], @@ -174787,6 +175390,9 @@ "orientation-sensor/orientation-sensor-tests.js": [ [] ], + "origin-policy/bad-server/resources/subframe-with-bad-header.py": [ + [] + ], "origin-policy/content-security/comma-in-policy.https-expected.txt": [ [] ], @@ -174931,6 +175537,21 @@ "paint-timing/OWNERS": [ [] ], + "paint-timing/fcp-only/fcp-gradient-expected.txt": [ + [] + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate-expected.txt": [ + [] + ], + "paint-timing/fcp-only/fcp-out-of-bounds-translate-expected.txt": [ + [] + ], + "paint-timing/fcp-only/fcp-overflow-expected.txt": [ + [] + ], + "paint-timing/fcp-only/fcp-svg-expected.txt": [ + [] + ], "paint-timing/resources/circle.svg": [ [] ], @@ -179896,6 +180517,9 @@ "svg/linking/reftests/href-use-element-ref.html": [ [] ], + "svg/linking/reftests/reference/green-100x100.svg": [ + [] + ], "svg/linking/reftests/use-descendant-combinator-ref.html": [ [] ], @@ -184900,9 +185524,6 @@ "vibration/OWNERS": [ [] ], - "vibration/silent-ignore-expected.txt": [ - [] - ], "video-raf/META.yml": [ [] ], @@ -184927,10 +185548,7 @@ "wake-lock/OWNERS": [ [] ], - "wake-lock/idlharness.https.any-expected.txt": [ - [] - ], - "wake-lock/idlharness.https.any.worker-expected.txt": [ + "wake-lock/resources/idlharness-worker.js": [ [] ], "wake-lock/resources/page1.html": [ @@ -184942,21 +185560,9 @@ "wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers": [ [] ], - "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt": [ - [] - ], - "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt": [ - [] - ], - "wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt": [ - [] - ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers": [ [] ], - "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt": [ - [] - ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers": [ [] ], @@ -185155,9 +185761,15 @@ "web-animations/interfaces/Animation/commitStyles-expected.txt": [ [] ], + "web-animations/interfaces/Animation/finished-expected.txt": [ + [] + ], "web-animations/interfaces/Animation/idlharness.window-expected.txt": [ [] ], + "web-animations/interfaces/Animation/ready-expected.txt": [ + [] + ], "web-animations/interfaces/Animation/style-change-events-expected.txt": [ [] ], @@ -185416,6 +186028,9 @@ "webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html.headers": [ [] ], + "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https-expected.txt": [ + [] + ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-promises.https-expected.txt": [ [] ], @@ -186190,6 +186805,9 @@ "webrtc/RTCPeerConnection-ondatachannel-expected.txt": [ [] ], + "webrtc/RTCPeerConnection-onnegotiationneeded-expected.txt": [ + [] + ], "webrtc/RTCPeerConnection-onsignalingstatechanged.https-expected.txt": [ [] ], @@ -188872,6 +189490,9 @@ "workers/support/abrupt-completion.js": [ [] ], + "workers/support/check-error-arguments.js": [ + [] + ], "workers/support/empty-worker.js": [ [] ], @@ -197180,8 +197801,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -197199,8 +197825,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -197218,8 +197849,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -197237,8 +197873,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -205520,8 +206161,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -205535,8 +206181,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -215647,12 +216298,30 @@ {} ] ], + "css/css-animations/animation-base-response-001.html": [ + [ + "css/css-animations/animation-base-response-001.html", + {} + ] + ], + "css/css-animations/animation-base-response-002.html": [ + [ + "css/css-animations/animation-base-response-002.html", + {} + ] + ], "css/css-animations/animation-before-initial-box-construction-001.html": [ [ "css/css-animations/animation-before-initial-box-construction-001.html", {} ] ], + "css/css-animations/animation-important-001.html": [ + [ + "css/css-animations/animation-important-001.html", + {} + ] + ], "css/css-animations/animation-iteration-count-calc.html": [ [ "css/css-animations/animation-iteration-count-calc.html", @@ -217453,6 +218122,24 @@ {} ] ], + "css/css-flexbox/box-sizing-001.html": [ + [ + "css/css-flexbox/box-sizing-001.html", + {} + ] + ], + "css/css-flexbox/box-sizing-min-max-sizes-001.html": [ + [ + "css/css-flexbox/box-sizing-min-max-sizes-001.html", + {} + ] + ], + "css/css-flexbox/column-flex-child-with-overflow-scroll.html": [ + [ + "css/css-flexbox/column-flex-child-with-overflow-scroll.html", + {} + ] + ], "css/css-flexbox/display_flex_exist.html": [ [ "css/css-flexbox/display_flex_exist.html", @@ -221033,6 +221720,18 @@ {} ] ], + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html": [ + [ + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html", + {} + ] + ], + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html": [ + [ + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html", + {} + ] + ], "css/css-grid/parsing/grid-template-rows-computed-nogrid.html": [ [ "css/css-grid/parsing/grid-template-rows-computed-nogrid.html", @@ -221087,6 +221786,12 @@ {} ] ], + "css/css-grid/subgrid/grid-template-computed-nogrid.html": [ + [ + "css/css-grid/subgrid/grid-template-computed-nogrid.html", + {} + ] + ], "css/css-images/gradient/color-stops-parsing.html": [ [ "css/css-images/gradient/color-stops-parsing.html", @@ -227999,6 +228704,12 @@ {} ] ], + "css/css-transforms/animation/transform-interpolation-computed-value.html": [ + [ + "css/css-transforms/animation/transform-interpolation-computed-value.html", + {} + ] + ], "css/css-transforms/animation/transform-matrix-composition.html": [ [ "css/css-transforms/animation/transform-matrix-composition.html", @@ -228693,6 +229404,18 @@ {} ] ], + "css/css-transitions/transition-base-response-001.html": [ + [ + "css/css-transitions/transition-base-response-001.html", + {} + ] + ], + "css/css-transitions/transition-base-response-002.html": [ + [ + "css/css-transitions/transition-base-response-002.html", + {} + ] + ], "css/css-transitions/transition-delay-001.html": [ [ "css/css-transitions/transition-delay-001.html", @@ -231721,6 +232444,12 @@ {} ] ], + "css/css-variables/variables-substitute-guaranteed-invalid.html": [ + [ + "css/css-variables/variables-substitute-guaranteed-invalid.html", + {} + ] + ], "css/css-variables/vars-border-shorthand-serialize.html": [ [ "css/css-variables/vars-border-shorthand-serialize.html", @@ -232909,6 +233638,12 @@ {} ] ], + "css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html": [ + [ + "css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html", + {} + ] + ], "css/cssom/CSSStyleSheet-constructable.html": [ [ "css/cssom/CSSStyleSheet-constructable.html", @@ -233589,8 +234324,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -233604,8 +234344,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -237957,6 +238702,14 @@ } ] ], + "editing/run/caretnavigation.html": [ + [ + "editing/run/caretnavigation.html", + { + "testdriver": true + } + ] + ], "editing/run/createlink.html": [ [ "editing/run/createlink.html", @@ -239660,14 +240413,72 @@ {} ] ], + "encoding/bom-handling.html": [ + [ + "encoding/bom-handling.html", + {} + ] + ], "encoding/encodeInto.any.js": [ [ "encoding/encodeInto.any.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/encodeInto.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/encodeInto.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } ], [ "encoding/encodeInto.any.worker.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } ] ], "encoding/gb18030-encoder.html": [ @@ -247671,7 +248482,7 @@ "script_metadata": [ [ "global", - "worker" + "window,worker" ], [ "script", @@ -247680,6 +248491,10 @@ [ "script", "resources/readable-stream-to-array.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -247690,7 +248505,7 @@ "script_metadata": [ [ "global", - "worker" + "window,worker" ], [ "script", @@ -247699,6 +248514,10 @@ [ "script", "resources/readable-stream-to-array.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -247709,7 +248528,7 @@ "script_metadata": [ [ "global", - "worker" + "window,worker" ], [ "script", @@ -247718,6 +248537,10 @@ [ "script", "resources/readable-stream-to-array.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -247728,7 +248551,7 @@ "script_metadata": [ [ "global", - "worker" + "window,worker" ], [ "script", @@ -247737,6 +248560,10 @@ [ "script", "resources/readable-stream-to-array.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -247977,11 +248804,63 @@ "encoding/textdecoder-copy.any.js": [ [ "encoding/textdecoder-copy.any.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/textdecoder-copy.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/textdecoder-copy.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } ], [ "encoding/textdecoder-copy.any.worker.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ], + [ + "script", + "/common/sab.js" + ] + ] + } ] ], "encoding/textdecoder-fatal-single-byte.any.js": [ @@ -248996,8 +249875,62 @@ "Encoding API: Streaming decode" ], [ + "global", + "window,worker" + ], + [ "script", "resources/encodings.js" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/textdecoder-streaming.any.serviceworker.html", + { + "script_metadata": [ + [ + "title", + "Encoding API: Streaming decode" + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/encodings.js" + ], + [ + "script", + "/common/sab.js" + ] + ] + } + ], + [ + "encoding/textdecoder-streaming.any.sharedworker.html", + { + "script_metadata": [ + [ + "title", + "Encoding API: Streaming decode" + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/encodings.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -249011,8 +249944,16 @@ "Encoding API: Streaming decode" ], [ + "global", + "window,worker" + ], + [ "script", "resources/encodings.js" + ], + [ + "script", + "/common/sab.js" ] ] } @@ -250638,13 +251579,17 @@ "feature-policy/feature-policy-nested-header-policy-allowed-for-self.https.sub.html": [ [ "feature-policy/feature-policy-nested-header-policy-allowed-for-self.https.sub.html", - {} + { + "timeout": "long" + } ] ], "feature-policy/feature-policy-nested-header-policy-disallowed-for-all.https.sub.html": [ [ "feature-policy/feature-policy-nested-header-policy-disallowed-for-all.https.sub.html", - {} + { + "timeout": "long" + } ] ], "feature-policy/idlharness.window.js": [ @@ -253565,8 +254510,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -253584,8 +254534,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -253603,8 +254558,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -253622,8 +254582,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -257162,14 +258127,32 @@ {} ] ], - "html/cross-origin-embedder-policy/cache-storage-reporting.https.html": [ + "html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https.html": [ [ - "html/cross-origin-embedder-policy/cache-storage-reporting.https.html", + "html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https.html", + {} + ] + ], + "html/cross-origin-embedder-policy/cache-storage-reporting-document.https.html": [ + [ + "html/cross-origin-embedder-policy/cache-storage-reporting-document.https.html", + {} + ] + ], + "html/cross-origin-embedder-policy/cache-storage-reporting-service-worker.https.html": [ + [ + "html/cross-origin-embedder-policy/cache-storage-reporting-service-worker.https.html", { "timeout": "long" } ] ], + "html/cross-origin-embedder-policy/cache-storage-reporting-shared-worker.https.html": [ + [ + "html/cross-origin-embedder-policy/cache-storage-reporting-shared-worker.https.html", + {} + ] + ], "html/cross-origin-embedder-policy/coep-frame-javascript.https.html": [ [ "html/cross-origin-embedder-policy/coep-frame-javascript.https.html", @@ -258655,11 +259638,47 @@ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js": [ [ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ] + ] + } + ], + [ + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ] + ] + } + ], + [ + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker.html", + { + "script_metadata": [ + [ + "global", + "window,worker" + ] + ] + } ], [ "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker.html", - {} + { + "script_metadata": [ + [ + "global", + "window,worker" + ] + ] + } ] ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.https.html": [ @@ -269312,17 +270331,17 @@ } ] ], - "html/user-activation/activation-api-iframe-no-activate.tenative.html": [ + "html/user-activation/activation-api-iframe-no-activate.tentative.html": [ [ - "html/user-activation/activation-api-iframe-no-activate.tenative.html", + "html/user-activation/activation-api-iframe-no-activate.tentative.html", { "testdriver": true } ] ], - "html/user-activation/activation-api-iframe.tenative.html": [ + "html/user-activation/activation-api-iframe.tentative.html": [ [ - "html/user-activation/activation-api-iframe.tenative.html", + "html/user-activation/activation-api-iframe.tentative.html", { "testdriver": true } @@ -269336,36 +270355,6 @@ } ] ], - "html/user-activation/activation-transfer-cross-origin-with-click-two-child-frames.sub.tentative.html": [ - [ - "html/user-activation/activation-transfer-cross-origin-with-click-two-child-frames.sub.tentative.html", - { - "testdriver": true - } - ] - ], - "html/user-activation/activation-transfer-cross-origin-with-click.sub.tentative.html": [ - [ - "html/user-activation/activation-transfer-cross-origin-with-click.sub.tentative.html", - { - "testdriver": true - } - ] - ], - "html/user-activation/activation-transfer-with-click.tentative.html": [ - [ - "html/user-activation/activation-transfer-with-click.tentative.html", - { - "testdriver": true - } - ] - ], - "html/user-activation/activation-transfer-without-click.tentative.html": [ - [ - "html/user-activation/activation-transfer-without-click.tentative.html", - {} - ] - ], "html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html": [ [ "html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html", @@ -269380,6 +270369,22 @@ {} ] ], + "html/user-activation/propagation-crossorigin.sub.tentative.html": [ + [ + "html/user-activation/propagation-crossorigin.sub.tentative.html", + { + "testdriver": true + } + ] + ], + "html/user-activation/propagation-sameorigin.tentative.html": [ + [ + "html/user-activation/propagation-sameorigin.tentative.html", + { + "testdriver": true + } + ] + ], "html/webappapis/animation-frames/callback-exception.html": [ [ "html/webappapis/animation-frames/callback-exception.html", @@ -272583,9 +273588,15 @@ {} ] ], - "largest-contentful-paint/invisible-images-composited.html": [ + "largest-contentful-paint/invisible-images-composited-1.html": [ [ - "largest-contentful-paint/invisible-images-composited.html", + "largest-contentful-paint/invisible-images-composited-1.html", + {} + ] + ], + "largest-contentful-paint/invisible-images-composited-2.html": [ + [ + "largest-contentful-paint/invisible-images-composited-2.html", {} ] ], @@ -273116,6 +274127,12 @@ {} ] ], + "mathml/presentation-markup/mrow/mrow-preferred-width.html": [ + [ + "mathml/presentation-markup/mrow/mrow-preferred-width.html", + {} + ] + ], "mathml/presentation-markup/mrow/spacing.html": [ [ "mathml/presentation-markup/mrow/spacing.html", @@ -273134,6 +274151,12 @@ {} ] ], + "mathml/presentation-markup/operators/embellished-operator-003.html": [ + [ + "mathml/presentation-markup/operators/embellished-operator-003.html", + {} + ] + ], "mathml/presentation-markup/operators/mo-axis-height-1.html": [ [ "mathml/presentation-markup/operators/mo-axis-height-1.html", @@ -274667,8 +275690,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -275073,6 +276101,14 @@ } ] ], + "mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html": [ + [ + "mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html": [ [ "mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html", @@ -275113,6 +276149,14 @@ } ] ], + "mixed-content/gen/top.http-rp/opt-in/worker-import.https.html": [ + [ + "mixed-content/gen/top.http-rp/opt-in/worker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.http-rp/opt-in/worker-module.https.html": [ [ "mixed-content/gen/top.http-rp/opt-in/worker-module.https.html", @@ -275281,6 +276325,14 @@ } ] ], + "mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html": [ + [ + "mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html": [ [ "mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html", @@ -275321,6 +276373,14 @@ } ] ], + "mixed-content/gen/top.meta/opt-in/worker-import.https.html": [ + [ + "mixed-content/gen/top.meta/opt-in/worker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.meta/opt-in/worker-module.https.html": [ [ "mixed-content/gen/top.meta/opt-in/worker-module.https.html", @@ -275489,6 +276549,14 @@ } ] ], + "mixed-content/gen/top.meta/unset/sharedworker-import.https.html": [ + [ + "mixed-content/gen/top.meta/unset/sharedworker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.meta/unset/sharedworker-module.https.html": [ [ "mixed-content/gen/top.meta/unset/sharedworker-module.https.html", @@ -275529,6 +276597,14 @@ } ] ], + "mixed-content/gen/top.meta/unset/worker-import.https.html": [ + [ + "mixed-content/gen/top.meta/unset/worker-import.https.html", + { + "timeout": "long" + } + ] + ], "mixed-content/gen/top.meta/unset/worker-module.https.html": [ [ "mixed-content/gen/top.meta/unset/worker-module.https.html", @@ -286941,6 +288017,12 @@ } ] ], + "origin-policy/bad-server/bad-headers.https.html": [ + [ + "origin-policy/bad-server/bad-headers.https.html", + {} + ] + ], "origin-policy/bad-server/manifest-404.https.html": [ [ "origin-policy/bad-server/manifest-404.https.html", @@ -287270,6 +288352,150 @@ {} ] ], + "paint-timing/fcp-only/fcp-background-size.html": [ + [ + "paint-timing/fcp-only/fcp-background-size.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-bg-image-set.html": [ + [ + "paint-timing/fcp-only/fcp-bg-image-set.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-bg-image-two-steps.html": [ + [ + "paint-timing/fcp-only/fcp-bg-image-two-steps.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-canvas-context.html": [ + [ + "paint-timing/fcp-only/fcp-canvas-context.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-gradient.html": [ + [ + "paint-timing/fcp-only/fcp-gradient.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html": [ + [ + "paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate.html": [ + [ + "paint-timing/fcp-only/fcp-invisible-3d-rotate.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-invisible-scale-transition.html": [ + [ + "paint-timing/fcp-only/fcp-invisible-scale-transition.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-invisible-scale.html": [ + [ + "paint-timing/fcp-only/fcp-invisible-scale.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-invisible-text.html": [ + [ + "paint-timing/fcp-only/fcp-invisible-text.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-opacity-descendant.html": [ + [ + "paint-timing/fcp-only/fcp-opacity-descendant.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-opacity.html": [ + [ + "paint-timing/fcp-only/fcp-opacity.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-out-of-bounds-translate.html": [ + [ + "paint-timing/fcp-only/fcp-out-of-bounds-translate.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-out-of-bounds.html": [ + [ + "paint-timing/fcp-only/fcp-out-of-bounds.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-overflow.html": [ + [ + "paint-timing/fcp-only/fcp-overflow.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-pseudo-element-display.html": [ + [ + "paint-timing/fcp-only/fcp-pseudo-element-display.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-pseudo-element-image.html": [ + [ + "paint-timing/fcp-only/fcp-pseudo-element-image.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-pseudo-element-opacity.html": [ + [ + "paint-timing/fcp-only/fcp-pseudo-element-opacity.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-pseudo-element-text.html": [ + [ + "paint-timing/fcp-only/fcp-pseudo-element-text.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-pseudo-element-visibility.html": [ + [ + "paint-timing/fcp-only/fcp-pseudo-element-visibility.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-svg.html": [ + [ + "paint-timing/fcp-only/fcp-svg.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-video-frame.html": [ + [ + "paint-timing/fcp-only/fcp-video-frame.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-video-poster.html": [ + [ + "paint-timing/fcp-only/fcp-video-poster.html", + {} + ] + ], + "paint-timing/fcp-only/fcp-whitespace.html": [ + [ + "paint-timing/fcp-only/fcp-whitespace.html", + {} + ] + ], "paint-timing/first-contentful-bg-image.html": [ [ "paint-timing/first-contentful-bg-image.html", @@ -298635,8 +299861,13 @@ [ "script", "/common/media.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -299564,6 +300795,12 @@ {} ] ], + "scroll-animations/scroll-timeline-invalidation.html": [ + [ + "scroll-animations/scroll-timeline-invalidation.html", + {} + ] + ], "scroll-animations/scroll-timeline-phases.tentative.html": [ [ "scroll-animations/scroll-timeline-phases.tentative.html", @@ -300086,8 +301323,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ], [ @@ -300101,8 +301343,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -301901,6 +303148,12 @@ {} ] ], + "shadow-dom/declarative/declarative-shadow-dom.tentative.html": [ + [ + "shadow-dom/declarative/declarative-shadow-dom.tentative.html", + {} + ] + ], "shadow-dom/event-composed-path-after-dom-mutation.html": [ [ "shadow-dom/event-composed-path-after-dom-mutation.html", @@ -302786,7 +304039,9 @@ "signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html": [ [ "signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html", - {} + { + "timeout": "long" + } ] ], "signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html": [ @@ -303151,8 +304406,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -311628,8 +312888,13 @@ [ "script", "/resources/idlharness.js" + ], + [ + "timeout", + "long" ] - ] + ], + "timeout": "long" } ] ], @@ -314019,7 +315284,9 @@ "vibration/silent-ignore.html": [ [ "vibration/silent-ignore.html", - {} + { + "testdriver": true + } ] ], "video-raf/idlharness.window.js": [ @@ -314146,24 +315413,26 @@ {} ] ], - "wake-lock/idlharness.https.any.js": [ + "wake-lock/idlharness-worker.https.window.js": [ [ - "wake-lock/idlharness.https.any.html", + "wake-lock/idlharness-worker.https.window.html", { "script_metadata": [ [ "script", - "/resources/WebIDLParser.js" + "/resources/testdriver.js" ], [ "script", - "/resources/idlharness.js" + "/resources/testdriver-vendor.js" ] ] } - ], + ] + ], + "wake-lock/idlharness.https.window.js": [ [ - "wake-lock/idlharness.https.any.worker.html", + "wake-lock/idlharness.https.window.html", { "script_metadata": [ [ @@ -314173,6 +315442,14 @@ [ "script", "/resources/idlharness.js" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" ] ] } @@ -314205,13 +315482,17 @@ "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html": [ [ "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html", - {} + { + "testdriver": true + } ] ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [ [ "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html", - {} + { + "testdriver": true + } ] ], "wake-lock/wakelock-insecure-context.any.js": [ @@ -327663,6 +328944,18 @@ {} ] ], + "workers/WorkerNavigator_userAgentData.http.html": [ + [ + "workers/WorkerNavigator_userAgentData.http.html", + {} + ] + ], + "workers/WorkerNavigator_userAgentData.https.html": [ + [ + "workers/WorkerNavigator_userAgentData.https.html", + {} + ] + ], "workers/WorkerPerformanceNow.html": [ [ "workers/WorkerPerformanceNow.html", @@ -328740,6 +330033,12 @@ {} ] ], + "workers/modules/shared-worker-parse-error-failure.html": [ + [ + "workers/modules/shared-worker-parse-error-failure.html", + {} + ] + ], "workers/name-property.html": [ [ "workers/name-property.html", @@ -329083,6 +330382,12 @@ {} ] ], + "workers/shared-worker-parse-error-failure.html": [ + [ + "workers/shared-worker-parse-error-failure.html", + {} + ] + ], "workers/worker-performance.worker.js": [ [ "workers/worker-performance.worker.html", @@ -329206,7 +330511,9 @@ "worklets/paint-worklet-csp.https.html": [ [ "worklets/paint-worklet-csp.https.html", - {} + { + "timeout": "long" + } ] ], "worklets/paint-worklet-import.https.html": [ @@ -345657,7 +346964,7 @@ "support" ], "IndexedDB/idlharness.any.js": [ - "efb84661e8044d146ab0704f18a6a3805ff3c803", + "12c304589ab90da254f98b872661f23c8ba59742", "testharness" ], "IndexedDB/index_sort_order.htm": [ @@ -347037,7 +348344,7 @@ "support" ], "animation-worklet/idlharness.any.js": [ - "efd2fdeb98dc5093babd24c785145ace9fdc8757", + "3517ffc896897c21815c7338035644038bb0e118", "testharness" ], "animation-worklet/idlharness.any.worker-expected.txt": [ @@ -347833,7 +349140,7 @@ "testharness" ], "bluetooth/idl/idlharness.tentative.https.window-expected.txt": [ - "779ed8fc356f381ff774b6650e5c283dcb74e86a", + "48a44990e01cbe980612dc59ab7d0f59ba25b4c8", "support" ], "bluetooth/idl/idlharness.tentative.https.window.js": [ @@ -348964,12 +350271,16 @@ "6805c323df5a975231648b830e33ce183c3cbbd3", "support" ], + "common/sab.js": [ + "c7fd1a742e64f66744b416584952effe29fda208", + "support" + ], "common/security-features/README.md": [ "fb9a2f108f9faf68bb86f0bd9f848dbd28630ca4", "support" ], "common/security-features/resources/common.sub.js": [ - "aa6b5ddf23a3ea786ea938744a5da87b313434e0", + "402ce9bbacf3473115f458a192a634c449c98823", "support" ], "common/security-features/resources/common.sub.js.headers": [ @@ -349028,6 +350339,10 @@ "d8fd6876449ee844a758b2b1028588d866746d9e", "support" ], + "common/security-features/subresource/static-import.py": [ + "0a97dd1a32652b9f41edcb56eefe197ec4276ce1", + "support" + ], "common/security-features/subresource/stylesheet.py": [ "ec62a8cd5f282130f66c1bdfe47240ca4cc625af", "support" @@ -349060,6 +350375,10 @@ "c3f109e4a90edd65cfa26d14dbe4e4252087b37c", "support" ], + "common/security-features/subresource/template/static-import.js.template": [ + "095459b54753a7609cd464088aa0e83b7e4a5086", + "support" + ], "common/security-features/subresource/template/svg.css.template": [ "c2e509cc3b81c55072390d387502fc1949b917ae", "support" @@ -349089,11 +350408,11 @@ "support" ], "common/security-features/tools/generate.py": [ - "75b7c1da5ac19288d25e2664b764b5cc631506d8", + "7710a824b2dc19bd76203f4d64ef7b329fd1ca35", "support" ], "common/security-features/tools/spec.src.json": [ - "75d1528b154a92c5fd8e051618c4f9dea53ceeab", + "5c8f97ad2eef22a41dc48618e8fe53b913c259a4", "support" ], "common/security-features/tools/spec_validator.py": [ @@ -349109,11 +350428,11 @@ "support" ], "common/security-features/tools/template/test.debug.html.template": [ - "7650f02c2862a4923c29b39eae9b7c7d6709f250", + "b6be088f6112a040ad84d2b5c176373180111d62", "support" ], "common/security-features/tools/template/test.release.html.template": [ - "71d83f83a2623881b63444cb435d29a4aeb023a3", + "bac2d5b5a4d78dbb27170c59baeec70cb23add81", "support" ], "common/security-features/tools/util.py": [ @@ -349373,7 +350692,7 @@ "support" ], "compression/compression-bad-chunks.tentative.any.js": [ - "cc71b00030921bb6329ec68661251398ebc5657b", + "af210a765a7ea7d06f9ede37a9fec038f3d412d6", "testharness" ], "compression/compression-including-empty-chunk.tentative.any.js": [ @@ -349393,7 +350712,7 @@ "testharness" ], "compression/decompression-bad-chunks.tentative.any.js": [ - "51f369311588d7832651cf74ad4c86a74f08959f", + "7dcb717a45cf04cbb58e4cffbfbbb24a8a919604", "testharness" ], "compression/decompression-buffersource.tentative.any.js": [ @@ -370753,7 +372072,7 @@ "testharness" ], "css/css-animations/CSSAnimation-effect.tentative-expected.txt": [ - "76507ee8791ff9f8d4cecc4e4a7a0d9bb5e88389", + "194b7bce92958bcf4232bed45f87096f2e8a465b", "support" ], "css/css-animations/CSSAnimation-effect.tentative.html": [ @@ -370836,6 +372155,14 @@ "3ef19970007d4bb6a889f9601bc7c910f619f841", "support" ], + "css/css-animations/animation-base-response-001.html": [ + "c6731e179823584577f42a649f6f3665611a522a", + "testharness" + ], + "css/css-animations/animation-base-response-002.html": [ + "e9ea964f75da4def5e94875deed3761e622d23d7", + "testharness" + ], "css/css-animations/animation-before-initial-box-construction-001.html": [ "558c5ea18699f3856c7d34b976f920b1fd7fd5b0", "testharness" @@ -370972,6 +372299,18 @@ "4bf4b0b0ecc0d18e19f3c30b70c2c75b0cdcdb9e", "manual" ], + "css/css-animations/animation-important-001.html": [ + "5bc3ecfa7501b3e3eae771212d6c8ac94b6ddcdf", + "testharness" + ], + "css/css-animations/animation-important-002-ref.html": [ + "52855cb91e6b780fc6375280b0643335802dd4e3", + "support" + ], + "css/css-animations/animation-important-002.html": [ + "2a68f8e0cacf06e2e5761ef392b90a4f89fcc843", + "reftest" + ], "css/css-animations/animation-iteration-count-001-manual.html": [ "bcbc9eb122c1eb8dc0ba62734e27dfc7001fdfc3", "manual" @@ -371177,7 +372516,7 @@ "testharness" ], "css/css-animations/event-dispatch.tentative-expected.txt": [ - "67e543bdd57fc345aa54f17454e322073780ee4a", + "0906f8b2f77356ef7eea18dc3b728b8afcfba3b9", "support" ], "css/css-animations/event-dispatch.tentative.html": [ @@ -372016,6 +373355,10 @@ "389ee719196cd3dd1afae63d6d773039d0472111", "reftest" ], + "css/css-backgrounds/background-position-subpixel-at-border.tentative.html": [ + "ad2fa4dc02183b48f76bb8a782e6894704d7b24b", + "reftest" + ], "css/css-backgrounds/background-repeat-round-001.html": [ "d4ff39384de587a70e4d8e06780b25098d460fbb", "visual" @@ -374700,6 +376043,10 @@ "aa68e23fe09ba6e2c4a2391f9b2ae129037f1dde", "support" ], + "css/css-backgrounds/reference/background-position-subpixel-at-border-ref.tentative.html": [ + "2964ffa4ce4ed6f144c98f97e2a9d583427424df", + "support" + ], "css/css-backgrounds/reference/background-rounded-image-clip.html": [ "2436bedad5022b95f0913d07501e7ebf206f8a51", "support" @@ -374900,6 +376247,14 @@ "e45bbbe5c5760d905db4bf015b5b7faa27467c7f", "support" ], + "css/css-backgrounds/resources/green1x50.png": [ + "4540a11478baaeaa40bf8797bfa0d0e382d13777", + "support" + ], + "css/css-backgrounds/resources/green50x1.png": [ + "1e90474cebb84d29b2ad22e922e2151eee1aa30b", + "support" + ], "css/css-backgrounds/resources/stripes-100.png": [ "cfb6980439ae80abb5a93e392421e8c6d4cfdae2", "support" @@ -378881,7 +380236,7 @@ "testharness" ], "css/css-env/env-in-custom-properties.tentative.html": [ - "ea471b001f23d654aad2711c2f9351e69bd03fcc", + "6dadcc586b039b7fe4d69dc6ce4678a601343b77", "testharness" ], "css/css-env/fallback-nested-var.tentative.html": [ @@ -378952,6 +380307,10 @@ "a156a727a529f7fbb0ba92b216d47487bc1b3125", "reftest" ], + "css/css-flexbox/align-baseline.html": [ + "31bcca69771751f3277d6f078456f982a375d067", + "reftest" + ], "css/css-flexbox/align-content-001.htm": [ "785538714268efec18bcd80cb1cbe89c40d545b1", "reftest" @@ -379120,6 +380479,10 @@ "8096fc3db661078029f991a45f789f439108849c", "testharness" ], + "css/css-flexbox/anonymous-block.html": [ + "915cca757d73cc711bc3cb47e7539bb4e3e49554", + "reftest" + ], "css/css-flexbox/anonymous-flex-item-001.html": [ "3e749d43f76981a5cc0b372c7ba0c364c350b6b2", "reftest" @@ -379148,6 +380511,10 @@ "163efd401c4d24ce205dc9c39431b79598a7fb6f", "support" ], + "css/css-flexbox/auto-height-with-flex.html": [ + "9151f8cd0979d287dec542e4034bbf3bacc0a8d3", + "reftest" + ], "css/css-flexbox/auto-margins-001-ref.html": [ "04f32f5d7986ad356a882461a3a353c431f71200", "support" @@ -379160,6 +380527,18 @@ "454bc922f6a7c082de3e08d336b2c615ea15ed3b", "reftest" ], + "css/css-flexbox/box-sizing-001.html": [ + "a11762696ede83eac5d08918200e05d56851e427", + "testharness" + ], + "css/css-flexbox/box-sizing-min-max-sizes-001.html": [ + "3aa9ce6bdc304de010684856e511553a046543d0", + "testharness" + ], + "css/css-flexbox/column-flex-child-with-overflow-scroll.html": [ + "4c84a258658d8a0576a03e0e430677945e6eb005", + "testharness" + ], "css/css-flexbox/css-box-justify-content.html": [ "d5c7244f08dcad0b0955290804ec5959754a963d", "reftest" @@ -382260,6 +383639,10 @@ "12e94ba598e74cd253f0f91daf7e88f44884b7fc", "support" ], + "css/css-flexbox/reference/align-baseline-ref.html": [ + "d5b88e8c7dae73b57c7f993260d7cce363eeebaa", + "support" + ], "css/css-flexbox/reference/align-content-001-ref.html": [ "bd468820339bb2bacbaf91ba64911ec24fc1de26", "support" @@ -382268,6 +383651,14 @@ "89f1025261aca313a0598a2f87919f0c201d4b06", "support" ], + "css/css-flexbox/reference/anonymous-block-ref.html": [ + "fc8fe9f991d1df8b41a9ab6932f5eefa6553282d", + "support" + ], + "css/css-flexbox/reference/auto-height-with-flex-ref.html": [ + "d56fe356dcbb6ce87414a2075b5f47c515628016", + "support" + ], "css/css-flexbox/reference/css-box-justify-content-ref.html": [ "e8377473fdef6f93bdf0e1e0e78fd33f01c93e82", "support" @@ -382436,6 +383827,18 @@ "6b6b92896bcca7451703baf1e432bf3d28430b34", "reftest" ], + "css/css-flexbox/stretch-obeys-min-max-001.html": [ + "4b7eb5a1f76a39fdad6956953270ab9bdf8a14c1", + "reftest" + ], + "css/css-flexbox/stretch-obeys-min-max-002.html": [ + "339b68ae1ec588c0baffdc08b81a4a2c756451ec", + "reftest" + ], + "css/css-flexbox/stretch-obeys-min-max-003.html": [ + "626cb2f57c59e6519003bedb870cd4a510a24579", + "reftest" + ], "css/css-flexbox/support/100x100-green.png": [ "25b76c3c6f216793a36b1f29287dafd993898c67", "support" @@ -382773,7 +384176,7 @@ "support" ], "css/css-fonts/META.yml": [ - "3c34ca4e7510e0ad312adfa689689c2b5cb3885e", + "e5ea857ec9043a1c61325d73100fddb6da83020c", "support" ], "css/css-fonts/OWNERS": [ @@ -383985,39 +385388,39 @@ "support" ], "css/css-fonts/matching/README.md": [ - "653f4d933cd0eef271076f02d515cb716ed4659f", + "7d333c5bca51454a53f7fd25edb93c5d997abb88", "support" ], "css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html": [ - "ccbd4efaee5458d7625300f8a3ff671ccfc48c08", + "16826307c8335c8a30ae551baeb5bcc793768c73", "support" ], "css/css-fonts/matching/fixed-stretch-style-over-weight.html": [ - "8b177618a7cfea99b9e8f246766263a348a209c1", + "c2b27be120608c1ae7d5da934ed770875dd21a82", "reftest" ], "css/css-fonts/matching/font-matching.css": [ - "19825008757baf09def0f754daed9ea7fe595e35", + "ebbef02f628baa63b2cb565f0f2850899d54ae65", "support" ], "css/css-fonts/matching/resources/variabletest_matching.ttf": [ - "307af4926cbac28f923feebc69d653894e50f560", + "89ed12a2c03531a1e8f764e3a2365824a8f40a12", "support" ], "css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html": [ - "3e6edda0da8e9cf105de18728ab6a61992fad2cb", + "7589a15f12cfea38c185612cf76e9136355cfbd4", "support" ], "css/css-fonts/matching/stretch-distance-over-weight-distance.html": [ - "770efa99baede7cab09831f48ff0897f1ba6f071", + "e899c8b4d0df867e56a7409adda4dbfafd69260d", "reftest" ], "css/css-fonts/matching/style-ranges-over-weight-direction-ref.html": [ - "d1b235c77f11f02ed4eb5a7a7947290cb2ee0f14", + "5a7c13959abb6582109445c36a9ac1630f114577", "support" ], "css/css-fonts/matching/style-ranges-over-weight-direction.html": [ - "5cb21495ac523ee796e7b246831fd2d5bdcae798", + "f263a11127717e46402fe184f90703fa2e7c3912", "reftest" ], "css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative-expected.txt": [ @@ -391017,15 +392420,15 @@ "reftest" ], "css/css-grid/abspos/absolute-positioning-definite-sizes-001.html": [ - "dd19a835fdf6997b00825d411fbe232b3b497f83", + "c2b6aeecd212ede40c8d60c6d82aaeb6f7736566", "testharness" ], "css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html": [ - "4906638ee1da8428ee4d0e74bec4de83baf4f39c", + "0e52b19997b3e7c587d3f697c9bcb9aae246d779", "testharness" ], "css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html": [ - "6e5e9ac54df68747bb52090810869e50c74e70ea", + "9e7172db439c19e36e5262ffa9cc7c0293fd35ba", "testharness" ], "css/css-grid/abspos/descendant-static-position-001-ref.html": [ @@ -391153,11 +392556,11 @@ "testharness" ], "css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html": [ - "8e576bf4b7a86763beb0bad55854f8efb2ac4759", + "e4629fbd200cbeee2233975cdca93501ba5ea8ae", "testharness" ], "css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html": [ - "e2b2bdb2003db0537d15c447237699a4c44beddf", + "51e8ac18030e0c2b32f5aeff4612570533f6ff40", "testharness" ], "css/css-grid/abspos/grid-positioned-items-padding-001.html": [ @@ -391165,7 +392568,7 @@ "testharness" ], "css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html": [ - "8dcb91ed6c8f35ca27198e64800010324e3a9767", + "7c95993eb52828f212efb3b0180598dc9eaaa1d8", "testharness" ], "css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html": [ @@ -391173,7 +392576,7 @@ "testharness" ], "css/css-grid/abspos/grid-sizing-positioned-items-001.html": [ - "b3716888c33ac864931283797be8f7b6b08d425a", + "de1869c70a6a7c820befc14668a17f21780ac299", "testharness" ], "css/css-grid/abspos/orthogonal-positioned-grid-descendants-001.html": [ @@ -391549,11 +392952,11 @@ "reftest" ], "css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html": [ - "82309e676b8c22c9039994acbd28d3088cfc2d79", + "08779ec1e0f43e73ce7fe2c27e0714b9f85bc017", "testharness" ], "css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html": [ - "7ea528b00f1204f2d0e78a4ea0ff386090d14928", + "bb3be69cfbc7e88bf75d1c6cc3ab90edd8046e95", "testharness" ], "css/css-grid/abspos/positioned-grid-items-sizing-001-ref.html": [ @@ -391573,203 +392976,203 @@ "support" ], "css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html": [ - "0901ddea41695f00ca9735085c79cf887ee80730", + "98d4e3c661dd9560afb71795c6869be395fa78d0", "testharness" ], "css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html": [ - "1b495c47d2d165550e15ea4a2e8e9a44d71cb001", + "60864c110d7aca875271e83213ad9c12fd9772be", "testharness" ], "css/css-grid/alignment/grid-align-content-distribution.html": [ - "444e46b9ca5c8049170f09619f424400967c7633", + "cc3785da0fe064d1256bc61d7eadf399a1df9fc4", "testharness" ], "css/css-grid/alignment/grid-align-content-vertical-lr.html": [ - "dbd27574e9b5f37af2a1f546c14eeb10d8d533f9", + "484ab78e9d36a613061a46502d9db9a8f03322dd", "testharness" ], "css/css-grid/alignment/grid-align-content-vertical-rl.html": [ - "440cf9406786b09d976e9d5a5d3ab9960ff42492", + "fc584d88187f4d095b39b3b66ad967940bd36816", "testharness" ], "css/css-grid/alignment/grid-align-content.html": [ - "fb3f7007ee19189a09de9c1f786176c317b7ee14", + "85d0d501ffd21e1f4394c6f60c14129365274852", "testharness" ], "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html": [ - "9c9e944df04b58a11f0b3096d50b94ddc4f326db", + "7d43a57cfd3f69c82e9c98bb8895adff7fbaab7e", "testharness" ], "css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html": [ - "f7698e45df39855d53c2c205cd034fd04524568a", + "8a7d32c5b61ab89dcae9a0ddd643cf2cee280234", "testharness" ], "css/css-grid/alignment/grid-align-justify-margin-border-padding.html": [ - "9cdce092cc302ccbb3d4ed7633c19696b481b241", + "37ec8cc37576ae254320bddde92b91cc9b65ccdd", "testharness" ], "css/css-grid/alignment/grid-align-justify-overflow.html": [ - "3ae182782a3bcc1261d47a130dbedb305b3ada83", + "37d5c14600c563c627e2aed9d21db3b98762a01c", "testharness" ], "css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [ - "c8fd340006038b1bd7addd84e2bd013da389bbed", + "3b50bb4d6e2675c120dae7573d413778fbbf63bf", "testharness" ], "css/css-grid/alignment/grid-align-justify-stretch.html": [ - "9feeed3e0ef2a17b68bce2b7d71cbdb14a06ee2d", + "7af6695a65ed6a7da551f70e771a8f3f06a35d3e", "testharness" ], "css/css-grid/alignment/grid-align-stretching-replaced-items.html": [ - "6ac50527cd4668dd7edc6c66c07028ac4d8ec6c1", + "b1dbbd8fd2caf2ff10f4b935054283ce119c43fd", "testharness" ], "css/css-grid/alignment/grid-align.html": [ - "a195945d1f97f0f4befc7a8d86a6291a2e1bab34", + "79aa68474030f284a91e23c89551d5d13b2b472b", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-001.html": [ - "865027325afc3d003b5b237041ea6163de8f2c25", + "ee931b990fdb2369041c047fb0bd9b2e3e549e8d", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-002.html": [ - "3d0155e8bbd479519b389173d949a5045f09572a", + "2ef899fca96b4bd906245d39443ad9109547ef76", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-003.html": [ - "c3d0dab39bafbdd2296887b198b39b67e38aac89", + "47cb3347dbf7571c76f3a6509a276712d41ff948", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-004.html": [ - "55feb2c2ba62e32ae6addde36e4aa76eded939b0", + "d3f22e9bc910a3d2667d7695af554944ddc57a6d", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-005.html": [ - "e89cc1ec39210274feeda24288fea145405f5998", + "bb9de73d7356988fb4452a4927470a6c045b4b78", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-006.html": [ - "58a124d39b8f2543d34f2405500371bdfe714519", + "5a61e333f6c5d1914f096749183c04c1a63cc4fe", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-007.html": [ - "782bfcd82449c9507b731e3305da5c70bf1326e4", + "b50d8be7a884d843285f6b6fc32845aaae41684f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-008.html": [ - "b06cf544c1c99c6d82e5e570d0695370c2c809ee", + "fd394b83e74d99f3286ee6a4f7993d6d32203ff4", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-009.html": [ - "108b7fc3afa0f717b388c8fc289448ef56576770", + "0ef6351dbb327ce8b2be5b6d127c0bc395640d22", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-010.html": [ - "34a70f34837db415e32f4f3da7b05483fc55c568", + "d9eb6066b918296897bfadc49c189aec3ff0ecd4", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-011.html": [ - "c3ad2e65b72d36e9c099ec44e9bc25b7473f3535", + "b53c32d5e8b5169edbc41cd7d9069fe1cc1a70bd", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-012.html": [ - "c6d2e3bfc3ac12fc22326c016caf3cba179c22ec", + "4151e7b060e3b0baaa7c069fbe2d0e27b46e7b52", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-013.html": [ - "61b66dee8b4d99966238c32563a8bfc6c516d7e9", + "e87481f530c96d04e08080e6acad6beb157e2b7c", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-014.html": [ - "ee9c4efbb9357de9bd65dadf9e1a45730f594880", + "b74f09d138e97c71d5d4de608cd37a447ab573ed", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-015.html": [ - "5eb383f8b1387098a1c11a0baf3e87c5edffb7fb", + "405dbcf7bc92090da4d2303cc923db5826d76f53", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-016.html": [ - "3f8c0d645c0ab3e806caf96f626f43939b50465e", + "f3477a2aa9e657848e3b757ef8fcc3cad8cabad8", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-017.html": [ - "e85b02599461b9ed0c1e2c4736f875f8e6d771d8", + "b9b9114879c640eb6450f90d5f1521e1739e7bc9", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-018.html": [ - "0c387aa4a2536a405c46e5deb298e2979474e6ea", + "e9bfe63e62013abd79d085ed77a00583d5500281", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-019.html": [ - "3a75c07c501d6aeed8081746964b70c357893edd", + "49896c21f9c675cd89c9afc5059312c0ccf4ce2d", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-020.html": [ - "d122098d9d09d5de0e6e67c1c3a993b8865383bd", + "e04356bc721b2c45212181fe9643e739c8c615ef", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-021.html": [ - "89382a92416739cf825602916a4f101838e41952", + "29aa8ff6eb4990eccd86f572f3593c9fd9a761d3", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-022.html": [ - "70b9061724db2d60dd01a0dbeec85222751f6c56", + "b986bbe659c0c6a56ecad4b21c7da4c30ca5e910", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-023.html": [ - "6bae3d25227c1223b7e863b939aa6e9c29d5db2a", + "e896326a95065255a1e3d2ac6d96cd90074d4363", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-024.html": [ - "d2e25355f3459b493b065494c5ce8011ccced18b", + "b236ef15d146b0357b15701f7cb02c4e6afafbfd", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-025.html": [ - "7652f8badc23fbb744dee328b0f758d310df555d", + "6f268ee7741642a62f9cc058bfa86f4261754e44", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-026.html": [ - "b2462c572e373eb3b1b7d03d503aff9304f43975", + "c3bfc67a7e5b91fcadd360fb25d6ba4d02e89d0f", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-027.html": [ - "a88fd676e38848a393b76fdf777b6e5bc4469b3f", + "5f1512c8c834621916aa6f95988f30858129845b", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-028.html": [ - "4ae7171ec1e5ec00bea00e7770996b89ea9bcfe3", + "2fb651162aaccf8194002be3f220a720c9334c54", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-029.html": [ - "18830609202fdb5a4d29cf724464ca7bdb064d82", + "afe909f81f7dbc41c5d91ec57c095b5b086361a6", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-030.html": [ - "36709d50859430444048eb5e7deb9e9d6634b738", + "d3924e326567655a17715e3921e344a887a7ded9", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-031.html": [ - "ad47a2a594f79137f1706743949d179573490741", + "528e08b881c23bf6ab9e8813c5c0eb0fa96baf8a", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-032.html": [ - "4f4569574cfd8eecf684d52669d528c9d27e3fc8", + "011eea64a2f5b87ca6b8f9b63ff6d9a904acd091", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-033.html": [ - "9ad862c6de0a949a02d29a4af54f8bd9a06ff168", + "eace9b956d38afad8944daf118909f2191d8e3d2", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-034.html": [ - "b253e8283ab33012d53fac06be4e136a055a09cc", + "7b22dffe31a6f533ce86b65d52d71dea92d0d952", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-035.html": [ - "ff0e240dd568a86894b704b760740cf23b900f29", + "18bb1bd061c7e29858dde266705e0649633b4217", "testharness" ], "css/css-grid/alignment/grid-alignment-implies-size-change-036.html": [ - "2664ea1292cdf7c0acd485f287785303e1648418", + "e63ce4fccdf45207b6cb11d1fd27e01b2cd62bee", "testharness" ], "css/css-grid/alignment/grid-alignment-style-changes-001.html": [ @@ -391789,19 +393192,19 @@ "testharness" ], "css/css-grid/alignment/grid-alignment-style-changes-005.html": [ - "ed3ca891da18df7687fe1b42fa7ac354b64a1a53", + "919c6eefa8965e69f705bc168c9f7280ffccd956", "testharness" ], "css/css-grid/alignment/grid-alignment-style-changes-006.html": [ - "a41f24bb95e9510dd7516f9de49882b924f15ab9", + "21e7d0d3abf671504bad29fd4b7bd269ca5d5174", "testharness" ], "css/css-grid/alignment/grid-alignment-style-changes-007.html": [ - "51319257f344174424eb482d5ea2f1554ec1f258", + "136a36167a230a901f3e53a5aad41b1efff4fd15", "testharness" ], "css/css-grid/alignment/grid-alignment-style-changes-008.html": [ - "c7e65dcc2fb56db1acf0290d326a4db072594a4d", + "3145fb0cc6a8c1590e0614b724c38091f3778037", "testharness" ], "css/css-grid/alignment/grid-baseline-align-cycles-001.html": [ @@ -391809,31 +393212,31 @@ "reftest" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html": [ - "a1cc22a41d3f89045eae41e80adb39387464be66", + "e3a880f66eaf2e0da945e9683c0c7e4105ca51ce", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html": [ - "052836c9e9f8069012dbc1e8f0b75c5e4dbd3563", + "739054837176a684020d9ce7bd264bb7eacac2fe", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html": [ - "6ff7e3d423e6dfcc708083598753fc99ac8b6b8a", + "f451ebeae7f264f0d80dbb712016c4a4cd154c95", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html": [ - "6d80fac7bdb2c265c9a643720b1df5dee3691e8c", + "4d0a092e004895ddd99d5aa507aa2e38b7a0fb51", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html": [ - "5f3d2fa8e23c862e45637b30582adad05c387d97", + "9231779e2aea0996277c8c6d90f7dee192f800e7", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html": [ - "566a878d42b75bcf1701cdd78b8ab6679d6fd2ab", + "ccb2dfd5dceff60cdbde168c0dfe59e1099e48b2", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html": [ - "d9b5632f12a49c378f0b0c00d0df2c77fca57edc", + "da51ff321c4f1d82d69c07e73bd55d0a9bf51f77", "testharness" ], "css/css-grid/alignment/grid-block-axis-alignment-auto-margins-008.html": [ @@ -391841,71 +393244,71 @@ "reftest" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [ - "7268b612545e4cbd513ce453489112aaf35b65fc", + "9216ed370c527d6c2bc694ce2129cdeca930f94d", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html": [ - "59edcd1a81464e3510ef046fec564df52bf7f790", + "4a4a397ffa2fe349a3565a354ad30f0e08c897b7", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html": [ - "6e5d32932f607da00b018155fe60045ad850bee6", + "83616380e24643f3da9e1fca22740a38b15c3858", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html": [ - "33d711de2c98ea9c42569278e41237f3c537a145", + "ef6e810f9f75214368ad7fd00adfe41dba5ad028", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html": [ - "b3d51eb9265cb8b5b0a127114c9f457260607dae", + "7c903389f817472e565469abd0e980f0bfd88ebb", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html": [ - "acbb165a6a47ca481e718f9ab7e5d04a79d86c62", + "b1f2136a57fab133c58c0207ca43c836870c3da1", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html": [ - "c88103189055f49fba314e61f8f2fff0756c115c", + "eeeadeff4582372ab07f8dedd5fbf9901bc614bd", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html": [ - "0ebc17c46bbc6a0294df1bfea869eb47bdbb9731", + "1329501015fbca8bfbd2df49f137b53f81e65515", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html": [ - "64b33b8892ebfb1defb4b7d88b79f9318e681e4f", + "60a135dfee8fd8c6a75c48a5c8207ce67752c308", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html": [ - "c860249fd22ab5e1fbd5eae86229e4339dbb386a", + "eb01d61bc27d5e00f3f5e63198414a18c0a5f050", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html": [ - "d772e1aea25d38985a2bdd69f9f7462c2a21c0aa", + "ad3beb8ab113f12e33b3962b43e2865bdc949054", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html": [ - "8f9975d2b2bf785c99def876460bc16528be04c7", + "57db133a7dd5c5eaef50a09cb0ceae0ed43dd710", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html": [ - "80418b12b6b22c4d839948c8f288a665f38480a6", + "9854540a6f5cab33dc01494f6a70076c33eaa556", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html": [ - "70ad6f70b8ae165d93d27d4f6c393436024d7499", + "2f0cd54c42e99e9cd8102eb845f9214a44327a93", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html": [ - "3fb572bad4c6ac32afa9e202c157ec317a5264fb", + "d2bd432d9d49ba545cafd9048cc2d47b558a98a8", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html": [ - "e1437693d5961c2165d0ab2aaf0d92c37e0d1463", + "53284b4678ff324a38c3a0431c739886c3983a02", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html": [ - "5e5a8c024b196cd1af0341c5758590345b711f3b", + "f20ac0d02c7b533a21062dd89038fecb83cebd41", "testharness" ], "css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html": [ @@ -391917,31 +393320,31 @@ "testharness" ], "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html": [ - "e7bafab2e967599dd44245229e767d5a6d20048e", + "0d3a556f40c0cbdb107bc646d84314916e3f42be", "testharness" ], "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html": [ - "769ce1ea48b638bdc382241b9f72dcffa138ec39", + "c20489e9a8b68fe05939357c9aaf75492e5dc49d", "testharness" ], "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html": [ - "a68868e0385f0b46731809d0b886ffcc081f3f1c", + "10a9adb9ff2d385c2b0f054e94e5cb59139c5f96", "testharness" ], "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html": [ - "f69fac5cef79256996e9ed949e4298e244272be0", + "8c6d7abe4edcd88d690c9f4748478078ea07d800", "testharness" ], "css/css-grid/alignment/grid-container-baseline-001.html": [ - "d352977f9318395d0fa0c882bc6e1b9754da29ac", + "73b3c76b599265d1fe20c0fcf1d55fa763a98fb2", "testharness" ], "css/css-grid/alignment/grid-content-alignment-second-pass-001.html": [ - "5f8c8e23c7c27951675d0c7a88574e566427d028", + "1d83f53a47703d7a1a1910b5151670875a1eaf58", "testharness" ], "css/css-grid/alignment/grid-content-alignment-second-pass-002.html": [ - "c3f32c7efc7def5b6a560a40beb21e73b16ad50a", + "74a783bce2f62c1641c554e6f58470f4e3ffb644", "testharness" ], "css/css-grid/alignment/grid-content-distribution-001.html": [ @@ -392141,7 +393544,7 @@ "reftest" ], "css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html": [ - "70e434be8f2ecf00b08f2c1f2ee9868fb2fcec98", + "a03b549a9af3c5732b0740a4f0f2008b972dd7e7", "testharness" ], "css/css-grid/alignment/grid-gutters-001.html": [ @@ -392197,35 +393600,35 @@ "reftest" ], "css/css-grid/alignment/grid-gutters-and-alignment.html": [ - "8202af2550d973b3b73e7cad31906213ac043ce8", + "bc8af31c75e92d09eac2969718706f7691139236", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html": [ - "d1fb13aa491739a8ccf391d8c065c2c117a48ac9", + "5c7825ca2fc4758b23d06fd3489316d0f5381176", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html": [ - "f17afa71e3ee859dc5fb33ac6886d9db6e4d1203", + "3aa47a2570c36fada51634191b7582bbec560f41", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html": [ - "6500a2961f35d3b31062ba86ea3a395c97e24c7c", + "0136d7b4b6798606af56abe332ab2442b3905305", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html": [ - "af9c27e95a19f71f1410106da8ab60581f426b44", + "1ee0de73bcf294d003fa33f983436eda30c7d317", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html": [ - "fd9e696a55e17dc12079df698860b30b192d149d", + "72427f1020ed818942f202b89918b34cd9740f7f", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html": [ - "4492f9b1ebbe7cbc6eadecd9cde2c1de1afd6192", + "ed54ce722a094dfc8954400a78020deb78101d4f", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html": [ - "7954e88f987f1ab5bcc4acd45b67ac04b811d558", + "0b991de98b1967a2f54599b974d19b36cdda59b2", "testharness" ], "css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-008.html": [ @@ -392233,27 +393636,27 @@ "reftest" ], "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html": [ - "32c2efb39571e2575de8b90042f8dde9f39a3adc", + "a9ec652289a4d907c4d8a3176427b2c7ea7db062", "testharness" ], "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html": [ - "845c6cea27eac594100d3b5917e05f896c36e4b1", + "2b3b7a489e1511157225851c1118e3321e15d579", "testharness" ], "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html": [ - "c506547a7607ccb174c9bf3758b432f68ebfe3a9", + "133132529ae4027a0e4554355e5a026df2144d00", "testharness" ], "css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html": [ - "1a70eff865c83cf4d62e61e485996b5bba9a1561", + "e11398907ec3468214172d0ce5de80d430e1b1af", "testharness" ], "css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html": [ - "46cdd89b20223c9f176888cd8f48b7f2095f5e27", + "42c6dd2d29866588959e10a69346baab177cefc1", "testharness" ], "css/css-grid/alignment/grid-item-auto-margins-alignment.html": [ - "86b398192e789d58afb47a18180f62533b0689dc", + "f9fdfd7dbf256f42ca2f0a01a7c6112d78db1ba2", "testharness" ], "css/css-grid/alignment/grid-item-content-baseline-001-ref.html": [ @@ -392329,71 +393732,71 @@ "reftest" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [ - "967b0e4be967e9b3619e24cdf372aefcfd6b4f24", + "b76e808da5f7156ee2206d8aecb36990df502037", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html": [ - "7ccf3979b7ee6251f8ca9832d12b8e6b2e542b89", + "c7ae3f0b7c72f24badd5904ea76bdc9c2d23eecd", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html": [ - "68534b9f6524a33c42acd46a0f0a366d5f19e514", + "a56de0c376c09e45f6aaad9f3616d5567481dee6", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html": [ - "f2615f124711c968f262b4494c5ca808e1d91e78", + "3aa7a3d1ff13b74f6a5418bc111116c88f002e78", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html": [ - "725cb1a25404575bda2018959a7d4401de2a0329", + "d37e541f68c54412271b22f6e16dd754dcd6b7c2", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html": [ - "bd381f1ece8e2afca92bd5b418079434b5590de9", + "fe440bf0ca6243647559244c6521bc8d42225cf1", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html": [ - "3d5f2782dd09274e1224a538aa1edb25f7cb8f61", + "cdd8b5a1f9c3c2978f2d789f60bfbd61e3f479bb", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html": [ - "3d96e0805f5203eea6173162f25f824d32b5129e", + "a52265e3445bf484c25ef2358ba4080d5cbeb68e", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html": [ - "bbcadb598d3052e42ba50cc6327dabb08369ff7a", + "2ff678ecc819990e04e91c8782b5986f5c665e26", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html": [ - "6fba51dfd5c50d13d659a6b57ced907cf6f759c1", + "801f6590a6656c558ba3c112b632905fa666cb4c", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html": [ - "d07711d51579f3e67e422eb6ebef4ea89cbda1d3", + "596787d0bd6b7e29ab3295e7e0ea0ba7699db5e2", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html": [ - "a80afc67eed6ee8be6c2c9eaf6922edf7e8cc8ee", + "1b27bfc941c436470939ee7becc52cc06998d4d2", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html": [ - "90c0d049ae064fca559fa87fea027271152d4103", + "a15bbc0608ca9400cd4d231cdda08d8c7ce514eb", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html": [ - "16fec813ffa0ec793209aee9ca0aec854e56f65f", + "52d8ca640d8f37ed08223df9072a277318daf36a", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html": [ - "cd51a36da5a8dcd542f313368cd717d6d3ddd030", + "83071e0c23a9ee7e9dadb1af5ec65557ac0b14d6", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html": [ - "fc30ac4be76cb4f8da578ba5c4f6de997f3746fc", + "1ea12200925cb3bf5f18f2d1ce71abd3ad315aa8", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html": [ - "8c2c79d574ad04c557960f0fceb8aff05e64bed8", + "041ee3fcc157c5b219d4113e204ea40729a1d7a2", "testharness" ], "css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html": [ @@ -392405,19 +393808,19 @@ "testharness" ], "css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html": [ - "dff798cf5e01592b263b5876a37d4688b16b9e94", + "870e368d08db87aba17ca669b8e9dc14ba81fee0", "testharness" ], "css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html": [ - "27e89c119dd2dea0367d1001d98da242c93d6243", + "80dba9cc3589e05aa5cfb9758b6dfe614c548529", "testharness" ], "css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html": [ - "3530084e88e723c0c19e439761b8aab4602b02c8", + "daf06a4a80e71f2edbf917703c02b4293a7af85e", "testharness" ], "css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html": [ - "4e49df7796767c71b4f4a51b0197dabf55324371", + "f40d06386ed871758ef5c550db626512eb6a039f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001-ref.html": [ @@ -392441,35 +393844,35 @@ "reftest" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html": [ - "5f32149402d0dd0b0e4deac7a3f18c326375b5df", + "93e622ce6d1d37182e378ad28464a34be8e3cb8f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html": [ - "2308b6944b16539adcb69e0dee7e5f89789204bf", + "6b2d5c42568498954d11920d38ed26b5c614789c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html": [ - "1874baac2e295b50d3228cf551186fd308edb742", + "0a5d674fbd827a43307d33b19b14e6e6b30621cf", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html": [ - "4c952d1ee4a76e37e4ec74ab043fd8eb64221de6", + "b9237a533481f9b6d25020be34bccf2c2a4df1cf", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html": [ - "de975e65c8ad5dac7203f457fbaae4ac796ffc23", + "39c75eb5d764915b89bc86cde5c8f574061c459e", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html": [ - "426e095a80fe94936245af87d500a9e595378a37", + "6565a6038765fe4212dad28c9e3bbed40665dd6f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html": [ - "843711dd13cb42c4634aaa9f88d4a844c699a991", + "55c1892da147f12fd73eb1b7f1eb9af4ef4ea751", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html": [ - "91e243f254109ec53d5e11e941904bb97152e87f", + "6edecba2d3ffc74438cbdfda4c2397ddb79270aa", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009-expected.txt": [ @@ -392477,7 +393880,7 @@ "support" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html": [ - "7312a7708f8f0ad380fa49089904dba2054e53d7", + "ad2f8b1dc34c9021316baf756ad21a884b448f51", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010-expected.txt": [ @@ -392485,7 +393888,7 @@ "support" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html": [ - "82ad124e70d77b6c1754aa25015d28a2b4540b58", + "856062014d4855db2ca0fc463b65d5ddf2e492ed", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011-expected.txt": [ @@ -392493,7 +393896,7 @@ "support" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html": [ - "c1dda47514217e54bd651f7625f0a4b8c03cd11b", + "f3a8476ddf9153a25879aca8c8e43ab78d9c0cf0", "testharness" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012-expected.txt": [ @@ -392501,135 +393904,135 @@ "support" ], "css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html": [ - "e2805ca576274d4194db54d9263a722b041c7f25", + "0121846f8a17aaa576ccb80590c470ef69216f13", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html": [ - "499f2c3a24a367867f091d1f45179eef6ee9d12d", + "4c8bd89ecf6b213ffe19ec3e6ed330aa6a13cb25", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html": [ - "b8f0874e41adc1da5a6c5a49de9353ff3e2320c3", + "6624ea00d4c26a5070040aad5177d19681ee4663", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html": [ - "e224a0af2cda152f7664c05bbe45e9d8a24fccfd", + "cc377a5c5981f8e4c1da87c2d3be3a92b7cdcb49", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html": [ - "8aa8a5e128339b843d2a3f2e15661475aaaf0430", + "afbbfcb1dd120e363c409eeecc0a25cc0ca5fb5b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html": [ - "027c1a18a0e67b99dbdfc85d9d85480772fd2d79", + "3cf29475ed28afdbe20eb03a8cf5b5c4743730d5", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html": [ - "8389b06ab0a9ae45e04e4af57ac8ca6631f015fa", + "e1b3fc4d254d115abbb0c2a58215155d1b07e29c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html": [ - "598d7b4dc5614529a67944759f4dfcc8b6ff515e", + "855ed7cdeff1164edb14e6ca0a4acf112180a990", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html": [ - "b843f9f50a7d5909484bae9a4a1d183620cbacb1", + "6fa38b92064f29a0daf2f318ddebf87277ce2c72", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html": [ - "a36ed19b67a64f349364b67e9b13be15ed21347d", + "0ff84978183dda06259bd08e21cdf3431366808a", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html": [ - "6afabd12573f1fbab5c5259258073325c1dc6d09", + "003c3bbb378298d3aa3a611aaaa0bd7ef0cdd8e0", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html": [ - "e330ffafc3c8590ff5b4c3b507293b7dbfa2d143", + "e0681310d00151aa79ab71f83682ea93e4b0167e", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html": [ - "7b1ce95287bfbba3303ff7a806f67cb601628185", + "9049a826a5f60ed2170f27c4639ebec14a1b074f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html": [ - "328f14d5c852838a90c5e3143552b05fcaf8f479", + "42b92fd68141cd44776d25004272db784388633d", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html": [ - "b3a86ebbc120a5d1b4e3f3e19d27cb0b9582bfbe", + "db5c0f89cb664efe7f751119b1791914d8861160", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html": [ - "31165fe006a11a185d9608096365eeb7e66c76d9", + "3b0a3be6c81803d99e1af277b7fdbbc34c7b7a6a", "testharness" ], "css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html": [ - "d61281b78c76ad8663b12ae7b9cf87b58295ad88", + "7d0fd5dc2c88754daf19a6f555628d3a08e78ecf", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-001.html": [ - "b091a948b9464190db05c83ec364c9016e53e250", + "95b5f4fe6df469ce8387bb2a215f2301f65811ca", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-002.html": [ - "6fba94c63b6c9d3073faf409f840627c68f490b8", + "10ea533404f506349a6718c15ed591ecd6040b45", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-003.html": [ - "e0a383282bd2fb5f509034f4c3bee809e4c6f080", + "51ad16826e74ade3406fac1afac8eac939cc3184", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-004.html": [ - "4c4f1c7430fe1fe5222b3125dc811fe0713d9931", + "f0f19e29206494bc7df6c8ba5e9c4ca32a0acfa5", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-005.html": [ - "aaf5a20b005ede4408495cc0537403f638ddb400", + "c21500cd3f9488b996be755eeace8ea4f5c7ad9b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-006.html": [ - "248d57f621a2d041cf929ce3272bbdbf1dd5ec50", + "65f52467645004713f74c49e9dfd15de4885f99c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-007.html": [ - "7ec5c3fe6e7450a364fdce65bb7190606cbba42e", + "6ba763ea9c94108ca68c5cc357602244a223f89d", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-008.html": [ - "55fc78432fe9e108815cd2953b64cdca98647ed2", + "e433dde9b9081ca51e0a07ab49b536f66a10b6dc", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-009.html": [ - "fe164de20d0d65458dba557446060d8155f5f231", + "90de8d4bc00025e74cea19e824a150b0362d97ee", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-010.html": [ - "9feba74730d143ae3cec00180c1fa26f3591fe7d", + "b71a31890877dfb526cbb09004d0cda1db64029e", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-011.html": [ - "b4a199a75255811ed21ce497f785df81d7e71d52", + "8b1999b4b20f1438cd74adce0562c22d4be6d6c8", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-012.html": [ - "51a8b5d570eaa0412ea02d766502a16940c1d87d", + "fe738f2e8aa694fd2316320c1e41de7524810f6a", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-013.html": [ - "3202d7303d12099c7b8808a4d70b5d5b86edae5e", + "ffb52481a043c4dce12dc990887531357b4fd203", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-014.html": [ - "6e283ae4be8d42220f645e4195b705a251b830f8", + "34e1c5ec6c366036e4ca9bd82f4eb0283a1aac52", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-015.html": [ - "5f761f1d8b42ca32a681a12de6f3e4f847cffa4c", + "df8749c47b2c6b2a2afa0ab7980d4003f49dc13b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-016.html": [ - "2378190ea1c6ac3275f467593b1a032a579b3614", + "00059268fc0b0cf238c8c30653194dc1eb98281a", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html": [ @@ -392641,143 +394044,143 @@ "reftest" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [ - "516ea38ff386fa48ac69513f9561ba9661336f73", + "ac851b2514a2b92dc3f79daf48bd97caad428edd", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html": [ - "a7bc034a9cc086ea94f893610e173c6b9b1bec2a", + "d1640a5510ab20a6844ef910b3fd6f5cb6b7e119", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html": [ - "8c37726f8277f1263aa62859290514f3e97307b0", + "6b9563bbdf14be76a51ebcc724da674f5fec692c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html": [ - "0503bc45010611bbcd2849cf59d68f91b5bd444a", + "05332f1c9a9d1fd2b046b7690cc12f78f1cef142", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html": [ - "617c7273cda0c5c9828563fdb26f5c2350df5dd0", + "ce17538fe927c1dc8147385e4114286db7e0d5b9", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html": [ - "4ab4f962ad536d0b90a2138eb49731d0568ba166", + "ab6282ab4d4b9015cf0d1bdbbd02376eacd94b70", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html": [ - "6a8862acb3d17f7ab4c5da4af28ceb9b6f2852a2", + "f960feec88a8b47aacb8be4105902479528a8f0b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html": [ - "d5107aa3606ed9acbd6dc85cd2865eb2b8d0b422", + "fae2519cf86b5db0a633d6fa49d36288d1ce86b9", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html": [ - "04fd2cc204a2c9ea25a5f64d9b63a3b325cf8435", + "6fa5073311e0a18cee58e297463462b9f7174856", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html": [ - "d2393a6b53333ef2e4e54c27cb2f21c6352b41d6", + "2ca7951bffe429b5e43e1f4ccb59fecdbcb9f310", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html": [ - "22a690f0a120a9d523dc946732a8e5f2f50e4fc2", + "f15f0c59fb13c106ebb2b63e4c5916280474157b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html": [ - "c2c4039c08802420f4baee43e6a44f02473c9072", + "e5077b26e5e9d9ccc9f8d17eedd366c2712e38e7", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html": [ - "0a325668cfd761166ad859d12eac31f20df22550", + "a7790b60ef48849632d0bc94c2cf2449e813f02b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html": [ - "9b7d51c32e548559d82c3fec5cc29da7c37612fa", + "5c7fd92cc1480da46a2014d0d7ad671b8fa12449", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html": [ - "c19da89bbe09ccff47e4290e9d4f08b9d766e29a", + "9265d65728e3322dd11083f2f70b4fcd2054b2e0", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html": [ - "772d0eab4a9e2b135518d5ada187731b11aeebf0", + "46370e4dcca97ecb21b4b3c1a87fd42a7cf9a915", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html": [ - "7743374b64105957d3091f2d278fd9291659e31f", + "b41aeb73f581d7644eafb70e1bb38b146d54b203", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html": [ - "28314cad2bbb8ea1cb578b369ceeef944420d0d0", + "36cec785e14f0507ba1de33a635f31f375020c71", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html": [ - "6cb323392fd20b42860266e95aa57f24cea8451b", + "c8e34e484b0f83294b13d02a86c2d2027843131c", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html": [ - "6b0cc055184e928be4b6b90d03394ab2cf0d7bdd", + "d88a7300b34eda9065bef14f74475e24520c2bd9", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html": [ - "c7cdd9c719930429271e4a058600695ab96bd806", + "d38de47effc08f83abdea7aa2e758c636e064a89", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html": [ - "e26fc4e2095b3a01ddf59fd3ab8ca01c90d05160", + "36aaff90f1cb89744a97d2eab0856b1c474ba38b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html": [ - "a9485c1004c152f91763b69e38e65f0302b02073", + "d32631e7d236893b50c1bcd72bb559067b994554", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html": [ - "748a22c3610ae48b342cfe0821f9ecfa7ba1594e", + "f6616048ddc07fca66c6e556a6228486dd8d119f", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html": [ - "5d94f3613ea75bb62459718070760d54c50dd5e4", + "1f852aba4ee14c826657d5648a4ad6b346ef55a4", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html": [ - "1e6e248358b992abfce9a339b9ca1a3f895d72be", + "e6917675897456d4176a8869058394187fb7730a", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html": [ - "d854595bb09d85a4f564815f59efb464ec54de80", + "86a02c6026fd3ea86e4dd4f8561d242e11c969dd", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html": [ - "56736a9090b17c2d94ab17f77d356d6bd2cf2c2d", + "d99580eecc1b513e52c2e4bdbf765916514fe09e", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html": [ - "01ba6a161d7a2c297f90c682b962534663fc56fd", + "59b953a0af2bef129b3c906ef0824ef470be835b", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html": [ - "5f3019a68e914ac4517a01dedec1d5f3140bd0af", + "4da2cd6c981e38902ed2f3e00529b24477109ae6", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html": [ - "c311352a644a53855759207109c0c86ab64ca1ca", + "86ed82f66e03ea2e2df47ca8820982032c6ebccb", "testharness" ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html": [ - "67746851e9fa1753e519e7a4326e9b4f62e89af0", + "57a25d13727421232fffd022d450c1c5deafbf2d", "testharness" ], "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html": [ - "49d0a393508b86f5020c7bd3f0f625b006b2c42a", + "dae81ceee1a90c7d0d66fb3a86fdae025d4389cb", "testharness" ], "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html": [ - "8517771d9089d593ef7d67e92a558b7b5ec15e47", + "10c6d8a1bb8a2d569a57b0787c80890e153d2675", "testharness" ], "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html": [ - "9122b5cbe9483992bd6dc1dba69955e76a75e538", + "a62999cb3218fa974ff4be8fc773882313bb6d1a", "testharness" ], "css/css-grid/alignment/references/grid-baseline-align-cycles-001-ref.html": [ @@ -392924,12 +394327,28 @@ "085d94996f1142d11f9f9c6076e6d9afc025c39c", "reftest" ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html": [ + "754fec3fa0f34787bcd1394c41b67b1c8b02cbb1", + "support" + ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html": [ + "723d876a6a31b38b3ba8964c6e6d4c958d35eef4", + "reftest" + ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html": [ + "975c94b795c1c1e53759a5f1e0ec0f6ee1a6889f", + "support" + ], + "css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html": [ + "486259a5d3e34bfc949021192b3444f13de32be2", + "reftest" + ], "css/css-grid/grid-definition/grid-change-auto-repeat-tracks.html": [ "c2d17ec615f0f092e54c0c4792ca4a03bc1cfe8a", "testharness" ], "css/css-grid/grid-definition/grid-change-fit-content-argument-001.html": [ - "c46722bc7dbad096a3925e58d5d93fb5b7297b8d", + "d697af474328a012543631fd7395003fc65a7c7d", "testharness" ], "css/css-grid/grid-definition/grid-inline-auto-repeat-001.html": [ @@ -392981,11 +394400,11 @@ "testharness" ], "css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html": [ - "40c642e1f32ca3ea33d517859eb3309560e85bca", + "c0be13ead81d14acb8a976a022b745a61bb1be2c", "testharness" ], "css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html": [ - "ce191b6bc55017cf83a1aba172ba16e831a022ae", + "ae65f2207ef4f8039f0b17714dc186c347e3e63f", "testharness" ], "css/css-grid/grid-definition/grid-shorthand-001.html": [ @@ -393008,12 +394427,28 @@ "5357855b0474b8036f72de77ead519104ae1fb3d", "testharness" ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html": [ + "d65696428c2542c4851207df24e1d3638e6c49af", + "support" + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-002.html": [ + "6b3b19ef97f413dea4ed68fbb26edcb7a0ed1f55", + "reftest" + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html": [ + "33f88bf37440db7dbf9d7902debf6859f58ee6e8", + "support" + ], + "css/css-grid/grid-definition/grid-support-named-grid-lines-003.html": [ + "c2c722485f1f9b0c0667a317649e5817ecdefb34", + "reftest" + ], "css/css-grid/grid-definition/grid-support-repeat-001.html": [ "54d230cca9d2be3509d7af79c83eb213075d14de", "testharness" ], "css/css-grid/grid-definition/grid-support-repeat-002.html": [ - "9d1fefb0c3cf9f299ffa41ca85449ef144c43fdc", + "a5174fe6f36af318e459738280dfe01be9ddd013", "testharness" ], "css/css-grid/grid-definition/grid-template-columns-fit-content-001-ref.html": [ @@ -393289,11 +394724,11 @@ "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-001.html": [ - "62fc14f4a97cf648416f2b375a7e93d49de2fdcd", + "dc1602ab173a604a9266890425bb1bd2e9620e75", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-002.html": [ - "19c75d7463f55edb4e4177bf3fc402798d088dbb", + "6ff78b4bb1e5e0456c16eecde254ead9ec81c0a0", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-003.html": [ @@ -393345,27 +394780,27 @@ "reftest" ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html": [ - "81e096531be4d79be10b9c71e700a002633e8455", + "05d77f3d2c18520e301e27d27cca2686f2fff0b9", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html": [ - "5d9584d28a84ac35ca99e19fca3dfea0aa2c49f6", + "168a719a5121c9dd92688efb540087b9ba172699", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html": [ - "f0b493868397e8fc53c511ba7e3832417cfc1787", + "78ce9f762512f68156c5c8bef30aadf9616b1558", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html": [ - "142b2fd2bb69f0963b17b871e30c73395402b685", + "83b5dc7e11b16037c46a5358fd6d19948c0dda41", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-001.html": [ - "892f8f90bcf37b489501b96f6b6363dddc40d6c0", + "7c99eb90685e125b014da8cc6bdb2200f410bf52", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-002.html": [ - "798cdbdbefb9e8afaf0a23c81b311523bf8a9d27", + "447b5201d6d9e8d68fe124a659ca011a9fabf43a", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-003.html": [ @@ -393417,19 +394852,19 @@ "reftest" ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html": [ - "74997fd8b121d86510aa688f21d9fbcd4ed44c17", + "a21ab29de97ea472a5c241e3be7b36d018abfe17", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html": [ - "edffee26fd023822166dce3484c84b96030fc507", + "786efe820392c4d67e552c52c8653aeefad53668", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html": [ - "92f943874d8ae55faaa600bae5475a1e6d2cef9a", + "5bb2566286f043c6f3c09a56f6869ff0a53a26c9", "testharness" ], "css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html": [ - "d3e062eaf8d54b46f51351ebd76a27db32e158ce", + "5502aecd684a25e496dc2848366a1778adc222ef", "testharness" ], "css/css-grid/grid-items/grid-items-relative-offsets-001.html": [ @@ -393541,23 +394976,23 @@ "reftest" ], "css/css-grid/grid-items/grid-minimum-size-grid-items-021.html": [ - "ab66d70a9732cc2ea270feaa222c9efe88c70886", + "d2c221521a51552887b5f0804ad8a55f82125e92", "testharness" ], "css/css-grid/grid-items/grid-minimum-size-grid-items-022.html": [ - "350bce5947af8e68dc3bf6987e1515d284e7bd1c", + "38e1a1bb2697d030aa4a05e97e9ccb2402a1e23e", "testharness" ], "css/css-grid/grid-items/grid-minimum-size-grid-items-023.html": [ - "0f91381bb30cff75ef9f0191975bf6480a04fe1b", + "8993e2fb1b5fedbf575591e01b40c6e4c9962e8c", "testharness" ], "css/css-grid/grid-items/grid-minimum-size-grid-items-024.html": [ - "74063286a644ddc3b4283dfbd2f4ed11e56cb240", + "fc7c91dbf1e25457e9928ff7d9707fe248c2e6e5", "testharness" ], "css/css-grid/grid-items/grid-minimum-size-grid-items-025.html": [ - "7b8c956d17c4d0e668ce62e040be1e3bf8af5ff5", + "544e71c5e0e26955008679b3c01d8211bda24682", "testharness" ], "css/css-grid/grid-items/grid-order-property-auto-placement-001.html": [ @@ -393949,27 +395384,27 @@ "testharness" ], "css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html": [ - "d014a22e7a0f0d832bd37b44b1a0e22608367982", + "907ef68668f2cbe113674e808b4e78ae0e390100", "testharness" ], "css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html": [ - "150077fbed523774beebac6d3ea20b039254a76a", + "7c395253b4deb51c3964196a719555c7db587510", "testharness" ], "css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html": [ - "052fee13e71a79c10ce4e9ea3d07257f842d58e1", + "b3c692c8528e7fdf2428f797f4838333e0abd3f8", "testharness" ], "css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html": [ - "611c4b38da66e64ae37876715568c1eee0acca2d", + "045e080a4e42d1daf0722a1578437c63dc5b5a02", "testharness" ], "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html": [ - "d8e6daff9271942688f0b87cb25f822ed0cdec1d", + "150878b80a9309f29c4a875c15e753d3e937f5a4", "testharness" ], "css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html": [ - "1e9a42d90fbecd9358d8b204d8e0f61766b6abe2", + "f3c2087e2742a2e9cc53b5a5cd10c748d8a40853", "testharness" ], "css/css-grid/layout-algorithm/grid-fit-content-percentage.html": [ @@ -393989,7 +395424,7 @@ "testharness" ], "css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html": [ - "1097956647846dd2493ab5d1c3458660c67868de", + "4dfcd126d10e86bb9b2d2bb6bfc1f668f839c9ba", "testharness" ], "css/css-grid/layout-algorithm/grid-layout-free-space-unit.html": [ @@ -394153,7 +395588,7 @@ "testharness" ], "css/css-grid/parsing/grid-template-columns-computed-withcontent.html": [ - "a788ca22f77c188e6a574852ca23936bd6349071", + "ed67f03f6c226ad32370b76a36f431e4636b463a", "testharness" ], "css/css-grid/parsing/grid-template-columns-computed.html": [ @@ -394168,6 +395603,14 @@ "6bf2e7bce63c88d028f5dea1bf3e7be8cab7775c", "testharness" ], + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html": [ + "c18f296abc9cd32a77abef8e12f41282a52cfafb", + "testharness" + ], + "css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html": [ + "8cb9209ceedac17ca0be48a8c965db0061fee90d", + "testharness" + ], "css/css-grid/parsing/grid-template-rows-computed-nogrid-expected.txt": [ "6731882b8fc21d0c6a460c48f63424e7b3db75bd", "support" @@ -394492,6 +395935,10 @@ "7b59acd700b757826486916ada33ee56444b7309", "reftest" ], + "css/css-grid/subgrid/grid-template-computed-nogrid.html": [ + "6c2042fde784a42c24c7a967693f95734eff50e4", + "testharness" + ], "css/css-grid/subgrid/item-percentage-height-001-ref.html": [ "44f0d443ffa96cfd025485c47de59d598be32b8f", "support" @@ -394632,6 +396079,14 @@ "949d8296fef40637101cb8bdb24f18710e4e3854", "reftest" ], + "css/css-grid/subgrid/repeat-auto-fill-008-ref.html": [ + "4cbb1540de1972dd6baaa0c56d2c18dcf10e1103", + "support" + ], + "css/css-grid/subgrid/repeat-auto-fill-008.html": [ + "28238178f0d9d66139cced2acdd6675fe77c6b36", + "reftest" + ], "css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [ "d264a3455a6c580976d2519ab4e0eb206b1164bf", "support" @@ -394660,6 +396115,10 @@ "45afcb56cbd2beb4d3a6afdbfc9856686526f596", "reftest" ], + "css/css-grid/support/grid-child-utils.js": [ + "d75ad6eb7061349e5453c204235a172778528f6a", + "support" + ], "css/css-grid/table-grid-item-dynamic-001-ref.html": [ "362904334aaef447de9d895e413474a9b4d2c5a6", "support" @@ -395653,7 +397112,7 @@ "reftest" ], "css/css-layout-api/constraints-data-sab-failure.https.html": [ - "8659c2edef56aa2fc72d3ba8ba807cb1d80dfe13", + "b8df61c73d305e463e78855ee399e91c9b9c4bca", "reftest" ], "css/css-layout-api/constraints-data.https.html": [ @@ -395981,7 +397440,7 @@ "reftest" ], "css/css-layout-api/fragment-data-sab-failure.https.html": [ - "a6cfcf663dcf36a6d36fa019dc38ec49c6b29a09", + "681de5b543c29eadd0a27333c0aa42c83ae14f3e", "reftest" ], "css/css-layout-api/fragment-data.https.html": [ @@ -400648,6 +402107,22 @@ "b18dee8caf1864dc30fe656750fe81a8863f1e90", "support" ], + "css/css-overflow/reference/text-overflow-ellipsis-001-ref.html": [ + "814bfd6a2f8149e97709471510b3f77f0f72b756", + "support" + ], + "css/css-overflow/reference/text-overflow-ellipsis-rtl-001-ref.html": [ + "5c75e38d8308ac81dcfe5eef7e18fd7ad56d6b3b", + "support" + ], + "css/css-overflow/reference/text-overflow-ellipsis-vertical-001-ref.html": [ + "18f8a1beaefc9ae6109d62555f1c5c61dccf4105", + "support" + ], + "css/css-overflow/reference/text-overflow-ellipsis-vertical-rtl-001-ref.html": [ + "1c9e660331992b7377f52b86c9dc87b8b0980ae9", + "support" + ], "css/css-overflow/reference/webkit-line-clamp-001-ref.html": [ "ef28e01dac0223c9a2768d3fd1415fb9ef2f1c6b", "support" @@ -400768,6 +402243,22 @@ "c0f0214ee186a0b13787f6f86bd199e7d6df7ac0", "crashtest" ], + "css/css-overflow/text-overflow-ellipsis-001.html": [ + "41c11d581e982c7de2d51d38b18decd99e8a60b3", + "reftest" + ], + "css/css-overflow/text-overflow-ellipsis-rtl-001.html": [ + "32284f89c2e5c4db774ba1a73fd3594f49606b06", + "reftest" + ], + "css/css-overflow/text-overflow-ellipsis-vertical-001.html": [ + "58c8f57dcf5ce328c42bc5552c608d83302af8d6", + "reftest" + ], + "css/css-overflow/text-overflow-ellipsis-vertical-rtl-001.html": [ + "ac621026fdb1f48b9f4d740b48f74ab7df00a79b", + "reftest" + ], "css/css-overflow/webkit-line-clamp-001.html": [ "bba3d1c49f2dab5055fbceb7313659f463454166", "reftest" @@ -406188,6 +407679,30 @@ "bce0a18be6f66e57cad2e2e90694a6f53dab71c7", "reftest" ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-001.html": [ + "1128ffa1759f26011c0639d8b5f498322c6396ac", + "reftest" + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-002.html": [ + "f062b8a94cffae20d39ae7f0c2e5db9a0c061d9b", + "reftest" + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-003.html": [ + "ef8832a405bf1bb73a5e95e3078bd20fac9febcb", + "reftest" + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-004.html": [ + "b0c452b15129bb0cd4f63102d3b190d8db845a38", + "reftest" + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-005.html": [ + "87a7a9b93b3a8ee8aa9806858c35e257dbc7dff0", + "reftest" + ], + "css/css-sizing/intrinsic-percent-replaced-dynamic-006.html": [ + "8ccd3a0bed064233c3aed6b3a6a948bfe1c47e9e", + "reftest" + ], "css/css-sizing/min-max-content-orthogonal-flow-crash-001.html": [ "d2617f8aa2d1c966e394abb1d1617c012ea4648e", "testharness" @@ -408836,6 +410351,30 @@ "39814d3e18c622c022d5e3314580ebb187d217da", "reftest" ], + "css/css-text/hyphens/hyphens-auto-010.html": [ + "60ad082b8b43708c8c44b2263d081a5ed5c9a300", + "reftest" + ], + "css/css-text/hyphens/hyphens-manual-010.html": [ + "8ceaceb1f3f1486b1e9cee141f821d634f946527", + "reftest" + ], + "css/css-text/hyphens/hyphens-manual-011.html": [ + "060dc75619a188cdfe4452b2a1ea941992d38cb4", + "reftest" + ], + "css/css-text/hyphens/hyphens-manual-012.html": [ + "871f7c39b69ddd8b37a3e57acaae92c6fe8e56f8", + "reftest" + ], + "css/css-text/hyphens/hyphens-manual-013.html": [ + "17e3f6f8157aeb302789fa04e8366e44109cf6b8", + "reftest" + ], + "css/css-text/hyphens/hyphens-none-011.html": [ + "cd54cfd09365e4491b024780ccf21d00d9fb562c", + "reftest" + ], "css/css-text/hyphens/hyphens-out-of-flow-001.html": [ "844071126b02d01a68ab2f5df098b653dcf00541", "reftest" @@ -408868,6 +410407,22 @@ "c1355d0abba28491a126533c24039cffc6ee4eb0", "support" ], + "css/css-text/hyphens/reference/hyphens-auto-010-ref.html": [ + "13841121c6429428bdccde7f971e9e582b6b7ad3", + "support" + ], + "css/css-text/hyphens/reference/hyphens-manual-010-ref.html": [ + "f79ce17a4c71bfac19b543b70bb8e95510bad321", + "support" + ], + "css/css-text/hyphens/reference/hyphens-manual-011-ref.html": [ + "98581bd37c0d3e2be1381bb2829a3146821e63b8", + "support" + ], + "css/css-text/hyphens/reference/hyphens-manual-013-ref.html": [ + "9fa6bee4215ea277224d0bf0469a8abe304beb26", + "support" + ], "css/css-text/hyphens/reference/hyphens-out-of-flow-001-ref.html": [ "73394479247fc3491ba37e50ec85b8dd00f8eadc", "support" @@ -414420,6 +415975,14 @@ "a72dc67aff3113e4688035bbc6751372a4649cef", "reftest" ], + "css/css-text/white-space/break-spaces-051.html": [ + "2626511808335491910d3c14d752bb08494fcbc2", + "reftest" + ], + "css/css-text/white-space/break-spaces-052.html": [ + "28219d55c6834e2f06c81f683e4f1456ac82c00f", + "reftest" + ], "css/css-text/white-space/break-spaces-before-first-char-001.html": [ "6fd97f39d03ef4b0f833e9d22a845013412c03bd", "reftest" @@ -415156,6 +416719,18 @@ "93b8b913cc9f4325a676af9c04640979a0eda604", "support" ], + "css/css-text/white-space/reference/white-space-normal-011-ref.html": [ + "ac1f95f623f224ab2658b76250841c9b37f05d68", + "support" + ], + "css/css-text/white-space/reference/white-space-nowrap-011-ref.html": [ + "b70f993c808fe0482f6f98cedfaca0111b059030", + "support" + ], + "css/css-text/white-space/reference/white-space-pre-011-ref.html": [ + "c3aecc8dfbd241d29f08266bb122fbcb5cd442e3", + "support" + ], "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [ "8db147766bc3fa769df5601b8b32964fb59bcbc1", "support" @@ -415504,6 +417079,18 @@ "a5be242e23a7d00785f520aa52adf794a19aaed3", "reftest" ], + "css/css-text/white-space/white-space-normal-011.html": [ + "1743f58f14147b0d8d4310ad0daf7607ff87bd65", + "reftest" + ], + "css/css-text/white-space/white-space-nowrap-011.html": [ + "1c11d97093baafd73cc907726b31b5cec00d2eee", + "reftest" + ], + "css/css-text/white-space/white-space-pre-011.html": [ + "88b9894d13776605ab5d2c9b5e38e13db80168de", + "reftest" + ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [ "82fbfbc976cd02629d1180e4470170a533aa27e9", "reftest" @@ -416512,6 +418099,14 @@ "c69bad7c93b8448b763e7f98d0ed6b50783ed7d2", "testharness" ], + "css/css-transforms/animation/transform-interpolation-computed-value-expected.txt": [ + "7a61e08e8fee91bf145737bc4d2b20dd52455e6e", + "support" + ], + "css/css-transforms/animation/transform-interpolation-computed-value.html": [ + "80d2a37f4c9aaf6224d8f729214259157b0eefa7", + "testharness" + ], "css/css-transforms/animation/transform-matrix-composition.html": [ "2586ff3d4a577b9c4b43a2841884c6f490d7ccf3", "testharness" @@ -421408,6 +423003,14 @@ "9a74bebfb7a45765cac3693b1461953ea75cef92", "testharness" ], + "css/css-transitions/transition-base-response-001.html": [ + "b4188985ac5d40cbf03efd6e780001baf3e96d01", + "testharness" + ], + "css/css-transitions/transition-base-response-002.html": [ + "89c6ff25bc5a080bdd87eb180194d63124eab438", + "testharness" + ], "css/css-transitions/transition-delay-000-manual.html": [ "b205085997ced154dd81e5085dbc6a0cfce19045", "manual" @@ -423377,7 +424980,7 @@ "reftest" ], "css/css-ui/appearance-cssom-001-expected.txt": [ - "e7ed53b3fbebaa004e3b007c35fa279f4d045859", + "30c70bbdb39d95c2ade23318f0903cf6005a970a", "support" ], "css/css-ui/appearance-cssom-001.html": [ @@ -427301,7 +428904,7 @@ "testharness" ], "css/css-variables/variable-substitution-variable-declaration.html": [ - "0b0ab1f0f0f868fa86673f51d6ada27245926add", + "678d05a1acc234362c1f8ac54f6a2190fc3a9fb1", "testharness" ], "css/css-variables/variable-transitions-from-no-value.html": [ @@ -427328,6 +428931,10 @@ "a8b5ae4ca0c10c44b9dd70d27a7aed2947acc57c", "testharness" ], + "css/css-variables/variables-substitute-guaranteed-invalid.html": [ + "c30e8746db516f2ef35e904c948801b184ceecae", + "testharness" + ], "css/css-variables/vars-background-shorthand-001.html": [ "741e2cc021d7a7bafff697e3b92db011ac3157c7", "reftest" @@ -434836,6 +436443,10 @@ "160bd9243bad6a1f467a343a7e89c77950ae3a79", "support" ], + "css/cssom/CSSStyleSheet-constructable-replace-on-regular-sheet.html": [ + "d059258d90a64ac7dee02a14d92c677afe3fdb47", + "testharness" + ], "css/cssom/CSSStyleSheet-constructable.html": [ "fbee4298c1411937f8c45a2f6001ee78dccadbb5", "testharness" @@ -435748,6 +437359,14 @@ "6c61a9620aa82d23375fd31900d87bcfd873a5e1", "reftest" ], + "css/filter-effects/backdrop-filter-root-element-ref.html": [ + "c92741df4300e5416cbe26339d52b819ec35347c", + "support" + ], + "css/filter-effects/backdrop-filter-root-element.html": [ + "890e6ae51a8c4f65d357a90041f54666e9f447a4", + "reftest" + ], "css/filter-effects/backdrop-filter-update-ref.html": [ "ec4d80628b83c1e8e42cb389701dd7809b85ce6d", "support" @@ -436253,7 +437872,7 @@ "support" ], "css/filter-effects/idlharness.any.js": [ - "e7de16e8d62904986610a484b046a4caf0f161e3", + "5df3aaf4b28842d05f4d038ba2ec0b18f828b6fc", "testharness" ], "css/filter-effects/inheritance.html": [ @@ -447353,7 +448972,7 @@ "support" ], "editing/data/delete.js": [ - "e5ca838f6479b894258986557ade227ac0548845", + "db53a3643f600da683a1df2f49e6e55d5b1e6d3d", "support" ], "editing/data/fontname.js": [ @@ -447373,7 +448992,7 @@ "support" ], "editing/data/forwarddelete.js": [ - "bbc2b11a3cab72025395eea3f45b91a92a096a7a", + "2b8829e6721b521b19af3c71740dd5b73c84fd36", "support" ], "editing/data/hilitecolor.js": [ @@ -447588,6 +449207,10 @@ "96c92fe04b381f40392d7ea47c04ab25b79b9baf", "support" ], + "editing/run/caretnavigation.html": [ + "defe7fecfc2850355fe21da8a6d14ed6c5265885", + "testharness" + ], "editing/run/createlink-expected.txt": [ "4865ecf24d113b2969dce718a2561f15dbd665ae", "support" @@ -447629,7 +449252,7 @@ "support" ], "editing/run/delete_6001-last-expected.txt": [ - "d5f2065cf13f6758cd387139cd7ca07cc8f867b7", + "8cf8d05977ed43ac0429b98564649e26c336ad58", "support" ], "editing/run/first-letter-crossing-engine-boundary-crash.html": [ @@ -447757,7 +449380,7 @@ "support" ], "editing/run/forwarddelete_6001-last-expected.txt": [ - "c25b0f8d9e413f2e60773108de716ecd2a64cbec", + "755c55fde6c230114dbd6f8a91ffff6f14821d19", "support" ], "editing/run/hilitecolor-expected.txt": [ @@ -448764,14 +450387,30 @@ "7260b6b155b13de3961d170c3e2868042e229305", "testharness" ], + "encoding/bom-handling.html": [ + "ea70d362546ed0d75129ffa1aed67493cf5ae89e", + "testharness" + ], + "encoding/bom-handling.html.headers": [ + "2340a89c93ce4515026a5462cb9382dc2501bfdb", + "support" + ], "encoding/encodeInto.any-expected.txt": [ "adb30e4f0c26afb144d946e6cd655ca9e368bb1e", "support" ], "encoding/encodeInto.any.js": [ - "7e18c812499a52b14dacb772bfaf6c429ebc2da6", + "eca0e1bca158b079dda2b9a5560e7161809ff76f", "testharness" ], + "encoding/encodeInto.any.serviceworker-expected.txt": [ + "adb30e4f0c26afb144d946e6cd655ca9e368bb1e", + "support" + ], + "encoding/encodeInto.any.sharedworker-expected.txt": [ + "adb30e4f0c26afb144d946e6cd655ca9e368bb1e", + "support" + ], "encoding/encodeInto.any.worker-expected.txt": [ "adb30e4f0c26afb144d946e6cd655ca9e368bb1e", "support" @@ -449965,7 +451604,7 @@ "support" ], "encoding/streams/decode-utf8.any.js": [ - "421b98c2eea537eaebb31d1865e9eef499ce98f8", + "5abd8dcb8f9b8f176002d5dcfa3314c910349e9e", "testharness" ], "encoding/streams/decode-utf8.any.serviceworker-expected.txt": [ @@ -450013,9 +451652,17 @@ "support" ], "encoding/textdecoder-copy.any.js": [ - "6ae65119db687c438c0f60595e3614c09434c4b9", + "61de4142bf27a25df5e6dfb0395c9eb392e58334", "testharness" ], + "encoding/textdecoder-copy.any.serviceworker-expected.txt": [ + "54db5fca004b95505db390ac1d6d11e8f6d0a348", + "support" + ], + "encoding/textdecoder-copy.any.sharedworker-expected.txt": [ + "54db5fca004b95505db390ac1d6d11e8f6d0a348", + "support" + ], "encoding/textdecoder-copy.any.worker-expected.txt": [ "54db5fca004b95505db390ac1d6d11e8f6d0a348", "support" @@ -450045,9 +451692,17 @@ "support" ], "encoding/textdecoder-streaming.any.js": [ - "e0c59472598fbd828305816e4e8a0b161244862f", + "5717c2dbe00a2a557222cdf9d942de20ed9b6332", "testharness" ], + "encoding/textdecoder-streaming.any.serviceworker-expected.txt": [ + "cf065370af6b02fa26542c4f7c2b59908d4a1a3a", + "support" + ], + "encoding/textdecoder-streaming.any.sharedworker-expected.txt": [ + "cf065370af6b02fa26542c4f7c2b59908d4a1a3a", + "support" + ], "encoding/textdecoder-streaming.any.worker-expected.txt": [ "cf065370af6b02fa26542c4f7c2b59908d4a1a3a", "support" @@ -451729,7 +453384,7 @@ "support" ], "feature-policy/feature-policy-nested-header-policy-allowed-for-self.https.sub.html": [ - "274b3ebe9073f1558e0d2b378dc01a427528371b", + "62ddd967495a251bcb76988d9236429af6cc8691", "testharness" ], "feature-policy/feature-policy-nested-header-policy-allowed-for-self.https.sub.html.sub.headers": [ @@ -451737,7 +453392,7 @@ "support" ], "feature-policy/feature-policy-nested-header-policy-disallowed-for-all.https.sub.html": [ - "f15b43576f2cac9b3245a9a52bc825c8d6b2f693", + "6194a33b1d763b3a0bfe98f09f78f9be2dae9c8c", "testharness" ], "feature-policy/feature-policy-nested-header-policy-disallowed-for-all.https.sub.html.sub.headers": [ @@ -452133,7 +453788,7 @@ "support" ], "feature-policy/resources/feature-policy-wakelock.html": [ - "fac421c09fa2274a8de5f3b914a27fd15f3aaba3", + "7d3dab45af1d57c805f14cfdbed142ddb2415eba", "support" ], "feature-policy/resources/featurepolicy.js": [ @@ -452768,8 +454423,12 @@ "5935c1ff31ec4bf84b65fc2a92ff7276f4e79fed", "testharness" ], + "fetch/api/request/destination/fetch-destination.https-expected.txt": [ + "2bd30f220de26d5ab75ba3ffd8534ea0222c346b", + "support" + ], "fetch/api/request/destination/fetch-destination.https.html": [ - "27b510268dde9f24b2500756f5d55940cd98d884", + "0094b0b6fe8eac2049fac57580bc6deb3c185922", "testharness" ], "fetch/api/request/destination/resources/dummy": [ @@ -453449,7 +455108,7 @@ "testharness" ], "fetch/cors-rfc1918/idlharness.tentative.any.js": [ - "88468dc19a38a64e6ebdb19b4e92ddf23a3247fc", + "1dad943072589a40fd3d685c7cb4f5201a3073d5", "testharness" ], "fetch/cross-origin-resource-policy/OWNERS": [ @@ -454569,31 +456228,31 @@ "support" ], "fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff": [ - "6401070d44fed8d27c688a931d277bce2ef71517", + "b334dd99e0cd7b1705241497ae89fe7aa2d9fbf4", "support" ], "fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff": [ - "0e8b1e0a434e3da52f54c0f64a273ade855b8f23", + "cb7026611953e7be21e69158e555fcac2a3e0a6c", "support" ], "fonts/math/radical-extraascender3000-rulethickness1000.woff": [ - "6c0ca282e9597c2eb5d3093ca05e7a1357784226", + "cf064b1c07e73137d73b860d1f69ef5ed45e3a84", "support" ], "fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff": [ - "24aa4c525a1ed14af7fff5134962851e28dfbd62", + "61ab4163ac9e743ffc777ef6e952ec200bb67fba", "support" ], "fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff": [ - "1fca6f6d85a20c14c7d95ac2563a94a1bfd44e47", + "9ed871062ef0d0248809983baf7d212014963682", "support" ], "fonts/math/radical-rulethickness8000.woff": [ - "0863dc3230ead9d9deb43dac6185d781f7c098d2", + "090caa9efd323e53a3dd9837a7239e0b1d0dcfa6", "support" ], "fonts/math/radical-verticalgap6000-rulethickness1000.woff": [ - "9808112c7aa934f49db078637fb082d1f0f24df5", + "873a3d9f2de8a959bca2448e5c845b0dafe95cd9", "support" ], "fonts/math/scriptpercentscaledown0-scriptscriptpercentscaledown40.woff": [ @@ -458636,12 +460295,24 @@ "6604450991a122e3e241e40b1b9e0516c525389d", "support" ], - "html/cross-origin-embedder-policy/cache-storage-reporting.https-expected.txt": [ - "988f6156df10c95abc002fe088683d07f18d35a9", + "html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https-expected.txt": [ + "020757c74f1d8efd65818362c5529f4f0377b6b9", "support" ], - "html/cross-origin-embedder-policy/cache-storage-reporting.https.html": [ - "4ef9eb21d69b35429b7a542b1f9c37a2b5042b18", + "html/cross-origin-embedder-policy/cache-storage-reporting-dedicated-worker.https.html": [ + "468861a9df60fc790e10515d3d01fd9fbd818266", + "testharness" + ], + "html/cross-origin-embedder-policy/cache-storage-reporting-document.https.html": [ + "a6a2c355cb2287c6792c13e5a29e5e654ea00d3f", + "testharness" + ], + "html/cross-origin-embedder-policy/cache-storage-reporting-service-worker.https.html": [ + "6b5b78bba088671d4d6eb5b7833bf1c873963eee", + "testharness" + ], + "html/cross-origin-embedder-policy/cache-storage-reporting-shared-worker.https.html": [ + "2cbdb21ee12d2bd971284d2a54e42d4bbf2a041d", "testharness" ], "html/cross-origin-embedder-policy/coep-frame-javascript.https.html": [ @@ -458780,6 +460451,10 @@ "4e798cd9f5d3f756df077a43ce9a1a6f9b41fd28", "support" ], + "html/cross-origin-embedder-policy/resources/cache-storage-reporting.js": [ + "af36ccf9d3df852f75af46339e7df6bff23a5402", + "support" + ], "html/cross-origin-embedder-policy/resources/coep-frame.html": [ "78c13311324683c3a6eff72e55bd733268edd6ec", "support" @@ -458861,7 +460536,7 @@ "support" ], "html/cross-origin-embedder-policy/resources/script-factory.js": [ - "9db755226020479fd87e87f42ea622c999b38f7d", + "ab7286e57ac18ca4b34f6c6d75d17b6d9198f7c0", "support" ], "html/cross-origin-embedder-policy/resources/sw-store-to-cache-storage.js": [ @@ -458916,8 +460591,12 @@ "46ad58d83bf6e98913ca4c564b7acb8f19fa0093", "support" ], + "html/cross-origin-opener-policy/coep-blob-popup.https-expected.txt": [ + "5539fdc5fa3fd3ff4952268110a4b9d26cdf5929", + "support" + ], "html/cross-origin-opener-policy/coep-blob-popup.https.html": [ - "c66988d0a659b1c0cf00bd88e06f3b2c3dded975", + "c317f6bdf9baa9311abb93fe3a1fd174bb824b3b", "testharness" ], "html/cross-origin-opener-policy/coep-blob-popup.https.html.headers": [ @@ -460436,10 +462115,6 @@ "0a362f817a5e7fb630cc4c0317fc80fe59cf4ab3", "testharness" ], - "html/dom/reflection-forms-expected.txt": [ - "b79da4cbd96a9476b9fc0889b43d8ff9c2facccf", - "support" - ], "html/dom/reflection-forms.html": [ "2fe251a6f4c26cd5f679572350717b3b87698a64", "testharness" @@ -464261,15 +465936,23 @@ "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt": [ - "a51bd018b56d03d7c97772b49ccd07a1f4b0f246", + "c559255cf7cf1d3cde1517513523aa9e52fd9ddc", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js": [ - "35098892020bf58bda9f1821d2ba5b2570eb5d54", + "0db16fd6f703acf82d5ea54b73a1e83aa24665a0", "testharness" ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker-expected.txt": [ + "85ff8065fe8ca7cc36b295f0259ab0d1899c3b85", + "support" + ], + "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker-expected.txt": [ + "85ff8065fe8ca7cc36b295f0259ab0d1899c3b85", + "support" + ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt": [ - "56a936dca4777767828baab72accbedcffb98789", + "85ff8065fe8ca7cc36b295f0259ab0d1899c3b85", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.https.html": [ @@ -464453,11 +466136,11 @@ "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js": [ - "0202ec39ac6fe70fa13e83c3562979cb005c603c", + "2917013ee2536507ee3a5a3cbd03e93987b51351", "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js": [ - "ce643e8a7cba5be412b367f5bc5f1bc5592df48f", + "4c1c1fdabb24bdbde713b388cf3fa55e3804b319", "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.https.sub.html": [ @@ -464468,10 +466151,6 @@ "63b60e490f47f4db77d33d7a4ca2f5b9a4181de8", "support" ], - "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https-expected.txt": [ - "68c6a6464d0a1fe6ec2e9af58ad5b534ead12271", - "support" - ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html": [ "203a9f637fe61a2367fd4b58523af601401991be", "testharness" @@ -470084,6 +471763,14 @@ "0c1c39a8ae95f0b978f3b2a3ebd822598295372b", "testharness" ], + "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip-ref.html": [ + "79350ef0cbb2dac43256e5deae19fe1ab4fc85d4", + "support" + ], + "html/semantics/embedded-content/the-img-element/image-loading-subpixel-clip.html": [ + "886e0dd42abb4fb00e2366327aea9c5bce696c36", + "reftest" + ], "html/semantics/embedded-content/the-img-element/image.png": [ "d26878c9f22d53bb44be515fa9f0ffbb90a71cbd", "support" @@ -470184,10 +471871,6 @@ "926e9508852cf9523530f14121d386964ade673c", "support" ], - "html/semantics/embedded-content/the-img-element/original-referrer-policy-applied.sub-expected.txt": [ - "55c98d0a1dffa5660c8f10e96b2a23692fa23f41", - "support" - ], "html/semantics/embedded-content/the-img-element/original-referrer-policy-applied.sub.html": [ "c300119f72fbd3742d6dbf7e2439d967911303a5", "testharness" @@ -475965,51 +477648,27 @@ "support" ], "html/user-activation/activation-api-click.tentative.html": [ - "7f170a04ab1c20702ad0ba282133b32046c6003b", + "2178863fbd2a3e101df69ef1a79e420327d7e96c", "testharness" ], - "html/user-activation/activation-api-iframe-no-activate.tenative.html": [ - "bd34518ba883d923067ff0921883387e73a42595", + "html/user-activation/activation-api-iframe-no-activate.tentative.html": [ + "46fd129459c5beb0cb10eb1df40d6764c3dbc98c", "testharness" ], - "html/user-activation/activation-api-iframe.tenative.html": [ - "16b0ba672bc4a27659efaa0fc24907e3f5925437", + "html/user-activation/activation-api-iframe.tentative.html": [ + "91fac9b246c6752bf33b036f6cab7bb1b9022e6c", "testharness" ], "html/user-activation/activation-api-setTimeout.tentative.html": [ "a8eba38c60eeef7396c2725d26ea3c6e6609be7a", "testharness" ], - "html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html": [ - "601b9003f7ea9ba9847366a9365a08139f810078", - "manual" - ], - "html/user-activation/activation-hierarchy-sameorigin-parent-manual.html": [ - "a7f423eea56f0e6dd41ecf9a950137ef502fdf12", - "manual" - ], "html/user-activation/activation-thru-contextmenu-event-manual.html": [ "998bac3694c6f81e099c1c9eab41c704adcf10f9", "manual" ], - "html/user-activation/activation-transfer-cross-origin-with-click-two-child-frames.sub.tentative.html": [ - "777cb5b11efe0ad664d34825bc6b5b69724f8c68", - "testharness" - ], - "html/user-activation/activation-transfer-cross-origin-with-click.sub.tentative.html": [ - "ef1602a8c36a43b078950521a81c3747979d7b82", - "testharness" - ], - "html/user-activation/activation-transfer-with-click.tentative.html": [ - "040d36c3190d228a7326ed0ea5dd46153f1b997b", - "testharness" - ], - "html/user-activation/activation-transfer-without-click.tentative.html": [ - "a12d4346a8e3cb475bb7446f784a626e46cd1e26", - "testharness" - ], "html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html": [ - "63a1da05d0005c33bec1af8a58e7f011d5b09d4c", + "79899cd521808902a4d45d83250341d28a7f0c37", "testharness" ], "html/user-activation/message-event-init.tentative.html": [ @@ -476020,36 +477679,32 @@ "4f03195f434742d80574c481092b307d4ad9108f", "manual" ], - "html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html": [ - "6dbd46830442d5790207e1309bf4403a353c9c62", - "support" + "html/user-activation/propagation-crossorigin.sub.tentative.html": [ + "a2f578f53b92a3595d3dbba15460d28f1d4f0960", + "testharness" ], - "html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html": [ - "b9fe19a746ffbbe63740df67a77da8a894b573ae", - "support" + "html/user-activation/propagation-sameorigin.tentative.html": [ + "76d2b68fa708ac7a88c6a1bcabc0395f72070048", + "testharness" ], - "html/user-activation/resources/activation-hierarchy-sameorigin-child.html": [ - "d54c7efc9bdcf2cc5c79fed6838729975bee4cfa", - "support" - ], - "html/user-activation/resources/activation-hierarchy-sameorigin-grandchild.html": [ - "9d664e2356a87496416644d639598adbaa8c43dd", - "support" - ], - "html/user-activation/resources/child-four.html": [ - "65d17f273e1868312f59c89f3f2d05bda759ae1a", + "html/user-activation/resources/child-message-event-api.html": [ + "a0001633c22d19e44c1f48ddeffa07dde1fbc436", "support" ], "html/user-activation/resources/child-one.html": [ - "9c99729b6a98022f7449bae62a7bea616308c0c7", - "support" - ], - "html/user-activation/resources/child-three.html": [ - "5a74cf5360c6a14d2ad5eebb31d74db6980ebccf", + "966837262069acbb1a414c1b4d631b457979fea4", "support" ], "html/user-activation/resources/child-two.html": [ - "1fa8343a18684e1160ae763c4d32cd3fa4027399", + "caf23f4daddd7e6c7118280f4a8c390e9819e92b", + "support" + ], + "html/user-activation/resources/propagation-crossorigin-child.sub.html": [ + "3cdd6886da2a875e3a9ead3f68dda09df4c0c0da", + "support" + ], + "html/user-activation/resources/propagation-sameorigin-child.html": [ + "69ad50cb717d118c9fd8cf9c4c1f6ba5b004e136", "support" ], "html/webappapis/animation-frames/callback-exception.html": [ @@ -477161,11 +478816,11 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js": [ - "f195a70fdf9a41bc3abcbb1e17c38540054c5b50", + "8b68840367119c89525b2ea5f9af53f38100bdd4", "testharness" ], "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js": [ - "290b44353c8ac57d4e0461c31b88c56b15c89103", + "9adc044a0ddc8b8cde4decff88ee667a27cf6f01", "testharness" ], "html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html": [ @@ -477401,7 +479056,7 @@ "support" ], "html/webappapis/structured-clone/structured-clone-battery-of-tests.js": [ - "ac5104c7fd77808a2ec9dd4486f711cb5e8e414b", + "751a0e1a9ea8b549543f2e78551b0d00b4fc6127", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual-expected.txt": [ @@ -477429,7 +479084,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html": [ - "0fb9e372b0dd6f5c6463430ee4012e5c040c4a80", + "9409dd08e4d0e7a351de45419c310cdcccc97c86", "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.tentative.html": [ @@ -479169,7 +480824,7 @@ "support" ], "interfaces/geolocation-sensor.idl": [ - "ef172f63ea0eb141cb20551da76e578cbff733d0", + "baa0f5c7a1e78a2e2ee9772ffada53790116cd55", "support" ], "interfaces/geometry.idl": [ @@ -479193,7 +480848,7 @@ "support" ], "interfaces/image-capture.idl": [ - "e9016a1f9bab87e9ed62a4bc99e7bcd0d958abf4", + "148bd7bb4cd0bd58162da962a5b230dc53116303", "support" ], "interfaces/input-events.idl": [ @@ -479257,11 +480912,11 @@ "support" ], "interfaces/mediasession.idl": [ - "8671af5acd9205978e1828502245ba134258c1e9", + "059d1ec8cf14c80fb78285b5014bd3a3e8c7e664", "support" ], "interfaces/mediastream-recording.idl": [ - "2d849ba9affe476a23141c9f3976c65b2d9f7ef4", + "52295125da66d8562f66366f279d57ae05a7fe86", "support" ], "interfaces/mst-content-hint.idl": [ @@ -479449,7 +481104,7 @@ "support" ], "interfaces/video-raf.idl": [ - "9c523e6ca0330b96c9320e6ca76a077686afbe3b", + "0ab48e33d59392d09e24ad87b4608bd0a840f2d9", "support" ], "interfaces/visual-viewport.idl": [ @@ -479473,11 +481128,11 @@ "support" ], "interfaces/web-animations.idl": [ - "0d5d40ba74f40ed68c19a8218710204b2767ae12", + "006b27b2820f81e89a0088b996acf61fb634f325", "support" ], "interfaces/web-bluetooth.idl": [ - "cbf09e1d7ed736f27f2c2a0ee185da681e1ffed6", + "73371e26996568e9051990fbb67f1e08deaed5eb", "support" ], "interfaces/web-locks.idl": [ @@ -479521,7 +481176,7 @@ "support" ], "interfaces/webrtc-stats.idl": [ - "f66b0791cb2fae4665a6df8cde1d1c67a18797f6", + "514d09f15a60446ad7a6ba78bd1288a047085af1", "support" ], "interfaces/webrtc-svc.idl": [ @@ -479549,7 +481204,7 @@ "support" ], "interfaces/webxr.idl": [ - "e95acca7ca3d1f8170cd0fd28d0281581fb59544", + "1b005c3cdb39667e55875d31a53f574ac8d388e3", "support" ], "interfaces/worklets.idl": [ @@ -479976,12 +481631,16 @@ "cbe46f402b4e344571932fc501d4d3410eadc125", "testharness" ], - "largest-contentful-paint/invisible-images-composited.html": [ - "f652180d4641d00beeb52fea67b13bf50f69e061", + "largest-contentful-paint/invisible-images-composited-1.html": [ + "495645ab41eccb80464a2ceb7de83a2136ecfbf7", + "testharness" + ], + "largest-contentful-paint/invisible-images-composited-2.html": [ + "8ab32ebb1f24f653199406990d443094ae5b79fc", "testharness" ], "largest-contentful-paint/invisible-images.html": [ - "49324663f22688c36dbf0ae1f131bda5339151f1", + "997d70f7773634fbb84bbaec334ecbdcdc4f9f2d", "testharness" ], "largest-contentful-paint/larger-image.html": [ @@ -480024,6 +481683,10 @@ "cd600254805570deab8447ea843657d7f268b7c5", "support" ], + "largest-contentful-paint/resources/invisible-images.js": [ + "fd13e9454deda3c69228aab096ce032e8e1b7cff", + "support" + ], "largest-contentful-paint/resources/largest-contentful-paint-helpers.js": [ "0529e227b8094656361a7ab9d5ae81a92f0e8934", "support" @@ -480473,7 +482136,7 @@ "testharness" ], "mathml/presentation-markup/fractions/frac-1.html": [ - "5ecb66ecf6aabec264d8452a1277eb7769dde3fd", + "77ed4257127ce745a180fa916823de4ebefb9412", "testharness" ], "mathml/presentation-markup/fractions/frac-bar-001-ref.html": [ @@ -480592,20 +482255,12 @@ "bc9a2f9084471632a88e2b4d56db4557bfbe216e", "reftest" ], - "mathml/presentation-markup/fractions/frac-parameters-1-expected.txt": [ - "eccd329c085bcd27189413782242561f0c3c3a55", - "support" - ], "mathml/presentation-markup/fractions/frac-parameters-1.html": [ - "b7efbc78ca01a3919b83edfed67c2721025d4e69", + "57b35fdeb0750d27d1f8b26a1da6d9b57ac95005", "testharness" ], - "mathml/presentation-markup/fractions/frac-parameters-2-expected.txt": [ - "eb6b9a93c8e1d0a163181908fc25db2c43db7732", - "support" - ], "mathml/presentation-markup/fractions/frac-parameters-2.html": [ - "368fc0676d2135b6cd5381a822dd9ec92bf71512", + "b913a34b99043580083c2782d5ab35dc3a459aad", "testharness" ], "mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html": [ @@ -480712,6 +482367,14 @@ "0de9a90eed9de0b7a6b4ff9484db1c9d87376c24", "testharness" ], + "mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt": [ + "f95ceda7bbd0772454a6ff7ba31752fd0c6285c2", + "support" + ], + "mathml/presentation-markup/mrow/mrow-preferred-width.html": [ + "b16ef281f420f4cd919ee631209f28f4e9408c29", + "testharness" + ], "mathml/presentation-markup/mrow/spacing-expected.txt": [ "695da1d267766b0bd613f91c65be0aaf4c18f0f1", "support" @@ -480721,11 +482384,19 @@ "testharness" ], "mathml/presentation-markup/operators/embellished-operator-001.html": [ - "31bdff2fd7c2c4e463adfba2c3768d678c5c7424", + "55772077fe8d4cae35a36d8903f2d4c356506541", "testharness" ], "mathml/presentation-markup/operators/embellished-operator-002.html": [ - "1bbed4e229ef3cc010c9fab7b9541911abd310f6", + "a9774105d07b35b045b24c3daa528385a5c63c0b", + "testharness" + ], + "mathml/presentation-markup/operators/embellished-operator-003-expected.txt": [ + "4eadf306c5569d28990ccf7909e2b97d98e13fdc", + "support" + ], + "mathml/presentation-markup/operators/embellished-operator-003.html": [ + "77e3b887112705171af0261bbbc68e8b8449e754", "testharness" ], "mathml/presentation-markup/operators/mo-axis-height-1.html": [ @@ -480929,7 +482600,7 @@ "reftest" ], "mathml/presentation-markup/spaces/space-1.html": [ - "53734deeee1126d83ee83fd4d5d8d37af4d6d6c9", + "75e3f7861b11a55b37886f9dc2925f2ef2e7d7c5", "testharness" ], "mathml/presentation-markup/spaces/space-2-ref.html": [ @@ -481464,8 +483135,12 @@ "b82f98e28b70cbfbadf7f585c9a2c8a2612ba05f", "testharness" ], + "mathml/relations/html5-tree/display-1-expected.txt": [ + "212c34c621677ba6a572cd7fda3f2159792d9985", + "support" + ], "mathml/relations/html5-tree/display-1.html": [ - "9ecd45f9a4087e41a98546d1afb6faca9d396403", + "1d842ccc274f4b79bb6bce9d44e6db346ade2dbe", "testharness" ], "mathml/relations/html5-tree/display-2-ref.html": [ @@ -481557,11 +483232,11 @@ "reftest" ], "mathml/relations/html5-tree/tabindex-001-expected.txt": [ - "fc20f1d7864de1492dbd6ad4524ea438a6ca12e7", + "9595d33b852b273cfab87dc3bd87adab1fa4c9e3", "support" ], "mathml/relations/html5-tree/tabindex-001.html": [ - "5dd040badc696c035dbbaafd90f40dcdecbca2d3", + "2352c629f5d56254252a189f16f9063f6f45a0d1", "testharness" ], "mathml/relations/html5-tree/tabindex-002.html": [ @@ -481637,19 +483312,19 @@ "support" ], "mathml/tools/axisheight.py": [ - "d588560b650af0d2cb995083f8fff366a542ca44", + "abcc492ddb63f98dc8c6e7dbeb54a0d49866931b", "support" ], "mathml/tools/fractions.py": [ - "42cfe468219ce658cfe3943cd78e38ce70a9cdc7", + "b5a1894224d8336e16f70333b5c2c894e41176ac", "support" ], "mathml/tools/largeop.py": [ - "58ce7aebcf415eed9f5b161dc869dedc0d3e3e61", + "f1f52c4304e595cc647d75a2da85e731a28a97ff", "support" ], "mathml/tools/limits.py": [ - "840a76ffb1a6ac199ff9c655e72262f8955012a2", + "029c7b320600210ff6b447e8516394f6e18ce4dd", "support" ], "mathml/tools/math-text.py": [ @@ -481657,11 +483332,11 @@ "support" ], "mathml/tools/mathvariant-transforms.py": [ - "dd2994dd5a77554016eaaa027164a6fdaef3b544", + "d43d8c0f146348aa72f9399eaee9030b44423f41", "support" ], "mathml/tools/operator-dictionary.py": [ - "8af2bd677be0982afa4d5adbf48d6d11b91394ec", + "5627c8a8b92be92896f1ae532a943e56f1d0fdd0", "support" ], "mathml/tools/operator-dictionary.xsl": [ @@ -481669,31 +483344,31 @@ "support" ], "mathml/tools/percentscaledown.py": [ - "ea09c4405e48a085d04634638c9186f9dbd18e85", + "1571a7e3d85c4db3bb53767d6eb4c347f377baf7", "support" ], "mathml/tools/radicals.py": [ - "90fe1d9cc1e56448fc206f8cf5f2c4e2ba9d02ab", + "e13f9333f3adb8b8be1de4eb58b869142a917d43", "support" ], "mathml/tools/scripts.py": [ - "add16373845fc09c1ea8431c1e23e8beef03537a", + "62c5115e902587b8ea18a01ec847178b9939af14", "support" ], "mathml/tools/stacks.py": [ - "9a4c291e6ea2412b3ac85b297c8ad1eac3d55109", + "bd0bf8a117f346629a007239e94255efd010d4ed", "support" ], "mathml/tools/stretchstacks.py": [ - "7b888f49e70c6fdd07caef792ee03d76897695f6", + "28f116622d33152270a320c45d51d0f2e8a106e6", "support" ], "mathml/tools/underover.py": [ - "df34e7999602be573a1b25bee8debd0663ab3750", + "71a31387b14dd84e6b3797fca3208633127209c8", "support" ], "mathml/tools/use-typo-lineheight.py": [ - "9768979f488e3828dffddc2111e5916546860c47", + "48cdd2d6e70410bb7e1b22e4bc1ee08b32018b16", "support" ], "mathml/tools/utils/__init__.py": [ @@ -481701,15 +483376,15 @@ "support" ], "mathml/tools/utils/mathfont.py": [ - "53633c915047413b2a4651ad215f559068bdeb91", + "03af20668e7274148c50d0fe182b2127e309dea2", "support" ], "mathml/tools/utils/misc.py": [ - "d877a915e5294efcff292a730b142052f252fbb2", + "0d05346aa51457ac17cb9d167c8221a19436bf68", "support" ], "mathml/tools/xHeight.py": [ - "724352bf91679ea9a7e4d862ad43b5707f9cfb7b", + "2103a73a114d2e96f842298e6c5701c58976ea4a", "support" ], "measure-memory/META.yml": [ @@ -482717,7 +484392,7 @@ "support" ], "mediacapture-record/idlharness.window-expected.txt": [ - "167919bcc22697d8a00fbb3a709ebb47709af4a3", + "531f344a2160405685cee9e61ccdce57bad85cfb", "support" ], "mediacapture-record/idlharness.window.js": [ @@ -482945,7 +484620,7 @@ "testharness" ], "mediacapture-streams/idlharness.https.window.js": [ - "594e1121b005ea3cd7ef1f30aa15fbed07dff1a4", + "b10e8dbb046d656e4b06c3572fb4ee069c9e0897", "testharness" ], "mediacapture-streams/idlharness.window-expected.txt": [ @@ -482988,8 +484663,12 @@ "63f3548d941a1cec895fc8029eb8f661f9008b67", "testharness" ], + "mediasession/positionstate-expected.txt": [ + "d298b26908c628cca32834adb10a9a36f9c0b07a", + "support" + ], "mediasession/positionstate.html": [ - "9033a7be5ce5909e0de9d73e8e6aa02c84387e4d", + "9141091a90655fb9009ef5ad131f0824376827b5", "testharness" ], "mediasession/setactionhandler.html": [ @@ -483057,7 +484736,7 @@ "support" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/fetch.https.html": [ - "df4b47add2b988e1837dc712a546662b777ea9d2", + "040c611834e1a9b721de3d0b2420a8bc58fdefcc", "testharness" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/fetch.https.html.headers": [ @@ -483065,7 +484744,7 @@ "support" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/websocket.https.html": [ - "c551999a35aacf8c20e983be831fdc05deafb3ce", + "3103c00962f4c7632d585be2458899af3a876983", "testharness" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/websocket.https.html.headers": [ @@ -483073,7 +484752,7 @@ "support" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/xhr.https.html": [ - "5c437feab5fa8b27de23ab7476d8a113fcf52182", + "d5c5d86fec9fc143a4b03eeaf3162cab477a138f", "testharness" ], "mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/xhr.https.html.headers": [ @@ -483081,59 +484760,59 @@ "support" ], "mixed-content/gen/sharedworker-classic-data.meta/opt-in/fetch.https.html": [ - "4dae0e9fa4db5772e7003e0ddd7adb0c97e5f40c", + "e9953505ea09033693ab67bb8f4d5ba55b88dba2", "testharness" ], "mixed-content/gen/sharedworker-classic-data.meta/opt-in/websocket.https.html": [ - "b5f22ac32cc7e705ff2ae5419047c2df8d3a5437", + "cf0d0afaf0937c3eae76977a9d997a01f8d5d4fd", "testharness" ], "mixed-content/gen/sharedworker-classic-data.meta/opt-in/xhr.https.html": [ - "028bdaace3e984474ca5a16d14aea5ceef71714f", + "930816e391080713177a558d4f182beea6058c56", "testharness" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/fetch.https-expected.txt": [ - "e6964dfa00cd6f64125fabbe0156654159376278", + "f9a66f756e5ec0fef603b4f1645f570c3aeeafb5", "support" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/fetch.https.html": [ - "d8b6f13b919a8fecf0c59a61e022c22ec4ee29e6", + "7c3009e4b9ca9d77cfdd543962a632cc6738bf28", "testharness" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/websocket.https-expected.txt": [ - "9d1b16a914cd23062abbd9b79014f62bbd958a03", + "1d6e53fc3a01f869a8f74a692f120e03c9c59c5d", "support" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/websocket.https.html": [ - "c551999a35aacf8c20e983be831fdc05deafb3ce", + "3103c00962f4c7632d585be2458899af3a876983", "testharness" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/xhr.https-expected.txt": [ - "0cd46c35ac8e7ce13c203637af191b165c820833", + "469e5be7b12bf6d61a64395653490fe2d84032fc", "support" ], "mixed-content/gen/sharedworker-classic-data.meta/unset/xhr.https.html": [ - "9682f5b78a1454a5cb48afa15e376430ce9216a8", + "d67d3dfbc1b15c436a72b8c979a1e8e895d7907e", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/opt-in/fetch.https.html": [ - "52a9fe92ec3c53e1a600d9bf07251008c10a9a37", + "31550a1378bbcdb4c02e9ae4aba437f5d13f2f53", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/opt-in/websocket.https.html": [ - "82e9516d076066441f1ecb4221cb83beac8801ed", + "e259b1dccec49dccd439444714f0d865a983b9d6", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/opt-in/xhr.https.html": [ - "44f3573509a19bae398d8c50b54b48d0e44ca023", + "d14a58c11897e90128f4df754453622deddd7cf8", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/fetch.https-expected.txt": [ - "334cd88f258f772f62c3f7c761dcdf822fdb392d", + "f9a66f756e5ec0fef603b4f1645f570c3aeeafb5", "support" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/fetch.https.html": [ - "021a07c3dad5ea4b242e69e0e34e6e12ed8f47e7", + "41a7a328d7ba24c81841ae6361033e5a0af471be", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/fetch.https.html.headers": [ @@ -483141,11 +484820,11 @@ "support" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/websocket.https-expected.txt": [ - "2f35b74f64fcf5cc1461cbe2414df9e614037fb5", + "1d6e53fc3a01f869a8f74a692f120e03c9c59c5d", "support" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/websocket.https.html": [ - "0dca9c615a75f1b60504cb58ed2a4de8f58b4859", + "825f9b105cd6d3d7182749b56be55bbec07a53d4", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/websocket.https.html.headers": [ @@ -483153,11 +484832,11 @@ "support" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/xhr.https-expected.txt": [ - "42cea3a44961d65b0946eb34936be2540fd097b0", + "469e5be7b12bf6d61a64395653490fe2d84032fc", "support" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/xhr.https.html": [ - "b7553720a1598d1111dadcf14119311f2eb3e237", + "f2590c6ecd15e879cdf89353fb0fc3fa8aec9605", "testharness" ], "mixed-content/gen/sharedworker-classic.http-rp/unset/xhr.https.html.headers": [ @@ -483165,7 +484844,7 @@ "support" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/fetch.https.html": [ - "b0488bd5182ab473c8a60ac3d8799052f9686cea", + "928365fd34ab532230dc21180db82304b58dac18", "testharness" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/fetch.https.html.headers": [ @@ -483173,7 +484852,7 @@ "support" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/websocket.https.html": [ - "8a2b8707056af6fc764824176977500126e4def8", + "d04a361ee8e4eb8e409531a22828969c96837c00", "testharness" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/websocket.https.html.headers": [ @@ -483181,7 +484860,7 @@ "support" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/xhr.https.html": [ - "cebddabe62556b80e2c9156cb8f75dfe30a57202", + "6c5090f2c415ee975d68d74bfda859075bc1248d", "testharness" ], "mixed-content/gen/sharedworker-module-data.http-rp/opt-in/xhr.https.html.headers": [ @@ -483189,59 +484868,59 @@ "support" ], "mixed-content/gen/sharedworker-module-data.meta/opt-in/fetch.https.html": [ - "c5288a9a5393b2015b5fbf68efa4f44ffd7de1a5", + "037f931626dac8b558dd93b1781ddc69db387017", "testharness" ], "mixed-content/gen/sharedworker-module-data.meta/opt-in/websocket.https.html": [ - "24e56cd69a373cdc73a92cbc530f768965f49f5f", + "2fbfc48915f8573ede11debf91a46ecdae1c2a12", "testharness" ], "mixed-content/gen/sharedworker-module-data.meta/opt-in/xhr.https.html": [ - "0ad1cb82158a7f36832f7f4a2e1f2cf4129296fd", + "853bc1270bcc2e75d16ac1fe4c30c6afa0f4c0b1", "testharness" ], "mixed-content/gen/sharedworker-module-data.meta/unset/fetch.https-expected.txt": [ - "98b7b25a4e3c61793a008eca265c87aaf505310f", + "f9a66f756e5ec0fef603b4f1645f570c3aeeafb5", "support" ], "mixed-content/gen/sharedworker-module-data.meta/unset/fetch.https.html": [ - "55a31cf937dc2928a8a7a05a9ed3ef7d69e4644e", + "14c3103fe5fcc6ae4d4cf7f786beafef89132327", "testharness" ], "mixed-content/gen/sharedworker-module-data.meta/unset/websocket.https-expected.txt": [ - "9d1b16a914cd23062abbd9b79014f62bbd958a03", + "1d6e53fc3a01f869a8f74a692f120e03c9c59c5d", "support" ], "mixed-content/gen/sharedworker-module-data.meta/unset/websocket.https.html": [ - "8a2b8707056af6fc764824176977500126e4def8", + "d04a361ee8e4eb8e409531a22828969c96837c00", "testharness" ], "mixed-content/gen/sharedworker-module-data.meta/unset/xhr.https-expected.txt": [ - "60609adaeee8234d564e04df36f952e47315fc4b", + "469e5be7b12bf6d61a64395653490fe2d84032fc", "support" ], "mixed-content/gen/sharedworker-module-data.meta/unset/xhr.https.html": [ - "83a4689d70b7e8637a48394beb9019e52294b608", + "68e2a490cc6eda3bddb5cd75c7c45d579c179c0d", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/opt-in/fetch.https.html": [ - "47a0d5d7961d9953467a3519452b60adf108f563", + "2a13933ff99266a741e0c4575db5a6015a1bac27", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/opt-in/websocket.https.html": [ - "172b68ac2aab61f50162470d8ede4eea98878e37", + "3486ab3889212aa058a668e57f6fbae29aceb6d9", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/opt-in/xhr.https.html": [ - "49a8090c3ce25b2c4e37656d59e7c4354e0bc14f", + "bd9395bdbbcb5911656b3114951393838391a8e8", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/unset/fetch.https-expected.txt": [ - "56aa8c00bbc094f09a594b60e20f5d3b787c3046", + "f9a66f756e5ec0fef603b4f1645f570c3aeeafb5", "support" ], "mixed-content/gen/sharedworker-module.http-rp/unset/fetch.https.html": [ - "9654df0bf034176edf7b1dd9d389b7426dfb2605", + "8f31ab2d19a8478dd8a18534ff0c868941ccdccf", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/unset/fetch.https.html.headers": [ @@ -483249,11 +484928,11 @@ "support" ], "mixed-content/gen/sharedworker-module.http-rp/unset/websocket.https-expected.txt": [ - "2f35b74f64fcf5cc1461cbe2414df9e614037fb5", + "1d6e53fc3a01f869a8f74a692f120e03c9c59c5d", "support" ], "mixed-content/gen/sharedworker-module.http-rp/unset/websocket.https.html": [ - "211107c37004dfdb6b5667db483aa63b4b7100de", + "5eb627c7cfb82c1902d81f4a8c70730064bd74ee", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/unset/websocket.https.html.headers": [ @@ -483261,11 +484940,11 @@ "support" ], "mixed-content/gen/sharedworker-module.http-rp/unset/xhr.https-expected.txt": [ - "319c4b8b8afdc0fae0759a5383a99e5ac810f3ce", + "469e5be7b12bf6d61a64395653490fe2d84032fc", "support" ], "mixed-content/gen/sharedworker-module.http-rp/unset/xhr.https.html": [ - "4905587b0f6d350c7d363106d3ef8ca50e0cd75b", + "2ebeed08a0a750712f9a1699e974fdb6d4918d32", "testharness" ], "mixed-content/gen/sharedworker-module.http-rp/unset/xhr.https.html.headers": [ @@ -483273,7 +484952,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/audio-tag.https.html": [ - "d25c2ed666b3ddeaebfcd8fad2ac1f10be253da6", + "599f8eb9b5e020a052e567391601ae32907f5551", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/audio-tag.https.html.headers": [ @@ -483281,7 +484960,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/beacon.https.html": [ - "61c37b7a556320aa29714649eedee7c724917aa2", + "b09f6332ddde65a02d9ae5b22e79234900755eb0", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/beacon.https.html.headers": [ @@ -483289,7 +484968,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/fetch.https.html": [ - "3269f5f37398a126b6080476fb3f4143e30f75bf", + "508a9d2bd79d1d6832d56551320969204469c874", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/fetch.https.html.headers": [ @@ -483297,7 +484976,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/img-tag.https.html": [ - "4f37489aab1dffd64aeee052b796ed9a64b145da", + "eda0043651c78613ec88b1cf032552d6996719d3", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/img-tag.https.html.headers": [ @@ -483305,7 +484984,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/link-css-tag.https.html": [ - "7d1ec353f95a9f39ca819177586955f1127fd1c6", + "237ec0ca78233558ea50a4ba16a4d5d763e543f0", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/link-css-tag.https.html.headers": [ @@ -483313,7 +484992,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/link-prefetch-tag.https.html": [ - "d4e4580fe379eecab66d10cb1d8ae03545459d9b", + "0efd1429a770511477cf9ad48ba6ff27fea4b32a", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/link-prefetch-tag.https.html.headers": [ @@ -483321,7 +485000,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/object-tag.https.html": [ - "9706dd21b77468b9c43037c5917163c3570a232d", + "6bc8f75f65247aeb67582f7dcf12524f308f222d", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/object-tag.https.html.headers": [ @@ -483329,7 +485008,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/picture-tag.https.html": [ - "baaf0a857b70a6b8feba2501e34a8e165cf98fb7", + "088c6c410a219e1200964e489c7058dc57af897e", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/picture-tag.https.html.headers": [ @@ -483337,7 +485016,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/script-tag.https.html": [ - "1666599706518e56a960bccb322bd974e674b9e2", + "d806e9c0bc8761c99190e71d1b04107e5d838704", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/script-tag.https.html.headers": [ @@ -483345,7 +485024,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-classic.https.html": [ - "0beaaeeb1289292647b107010c820265e221b2db", + "896c0297d5f7d538afc0ddee6bf00b8710cf0b74", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-classic.https.html.headers": [ @@ -483353,15 +485032,23 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html": [ - "1da38318f41427a2d123ee6d656c2aea3a2a3022", + "2784b2bf13e4bbdd4787969cd75f2f1769e98350", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html.headers": [ "46e2255e388e9e08377d625b55653a007d59c14e", "support" ], + "mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html": [ + "0644d1f03e979c56533ff3b3d913b87df968717a", + "testharness" + ], + "mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html.headers": [ + "46e2255e388e9e08377d625b55653a007d59c14e", + "support" + ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html": [ - "75c8623fe104b1124410059fdb1052991b5689fe", + "1a371ce028f4612a3fcf308c67f461396d263e32", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html.headers": [ @@ -483369,7 +485056,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/video-tag.https.html": [ - "c03abe0838547abb5f767d1cf417965c8f2c4092", + "ff176ab6d1f8c24ee2cc3f6d7921bef167c7cd08", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.headers": [ @@ -483377,7 +485064,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/websocket.https.html": [ - "1bacd28b99abe15921339477a2ac25176511df85", + "49b80c448f70bdda08a29b34d53ca1db433ae2ae", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/websocket.https.html.headers": [ @@ -483385,7 +485072,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worker-classic.https.html": [ - "36aeee17649b726c2b21dd492a5bffb521a45df5", + "2717be37ccf81dba8176718096a49115775297f8", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worker-classic.https.html.headers": [ @@ -483393,15 +485080,23 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worker-import-data.https.html": [ - "8a7cfb38dac8a12e05861db3e936a8aefb3dc0cb", + "a44eee04689d32ed69d4323facf167d8f8596331", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worker-import-data.https.html.headers": [ "46e2255e388e9e08377d625b55653a007d59c14e", "support" ], + "mixed-content/gen/top.http-rp/opt-in/worker-import.https.html": [ + "549932281874af5d7e63d245f5ba709b0b049a17", + "testharness" + ], + "mixed-content/gen/top.http-rp/opt-in/worker-import.https.html.headers": [ + "46e2255e388e9e08377d625b55653a007d59c14e", + "support" + ], "mixed-content/gen/top.http-rp/opt-in/worker-module.https.html": [ - "9ac91e94e039c5e0d9bdd90de6956f0f876b6dda", + "6cf33d54f5fa7b3b8ea1b3a0936f21092724845f", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worker-module.https.html.headers": [ @@ -483409,7 +485104,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-animation-import-data.https.html": [ - "e53a0cf22833d2afa9e2dd0af417e4933b8b4785", + "165cbf6d14d58ebe885bd3eeb733fddbb7d2288f", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-animation-import-data.https.html.headers": [ @@ -483417,7 +485112,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-animation.https.html": [ - "de8f9d1c4ee2d3580ae7f537e53da3f14422ae58", + "67926809f28ad139181a4d7ca051715cee61daf3", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-animation.https.html.headers": [ @@ -483425,7 +485120,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-audio-import-data.https.html": [ - "fd9287d6f3ea2a62f72d2f7507c825497721f57c", + "72ebea2ff2d6f28be1b45d4d0f43956719a80fe0", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-audio-import-data.https.html.headers": [ @@ -483433,7 +485128,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-audio.https.html": [ - "c3603607656fbac24845e412c45e89767531437f", + "3c31d0d99837bcb2d27b3df82cb8c8642544b050", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-audio.https.html.headers": [ @@ -483441,7 +485136,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-layout-import-data.https.html": [ - "476b70c1fee6e1af82a49439291a45a5b03967a0", + "ae84f3d1ef8206b7c2437477abe33428d9ade227", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-layout-import-data.https.html.headers": [ @@ -483449,7 +485144,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-layout.https.html": [ - "6aeb702b379cdee21ad34bd7983a580bf86dfa7e", + "8a39e2d9d3245ac4758c4ccba2f515a5f670be21", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-layout.https.html.headers": [ @@ -483457,7 +485152,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-paint-import-data.https.html": [ - "42644b34f4c77aa39c2b2692ca9a8334be611cab", + "918051440e2ffcc0c5e41642caa2a6ef8c40a749", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-paint-import-data.https.html.headers": [ @@ -483465,7 +485160,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/worklet-paint.https.html": [ - "b8e30a65ad66d437f3e672c07696ab273adb8c2e", + "c270a2b70ad1e0700d2d92fd4f3229c91d9967f8", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/worklet-paint.https.html.headers": [ @@ -483473,7 +485168,7 @@ "support" ], "mixed-content/gen/top.http-rp/opt-in/xhr.https.html": [ - "93975e2d69211dba986d0b1070a31db636e65ba5", + "22f4aa06b5311dfc021ba672dcfcc1b382702b47", "testharness" ], "mixed-content/gen/top.http-rp/opt-in/xhr.https.html.headers": [ @@ -483481,215 +485176,231 @@ "support" ], "mixed-content/gen/top.meta/opt-in/audio-tag.https.html": [ - "b4bf5f4f1e46675f3215e7902ed9ddf9d109918c", + "9734cef5c5434d0754d007a20b6f31f35506c706", "testharness" ], "mixed-content/gen/top.meta/opt-in/beacon.https.html": [ - "45dec1af776f45a91c172b23c2e4c3fda2410cce", + "87442befd3f9016b44e1aab3fb271189bd2309b8", "testharness" ], "mixed-content/gen/top.meta/opt-in/fetch.https.html": [ - "d7ae8c8532a946a2e99f39a7fa18e04a663aaff9", + "45378cae4a10b3a47e965f2db4048131e194e3dc", "testharness" ], "mixed-content/gen/top.meta/opt-in/img-tag.https.html": [ - "0e9ff596aa60275d9579ff4d93bb1ac51dd1d76a", + "8c2486d9a7258c3e2dccd80d9a61b6b744f54978", "testharness" ], "mixed-content/gen/top.meta/opt-in/link-css-tag.https.html": [ - "73cf23ab72fded27c9b9046a7c8a32a5956b96dd", + "2014c10e230601e2f892ffa2d4b32e96eae46940", "testharness" ], "mixed-content/gen/top.meta/opt-in/link-prefetch-tag.https.html": [ - "7fa4d088b05aa70009318b24d74527168d05fb2d", + "456139afdaac8677e0b941167d39543958510980", "testharness" ], "mixed-content/gen/top.meta/opt-in/object-tag.https.html": [ - "215fcbc1bc05d990c7716ca6bf698719b8f74c2a", + "209927d53f1738efee9f7b7891bd9b1110897344", "testharness" ], "mixed-content/gen/top.meta/opt-in/picture-tag.https.html": [ - "279c128fc8f9f559cd730a6fa267defe9340189f", + "d28777b8cb77b9cd37109ca7f99f91f63c9e9d4f", "testharness" ], "mixed-content/gen/top.meta/opt-in/script-tag.https.html": [ - "436bb1cdfb76894284d9a762ed65a35f9c11b46c", + "55e2dadb0679f17bbbb95d90f9858aeefb19cafe", "testharness" ], "mixed-content/gen/top.meta/opt-in/sharedworker-classic.https.html": [ - "caa080b3a2f469e148b610af647fb97a51d7b8c2", + "02c50e3bcb6f0f3f7187a6afb33631d9f61dfce6", "testharness" ], "mixed-content/gen/top.meta/opt-in/sharedworker-import-data.https.html": [ - "f1b8ce8a40c7976fd62b67bdf4d4d76b7191e0e5", + "d906686d9272d36d04225e74e9b75e01b2c576a3", + "testharness" + ], + "mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html": [ + "3b156c640984e3eb2b2b629be09559eb197b2724", "testharness" ], "mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html": [ - "82067e486205be916dcf684c0da949e21df017e0", + "2ebb23193145de53226aec24f0a34812693d6e14", "testharness" ], "mixed-content/gen/top.meta/opt-in/video-tag.https.html": [ - "19ffe51d8377e900f88435ba79df021c79db2f3e", + "6b40dfc2e69e258fc2c8739eb52f825a7a3aa7ec", "testharness" ], "mixed-content/gen/top.meta/opt-in/websocket.https.html": [ - "af2205993597c07a08e61f6a5c88e17a46666e15", + "b54656dbe74c31ffd01ff20c3fbad586039f44fa", "testharness" ], "mixed-content/gen/top.meta/opt-in/worker-classic.https.html": [ - "2d374e6fef4744bfe2228c57aa679b6b09120eae", + "ca7667ceef3d49906897d887c3a746c51b2f551b", "testharness" ], "mixed-content/gen/top.meta/opt-in/worker-import-data.https.html": [ - "3b163fc29e73a5a03935df2138fa16cd58d3a769", + "2ff9aa7cf2a6de9d24ad6b53ace9befb30360878", + "testharness" + ], + "mixed-content/gen/top.meta/opt-in/worker-import.https.html": [ + "50db49acc87df37db112c75d0b3ab8d58c874891", "testharness" ], "mixed-content/gen/top.meta/opt-in/worker-module.https.html": [ - "4e1c26bf38a58765e2a75cd956a973ae375c3aff", + "2f1c240cae93a39b75cc9489e89c903171ab82e4", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-animation-import-data.https.html": [ - "40909c4fdd86e0c70a5d8bf34482f1c3173c1849", + "0ebc71607faab1079eaa798cba6b96e5e2673873", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-animation.https.html": [ - "337df6cee8b707f14be5cec9b6ff39dedfbfef67", + "b3b070b60bac292dfa07c1aae548973dba77e6e0", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-audio-import-data.https.html": [ - "3496f7d64a11f41c8b35097a2a3303c26c671095", + "383e08f0d94c72877cd366b2fabaca06d13fb246", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-audio.https.html": [ - "6a124225d36a44a85546f9cebe24e6a508e5afb6", + "c4caffa7c5e304aea402f6119ccf279ae153bd33", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-layout-import-data.https.html": [ - "4ef290efd3795d8f3a7783135b11b921e7f8b753", + "b90abff51275ea730d406420695db0d7dd1bc28b", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-layout.https.html": [ - "19dfe3e93b7a701e7dd64d54b97a37d601b02e7f", + "08f5bcc66edb0ba91d1fd84fdfc5ad75e69839f0", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-paint-import-data.https.html": [ - "0883c6280bd148398ae7a8db9f69792091f8f7c0", + "04176e561d704a86a32a6ab3ce87f2282523987b", "testharness" ], "mixed-content/gen/top.meta/opt-in/worklet-paint.https.html": [ - "896ffc83cc0c5835ea15d94439c5adf36a55c3ec", + "8c58fc638f46fdaeb7f3d2f149b8ddc4c6b7fcfc", "testharness" ], "mixed-content/gen/top.meta/opt-in/xhr.https.html": [ - "0a34b9035fb436190718a942f37be3fc35a4977a", + "22cbcd7ed0b4926ad6e59058eee444555a24ad1a", "testharness" ], "mixed-content/gen/top.meta/unset/audio-tag.https.html": [ - "822561fe53e0b922c4e8b3d31484b52c93b5524e", + "75c9b7535572dfb0635bb2e2257874d9f81620e6", "testharness" ], "mixed-content/gen/top.meta/unset/beacon.https.html": [ - "a08a18944cb219913b7d3b4ffb01680f4c377580", + "ae29a64f41fc7687f8643b37e999e2cfed8d38e0", "testharness" ], "mixed-content/gen/top.meta/unset/fetch.https.html": [ - "034043c56ca2e808871ddd58263b13c2da98f87b", + "1250aec2a8d157e97f7810a56f6f79802063aac3", "testharness" ], "mixed-content/gen/top.meta/unset/img-tag.https.html": [ - "46039be2d38fff16c0513817e8a033fe2f9b5c61", + "c02bf8b69ce53ac2d30213292288077307b27083", "testharness" ], "mixed-content/gen/top.meta/unset/link-css-tag.https.html": [ - "3e75c7884a4d10b2467403e16e3bd29fc2b66887", + "559e0223c04083579f54d238d9c0c182786fe2ca", "testharness" ], "mixed-content/gen/top.meta/unset/link-prefetch-tag.https.html": [ - "57b81f21a048a368db30d916370ff7ef343a8e66", + "5a0364121e9f4c0336cb7296913a8d6ce5c55df8", "testharness" ], "mixed-content/gen/top.meta/unset/object-tag.https.html": [ - "8f606cbda48165ee791d7b54f2aefe8e902da316", + "e22e783950b84c8846597b82d05304bd61cde64f", "testharness" ], "mixed-content/gen/top.meta/unset/picture-tag.https.html": [ - "e6eaeec7fc7227de704fb0d64b64407a591ff303", + "432ab7eaa33dca4a6996e69a54afd360d8884bb3", "testharness" ], "mixed-content/gen/top.meta/unset/script-tag.https.html": [ - "ff3d6b9e786b40d928dd0f7d33dbdc306ee9a4fa", + "3cd5eb3a34e93dc8119f0aa37db5e5889c85c92c", "testharness" ], "mixed-content/gen/top.meta/unset/sharedworker-classic.https.html": [ - "0beaaeeb1289292647b107010c820265e221b2db", + "896c0297d5f7d538afc0ddee6bf00b8710cf0b74", "testharness" ], "mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html": [ - "6ef7ff8ce7840bce9887468db01c4a3349c332e5", + "afc248529b097d5a49c1ee526b0c49c0cb4b579c", + "testharness" + ], + "mixed-content/gen/top.meta/unset/sharedworker-import.https.html": [ + "71679b658aabc55b29e4e7a3f418a4ce30752a5c", "testharness" ], "mixed-content/gen/top.meta/unset/sharedworker-module.https.html": [ - "75c8623fe104b1124410059fdb1052991b5689fe", + "1a371ce028f4612a3fcf308c67f461396d263e32", "testharness" ], "mixed-content/gen/top.meta/unset/video-tag.https.html": [ - "fef50b70adaf92b6b440a3df6a167da8ae5b4200", + "56c9a4cf5aa80867e6593e4ba299dcecd41caa08", "testharness" ], "mixed-content/gen/top.meta/unset/websocket.https.html": [ - "1bacd28b99abe15921339477a2ac25176511df85", + "49b80c448f70bdda08a29b34d53ca1db433ae2ae", "testharness" ], "mixed-content/gen/top.meta/unset/worker-classic.https.html": [ - "2e456cef1859b72646ebb7f89b601874254a2f46", + "2717be37ccf81dba8176718096a49115775297f8", "testharness" ], "mixed-content/gen/top.meta/unset/worker-import-data.https.html": [ - "3910434a3a87508dc84fb720bb4915fe837386f7", + "ae559b90e9a22d190233a04139e10c8b1e84b01b", + "testharness" + ], + "mixed-content/gen/top.meta/unset/worker-import.https.html": [ + "208ae14bfa5e32bce62bc0ee55723f9e646f633e", "testharness" ], "mixed-content/gen/top.meta/unset/worker-module.https.html": [ - "49ba4d5f2059bbc8d97745d513d3e6da618b14da", + "6cf33d54f5fa7b3b8ea1b3a0936f21092724845f", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-animation-import-data.https.html": [ - "b8ff50d3fb5acf3e3e219a708ac046f4afe58e5f", + "77fdf272d12b4bd83e15c4c9f4c50ff407878a5b", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-animation.https.html": [ - "cc4f9f2399b605f509accfe08b29756ddad2555c", + "64d00ddd5b7208bf2adc4bdaf9141f46f7be5171", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-audio-import-data.https.html": [ - "eb07e9216321d880af07f54f6855b6685ff17d95", + "faa0c457fa7d45b1181fc5dbde9fce8baa6d6c3f", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-audio.https.html": [ - "1c0f12d8faa9da10be8c3fec4961b256dc7a587f", + "7151f534de3d30cb1068d1fd7b64b2e8fce795b8", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-layout-import-data.https.html": [ - "c0a964c03b940e1458722f1ea6c29a7623416dc8", + "da7c9a797e9e10c0e2bb009eed08764010f5bea0", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-layout.https.html": [ - "66248820afa0802c10a4ad2790e2934d13451b71", + "f2335d35ae75e2f8c3d04f0a3cfe6af9414dee5c", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-paint-import-data.https.html": [ - "f0cdddf12631c738a31f26ef656590acf32d95a6", + "5c1970599d7bb7ea6f663c8e1a57d23e1d9b3877", "testharness" ], "mixed-content/gen/top.meta/unset/worklet-paint.https.html": [ - "83146d6247eeb52b4290a5dce828ced199ba255b", + "77cf29176c1a8fe904f240e0b68956c4bb901de2", "testharness" ], "mixed-content/gen/top.meta/unset/xhr.https.html": [ - "728c685924fbaf5c784d04fac4bc1d67a8905bd9", + "0f164b4077eb6d14ac32bce7de4763ea088eef7d", "testharness" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/fetch.https.html": [ - "9cae4dbc1da8c83234d2e341760bc243264b7614", + "d2b13b27346c6b15cbad947eeadfefeba2d8e8f8", "testharness" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/fetch.https.html.headers": [ @@ -483697,7 +485408,7 @@ "support" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/websocket.https.html": [ - "5433c76d9c65271584286bb150e0d5f378fb1390", + "01263c9ee6ab1f1f3a5aeae645c8b38813571773", "testharness" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/websocket.https.html.headers": [ @@ -483705,7 +485416,7 @@ "support" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/xhr.https.html": [ - "bd5c73caf3cac4344ad4a1d580ef65cf14ee2193", + "71ee538072e48ee07419ce8d1633c9783f530827", "testharness" ], "mixed-content/gen/worker-classic-data.http-rp/opt-in/xhr.https.html.headers": [ @@ -483713,31 +485424,31 @@ "support" ], "mixed-content/gen/worker-classic-data.meta/opt-in/fetch.https.html": [ - "d3591afb1b6ad5cc85dbed7f1717c8be97e27c4e", + "e8693e4fef85417e89658aa6319cc2d05f88467e", "testharness" ], "mixed-content/gen/worker-classic-data.meta/opt-in/websocket.https.html": [ - "4917ad091edda8e833d1aab3346dd345ac82c847", + "af1d8362509fefae6664deb8d116034ad8af972a", "testharness" ], "mixed-content/gen/worker-classic-data.meta/opt-in/xhr.https.html": [ - "ec92701607570e2005c4a93c29102e8f4b2e6441", + "e8a86f79e7eaf7df062b68c5dc73337a1d83ae25", "testharness" ], "mixed-content/gen/worker-classic-data.meta/unset/fetch.https.html": [ - "952c9e9a1148e6521fc9cc8bc640f22d1ccd89b0", + "da5a674c5439c3834d008622cfbe617e67aa3a7a", "testharness" ], "mixed-content/gen/worker-classic-data.meta/unset/websocket.https.html": [ - "5433c76d9c65271584286bb150e0d5f378fb1390", + "01263c9ee6ab1f1f3a5aeae645c8b38813571773", "testharness" ], "mixed-content/gen/worker-classic-data.meta/unset/xhr.https.html": [ - "3bb7ec52173b97a0a45985e3519783e8fd157d39", + "431e05aa5044038ca41a0d79bfd52a43a1875e8b", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/fetch.https.html": [ - "f0538f1a09c19a2c228b7a5ffdbb2a673c1abf1c", + "a89d066c9f7c74e753d829cd83935c01f8776693", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/fetch.https.html.headers": [ @@ -483745,7 +485456,7 @@ "support" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/websocket.https.html": [ - "c483e2a0655024b798c322c2cc2a6aba22569ca3", + "ebfb71e2f85fc81898b5d81dade9ab01dbfbd825", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/websocket.https.html.headers": [ @@ -483753,7 +485464,7 @@ "support" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/worker-classic.https.html": [ - "36ec2a61dad66ab776baf1b29fd825a01a40e12c", + "e5f825d5778bebff888b708d051ae00c9b58851a", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/worker-classic.https.html.headers": [ @@ -483761,7 +485472,7 @@ "support" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/worker-module.https.html": [ - "05342727efec09561ac5b7d5dd5d9c3b3b34c727", + "f10998e3f007b8c8c283f816513683206eb94f23", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/worker-module.https.html.headers": [ @@ -483769,7 +485480,7 @@ "support" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/xhr.https.html": [ - "031458808b44720539e9f9a0511c6cfac1e5f897", + "863aa62d05e0cf3f3ad07d86385bae0abd368e2b", "testharness" ], "mixed-content/gen/worker-classic-inherit.http-rp/opt-in/xhr.https.html.headers": [ @@ -483777,47 +485488,47 @@ "support" ], "mixed-content/gen/worker-classic-inherit.meta/opt-in/fetch.https.html": [ - "4f579fd3f9b2b51adf1cd375b00e8ade601edf65", + "2dfd32d0ed9289b7fd427b2835dfd4d194349e72", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/opt-in/websocket.https.html": [ - "3e794b3136bc5ce145c4a578fd3610b1989d4a4d", + "76ba980671041d30de9306eddc2b4a8983393b4a", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/opt-in/worker-classic.https.html": [ - "95d529e0e4e461a2de160275964f846ca63a03e0", + "0de01f79b8b71c810972d6c112c3b4965a0ec441", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/opt-in/worker-module.https.html": [ - "5783e636ad0a397b77249af6a71d684300fac97b", + "32f4762c4381c3531e7ab6f86bd9a060193c4ace", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/opt-in/xhr.https.html": [ - "888597dafc32ebf7bc4e9eff915f98aff60dc434", + "dd7305e4233600b99432d01cc9d19799eb2fbd47", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/unset/fetch.https.html": [ - "d8b742c574ac8c15d03845d72d6ad062acb36972", + "713df3085ffed1c4bfe47ae52cd21d1a97e18e89", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/unset/websocket.https.html": [ - "486b9c95f606dbc5aae7f6da4b07f18ace129a85", + "4357a44457017bf1169df402d18f2a1b8fccc9b6", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/unset/worker-classic.https.html": [ - "bd78a5b6efd83885ff490a525855922ad120d6b9", + "5dde9baae5b2299cd4d441f173289bbb3fe0bf43", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/unset/worker-module.https.html": [ - "9e54a72a143b8c54272ffede2024127075c878c8", + "6672e464a3fd6a613d916e06834b4feefd13a837", "testharness" ], "mixed-content/gen/worker-classic-inherit.meta/unset/xhr.https.html": [ - "fc51681a647646530230ac9faa0c77f075e6f4e1", + "c6e0211aded767dcb098c920171c51a852f2643a", "testharness" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/fetch.https.html": [ - "2860fcaec57b69f270ab2b0a5837343a25996662", + "90cfde361815f85a6f5d1f00682a1aeb5b6e4bc0", "testharness" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/fetch.https.html.headers": [ @@ -483825,7 +485536,7 @@ "support" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/websocket.https.html": [ - "498935b0f0608b465c85756959efaf2423f0982e", + "a202f1af21ade7d61420884cb2a0bcae777734f1", "testharness" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/websocket.https.html.headers": [ @@ -483833,7 +485544,7 @@ "support" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/xhr.https.html": [ - "8a1163d1f0550490f64a821333e67daf0df43798", + "1e26f150a641bd701c7d47165442cab6e8905941", "testharness" ], "mixed-content/gen/worker-module-data.http-rp/opt-in/xhr.https.html.headers": [ @@ -483841,31 +485552,31 @@ "support" ], "mixed-content/gen/worker-module-data.meta/opt-in/fetch.https.html": [ - "74f36e42d2fca127d715f2d9dca248355023676d", + "8ed388b1e7a0ab23ced3bd53a46d99bb6f06fe89", "testharness" ], "mixed-content/gen/worker-module-data.meta/opt-in/websocket.https.html": [ - "248bb61badf6945fd99470868aec7e9f6cb2f9a7", + "ba6c014439674b3c6b52f1728df17c5b2c36e1ba", "testharness" ], "mixed-content/gen/worker-module-data.meta/opt-in/xhr.https.html": [ - "056e48a8e570c0210cd88158b3421d491ac38865", + "808e6b6f5a4114f96e797ac0d2f56ab6b887450c", "testharness" ], "mixed-content/gen/worker-module-data.meta/unset/fetch.https.html": [ - "6d7ceaaa12fe841b0c4773eeb0ed42d10d78e0ac", + "1a04af86788ead7251d722ca1a6126a0314c0b8d", "testharness" ], "mixed-content/gen/worker-module-data.meta/unset/websocket.https.html": [ - "498935b0f0608b465c85756959efaf2423f0982e", + "a202f1af21ade7d61420884cb2a0bcae777734f1", "testharness" ], "mixed-content/gen/worker-module-data.meta/unset/xhr.https.html": [ - "a2b5d178024ef11bae2d225c49845171b48ee722", + "da80502084526054129b2da6e3b385bb75cd4ff9", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/fetch.https.html": [ - "9c8378953da5f13b742713ff0fb9b1b042f2b905", + "8eec2b41490710e4ec8f637bf9b874257efb7a10", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/fetch.https.html.headers": [ @@ -483873,7 +485584,7 @@ "support" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/websocket.https.html": [ - "2a6db7c11889db343c64f56aaaeb6bdaaad6e737", + "220c21c4111d5cf5514ca49f8353cc896d3e26cc", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/websocket.https.html.headers": [ @@ -483881,7 +485592,7 @@ "support" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/worker-classic.https.html": [ - "d9e46d2a25f7d98c7e69d4cb6918df1972a65d91", + "9619ce4cd75a302eb850282814f4c9c3505254d3", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/worker-classic.https.html.headers": [ @@ -483889,7 +485600,7 @@ "support" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/worker-module.https.html": [ - "cc438d8f8aa10165be1211ceee3dd7598ff6d0f5", + "d6e28445e09dd5b07eec964099907ec8ef80800f", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/worker-module.https.html.headers": [ @@ -483897,7 +485608,7 @@ "support" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/xhr.https.html": [ - "ed371b7c15758978b735b11c11bff5b47ff74e6b", + "69aa3499ce256a919389989fb845caf012fdfab0", "testharness" ], "mixed-content/gen/worker-module-inherit.http-rp/opt-in/xhr.https.html.headers": [ @@ -483905,43 +485616,43 @@ "support" ], "mixed-content/gen/worker-module-inherit.meta/opt-in/fetch.https.html": [ - "5660bf59137c3e7c6eadaa2c10c1d0122b6ed5fa", + "f6fc93a6b8fc2db24d27c881396de57a21cc11a0", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/opt-in/websocket.https.html": [ - "f6563925c4fcd2eae54d5a44170e52cf7b62f249", + "cbfc485b1527deee2a28684563373c2d67ec7a43", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/opt-in/worker-classic.https.html": [ - "fae263e9af40c26003eaf4e5e343767930c1b2aa", + "01512ff49bc89b6c5610835e796cc30b5163c3ee", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/opt-in/worker-module.https.html": [ - "6a0d14b4a48258ac0185abea92c7b077ec937dc5", + "89fe1d60fbe084e6fa03a42be0ddc2479913b209", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/opt-in/xhr.https.html": [ - "f960502457d6b620609b4bac3ede0de98d8af098", + "3425ccfb552b3cc463e8d429195476e7e5ba9e6b", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/unset/fetch.https.html": [ - "91305554a24afc0fdfe466dc2c08f75e97f8aed4", + "383f923317b25cb57f04fae7b12549efa48cb666", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/unset/websocket.https.html": [ - "d9565d0ecdcd56b49d585328c0e6ff258ca116e0", + "0e7c357ae22c0b28795b239d1ef17ca0b4d69969", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/unset/worker-classic.https.html": [ - "86885c1082fc2a8aabe1f89c666c2cf87eeeee37", + "e8eba008f9f3c3ef1da32ac9e7c660ed31e8489a", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/unset/worker-module.https.html": [ - "b69bda02dead072bba1f847897836b5123dd042c", + "f4348836ad44b7a424e7e58a7889b42d82d30a43", "testharness" ], "mixed-content/gen/worker-module-inherit.meta/unset/xhr.https.html": [ - "54a64915a6a7b0fcc24783f9df9cd0562b527964", + "93c5b002edc4510b52c256c1d56ead47f8e00611", "testharness" ], "mixed-content/generic/sanity-checker.js": [ @@ -483957,7 +485668,7 @@ "testharness" ], "mixed-content/spec.src.json": [ - "1e7d7c9dbe008e45a834814d3e30a0ac1e636ba7", + "b001317d5784de8d7e0b15e4cdcf616c1022c84b", "support" ], "mst-content-hint/META.yml": [ @@ -491597,9 +493308,13 @@ "testharness" ], "orientation-sensor/orientation-sensor-tests.js": [ - "5d35f3b9afcc52083bd0d124387cae3d5220412a", + "9d44d63870526a2d1625be08dabf2d6990582a0e", "support" ], + "origin-policy/bad-server/bad-headers.https.html": [ + "127aa41cef8761d8a331933302bebfa23670ae8d", + "testharness" + ], "origin-policy/bad-server/manifest-404.https.html": [ "51436be6766423aeade1c1eb3133fc096bc6a103", "testharness" @@ -491608,6 +493323,10 @@ "5231a4387646ae73bb97d116d91ecc854f9260ac", "testharness" ], + "origin-policy/bad-server/resources/subframe-with-bad-header.py": [ + "c35daa0c2be170d60db19bc2ae8ea24b25e77ef9", + "support" + ], "origin-policy/content-security/comma-in-policy.https-expected.txt": [ "5a5c58d7366a5dfaf817b681cb349dda9808e72b", "support" @@ -491849,7 +493568,7 @@ "support" ], "origin-policy/resources/subframe-with-origin-policy.py": [ - "258f23754ef7ef0b5c68f351c7c330c7e288c0c8", + "68e3e20718545bd9ba1fd0db3b6d773b8c5dbdb6", "support" ], "page-visibility/META.yml": [ @@ -491964,6 +493683,122 @@ "d78af081ef8af9e47dac8a042564c0dc4fd38479", "testharness" ], + "paint-timing/fcp-only/fcp-background-size.html": [ + "8cc83702c1fb8c411813ba23594c6ad39de09bd7", + "testharness" + ], + "paint-timing/fcp-only/fcp-bg-image-set.html": [ + "0cc52d0263e0239816ab075ae1ed90b2fd9a26c6", + "testharness" + ], + "paint-timing/fcp-only/fcp-bg-image-two-steps.html": [ + "4dc9af9da84fdb0dea6d39cf8dd50611de87c704", + "testharness" + ], + "paint-timing/fcp-only/fcp-canvas-context.html": [ + "18eb07bfdea11aa1c5eef9e77b5aeccd1b0c3332", + "testharness" + ], + "paint-timing/fcp-only/fcp-gradient-expected.txt": [ + "7af6d68d36b1cdb25d690e445412b9f7777e080c", + "support" + ], + "paint-timing/fcp-only/fcp-gradient.html": [ + "3a356f3dd1abf0f35c248fece3c877210162550b", + "testharness" + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html": [ + "76d459d0f40fcaa46e9561e76c99b4d4a17f157b", + "testharness" + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate-expected.txt": [ + "cf37721fce5cb714ca990a77e89e0c97f51a8927", + "support" + ], + "paint-timing/fcp-only/fcp-invisible-3d-rotate.html": [ + "0b7fc325c5d200b8489d5d04ba26f86e62f35fae", + "testharness" + ], + "paint-timing/fcp-only/fcp-invisible-scale-transition.html": [ + "e0ac85ceb258a274ae2e48b1f0ff3d148e248e27", + "testharness" + ], + "paint-timing/fcp-only/fcp-invisible-scale.html": [ + "5389e8a846bf6c2844dd61fe3a4e0cb9344b4ffe", + "testharness" + ], + "paint-timing/fcp-only/fcp-invisible-text.html": [ + "e1b38712a63db192f6830136fc6a38aa6e5a44f8", + "testharness" + ], + "paint-timing/fcp-only/fcp-opacity-descendant.html": [ + "8ada49b767f011848de3b549d93c7573dd4b471c", + "testharness" + ], + "paint-timing/fcp-only/fcp-opacity.html": [ + "83afdde195b73eb7a348255da05594b1a2bc45a1", + "testharness" + ], + "paint-timing/fcp-only/fcp-out-of-bounds-translate-expected.txt": [ + "c4f945c56bc86122796f53b95e85b5094f9a4dd5", + "support" + ], + "paint-timing/fcp-only/fcp-out-of-bounds-translate.html": [ + "ee7975eec45267d5b29594ba5adf0df03d2a02e9", + "testharness" + ], + "paint-timing/fcp-only/fcp-out-of-bounds.html": [ + "3553772d4fc6b68c9769442129723a57e07aea16", + "testharness" + ], + "paint-timing/fcp-only/fcp-overflow-expected.txt": [ + "f68b8c6fa3120702e6a5b23900373b206cb911a2", + "support" + ], + "paint-timing/fcp-only/fcp-overflow.html": [ + "d7cc34663b7f846055ff5a6ca1d07fc1b4677464", + "testharness" + ], + "paint-timing/fcp-only/fcp-pseudo-element-display.html": [ + "50fd626e899940ba2d6d19344df41111feafd6f8", + "testharness" + ], + "paint-timing/fcp-only/fcp-pseudo-element-image.html": [ + "ba38edb68cbedf3157344cb9477c2e48fb1daea8", + "testharness" + ], + "paint-timing/fcp-only/fcp-pseudo-element-opacity.html": [ + "b209864d5d6e3c834ed09832196ece07cd692886", + "testharness" + ], + "paint-timing/fcp-only/fcp-pseudo-element-text.html": [ + "ea2105e45300c2477f9536e776e58c31561d95fd", + "testharness" + ], + "paint-timing/fcp-only/fcp-pseudo-element-visibility.html": [ + "c903c4721851eff36135ef1eeeaffd9cc5a9c46c", + "testharness" + ], + "paint-timing/fcp-only/fcp-svg-expected.txt": [ + "a3e0ff88878e98b79454da7f6ae954bd62f3e6fc", + "support" + ], + "paint-timing/fcp-only/fcp-svg.html": [ + "bcd2372cfc3b7374ecba7e4ee1cd077b3e51f798", + "testharness" + ], + "paint-timing/fcp-only/fcp-video-frame.html": [ + "fff38cd2c811937cac38c605e94402eab1e4e977", + "testharness" + ], + "paint-timing/fcp-only/fcp-video-poster.html": [ + "ed9cabcaeeb8c62687aee7ec4033650eeea3295c", + "testharness" + ], + "paint-timing/fcp-only/fcp-whitespace.html": [ + "6e1f425de80225931a517b6c839e7be23bf26f91", + "testharness" + ], "paint-timing/first-contentful-bg-image.html": [ "9c3b2200fb667f66925be4333a78b23914749617", "testharness" @@ -492033,7 +493868,7 @@ "support" ], "paint-timing/resources/utils.js": [ - "9375b175296c305c8c75eb0a6c618a7ff62364ee", + "fb60500f3b5f806783a394eed17accc36c75e87c", "support" ], "paint-timing/sibling-painting-first-image.html": [ @@ -493161,7 +494996,7 @@ "testharness" ], "pointerevents/pointerevent_touch-action-button-none-test_touch.html": [ - "ea4b4f961562576b622c57e750b4ee568314fb26", + "42bcb7b843294928ae90d4a563e7e69e12c4d79f", "testharness" ], "pointerevents/pointerevent_touch-action-illegal.html": [ @@ -493445,7 +495280,7 @@ "testharness" ], "portals/portal-activate-data.html": [ - "004fa97e55c05049a32657450a22af090466f4a4", + "260bb00ff0686cf30034b9b98317cffebdf05d2c", "testharness" ], "portals/portal-activate-event-constructor.html": [ @@ -494445,7 +496280,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "7a52abfcb04d1cfc393c1d9fe6cf734f6dfffb9a", + "8f682e685a77264a3174fc027060fc00fc1b02d6", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.headers": [ @@ -494453,7 +496288,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "6890e3456d82d2181cf7ea71adc3595e960ac65b", + "31111c3cce4a5895dd834a33abd28c5e45936a57", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.headers": [ @@ -494461,7 +496296,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "9e029dd3cec7ce08fa6032392eb73bc883e3f54e", + "5985002bc775d96de73e70ac8753a55e0c98b4bd", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.headers": [ @@ -494469,7 +496304,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "3284b14cff3222ed0725678240bd9d2cffc2997d", + "4a62f71b44f770799f9a23a3a5ecd3e1705f039c", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.headers": [ @@ -494501,7 +496336,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "7c36ab3734ed26a2147a5353831e02765cedc7a6", + "95ef48cdbbdb7a50065f111cc0cabf5343952172", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.headers": [ @@ -494517,7 +496352,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html": [ - "77faf61f5b1519ab59e1253904cfc91e20d42cdb", + "74334b36ccfeb390d4b3b704bc7ddca586b7cbd5", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.headers": [ @@ -494525,7 +496360,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "8525ee2c023d0986138911b459625583eef61e68", + "569b0ac8e2137e9630095d41b18a9f25cb89ca49", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -494533,7 +496368,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "7372c260437cd7877cee2daf7ed6e3039ba7f730", + "e04c767ed5c1e783996c36fbe832fc1ea3454239", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.headers": [ @@ -494541,7 +496376,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "1d118d023b4c061638d948621ad7684c4018de9f", + "ca1042d6a6fcff4d7f79ddebc2b8f9a800542073", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.headers": [ @@ -494549,7 +496384,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ - "1d7a189083438ce0f1278e9417774fd709e410e0", + "6feb01bda6dd0c3d7fb25826a94140ceb854eb86", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.headers": [ @@ -494557,7 +496392,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "b631db09f799ccacdd9688e212380570ea3cc69b", + "43642c590dc99720ada68fee72960f2981a113ad", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -494565,7 +496400,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "522d74ed28cb209c6cfe1d21177094bb26ba2471", + "0d35924ddd1b8084893337dcea4115082e930672", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.headers": [ @@ -494573,7 +496408,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html": [ - "82ecb1461f5bab8183e7cc068fcc840cb1da4062", + "7814f3492d4ff5a9aa4540a5fe9c0982e749c36c", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.headers": [ @@ -494589,7 +496424,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/fetch.http.html": [ - "77faf61f5b1519ab59e1253904cfc91e20d42cdb", + "74334b36ccfeb390d4b3b704bc7ddca586b7cbd5", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/fetch.http.html.headers": [ @@ -494637,7 +496472,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-module.http.html": [ - "522d74ed28cb209c6cfe1d21177094bb26ba2471", + "0d35924ddd1b8084893337dcea4115082e930672", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/worker-module.http.html.headers": [ @@ -494645,7 +496480,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/xhr.http.html": [ - "82ecb1461f5bab8183e7cc068fcc840cb1da4062", + "7814f3492d4ff5a9aa4540a5fe9c0982e749c36c", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/same-origin/xhr.http.html.headers": [ @@ -494661,7 +496496,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "77faf61f5b1519ab59e1253904cfc91e20d42cdb", + "74334b36ccfeb390d4b3b704bc7ddca586b7cbd5", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.headers": [ @@ -494677,7 +496512,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "7372c260437cd7877cee2daf7ed6e3039ba7f730", + "e04c767ed5c1e783996c36fbe832fc1ea3454239", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.headers": [ @@ -494701,7 +496536,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "b631db09f799ccacdd9688e212380570ea3cc69b", + "43642c590dc99720ada68fee72960f2981a113ad", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -494725,7 +496560,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/a-tag.http.html": [ - "47c6f86a454a10b539971f71e0123103f599d7b0", + "2641813ea703dbf9626e59c3d4b001d40d125e09", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/a-tag.http.html.headers": [ @@ -494733,7 +496568,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/fetch.http.html": [ - "9b511a90b1fd14656bd0156e7c42ca5c118d38de", + "8f682e685a77264a3174fc027060fc00fc1b02d6", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/fetch.http.html.headers": [ @@ -494741,7 +496576,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/iframe-tag.http.html": [ - "5b196b97d781ec53a6bfb11803028a95d280bab5", + "31111c3cce4a5895dd834a33abd28c5e45936a57", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.headers": [ @@ -494749,7 +496584,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/img-tag.http.html": [ - "6cbecbcd0e5916b74b95f1aee944301f8be58228", + "5985002bc775d96de73e70ac8753a55e0c98b4bd", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/img-tag.http.html.headers": [ @@ -494757,7 +496592,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/script-tag.http.html": [ - "6473cf3ed00bde72f5056d2425178c8bc6b83f76", + "4a62f71b44f770799f9a23a3a5ecd3e1705f039c", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/script-tag.http.html.headers": [ @@ -494773,7 +496608,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-classic.http.html": [ - "b631db09f799ccacdd9688e212380570ea3cc69b", + "43642c590dc99720ada68fee72960f2981a113ad", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/worker-classic.http.html.headers": [ @@ -494789,7 +496624,7 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/xhr.http.html": [ - "b211b0aba447b18b6dbedd19068d246660903eb8", + "95ef48cdbbdb7a50065f111cc0cabf5343952172", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unsafe-url/xhr.http.html.headers": [ @@ -494797,23 +496632,23 @@ "support" ], "referrer-policy/4K+1/gen/top.http-rp/unset/a-tag.http.html": [ - "e76f2828a22f83daf0f3a2ef5c0b902c02907273", + "2641813ea703dbf9626e59c3d4b001d40d125e09", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/fetch.http.html": [ - "559e6625dcd72d5d0b37cc4dfdb4e83398abbea8", + "8f682e685a77264a3174fc027060fc00fc1b02d6", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/iframe-tag.http.html": [ - "c37ef9f5f2b9be3bcf429fe15c4e5761a080bc11", + "31111c3cce4a5895dd834a33abd28c5e45936a57", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/img-tag.http.html": [ - "400a1a61b067057a426396e06c37c1561c4bbea7", + "5985002bc775d96de73e70ac8753a55e0c98b4bd", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/script-tag.http.html": [ - "48e20a1fbd6fc03d192770b103132b639a880b1b", + "4a62f71b44f770799f9a23a3a5ecd3e1705f039c", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html": [ @@ -494821,35 +496656,35 @@ "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/worker-classic.http.html": [ - "b631db09f799ccacdd9688e212380570ea3cc69b", + "43642c590dc99720ada68fee72960f2981a113ad", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/worker-module.http.html": [ - "522d74ed28cb209c6cfe1d21177094bb26ba2471", + "0d35924ddd1b8084893337dcea4115082e930672", "testharness" ], "referrer-policy/4K+1/gen/top.http-rp/unset/xhr.http.html": [ - "31521e2af24c65cb247d15963cc0f50e13b121ab", + "95ef48cdbbdb7a50065f111cc0cabf5343952172", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html": [ - "02a217ca4a18924dbe611aca3bc3c9d3f23101bb", + "ca14aa2021ea702ab20e2c964dcb903f799d31ee", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html": [ - "fd37e90f6c1c7118171cfe55ab76c60ba926ad83", + "30c1f6b7b3c34f57b19d826dc550a8b8a4d1dad9", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "61ff8eba33887b1d9122d08edcfa12371711456a", + "fddad739594c76e702e180d6d1befa466f35b0a5", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "a1dd667425aef577902146e171b452594b9ae189", + "fc9f483852807baffb1a83313ab2393f04c7ad2c", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "6733f8da9874901390296654e49ed4b952f1f6b3", + "b49b75993d8a65b2c0a670491354d5c2164bac92", "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ @@ -494865,7 +496700,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html": [ - "8f24877788425341cc5131d90d58de439652ec7b", + "1ebfe2059a0f7dd9a781e5c9e1f9204eb429b94e", "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/a-tag.http.html": [ @@ -494877,7 +496712,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "3eeacc5cd307f4fb4f5bb2e9158422713a058b7c", + "9a36013b9cdc2dd0e88e48108c4b1cb583790c37", "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/img-tag.http.html": [ @@ -494889,11 +496724,11 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "2fcb8233b1c6d3d6f3fc608fb3bebb3781d52fef", + "51d2a157acb76f129f727aedeb28e5c8979c3559", "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html": [ - "ca2e54ea997e25521b2fb46f0ce2559a76d7c6ec", + "9d227d62940acbc0ed8b832a2a38e4d0f7df39a1", "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/worker-module.http.html": [ @@ -494901,7 +496736,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/xhr.http.html": [ - "d7d3a914365cc6607b28d4882f75a219761d387d", + "3cdbc538f2cf476741e1e150a9c93b17a4807db4", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/a-tag.http.html": [ @@ -494909,11 +496744,11 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/fetch.http.html": [ - "be55f6567f646fd040e12342d6d6e279fdc66bde", + "c1bfe063975268fc17b6fdb47d8fb76bc6a2724e", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/iframe-tag.http.html": [ - "caf9e4cd05277d985374a7768d261f4c3133ae52", + "dc3e359db0dd7fcf4d012b8835ba0a9b0ecee7de", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/img-tag.http.html": [ @@ -494921,19 +496756,19 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/script-tag.http.html": [ - "61c439ab73fc83e5e94e115fc0396e28d3db97d7", + "5e74d39b65f440bec0a4e4e804bcfce00c68218c", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html": [ - "c95997bbc6b9882578b9ebfbc3ca342b72b5e811", + "b6d27e31b5d4034d6514f98b4d943665bb5681e6", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/worker-classic.http.html": [ - "20575af9d79e4fdc249036ed3c544b7926f80fad", + "6090d396ee1b75101934f59b871b9b1cd8c0d826", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/worker-module.http.html": [ - "d17ca46153cb5b261aec3026e96883b7947df18c", + "bbf7a826253fc610bd94972e539a831c5bd28c96", "testharness" ], "referrer-policy/4K+1/gen/top.meta/same-origin/xhr.http.html": [ @@ -494945,7 +496780,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "0ed5cfeb3f2ae227eec12022468ad7c8a87fc4a7", + "25e1379e0dcc5b71328bb998ae465aea11d649dc", "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ @@ -494953,7 +496788,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "97dc6711c553ef8f184d7be92575b7a87cdf5c19", + "f61f8d67a0a98162484d1fba64759d883a1855fb", "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html": [ @@ -494965,7 +496800,7 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "a0b0bb783c0e964bb5310e078a093836d9f3e796", + "81f54227d1abbad927f3ba16164f36ce878a98fe", "testharness" ], "referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -494977,23 +496812,23 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/a-tag.http.html": [ - "a23aaec6c7b488cfbe692fafb822db3dad4c390a", + "93f874f51d7eae504c295b4d62ae121fc4a19a4b", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/fetch.http.html": [ - "da471988708d132f622a63350e104eef540bb602", + "73b2f579516e3b054cfe85757c6b2dcebe274f53", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/iframe-tag.http.html": [ - "a7eef16bc7725b288dbc9182df2139d14667fd88", + "66b331a4f50120253a9cd07d502ade9b41b1d913", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/img-tag.http.html": [ - "350d6fac65fcb43b0d66fc5b183d98895087e80c", + "9f59d065e94565b76a6f50c525f2ccdc9f4bfd15", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/script-tag.http.html": [ - "ce77afe15afe8d435b6904d8726725e65255fc7f", + "d09be02124fb129edb2b458859b301eefbf44512", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -495001,51 +496836,51 @@ "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-classic.http.html": [ - "3bd51f722ba5521c3d491061ad02a10b6eaee42d", + "f7ff65bd6b1cf524c282ef438a3ca5359bde9fcd", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/worker-module.http.html": [ - "d59c06f0b84a14ec5ed1bec8cf1db862170d9cd5", + "48482da94f51a0a6ef2a0ee2ec3a6f4f19039158", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unsafe-url/xhr.http.html": [ - "2dd3da340ade9058d2cf3988872cacf06db36651", + "5496264121fdc26aef9c90bfe562afbec6c2573a", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/a-tag.http.html": [ - "e1a24a80980bec8297c0525f853b0e0d00a8706c", + "2641813ea703dbf9626e59c3d4b001d40d125e09", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/fetch.http.html": [ - "fd6c749e971bd1c20dfae10aaa2b9a697fe59805", + "8f682e685a77264a3174fc027060fc00fc1b02d6", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/iframe-tag.http.html": [ - "e292a0cf2bc8373f594929dd76553af825e6b263", + "31111c3cce4a5895dd834a33abd28c5e45936a57", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/img-tag.http.html": [ - "a2509f9f047ef958434f8cefebfc7c0d2fd42606", + "5985002bc775d96de73e70ac8753a55e0c98b4bd", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/script-tag.http.html": [ - "4f4a79210f4c341545167361068fa522c25c5561", + "4a62f71b44f770799f9a23a3a5ecd3e1705f039c", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html": [ - "1d7a189083438ce0f1278e9417774fd709e410e0", + "6feb01bda6dd0c3d7fb25826a94140ceb854eb86", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/worker-classic.http.html": [ - "b631db09f799ccacdd9688e212380570ea3cc69b", + "43642c590dc99720ada68fee72960f2981a113ad", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/worker-module.http.html": [ - "522d74ed28cb209c6cfe1d21177094bb26ba2471", + "0d35924ddd1b8084893337dcea4115082e930672", "testharness" ], "referrer-policy/4K+1/gen/top.meta/unset/xhr.http.html": [ - "2da993756a64a4abb071db4e279936d6181eed23", + "95ef48cdbbdb7a50065f111cc0cabf5343952172", "testharness" ], "referrer-policy/4K+1/generic/test-case.sub.js": [ @@ -495065,7 +496900,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "86f3190282cd37c0cf9c2c19a6fcc3960ef18250", + "d0cb7206f8a6e4b2c8a5e8968db3a8eee67bc99f", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.headers": [ @@ -495073,7 +496908,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "6cda672ecab548d16612ac9ad1f50a6b2a7e0236", + "fbb87846a7a95649786fe1595946e047010c4aa0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.headers": [ @@ -495081,7 +496916,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "59bcdb3c33e9d98cd18f80805cbaa60231ac1988", + "1433505d9aaacb424fd72fce0b6e0198efd6dcec", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.headers": [ @@ -495089,7 +496924,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "5f7d210d0e8bc12bc6b015c1864a0e51a37b5528", + "0e7bad7b16d3e61c13397afbb38378a5c676dd8d", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.headers": [ @@ -495121,7 +496956,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "ba2a63edcf2985fd5961c2c3291a3d66ec42e5cd", + "81df08c87e7e95f430b8e25b3fdd35edd73d8bce", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.headers": [ @@ -495137,7 +496972,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html": [ - "fd8caf645b8d363eeab3b2dc2bcf6d1050034356", + "2b840d4aec5ac2f749620973272660bc10c160e0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.headers": [ @@ -495145,7 +496980,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "b65aef9ce0d0b87ad70099965e6e6bfc7a428414", + "cf605923b809de5fc1d03a90d8c3633c4c3dbf1a", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -495153,7 +496988,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "89e722798a6bd758aa81888db77b227cc3308de4", + "111862a7dc50e1e374c5b05239c9c24b8fa603b7", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.headers": [ @@ -495161,7 +496996,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "dc485678e76a47f25e3f4f05528b124c0607a0cd", + "abdb19514017e01c8476ef6165022456a754bd24", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.headers": [ @@ -495169,7 +497004,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ - "e0d775cee1d604917f0550bf582db9381dd36f17", + "7365afae6f1b7fa3226a2a2e3126fbfb0138c87e", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.headers": [ @@ -495177,7 +497012,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "3f57cf8c8079870ffe77924338575b0c4fc21a9c", + "2533e15216593eb6eb7e2cfcc6b1228b6228f724", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -495185,7 +497020,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "16665a4146f2d852ec838533aa7a0230610acc39", + "8190dfcdd4226e7e5793b9d9047091414fd8a0fc", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.headers": [ @@ -495193,7 +497028,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html": [ - "6f09ea6b097ee9e50e80b8e4994bf05738cfd561", + "b0bcb0a901b56171895926cafc73e2bcafb7061b", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.headers": [ @@ -495209,7 +497044,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/fetch.http.html": [ - "fd8caf645b8d363eeab3b2dc2bcf6d1050034356", + "2b840d4aec5ac2f749620973272660bc10c160e0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/fetch.http.html.headers": [ @@ -495257,7 +497092,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-module.http.html": [ - "16665a4146f2d852ec838533aa7a0230610acc39", + "8190dfcdd4226e7e5793b9d9047091414fd8a0fc", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/worker-module.http.html.headers": [ @@ -495265,7 +497100,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/xhr.http.html": [ - "6f09ea6b097ee9e50e80b8e4994bf05738cfd561", + "b0bcb0a901b56171895926cafc73e2bcafb7061b", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/same-origin/xhr.http.html.headers": [ @@ -495281,7 +497116,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "fd8caf645b8d363eeab3b2dc2bcf6d1050034356", + "2b840d4aec5ac2f749620973272660bc10c160e0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.headers": [ @@ -495297,7 +497132,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "89e722798a6bd758aa81888db77b227cc3308de4", + "111862a7dc50e1e374c5b05239c9c24b8fa603b7", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.headers": [ @@ -495321,7 +497156,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "3f57cf8c8079870ffe77924338575b0c4fc21a9c", + "2533e15216593eb6eb7e2cfcc6b1228b6228f724", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -495345,7 +497180,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/a-tag.http.html": [ - "e6ba204e5847cf7b0bbd414c84f591bd4ecfa24c", + "19c55517e84867f50ddf5fe1ad9009f546fdb494", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/a-tag.http.html.headers": [ @@ -495353,7 +497188,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/fetch.http.html": [ - "61e09140e003f3b36fae1d38578372a4a3ed9b7b", + "d0cb7206f8a6e4b2c8a5e8968db3a8eee67bc99f", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/fetch.http.html.headers": [ @@ -495361,7 +497196,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/iframe-tag.http.html": [ - "e9ff9a1093c7f26f5f856f343edff9a403c70025", + "fbb87846a7a95649786fe1595946e047010c4aa0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/iframe-tag.http.html.headers": [ @@ -495369,7 +497204,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/img-tag.http.html": [ - "1df6d3696607755e63f7a6185fdf3b4209c531f6", + "1433505d9aaacb424fd72fce0b6e0198efd6dcec", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/img-tag.http.html.headers": [ @@ -495377,7 +497212,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/script-tag.http.html": [ - "bfb28f549d1f53810b8e49daefebd9de34332ec2", + "0e7bad7b16d3e61c13397afbb38378a5c676dd8d", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/script-tag.http.html.headers": [ @@ -495393,7 +497228,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-classic.http.html": [ - "3f57cf8c8079870ffe77924338575b0c4fc21a9c", + "2533e15216593eb6eb7e2cfcc6b1228b6228f724", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/worker-classic.http.html.headers": [ @@ -495409,7 +497244,7 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/xhr.http.html": [ - "cef94764b50b38a3b758cf60e98c8c06f16be417", + "81df08c87e7e95f430b8e25b3fdd35edd73d8bce", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unsafe-url/xhr.http.html.headers": [ @@ -495417,23 +497252,23 @@ "support" ], "referrer-policy/4K-1/gen/top.http-rp/unset/a-tag.http.html": [ - "016e9b54131971d670839a797974e1c9d0a69eb9", + "19c55517e84867f50ddf5fe1ad9009f546fdb494", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/fetch.http.html": [ - "a2ca63a2bad7ba457c40262c49c12737a3780697", + "d0cb7206f8a6e4b2c8a5e8968db3a8eee67bc99f", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/iframe-tag.http.html": [ - "adeac7e1a5eff296d98035e28c23cd2345cc860c", + "fbb87846a7a95649786fe1595946e047010c4aa0", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/img-tag.http.html": [ - "9591ce9bf6e8d69bed6f4f7d2ae2c5c3ccc9d2a9", + "1433505d9aaacb424fd72fce0b6e0198efd6dcec", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/script-tag.http.html": [ - "198d4f0eb05ed3f4f77d49dbda117a178ce2625e", + "0e7bad7b16d3e61c13397afbb38378a5c676dd8d", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html": [ @@ -495441,35 +497276,35 @@ "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/worker-classic.http.html": [ - "3f57cf8c8079870ffe77924338575b0c4fc21a9c", + "2533e15216593eb6eb7e2cfcc6b1228b6228f724", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/worker-module.http.html": [ - "16665a4146f2d852ec838533aa7a0230610acc39", + "8190dfcdd4226e7e5793b9d9047091414fd8a0fc", "testharness" ], "referrer-policy/4K-1/gen/top.http-rp/unset/xhr.http.html": [ - "917b679f590205376db9182f18a8a6f3f893570d", + "81df08c87e7e95f430b8e25b3fdd35edd73d8bce", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html": [ - "ab450e5b6d47a0683dad613b4ddab31168433351", + "de2e5a9c490006ad6c8b40bd9a964dc0a06dccbd", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/fetch.http.html": [ - "b720b2845a7cb702f474982c8ad018ad34893063", + "983bdaa3bbcaf2dcaca7c9f0ee0df39b72489e17", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "c243338edba31e77f606a47d554facb251dfaf86", + "7f28364d6f600927f0b0cfb2af753aa9b35ed826", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "a6219f7b99c7ebc2bf1a80278d572777efa3e798", + "2f40d7d317299afa52844ca3f69ecdcca329a0b3", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "48046be9078ad2435053b512df2174b0a3c58455", + "9eb61cc176ce34c78794049807658142e52c0c2a", "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ @@ -495485,7 +497320,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/xhr.http.html": [ - "8c16d7dcf9195ebb43bb245b988b50f9209a56f5", + "3963f27bec0390f16e6e8b695d30f477a693e8ec", "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/a-tag.http.html": [ @@ -495497,7 +497332,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "0de9a1a02ca63f9655a9f2e600a807ee83cc722d", + "46700793f0da82b921156e25b13a6a5797b7fcb8", "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/img-tag.http.html": [ @@ -495509,11 +497344,11 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "6d5b7b41b62848e7a15e03390e7df656c9ae1204", + "3b8544271c488b3124aaea46d602cb75f8fb2ab5", "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-classic.http.html": [ - "dd809cbb7901c4cc210fdbd07ccb7b97f2fbf578", + "8800e866a9ea1ae445d5a201269f5d2ecd5b3758", "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/worker-module.http.html": [ @@ -495521,7 +497356,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/xhr.http.html": [ - "cf0696c82512359d96c800d05f8e2a052cbcca11", + "3673e5e00ee7946af70a4c4413262528b08d076d", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/a-tag.http.html": [ @@ -495529,11 +497364,11 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/fetch.http.html": [ - "143b2bcc99a721d3bb87362a46dab1f9dab17d48", + "7f3ee713ec6beabcfb9bd042fdab34ad90f1ff4d", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/iframe-tag.http.html": [ - "ad5f0c92c10f9e9413492c830d03f7068a778b71", + "abe57dfd774a144a53a7a479b128e5ed4ecd212a", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/img-tag.http.html": [ @@ -495541,19 +497376,19 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/script-tag.http.html": [ - "b283ad25eb7d65cddef899e3cca7c541c9418c43", + "aa42aa5c051d99df4cdde0255401b34e6118d317", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html": [ - "c805d122db4669af09e6814dfb1aa19bac1db346", + "cb27196125f05747ed288ebbb2b88bf2d7be3848", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/worker-classic.http.html": [ - "569dcf90334e1fe58115f3046e6b3424fd8c8063", + "a53a4c5894f52eb8db8b3a702426c39159c39d23", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/worker-module.http.html": [ - "ef47493f9d789da757d66e13bbd39ace1879c059", + "cc23f56ac8f67cab28769b746693adcc09709fc0", "testharness" ], "referrer-policy/4K-1/gen/top.meta/same-origin/xhr.http.html": [ @@ -495565,7 +497400,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "2f3f938253cdda0e093d316aa2236694d1642100", + "3afa172d3d8f0066b7adfba925656efe6f5976b7", "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ @@ -495573,7 +497408,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "f13292a1f47c085e76ee9f7d56062bb8bc84f067", + "18758a748d1a702745f4bf78ab565d65e9f572d8", "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html": [ @@ -495585,7 +497420,7 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "a418434e0c0804de8e551a130c384e0ae29a4727", + "c2f30c1143c729e0d86223035950cbd78e0b28f9", "testharness" ], "referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -495597,23 +497432,23 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/a-tag.http.html": [ - "41452ce220e0b8962c037bc784117792be089ff7", + "a2643f12a5ec23b13fc55a9f1ebe5dcde28d3429", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/fetch.http.html": [ - "a775f4563d25e4e7ed2e5dd1b9cfce556cbdb6af", + "3e506538da530856d10965ead367148d2679360d", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/iframe-tag.http.html": [ - "3c606bb9d0c2d06b4f35ca2d8cd613b370fb29a8", + "5c6f19d46aeb54ca3780ae704f1cf90139e93a91", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/img-tag.http.html": [ - "f1a05a7dd5a98afc41638fb8b575535213aa5a8d", + "d4bede06b5808a1b228037157732b1d9057bd3a1", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/script-tag.http.html": [ - "177b2a39ddc99b628d25c947c14014a9212de637", + "94073a5f6ced8a7ce670410d7b6afb1800f8a441", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -495621,51 +497456,51 @@ "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-classic.http.html": [ - "26427318dc87bcfef033855e2060774daf95f8f0", + "aa24d06f9621d97291941b0358ec4d078c62a976", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/worker-module.http.html": [ - "c0da272d349a0bcd1a35331ab52c59f77aa54090", + "95926627de7be4667a38be6a889e4d51b4955cde", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unsafe-url/xhr.http.html": [ - "0af057fc04e59a5ae8ea85f1e26e62ce2f83e106", + "bbb43ad68efa520e155d57a5c188e3286cc71c07", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/a-tag.http.html": [ - "5017723dc2348799ecda21c0b50f27ac75fec81e", + "19c55517e84867f50ddf5fe1ad9009f546fdb494", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/fetch.http.html": [ - "60124082878d68462ee197d5c8f61c3e5af2de6c", + "d0cb7206f8a6e4b2c8a5e8968db3a8eee67bc99f", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/iframe-tag.http.html": [ - "c5eaf1b9b52783e8fbec2e775800cb8fbfb779b7", + "fbb87846a7a95649786fe1595946e047010c4aa0", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/img-tag.http.html": [ - "a13f6b0beebb4f5b1a5567233046cc2fb5f08e76", + "1433505d9aaacb424fd72fce0b6e0198efd6dcec", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/script-tag.http.html": [ - "f34c612129bf698771732a563e9b41e452d54e3c", + "0e7bad7b16d3e61c13397afbb38378a5c676dd8d", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html": [ - "e0d775cee1d604917f0550bf582db9381dd36f17", + "7365afae6f1b7fa3226a2a2e3126fbfb0138c87e", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/worker-classic.http.html": [ - "3f57cf8c8079870ffe77924338575b0c4fc21a9c", + "2533e15216593eb6eb7e2cfcc6b1228b6228f724", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/worker-module.http.html": [ - "16665a4146f2d852ec838533aa7a0230610acc39", + "8190dfcdd4226e7e5793b9d9047091414fd8a0fc", "testharness" ], "referrer-policy/4K-1/gen/top.meta/unset/xhr.http.html": [ - "ee1b205d66fcf0fd669abd60f5ff438a61a8d87b", + "81df08c87e7e95f430b8e25b3fdd35edd73d8bce", "testharness" ], "referrer-policy/4K-1/generic/test-case.sub.js": [ @@ -495685,7 +497520,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "305db3d51ff90e61983fc3e87126320d4e7461d6", + "f766c2d37f9ad29474272307d0d768526f0f660c", "testharness" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.headers": [ @@ -495693,7 +497528,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "7daee4808c413286e91b2eb2f7ba78d6803a948b", + "213d16bf07c5ab6b13e439d490ce63435ae583c6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.headers": [ @@ -495701,7 +497536,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "47ef89c00a99b312beac2ed2710d8295416aa8db", + "2b3587e828bc2f091c5b4dc899483c06aae316f5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.headers": [ @@ -495709,7 +497544,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "0d99b76db33ddaba0f4ea5a3cb8f60e6427e8af4", + "888ef8183d852d0bc3a6ee63da992dd797b79df5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.headers": [ @@ -495741,7 +497576,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "9be2500bbf06c75c63fca3233bb4a108cbb821aa", + "6b1681106a2a7cedbf7d965578d4ef794f26cbfb", "testharness" ], "referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.headers": [ @@ -495757,7 +497592,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/fetch.http.html": [ - "487709f01e98d3ec5354996bc92abef5680804af", + "f382044bad94790082eb65f8f3e75b7b9f81a213", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.headers": [ @@ -495765,7 +497600,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "d7d412fb02d3850ddd490609c1105485367775cb", + "45a6cbc98b0894e35dd71d59794139ea5e325204", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -495773,7 +497608,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "cfe20a86dd191a5dd79fb44e9706b557cb49c6c8", + "00f7e69b577d8192cca5f4530aeb5fa1d06c4757", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.headers": [ @@ -495781,7 +497616,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "56a6cb4afcce7fc1a2f03ad9dfd43402e699c735", + "c498ec68feb24ebddb7aa9f7dcf17e6cb5a15733", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.headers": [ @@ -495789,7 +497624,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ - "682959ab4e4375a35c1a44e1cabc8f20318f52d1", + "79dee1335877fd54ec8b4930d42e5c1a1649b8a6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.headers": [ @@ -495797,7 +497632,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "a3b4f54713b7c7d3efb4fae5a6b2a45682f90d66", + "ed4c29375ea77277e629016a10dfd6ba597fed33", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -495805,7 +497640,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "e3e564ea5d6c35b409eace382cbe8f76146830fd", + "12c61b4eb5c3d1dd27b8507194d0cb71270454d6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.headers": [ @@ -495813,7 +497648,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/xhr.http.html": [ - "8db35518f512471e15d01a360d2a7ac7d8c66a80", + "4bbf83cbe5e77dd5d9cb1eaf9296407c9c072299", "testharness" ], "referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.headers": [ @@ -495829,7 +497664,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/same-origin/fetch.http.html": [ - "487709f01e98d3ec5354996bc92abef5680804af", + "f382044bad94790082eb65f8f3e75b7b9f81a213", "testharness" ], "referrer-policy/4K/gen/top.http-rp/same-origin/fetch.http.html.headers": [ @@ -495877,7 +497712,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/same-origin/worker-module.http.html": [ - "e3e564ea5d6c35b409eace382cbe8f76146830fd", + "12c61b4eb5c3d1dd27b8507194d0cb71270454d6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/same-origin/worker-module.http.html.headers": [ @@ -495885,7 +497720,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/same-origin/xhr.http.html": [ - "8db35518f512471e15d01a360d2a7ac7d8c66a80", + "4bbf83cbe5e77dd5d9cb1eaf9296407c9c072299", "testharness" ], "referrer-policy/4K/gen/top.http-rp/same-origin/xhr.http.html.headers": [ @@ -495901,7 +497736,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "487709f01e98d3ec5354996bc92abef5680804af", + "f382044bad94790082eb65f8f3e75b7b9f81a213", "testharness" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.headers": [ @@ -495917,7 +497752,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "cfe20a86dd191a5dd79fb44e9706b557cb49c6c8", + "00f7e69b577d8192cca5f4530aeb5fa1d06c4757", "testharness" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.headers": [ @@ -495941,7 +497776,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "a3b4f54713b7c7d3efb4fae5a6b2a45682f90d66", + "ed4c29375ea77277e629016a10dfd6ba597fed33", "testharness" ], "referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -495965,7 +497800,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/a-tag.http.html": [ - "ce70318c4ca05bc8a6c4b99d96d17006552870cf", + "55a4ab590eb62f454491c9c05f4960118b70fd98", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/a-tag.http.html.headers": [ @@ -495973,7 +497808,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/fetch.http.html": [ - "e4b6a9130f916fe9b37b33f31c2a6d8fd40b9bea", + "f766c2d37f9ad29474272307d0d768526f0f660c", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/fetch.http.html.headers": [ @@ -495981,7 +497816,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/iframe-tag.http.html": [ - "75d4c872dd119ad4a744138d93271b69e24cf831", + "213d16bf07c5ab6b13e439d490ce63435ae583c6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/iframe-tag.http.html.headers": [ @@ -495989,7 +497824,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/img-tag.http.html": [ - "adda1c2a81fa264f7c1d597bce04c7453ebb2c63", + "2b3587e828bc2f091c5b4dc899483c06aae316f5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/img-tag.http.html.headers": [ @@ -495997,7 +497832,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/script-tag.http.html": [ - "d94a5308475a8f8a7e3cd0c990ddea3a6a1a8c11", + "888ef8183d852d0bc3a6ee63da992dd797b79df5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/script-tag.http.html.headers": [ @@ -496013,7 +497848,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-classic.http.html": [ - "a3b4f54713b7c7d3efb4fae5a6b2a45682f90d66", + "ed4c29375ea77277e629016a10dfd6ba597fed33", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/worker-classic.http.html.headers": [ @@ -496029,7 +497864,7 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/xhr.http.html": [ - "76e9bca4bb13ad0449a908d81d00802583a10fac", + "6b1681106a2a7cedbf7d965578d4ef794f26cbfb", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unsafe-url/xhr.http.html.headers": [ @@ -496037,23 +497872,23 @@ "support" ], "referrer-policy/4K/gen/top.http-rp/unset/a-tag.http.html": [ - "e0f063f12688f424606e4494fe4612171cb7e6ab", + "55a4ab590eb62f454491c9c05f4960118b70fd98", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/fetch.http.html": [ - "a269ab293549cf066064fe708dd4d078c91a6493", + "f766c2d37f9ad29474272307d0d768526f0f660c", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/iframe-tag.http.html": [ - "07b8ec6f639247173e925c711be7603c18265bcf", + "213d16bf07c5ab6b13e439d490ce63435ae583c6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/img-tag.http.html": [ - "63a7988833790e46bfe772c17716c705adaa10b6", + "2b3587e828bc2f091c5b4dc899483c06aae316f5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/script-tag.http.html": [ - "6415ff567e74bc744648fbe2cb54258100287d5e", + "888ef8183d852d0bc3a6ee63da992dd797b79df5", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html": [ @@ -496061,35 +497896,35 @@ "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/worker-classic.http.html": [ - "a3b4f54713b7c7d3efb4fae5a6b2a45682f90d66", + "ed4c29375ea77277e629016a10dfd6ba597fed33", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/worker-module.http.html": [ - "e3e564ea5d6c35b409eace382cbe8f76146830fd", + "12c61b4eb5c3d1dd27b8507194d0cb71270454d6", "testharness" ], "referrer-policy/4K/gen/top.http-rp/unset/xhr.http.html": [ - "53708453cd42f3c8b17516d87ca21ca8437b9e79", + "6b1681106a2a7cedbf7d965578d4ef794f26cbfb", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html": [ - "0832258c2ceca0fb588abf5f6948a48162af459d", + "ca36f256e28da3d1d63f0f341f88c0f192058758", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/fetch.http.html": [ - "be72e4b4ab0e393bcdf5a2706a71a730be246309", + "8d7a411faac7207aecf6f0edbfee4d64bff0609b", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "a4bb979ae1ff7f0a3b764c2c4b7960aeff6c0d2c", + "03297e0b52b219568e92f9abae3ca3291c0d33a7", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "d1c8f5e0123e66b0473567076ef70b28306f56ba", + "f8e9a9c6e93d07bafceb9ca36072d1b8b5ffadab", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "6639f77d3c9a8c07ac67893c28653e7ddc20d7b4", + "1aeaea79294bd4e636c75cd8878d4e475f99493e", "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ @@ -496105,7 +497940,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/xhr.http.html": [ - "bf27c6d7d5b6a850c61ddc1a1c18198eab54dd7a", + "760a3040d8d0bda9936edf6d2088cb7a791f88f0", "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/a-tag.http.html": [ @@ -496117,7 +497952,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "a473081e1a4d97bc163343d846e2b2c3b6591279", + "d7b7b1dbf4f9da43bb9047de587ea9b055da28dc", "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/img-tag.http.html": [ @@ -496129,11 +497964,11 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "6070c955b0f47f85f9b552ff7aa2978cfa7b2530", + "3694ed7f94274826295ab8052695bbfb0cf2483f", "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-classic.http.html": [ - "ca723b743f5d9c6a5773faa62bc63e2042abcd21", + "02a4792f0d03ba106e4d44d5b49c391ec4f03ee2", "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/worker-module.http.html": [ @@ -496141,7 +497976,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/origin-when-cross-origin/xhr.http.html": [ - "a5c9bc636e98e54cdcf0af44eba479e347957542", + "0be8f5d222801cc5ea627941035642093d17f2f7", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/a-tag.http.html": [ @@ -496149,11 +497984,11 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/fetch.http.html": [ - "aef048ae3967b61b3256112d7759632c66915703", + "1f245254af35a94ec40e4bc31d5ca66680d590fb", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/iframe-tag.http.html": [ - "191133231aad8e516d884821ef3c7bd9ebc0b8c2", + "76c8c9504508f7bbba71f418d1f81357f9e64e98", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/img-tag.http.html": [ @@ -496161,19 +497996,19 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/script-tag.http.html": [ - "4235e62f1b0ec2aef4f8eee59e260dc6763cdf90", + "8c27ac573027f45166a1c611568a686e3c7f6a72", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html": [ - "c405955bd8860cd1907414c3fc132e627c36aa8f", + "604a56b3aa6b3151445dcdab1984e9fd51a0d56e", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/worker-classic.http.html": [ - "49b42a9b2e691443e0824b1409651e9e27632f76", + "083e588f2e0fcc87eeab76263300f359e99616b3", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/worker-module.http.html": [ - "226bb2905b978dc98552f477f960b392997055a2", + "11845c01c209043c70484b1efb617c26ff827c03", "testharness" ], "referrer-policy/4K/gen/top.meta/same-origin/xhr.http.html": [ @@ -496185,7 +498020,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "281940c1e142d762496edea6f388b8f4705b432a", + "57932b2a5d8bc04cf1a5f78afc33aa8e23398b4f", "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ @@ -496193,7 +498028,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "54bbd4480bd2b4fb9e0665415c88c45140835b6f", + "aba97cbd2f97c3efdd90263a2b22bb8d7547b7eb", "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html": [ @@ -496205,7 +498040,7 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "b93e49112f814149fe29650969106989f777adee", + "c3b1a964592ad52288e1586432c88c580f86b5ed", "testharness" ], "referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -496217,23 +498052,23 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/a-tag.http.html": [ - "2b6f54264585ca9a7cbb46d224900e9e2372aa8e", + "0206ccc83c0cc0a76de75f9067b8c314eca75eb1", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/fetch.http.html": [ - "e6c70ea16a3270c47b7a574aebce4e167b3bd673", + "3f4d829ea57a16d4aeffd1f6c82af44f53a2cdfe", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/iframe-tag.http.html": [ - "aea5730cd8603d1b4b969f7f3644326282a43dd8", + "6375f350adaee2eb17c5e13c5ae1c1f8b5ed5fcc", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/img-tag.http.html": [ - "3897b720712fe070a3abab0623cdcc2fcee8e3f4", + "09dc074ff701c6d6c5e338b0b7c0be5e68c7b7d1", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/script-tag.http.html": [ - "0e622d5b29f9ce5283d34b1f10a9eb8469cfe5bb", + "5b9cff8a4ff29d5f8acb2cdacea7a95fee66ede9", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -496241,51 +498076,51 @@ "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/worker-classic.http.html": [ - "78b384b232073df0ab70d20e11b84346b1e791ef", + "9a1084e625b7c0c0ef65bd81a60f317fab6b848a", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/worker-module.http.html": [ - "d03178e4e7779ddb2927ad7e18f13c4754424ade", + "d9559312accfb19ade8065476b4f7ac3a4596b53", "testharness" ], "referrer-policy/4K/gen/top.meta/unsafe-url/xhr.http.html": [ - "fdb9ebf3acde96a6d6a67dab057fd3d09e930ea2", + "eec1fe65e793fa10087a525bbad8e018c5dc61b9", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/a-tag.http.html": [ - "bc3590bb6ec3f9ae9c0a38679e27f00f5f407aef", + "55a4ab590eb62f454491c9c05f4960118b70fd98", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/fetch.http.html": [ - "b8e93ffa8f6fb60a47516d08f2175a1f5085022e", + "f766c2d37f9ad29474272307d0d768526f0f660c", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/iframe-tag.http.html": [ - "47ed51e98c451ee45b28984d9dab4e3194d998b4", + "213d16bf07c5ab6b13e439d490ce63435ae583c6", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/img-tag.http.html": [ - "dc5824246a6a6d4b55667da4e29dcb7c9e6664df", + "2b3587e828bc2f091c5b4dc899483c06aae316f5", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/script-tag.http.html": [ - "d5fd16df68046f25e0ba9b2e893616fc7602ecbb", + "888ef8183d852d0bc3a6ee63da992dd797b79df5", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html": [ - "682959ab4e4375a35c1a44e1cabc8f20318f52d1", + "79dee1335877fd54ec8b4930d42e5c1a1649b8a6", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/worker-classic.http.html": [ - "a3b4f54713b7c7d3efb4fae5a6b2a45682f90d66", + "ed4c29375ea77277e629016a10dfd6ba597fed33", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/worker-module.http.html": [ - "e3e564ea5d6c35b409eace382cbe8f76146830fd", + "12c61b4eb5c3d1dd27b8507194d0cb71270454d6", "testharness" ], "referrer-policy/4K/gen/top.meta/unset/xhr.http.html": [ - "6c145d5a79bf5993046d38508871d23c4784d681", + "6b1681106a2a7cedbf7d965578d4ef794f26cbfb", "testharness" ], "referrer-policy/4K/generic/test-case.sub.js": [ @@ -496401,27 +498236,27 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/a-tag.http.html": [ - "83deabb964346befb0f47d8a379896a477dfa99c", + "3a39abcf1f23e3f8e4b9b971d8a21cdfa84d17cc", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "280b37f57713c8bc49af438aeb4360bb9639b18e", + "397071f211562bf9e6ad414f6e230064b6f2070b", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "b005077ec42ce5cae0e735812520f04bf97ddb56", + "9f8954b579c442b02a1d23d4e753f6615878e798", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "2fa2e60c8ab416d3ca97b55c1a632ed4a3a0262e", + "8cdcb555a0865872770b5b2f1f8266538167ddd3", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "d69fb429d60a6be78bed7d3796754aa5aaf027da", + "672db55921dc5a52995541b73692e5e98aadca48", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html": [ - "95e23e87085080cbd2d3e77dde459c78fba681a7", + "750c2a0815317f5adc2dd8f2d28a9f1bee984d7e", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html": [ @@ -496437,7 +498272,7 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "cb0559d541d9a2f302ce5291507dc2cd5e29fb6e", + "0ab53c440b141e5128f6ae65e66f1bc364f5380f", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/a-tag.http.html": [ @@ -496445,19 +498280,19 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/fetch.http.html": [ - "e656f126b8f012d794c474eb008915dc45381434", + "d523a3109f6b64520040572fd7fb7de110460ff3", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/iframe-tag.http.html": [ - "d29c3c622268e82d6e694899f422d81839d1ce85", + "7761fb304d51363dee3025cc1cf0727dba039309", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/img-tag.http.html": [ - "54cd926399dbed35498fdcb5fe5d679e9e378ee3", + "f71ded5fb6a58ca31460e6ae5bd8d041c5cf4722", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/script-tag.http.html": [ - "bc615407a4e9f2a64826d9348d5fb1bce5932921", + "5430b987e16901e5cb6531757f2c0605adb01043", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-classic.http.html": [ @@ -496465,11 +498300,11 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-module.http.html": [ - "5ec048f59d49c06b866b51a52d72be7ca8acfab4", + "2991201b1d1576acda047ec18ba3f6c65b58d753", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/worker-classic.http.html": [ - "cd68479269fb3d20eb97002d79d81ea5af94fbd8", + "538136079f10579203c6307ed4e061fca76c8332", "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/worker-module.http.html": [ @@ -496477,27 +498312,27 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/no-referrer/xhr.http.html": [ - "fee790d22f169640240d4a8f39dc86f021dafcb2", + "ab624c0248eac3e1604e57aa943148f4dd2eeb6c", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/a-tag.http.html": [ - "3dfaf48d8e881dc857b3aa3e5afe33553757d748", + "7b14b1ce47c390b114be329a8b30f3b85ca4112b", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/fetch.http.html": [ - "a8d571c113e989eec00379da55faec2ccf94fe96", + "33993c1ddf0105e7210b1dcc66b7d727736ea73e", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "712d1bae34a5b60c6f94642249e749fd09fba0e9", + "7d3edec9fafe0b367bfa6a458b4ad030db5b0a33", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "0615a66a3c342380784ca969a45cac935ec1685d", + "b035834c60ad0a254751be8de363003f11d35ac8", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "d1f11b76dada7f04734e2abc8185507dbf13f343", + "7aa957c07e6ba5c86a58a9d59040dfce90236fe4", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ @@ -496505,39 +498340,39 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-module.http.html": [ - "a4787b55ff50e08aac6aea7c867cdc36f97cb6cc", + "1088e19bdbcf19e98ae1abd83bfdf9298d817218", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "ae01c8c17084b24e22afe22b67473431e0a5d99e", + "8729a24f09ee5f8286eeff26bd353968eeb8bb08", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "f9aaf2c4434baf4af423d6629c90e8559a37a54d", + "31639bac1bd3966a4302222a333d10d89c9b7887", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/xhr.http.html": [ - "a8534d09301e9ac1e83804082fd70460ec6055e8", + "434a6b35404e8c1e33c2dc4ff382d6a0c0d8e4ca", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/a-tag.http.html": [ - "c3cf3a422fdeda30777fac377689743fbf79e337", + "709a223295c369aa7dad45914cd940904758403a", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/fetch.http.html": [ - "66facac8c75a2a929aa8e5ab7218c7740524cd6e", + "08048d0994df3f1060ff30e4caf6c7f253260d46", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/iframe-tag.http.html": [ - "6a63d04506352f9ce7c2df6a23c12397616ddda9", + "088f80a631b16d0f19341eab8eb22991c723c7b1", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/img-tag.http.html": [ - "ba2428290c2e6ee67509e84dc876b4bd66162922", + "f139e412030907c48984d0e22d3736c0f7ccf450", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/script-tag.http.html": [ - "5477d5e0f1648cb897b87c237af55f9ae9610077", + "beaff15cf7d75dda10a093400a90001926559402", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/sharedworker-classic.http.html": [ @@ -496549,7 +498384,7 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/worker-classic.http.html": [ - "a0b120e91faa0131f449fb4f64e2a0661d6086e4", + "f6c850fe4fd84860e29027623e90c820d30d46b2", "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/worker-module.http.html": [ @@ -496557,27 +498392,27 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/origin/xhr.http.html": [ - "61ad3f8a3dd2b5c5751e7a3b1e74ec15c08c0b9e", + "513efcf13e58614e2d4fff6bd314a76dcbb29a20", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/a-tag.http.html": [ - "26f22c20aa8087fb65f498f3b81fc08ede5a7889", + "76ea76b0e79551978fa0c32d73c6b02bcb9924a1", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/fetch.http.html": [ - "16aa4622f7ec34ab0436aca2ab73b0b4edf82409", + "ca748f8bf49d4a24d1fc1128dbed1a5dbdd308bb", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/iframe-tag.http.html": [ - "33ae3a6d9ffca06b2488d64c380d46c62fac0f09", + "cdd79cbd59b82d53cb3a2f43d5aeb4218beb2a6f", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/img-tag.http.html": [ - "fd9a9b77d6c26ce89e41423f8eaefdb4479e33e6", + "48144e44ee3ab079e9d0d5ca472050fe48e53a3f", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/script-tag.http.html": [ - "6c800ae84fcf03079c9c9086e921867b4e82cb50", + "6d5e38a7504dcdd4741d651539bd4c4c11c51a25", "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-classic.http.html": [ @@ -496597,27 +498432,27 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/same-origin/xhr.http.html": [ - "4c2906171258cc87eb6f4b8242e148314839ec04", + "334e848af1bc221ec2ba4e2bf6195adbf4749519", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/a-tag.http.html": [ - "574101790d36fa4c731532309585902cdc3d197d", + "3ce62bd49a4794f32c87e4adce53dcb69ea0cf43", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "fa7ee7390c75ddba40dad2f8056ccc046ce4ff9f", + "1e6e9780bb8eef8d997cfab95c10ce02adbbe068", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "9627686f2bf58ec6af6803be03c65656f16edf84", + "6ac87080fa7c518ee17000fe1cb02b12903b67e3", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "52e9ba01c707e462e8bc7bb66826deb3fab1881c", + "d416b44f415c635955facdf29b71d7a2f7a0ea39", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/script-tag.http.html": [ - "f1d7c53097f6ce0c7813bfbd465744237eb92cb8", + "efc3de1b0aa440e438d4152d482e4e48794d128a", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html": [ @@ -496629,43 +498464,43 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "1821b6c5d378548109fbb5626d42c80de746deb2", + "45bd4d30e3306d1648348235eea4429452d124b4", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/worker-module.http.html": [ - "22720ba80dd134684fa3c1b1658976d29db59f7d", + "692e6b8bb2be15a4bab59158dbb9fa8eead6e138", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/xhr.http.html": [ - "7beea7de3d1a7d90fb47a4d4492af4afaf1774fb", + "73fe9dede9cf80295a2cbcb465660577997551e3", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/a-tag.http.html": [ - "b26e871cc083e8a774df4de7eaccb2e0a2819559", + "e634c212636891209cb5d8a4c151dce135430c78", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/fetch.http.html": [ - "8519c7a9e6838ab74ff0a6d6d675603f2e07266d", + "6668438f86a73f64ae342964cf6b65366489bf4c", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/iframe-tag.http.html": [ - "2003546a5bdc75fe1253383c87a3f0d4955488c3", + "4998ebf7ead1685555e417c44a7f964985baaa10", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/img-tag.http.html": [ - "e00f2f9ad78ad9eb890d2c7ff78601338b2dd269", + "7a71b188a02bfcf3727ad8a8a0683f17c3e4abbf", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/script-tag.http.html": [ - "255e74227238d0d4494e8f17988f548e3df24dd9", + "badee807f059b1ae619d16b7124c1602a5616b10", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-classic.http.html": [ - "624a06084f5a858873ac99e17a8e9b612cfe7af0", + "977e4a19eaf86a65e0ee9642a86d1c8e5ebffac4", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-module.http.html": [ - "f89575f609ce332300ea7ef756444fd8a2646119", + "27a27d9ee4acf7d02923a06d29f2beb1a92a52b5", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/worker-classic.http.html": [ @@ -496673,51 +498508,51 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/worker-module.http.html": [ - "c8d425ad82fb5ea8a03ed2707515d408b565af26", + "d3375bae69882018f93293e13b4439a22fb860be", "testharness" ], "referrer-policy/gen/iframe.http-rp/strict-origin/xhr.http.html": [ - "5e4f133682bf6d7ecba6d1f7b8e703facf3993f1", + "1b0c6bf4b314bd922a039e023f2be8c851e69bea", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/a-tag.http.html": [ - "60d501b076ed558540622799cadbd82b819e32c8", + "34a7a49e7cc8ef776d70e6f614ac8935231c879f", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/fetch.http.html": [ - "b8dd496d41b25ddc1002966af81202ef222a93ce", + "21cd62f1e89bee274ac51d666c8354167a854e39", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/iframe-tag.http.html": [ - "e184b5fc577b51c007179708a31534e1202a086a", + "8ba4ffabf0d96f70b2d39fd621298ece4e217eba", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/img-tag.http.html": [ - "8f365607e44d6dd8927bd9547036bbefde549895", + "092fd4fc4d8a1bd59104c790531ee954eb1650b3", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/script-tag.http.html": [ - "cbe698f1a404e666bb1f7c06f2d79359119fb113", + "4d50b3b90cdec89b5acd9a6c0e4315930f268d87", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-classic.http.html": [ - "6af97817cdfc2f3f0b93de31f88d5344f78dbcdf", + "952dc99dd214ccf193a9717ac3af04bf28ba5af2", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-module.http.html": [ - "d8488b63438bd281349f769cce949f8c785f92dd", + "6712399a63aaa94e92eb9178402091b47a6bffa7", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/worker-classic.http.html": [ - "827f90ab2a78456892c2c51a42bf01689cc431bc", + "4bc603169988e192f06f8b8af9f770acd49c8ea3", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/worker-module.http.html": [ - "fdf1cca6fc4352a08cf3e3393da7068e46a1ea40", + "05f15a98e9796bd1c260851d7a37cf8c615563e0", "testharness" ], "referrer-policy/gen/iframe.http-rp/unsafe-url/xhr.http.html": [ - "4263178d54b49e16159dfe25f619a08d916e2977", + "1d289252297a0a269a28df1d15f9d42142bce6c4", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/a-tag.http.html": [ @@ -496725,19 +498560,19 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/fetch.http.html": [ - "a07740d0584d94516474bb51ca6fa312759df693", + "d87289b3931bae830179ede55b1458b8d05d6eec", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/iframe-tag.http.html": [ - "ec71b7b9dff7f1e6e3178d4cf05f36b8f012f3e6", + "5f76c249747efbd688d9641bbecd9d6f0b22e39c", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/img-tag.http.html": [ - "121e645b8e2ea704098dc345cf21e88c6ac12b6f", + "8c95386af49bdf0ee7d209caccb3448029b8ee79", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/script-tag.http.html": [ - "7dc852f7d63845cf6e8c95fa54fcc54d43d709d4", + "cdfdb24d35870830c6235ab8107576d35eb35810", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/sharedworker-classic.http.html": [ @@ -496749,7 +498584,7 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/worker-classic.http.html": [ - "c4d74a5294e8991f4bbd71b75bb2224c39bd913f", + "0c1df2d02199e3a5aa0c9adc88255b19198281ff", "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/worker-module.http.html": [ @@ -496757,7 +498592,7 @@ "testharness" ], "referrer-policy/gen/iframe.http-rp/unset/xhr.http.html": [ - "5d73f4b7d0ebd8614b94491b4a22bdd69eb94eab", + "beb2a4fc38b4b9204985110c814094391dc84a94", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/a-tag.http.html": [ @@ -496765,31 +498600,31 @@ "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/fetch.http.html": [ - "f082ff6a5da4f163a3f1defc41352ae196b43b9c", + "de12bcc32766fb1eec3356e35077e2b27096d7f9", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "e3401876e0e3bf23739f55174bab5590179aec24", + "b82b165181ada6e20480b9c3bd458e203bf372b3", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "d915b31d2e7aa3bc88c3f49ec9174869c0ad00f0", + "03a3970ab4e47974f6bb4eafc85cc3c05f2c77bc", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "3963bf9cce6292485d3c318e8c663e67e12fcb25", + "361634ca575930b4b62bad2e2ec9623fe8ec95da", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ - "e1afc25e7d2ce4616ae679bed9044f65b76d962f", + "58f7b9b3c216c2e5c22fa4b684824d8766b1bc29", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-module.http.html": [ - "856896a6fdc963f7474e9aa288888bb5959d9673", + "3c2d1e1567822431eb5256f52166de0292ba9ed3", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/worker-classic.http.html": [ - "d70fd369ef126077fe51922ee2240ca6a237d9b7", + "b60df9f303abb13676918ebb1e08aed578f7af68", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/worker-module.http.html": [ @@ -496797,31 +498632,31 @@ "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/xhr.http.html": [ - "5e4a629ca85df91937f59b3f3714f54f3df0149e", + "7abc3bd60969ef9ebe4f6dc4869cf89e6b2ec5e3", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/a-tag.http.html": [ - "30143c5b21877eea3b8a40772a9cfde7575de223", + "83efe8b9b0cf5911c5cf9d70ab650c6b665c4574", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/fetch.http.html": [ - "17ccb121c7c93a17306a327363f6c201464d2047", + "b01056da7d6a6f4a7d447e4ddc73f1fde19d90fe", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/iframe-tag.http.html": [ - "79ad63d9cf631df6dc0b50b55ca8468b0416dcef", + "15a8b4b7dee956602401578ac0877641851dd9dd", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/img-tag.http.html": [ - "760f15154144f4b5bdc543f13a29c96388ec8381", + "16682a9983baae996bb7230f97f5d6c0bc528798", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/script-tag.http.html": [ - "b80f4d5acad475e58cd65107a077a364aa5ef798", + "41d4e9053d2131781cab82c06924867cd63798cb", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/sharedworker-classic.http.html": [ - "807bdfc13b2b151eb411bb174386cedf1e7a904e", + "00f15c8eed663c6619b40053a9fedb98d5964c8d", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/sharedworker-module.http.html": [ @@ -496829,167 +498664,167 @@ "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/worker-classic.http.html": [ - "384ffc879ff04f085c155e7b9dcb9bbb7662128c", + "6cb42b49b0b06342ab42b31daa53da0d2cefe8fc", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/worker-module.http.html": [ - "031b1c8de41054ddc48370c3ac025a6c7997bba7", + "660e8a16e7d71f89280aea849c31ade5155ed8f0", "testharness" ], "referrer-policy/gen/iframe.meta/no-referrer/xhr.http.html": [ - "fbdfe7ab59ff0c2ae40d2ecc1062bf4b10e56412", + "208e7ad99d4d9221af2d4e258da02abcbb30da1e", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/a-tag.http.html": [ - "6a1843ba360627bb968f9c6fef8b6b5bff03bf35", + "dd356554cb15fc6d2ae7d075ab2148d807a090a1", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/fetch.http.html": [ - "c8de87a45e4231be125196ea45ec4d4e13229b73", + "4b0cb139c30e6928ca72950bc3395be87d08bdb2", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "0fff6c8a144bf65b91a7cf95677f07e2a3df5a02", + "3ca1acfeec62d4b96030ae81847141ba6e8f5372", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/img-tag.http.html": [ - "e2d58a9482454086b46fb55ee08cf72e39f63bea", + "c74568d077e6db41775d347e584d7b087ad2b4d2", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/script-tag.http.html": [ - "17155062ae5077b35df7fbc9e3a540b9acaef719", + "ff4c200ec64469fff2c8bd5b15755b027f4f8130", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "573fa06eada2830d415a286ef8d3c8d497182db3", + "d04fc6b202208ecb5142fd60975cca603c338c6f", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-module.http.html": [ - "11d099211218899ed790b3617731208f93f96362", + "61ff8706362090329cc59a69a92de652078b0f55", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/worker-classic.http.html": [ - "f403027fd6f5d9b07c2cae302e3741e5bff48901", + "e16183db00f6aad49efce3f1666f428a17918fb5", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/worker-module.http.html": [ - "edd3cdcc49fb05bcf31145a10b02c29d538b56b0", + "3f1d5cea469a91c813e523462c77c34f6034642b", "testharness" ], "referrer-policy/gen/iframe.meta/origin-when-cross-origin/xhr.http.html": [ - "c9d75ec031fb158a13459de75fc78a1bd3c47fc6", + "2e8f1d3f3a8d5b4d9b584b74fd168608c80e98c6", "testharness" ], "referrer-policy/gen/iframe.meta/origin/a-tag.http.html": [ - "99708dc1f9cf4ef2a0699c0c5df879d50591ae1d", + "99292987da7e091699619cd0cf31bd776a50a092", "testharness" ], "referrer-policy/gen/iframe.meta/origin/fetch.http.html": [ - "4c97df8cd506c941b765b0e33bca8ecbec1dd0fd", + "8c3ad1c4dc5062133b88b783e833829b05275592", "testharness" ], "referrer-policy/gen/iframe.meta/origin/iframe-tag.http.html": [ - "60fd12914495c835b9e20ab726922050f0ce676c", + "7a7c98741d3b697ef146f9aba62637365da19691", "testharness" ], "referrer-policy/gen/iframe.meta/origin/img-tag.http.html": [ - "d6a9a5b8cbd2195ee6dd12a0a755dcbfc8985999", + "98f20d3a78ef32423501db996e77e06d6965f69a", "testharness" ], "referrer-policy/gen/iframe.meta/origin/script-tag.http.html": [ - "4d67b4713206cd72907b2dd5280cc1e9f4ce1c6e", + "ab3300de52b23cfdd4b54157302734a4e6e8150e", "testharness" ], "referrer-policy/gen/iframe.meta/origin/sharedworker-classic.http.html": [ - "cb448cd71e48b7cf00e9bcb012bb2dc5def1acc1", + "23af1ff3d5e1ec0569ccc17b02524996a28aae0d", "testharness" ], "referrer-policy/gen/iframe.meta/origin/sharedworker-module.http.html": [ - "61a4363e94ab62c8f6268296484f1811fa66092d", + "b72a27919d8fde3d4b8d06ccb6bb48ced4f0a7e0", "testharness" ], "referrer-policy/gen/iframe.meta/origin/worker-classic.http.html": [ - "20119fc6c1b9228b9eb2b31528efacd6cbe60001", + "e36e58bc24e3f3254f6a2ae49baab54e7d664a55", "testharness" ], "referrer-policy/gen/iframe.meta/origin/worker-module.http.html": [ - "edc9aae52354655ff06cea9549caf255a79655e1", + "f2a5f96fb687ae203ad973cc8107af8aba266aea", "testharness" ], "referrer-policy/gen/iframe.meta/origin/xhr.http.html": [ - "05cc5e3e39b616b5aabcbf0c38f637faa8f67707", + "90a80b28819169df8ad95def8b79819cdf59974b", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/a-tag.http.html": [ - "bb5518d632f2e8bc67cc4d02c42b9219ef44ed06", + "2c8788a3fc1d970ac0f5b705f25bb77684e8cd82", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/fetch.http.html": [ - "3243b7407ee9948b3e765cae901cd3de748f6caa", + "4a9d042b77944fa5fa8d66c972e567f07052d4a5", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/iframe-tag.http.html": [ - "f1e973f749100df734d04b7dbfbbc4edf9c69091", + "fe9ed89b2c92021a6520a5ad2a8ee3e8047b9b58", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/img-tag.http.html": [ - "3a24fb18963654cb0f42eb63dae63710ede3b607", + "33a45c682d0013f1ab45d582e736b96539c54683", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/script-tag.http.html": [ - "75c20a0b9e1b7363dd3a36f3cd94adf22d8dc5e4", + "a5d467eb5d1aaa84dc5e61da50d465d0d8e9d602", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/sharedworker-classic.http.html": [ - "4132b4f24d642cd3dcd1a749826dbeefdae449ae", + "13b2be2c3207b6e1431d66673ff1dab4ae49d61c", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/sharedworker-module.http.html": [ - "e9455bc50f2b802985e942662ea8ff8967ad06da", + "70808bf035ceec682c315dec782d36de66a78bac", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/worker-classic.http.html": [ - "536764e13478f3de8b5ffce2756fde350612e154", + "35300e13bf6c07d46ba9627ee247364ee7e3261c", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/worker-module.http.html": [ - "e03f3a8c18f9d8fd56234bd6bc4f81ba86e2bbbf", + "5540c723422295d7d3c688b3b34279f7b94ad77e", "testharness" ], "referrer-policy/gen/iframe.meta/same-origin/xhr.http.html": [ - "0a9826018875d24e41b2e982862cb95c9850485f", + "d88fe6fe615fafd8a66f2211b24a14d6aec780b1", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/a-tag.http.html": [ - "344b0f4c8a03f23b28bbf2a6f3040c508859bbed", + "f182ffb3fb110c8628e541dfdbc49dee84ee5452", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "9e0e46f3fbb982b4050e0579d94b38b36ba38b33", + "79460c78c0b5db82a1c4b9cb6e33a9d06866c414", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "ab20737aa2c64d535b9395211abeacb947aa83cf", + "2e09d681d068912dc8f50c04ba51b30094068966", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "e1149db53a46d032029dff6e10f70cb6d0983185", + "b670dc7fe60ac6fc69d4d3bf45a6d44a9580f335", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/script-tag.http.html": [ - "5c19ed692909bb0cd5153eb057aab348b612d47a", + "38bc675beb272071e210e828aa64fb389094c3d2", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html": [ - "7d403ba7ba521747692928c9fb9db388f10cff65", + "23a47107eac8ff358ac4127bcf197d577d0230c0", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-module.http.html": [ - "c0e4b578667e75f2c4bda68a1f58e1b62e33b01f", + "74d3ce8426aa78aabf31387eb50d140f3d6ddb84", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "b2fc79339ed0ab6cc829740565c47822a33c776d", + "6d3c2a56c047730343f5e3e8911d190dd99604c3", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -496997,31 +498832,31 @@ "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/xhr.http.html": [ - "fb78eafbf6d0f952c5c988055fad567d903a9b8f", + "1a79ce37b0704b5e7a24c5ab7dfb8a6c8ed52550", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/a-tag.http.html": [ - "0d41e9a33beb5594e31a56a89c6d5aca5e2a7560", + "6326dd1565169a670eb834598c6059850dbbe574", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/fetch.http.html": [ - "4d5eb2ef77b3ecc9f8dea3e54e99ee62afb78e8d", + "10cddc13cd8cd041afd7059249c0db47de201a59", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/iframe-tag.http.html": [ - "e70240b48d4aff91c6f4d27c0f8d3bff6afd099a", + "1944b34e6853823c72989ce75be47b09cc3d251c", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/img-tag.http.html": [ - "9bee056a6cc98908035207c389aa5b37365913a4", + "36386aa711caa533d06e7c0f5949f964759c49e4", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/script-tag.http.html": [ - "2700ce04e2a5a1209d35657af5d992cb6c67fca3", + "55eac6bd2b46c45598001ac27ddd9497cdc9af6a", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/sharedworker-classic.http.html": [ - "b932294d3c7ab373c185c15c403eae4e81e0b870", + "4ffaff067a3ec00f8fe341b351c2a7af701f5e4a", "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/sharedworker-module.http.html": [ @@ -497037,27 +498872,27 @@ "testharness" ], "referrer-policy/gen/iframe.meta/strict-origin/xhr.http.html": [ - "1cbf07354cb5f76cf8d417a9ed262f4f35c175d2", + "a03df3fece24fb563cb8dcf9fcc8c896a79b9688", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/a-tag.http.html": [ - "458367b475c2667903ec57794e5e74c2bccbc820", + "64cec3d0cf0194e32b1c16a9db6a15d4fd6b836d", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/fetch.http.html": [ - "e848091af45b7ab39088448112ff964513ba5163", + "084ed268e1c42b9c452ed46c3e29d134d0d04abd", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/iframe-tag.http.html": [ - "84c76ac6852ab704f47b2f9766f15748a4b59c1c", + "a4d49315e5416f7bc4fe1ada0bf2c4e23d002fb9", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/img-tag.http.html": [ - "c390d8cee5e1818ebb4eb5d91d9335d67d41e51d", + "b318a37f906be803a32a100ac5b23f928a567459", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/script-tag.http.html": [ - "8072c4f71d3b31625d6bba709c867a2b32df8e69", + "90ace4d25e92d0146ed5f14485d26db7b58c98d3", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -497065,7 +498900,7 @@ "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-module.http.html": [ - "37a75dddb51f19e70a3fc77adfa47ddd640da305", + "d66916330cd65a9b0f628c2dd1b0da622a965483", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/worker-classic.http.html": [ @@ -497073,187 +498908,187 @@ "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/worker-module.http.html": [ - "7a236950362e7dc44f0da4ba150f69bb04777e6f", + "811b0f2c3f475b26fe3dc6c26b04edcc7f3a75ae", "testharness" ], "referrer-policy/gen/iframe.meta/unsafe-url/xhr.http.html": [ - "c57fea3be9d6a5465db8519bd3ec2ce25b1934b3", + "4e367197fd8841acfc5f61722db1afca4feb89fd", "testharness" ], "referrer-policy/gen/iframe.meta/unset/a-tag.http.html": [ - "98a6a066b72b4147a2d76c488543cff69887c30c", + "e50b1f64a8a8eb81148018f3bf8a77ae9b62742a", "testharness" ], "referrer-policy/gen/iframe.meta/unset/fetch.http.html": [ - "4a405af0ef003ac8b787fe4ac58b51e9c0af2106", + "d87289b3931bae830179ede55b1458b8d05d6eec", "testharness" ], "referrer-policy/gen/iframe.meta/unset/iframe-tag.http.html": [ - "13af0c8ba6a605dc9d6afcd1f504756e0311f2c7", + "5f76c249747efbd688d9641bbecd9d6f0b22e39c", "testharness" ], "referrer-policy/gen/iframe.meta/unset/img-tag.http.html": [ - "ab43d92743202604a301a90edf3be85fb973a514", + "8c95386af49bdf0ee7d209caccb3448029b8ee79", "testharness" ], "referrer-policy/gen/iframe.meta/unset/script-tag.http.html": [ - "9ce14f67474dd03aa317ffa13c01e1a770983183", + "cdfdb24d35870830c6235ab8107576d35eb35810", "testharness" ], "referrer-policy/gen/iframe.meta/unset/sharedworker-classic.http.html": [ - "6199ad9a3301da4afb223e4f526a86978a360ae3", + "cdc6ac163cc3713ba3832d5aaf38a9de97b2eaca", "testharness" ], "referrer-policy/gen/iframe.meta/unset/sharedworker-module.http.html": [ - "e72944e9a14c92b9f7cb8f9b054b1b4dc512f8e1", + "9e5b4b2b17ef59336488f32d5789374e9e6f817d", "testharness" ], "referrer-policy/gen/iframe.meta/unset/worker-classic.http.html": [ - "c4d74a5294e8991f4bbd71b75bb2224c39bd913f", + "0c1df2d02199e3a5aa0c9adc88255b19198281ff", "testharness" ], "referrer-policy/gen/iframe.meta/unset/worker-module.http.html": [ - "9c372ad1bf194c6b47ab35955b70ac7139584049", + "65e86f94ecf2b29384489968094e033f3998cd33", "testharness" ], "referrer-policy/gen/iframe.meta/unset/xhr.http.html": [ - "86a70979468e65ee30f059863b596bab3da80c58", + "beb2a4fc38b4b9204985110c814094391dc84a94", "testharness" ], "referrer-policy/gen/req.attr/no-referrer-when-downgrade/a-tag.http.html": [ - "d00e69add72cbf09afb89e9ca5339afd9b8a5bcf", + "ae91f3ec28e8075a170a063b7149f474c97c6e13", "testharness" ], "referrer-policy/gen/req.attr/no-referrer-when-downgrade/iframe-tag.http.html": [ - "467b6fd3336af59d9e6683a8a6de2541f7d2820f", + "8e403aecac94bcf456178308c18bfb49134a1c37", "testharness" ], "referrer-policy/gen/req.attr/no-referrer-when-downgrade/img-tag.http.html": [ - "20d96396934ac277f71e7521174976c97be04f37", + "d5bb8f0ef3434524c406dbd2395ffc34c8e67e7e", "testharness" ], "referrer-policy/gen/req.attr/no-referrer-when-downgrade/script-tag.http.html": [ - "5f4b5b5fa40ebacdde64a4f92daf5d8dde11c443", + "c70743a04e3fc4ebe9401956dbc7e5d5eee2f4fa", "testharness" ], "referrer-policy/gen/req.attr/no-referrer/a-tag.http.html": [ - "3b876773fb2441fa67c52ac9b39ed96fc50317be", + "ab7cd57f3d0e9e5fd6ddee09452f2714454a4460", "testharness" ], "referrer-policy/gen/req.attr/no-referrer/iframe-tag.http.html": [ - "709707c6e7ab0600609a4ff6f5bac508601d7ed8", + "e9dfa7da6d1a4b7c2c1dc333e2a07a6ea427ac0f", "testharness" ], "referrer-policy/gen/req.attr/no-referrer/img-tag.http.html": [ - "c28cdcef87bc498ef72a19bdb6299b83833cd805", + "61fecbcb0b04f05a4fe5a172dccad7acf415e16f", "testharness" ], "referrer-policy/gen/req.attr/no-referrer/script-tag.http.html": [ - "c7c6bf629e93c66943038aa9961d3ee371f5493b", + "1e23802ced007764223c692973b8ffad92450960", "testharness" ], "referrer-policy/gen/req.attr/origin-when-cross-origin/a-tag.http.html": [ - "60ab249521c1bf1c8a8c72be14fadd05d22db84a", + "3a027ff7d6c12a9883670475efbbc20e2074da99", "testharness" ], "referrer-policy/gen/req.attr/origin-when-cross-origin/iframe-tag.http.html": [ - "0c0976c4e9c2dbd32daadc881cae7f096d7f5287", + "9ea1f00476bf1037957accbc502d82651ac08b85", "testharness" ], "referrer-policy/gen/req.attr/origin-when-cross-origin/img-tag.http.html": [ - "2e477d881571a934d91d879ff84707bd4f72f23b", + "b43f8ee0b74b18c0ffda3119ca9e603162762826", "testharness" ], "referrer-policy/gen/req.attr/origin-when-cross-origin/script-tag.http.html": [ - "37f30ca92894d9c18e00d572922a2a42a7fdad78", + "ec677b6a5537a2619d7a58a976882fe12e117f6b", "testharness" ], "referrer-policy/gen/req.attr/origin/a-tag.http.html": [ - "beef14fa66ceaf67ead422fbc029464c57328871", + "64483ee7bdaeb676df1fd19aac460540fe503192", "testharness" ], "referrer-policy/gen/req.attr/origin/iframe-tag.http.html": [ - "ff1829b9876289d03d401dfe6d2bb814a0ef274a", + "c573d1841daf3c4c61bfb6e9c5abcdaed8b7b1d9", "testharness" ], "referrer-policy/gen/req.attr/origin/img-tag.http.html": [ - "2e50298cb68f1505a2e9b18b48a3c482182f20d4", + "eff9cafda0aa9efecced977efc112093dfc341a6", "testharness" ], "referrer-policy/gen/req.attr/origin/script-tag.http.html": [ - "41967e94cf27001a3f476681c5af5e772fc42af1", + "e5743a567e4723bd59768bd8e9f4790953b9520e", "testharness" ], "referrer-policy/gen/req.attr/same-origin/a-tag.http.html": [ - "cd7ffc348c0e117f4dc0e5dbab968ea9631747ba", + "e3f37212efbfe27022b15b941cf9a15659af33d6", "testharness" ], "referrer-policy/gen/req.attr/same-origin/iframe-tag.http.html": [ - "31fbe765a1a98dc15798846124a467c72a60adfe", + "0ae0c0777567e828ea6ffecb941a8c2a8c7888b9", "testharness" ], "referrer-policy/gen/req.attr/same-origin/img-tag.http.html": [ - "0b60d1df47de8c24150c59b47806381bf5e3bd33", + "f2b40fb5428beceb61a0246d9ae0997c43473280", "testharness" ], "referrer-policy/gen/req.attr/same-origin/script-tag.http.html": [ - "f5324baddfd217520083f5519cb0acf1ec8e3a85", + "fa17836a614272497fb062922f1748a796b86c73", "testharness" ], "referrer-policy/gen/req.attr/strict-origin-when-cross-origin/a-tag.http.html": [ - "268108ea95527f860e1bbcce4425193da700462a", + "ffd3f95fe2d1f39e36877978dc7054c55e320fc6", "testharness" ], "referrer-policy/gen/req.attr/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "6fd331a42f16c8a3b68b13e34cf941ca349494e9", + "111205e1579400518983b5fa8f9b369cb88e1928", "testharness" ], "referrer-policy/gen/req.attr/strict-origin-when-cross-origin/img-tag.http.html": [ - "8874ca657bf48b4acc56e16c69e5fee2b0d83052", + "3d45b4e7a1a789889f7d0cd8c4fdeaa4a1815f3a", "testharness" ], "referrer-policy/gen/req.attr/strict-origin-when-cross-origin/script-tag.http.html": [ - "20c192e560d463ee49057be9ded576d9d42eb28c", + "44c9a7d89720722b061584c41dcaf6f5b69491ef", "testharness" ], "referrer-policy/gen/req.attr/strict-origin/a-tag.http.html": [ - "c9e3865b45362d1bad301944c633c3c6a939ec26", + "c1f732a3e53dcf78fcc0bb8cc0e04708a746c756", "testharness" ], "referrer-policy/gen/req.attr/strict-origin/iframe-tag.http.html": [ - "1bff8c146a9f7be807fe2397063b2f92d0ae3746", + "91d9eea523d52612b97ba18aca2ff914cdeabd2b", "testharness" ], "referrer-policy/gen/req.attr/strict-origin/img-tag.http.html": [ - "c2b990d117700b7bb80cbfd6a445aa97c839cf43", + "800fb23943b5200db52d11b0290e06cb2e6c9dd8", "testharness" ], "referrer-policy/gen/req.attr/strict-origin/script-tag.http.html": [ - "8da013a20d5f86488403eaf6a098d5ea943ab785", + "4337612c3b7b4bf86f15746881fd78d594b8c122", "testharness" ], "referrer-policy/gen/req.attr/unsafe-url/a-tag.http.html": [ - "c578b90e357f01136965022e3c6ca5be28e17439", + "04e590c37e5e3ab2f5eb01873be49114e8fd6b35", "testharness" ], "referrer-policy/gen/req.attr/unsafe-url/iframe-tag.http.html": [ - "37daa670d1ee9ce79970c340da54c166f37bcd20", + "4c2a09f18a533ab1262102a9a964aa96d328950c", "testharness" ], "referrer-policy/gen/req.attr/unsafe-url/img-tag.http.html": [ - "65c363e7d6b927649af8f7038228018afbf36c4a", + "b1053ab0e26c1a561e86daccc275747219e14126", "testharness" ], "referrer-policy/gen/req.attr/unsafe-url/script-tag.http.html": [ - "21f58903f21a907bcc79c3b4470e282840d8ed4f", + "51b0db7d1af08ce5ade6f0936441147b97b45bdb", "testharness" ], "referrer-policy/gen/req.rel-noref/no-referrer/a-tag.http.html": [ - "39a73f3f21a7c9e3b7d5b7e5c18090c2417edad9", + "0205df0cdef23f5e2413aa8be7a2576af1451d4f", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/a-tag.http.html": [ - "1189ee736e6b1f126916c0424847ed8f48a0ae1c", + "c00ba92de5c6e36984862ad0b5a182ff98dc3d0e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/a-tag.http.html.headers": [ @@ -497261,7 +499096,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "7a496dcc90c90ac3e4a8171409895c52062eccf8", + "ed3bc61f01861c675907bbda28afc1e2e0aee24c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/fetch.http.html.headers": [ @@ -497269,7 +499104,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "44be5e09207b31e6677c6e15ed643d36a747712c", + "a4fb7d8629b47146ed541ab93d3f2cb7761eaee1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.headers": [ @@ -497277,7 +499112,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "39ea7aca89e533f52c57b12cdb9b08e031a6712e", + "948089af7e88852d479077fc6cac2ca6aa60f763", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/img-tag.http.html.headers": [ @@ -497285,7 +499120,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "7688f6011548cd394ae10955136a94939daf7cf3", + "5d152c996afe5a398e751d2c69867a393df120ef", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/script-tag.http.html.headers": [ @@ -497293,7 +499128,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html": [ - "a843e75fd25d7e2076285ab1fd03cce0984bca39", + "de1c533bfc83394acb6b52de86b23da31429d462", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html.headers": [ @@ -497301,7 +499136,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html": [ - "27e4d4495a3480e60cf4aa5d6a49fb248cc2c1d7", + "c088ac04d7f3359b4146dd8e73c1227871e6f4c3", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html.headers": [ @@ -497309,7 +499144,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/worker-classic.http.html": [ - "708909e4856256d8419719a8428712479e6e56e8", + "8433c4d9df9afdf0992b5e879346edd24c2ee910", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/worker-classic.http.html.headers": [ @@ -497325,7 +499160,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "54d5403ce0c527c3de6a9f729a77ae8b30fc8e1f", + "20d3eb1ff827a4b3916b756529ded620418fbe32", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/xhr.http.html.headers": [ @@ -497333,7 +499168,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/a-tag.http.html": [ - "2ab75e2b4efdf315c32b17a277ada7e864479ab3", + "f9fada238b82570aa40d03fdfc13045ea4476bf4", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/a-tag.http.html.headers": [ @@ -497341,7 +499176,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/fetch.http.html": [ - "a885d7315cad698c9f8d277827cc956b83d95c83", + "8bc2cf3b064e1a66940e20ffaaffc914fa239a5d", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/fetch.http.html.headers": [ @@ -497349,7 +499184,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/iframe-tag.http.html": [ - "aecda128ebe70fcbb6442892d4511a00f87cc4fc", + "555121b53303a180f6fb721d7a2213508f60480b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/iframe-tag.http.html.headers": [ @@ -497357,7 +499192,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/img-tag.http.html": [ - "bc6270820d59f5ccac2d6929906e67dd932a73c5", + "8fe04405cec90757f55d64ca0ac2c40190f6f31e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/img-tag.http.html.headers": [ @@ -497365,7 +499200,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/script-tag.http.html": [ - "6ea115a3d6e79f32bac8e177bc3830e8faf9dfbe", + "08bc8089647bc43f6248f2a90fe44f1ec22e4f64", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/script-tag.http.html.headers": [ @@ -497397,7 +499232,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/worker-module.http.html": [ - "a91c5aad664d1c83eac6d43a2bbaeba1982a4082", + "05f26609235f879da4c24b9d48c9c3fa78c016d4", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/worker-module.http.html.headers": [ @@ -497405,7 +499240,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/xhr.http.html": [ - "fdbe13ed48a0c91103ba7af71dad4987e67fc6d6", + "529b7646c85e897ef71baae37138063d8bd58efb", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/xhr.http.html.headers": [ @@ -497413,7 +499248,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/a-tag.http.html": [ - "d7d69dd01489c63072650f0121dccd01996b8874", + "6ed5f3bb75a70f3c50d561e2754be668e759b3dd", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/a-tag.http.html.headers": [ @@ -497421,7 +499256,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/fetch.http.html": [ - "db9eaac047f0789325e9ab89848085afb1a8c3eb", + "6ce6800ed1b9b115568b2b82d8441dc8a155bc8e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/fetch.http.html.headers": [ @@ -497429,7 +499264,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "06fbcb50a4747b8d66e4a782c4db2f804d593885", + "6a0c5286868a995f734ccf858dad0fb9ecfbee8b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -497437,7 +499272,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "71066142d40077e42cb8c551e60ad7f0973f5100", + "aed278716d11050df1124381db7bb6bac6fc5d16", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/img-tag.http.html.headers": [ @@ -497445,7 +499280,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "7545ef13019cd4acf3415e3c78f980f61ccadb38", + "74212a61fb82e4185af401cc1ae19bbee2f12180", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/script-tag.http.html.headers": [ @@ -497453,7 +499288,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ - "a843e75fd25d7e2076285ab1fd03cce0984bca39", + "de1c533bfc83394acb6b52de86b23da31429d462", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.headers": [ @@ -497477,7 +499312,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "619a3b3039479549deca9374843506fe0541129b", + "bc0657d31ca8fbcb5e2262b707d2661f860356ee", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/worker-module.http.html.headers": [ @@ -497485,7 +499320,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/xhr.http.html": [ - "e0e971b380c254c13265acdbfb4f0c8d2176ea98", + "a54c8dec65e665c588931ca7795bd998754ecf47", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/xhr.http.html.headers": [ @@ -497493,7 +499328,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/a-tag.http.html": [ - "d9578a64cb83a17a6f62b4b8e96ec84a38e70d32", + "5f24860f1752ea9482158111f839085315e21081", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/a-tag.http.html.headers": [ @@ -497501,7 +499336,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/fetch.http.html": [ - "0bdf7d22e9791ad7f9dc91faf00cbfe396dba3b0", + "75e1bac179008804ae1b309a65cd7c4a850583be", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/fetch.http.html.headers": [ @@ -497509,7 +499344,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/iframe-tag.http.html": [ - "ddfcbe6e9e081c69a30fdb04ed97e19f59b8bf12", + "8e40188f6c96725f23f92ccf410c59c489e957ea", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/iframe-tag.http.html.headers": [ @@ -497517,7 +499352,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/img-tag.http.html": [ - "d389be343479edf606745c9117eb0f9de17b545a", + "21013c61e48edb361662cd0231005c255edf4a71", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/img-tag.http.html.headers": [ @@ -497525,7 +499360,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/script-tag.http.html": [ - "83c6927244891d21ea8d4d6c978d6b83db83c37d", + "3e542dbb59a79efd10d6a95c8c82a0488cbab1f6", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/script-tag.http.html.headers": [ @@ -497541,7 +499376,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-module.http.html": [ - "5749ed2e610d03d3d1955238e8aef88f3ae4059e", + "5bd7631966481dbc4b146802f3d8ea219756cf88", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-module.http.html.headers": [ @@ -497549,7 +499384,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/worker-classic.http.html": [ - "69ad2476abfaf4eeb4b654019610ab525882a0b6", + "3a901d4df9a4740e14c7c36c57eeb88366764c66", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/worker-classic.http.html.headers": [ @@ -497565,7 +499400,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/xhr.http.html": [ - "5303f20172aa40b0cbf0f741f98d7806ab5e74f9", + "0e691f80797f333946fa11e43a7aee8c13f72292", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/origin/xhr.http.html.headers": [ @@ -497573,7 +499408,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/a-tag.http.html": [ - "48e93db1fd19a63269520e41af70917778e2f22a", + "4722bc8f9224f2583a7f71d4bc2469f3d5f70196", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/a-tag.http.html.headers": [ @@ -497581,7 +499416,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/fetch.http.html": [ - "ba590382717b76f1fa180baf74b0e42caa5f6237", + "ca88a138c07d2844e91d8252fd66a0a51e9690ba", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/fetch.http.html.headers": [ @@ -497589,7 +499424,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/iframe-tag.http.html": [ - "fd13662ae182d1168412386337acb6c29649a10a", + "a95cfde13a64ba8363c3dbfaebcda5788aa47cf4", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/iframe-tag.http.html.headers": [ @@ -497597,7 +499432,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/img-tag.http.html": [ - "ccb74bb52fa2e8dba226272d18e33291ffacf83e", + "81c06823b6ad3f3a3759daddb4339bd11129d68c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/img-tag.http.html.headers": [ @@ -497605,7 +499440,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/script-tag.http.html": [ - "d62279f4807a092b8c816d80d062bd6f3540eb66", + "450ebffcc0207582248118759293bf4d9c42dbf4", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/script-tag.http.html.headers": [ @@ -497645,7 +499480,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/xhr.http.html": [ - "3ca4596a021111aeab120e8c8d2903df35af5cb5", + "9069ca99241fbb96169425a3ca09c50501b4d949", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/xhr.http.html.headers": [ @@ -497653,7 +499488,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/a-tag.http.html": [ - "e269614fd518dc7c8b86e7f619b721864a4aef96", + "6ed5f3bb75a70f3c50d561e2754be668e759b3dd", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/a-tag.http.html.headers": [ @@ -497661,7 +499496,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "bd8ce6b7c9d2f37f4953dd9e7ee8ca85d35d03bd", + "6ce6800ed1b9b115568b2b82d8441dc8a155bc8e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/fetch.http.html.headers": [ @@ -497669,7 +499504,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "372997630c45bc6ffe5de8a4a3ad2825a6a54296", + "6a0c5286868a995f734ccf858dad0fb9ecfbee8b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -497677,7 +499512,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "39b1299d892841febac74757434dc2f9b4fcad95", + "aed278716d11050df1124381db7bb6bac6fc5d16", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/img-tag.http.html.headers": [ @@ -497685,7 +499520,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/script-tag.http.html": [ - "b8a3ecb10235a71c64dfcf0696451029b9c2d434", + "74212a61fb82e4185af401cc1ae19bbee2f12180", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/script-tag.http.html.headers": [ @@ -497709,7 +499544,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "708909e4856256d8419719a8428712479e6e56e8", + "8433c4d9df9afdf0992b5e879346edd24c2ee910", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -497717,7 +499552,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/worker-module.http.html": [ - "619a3b3039479549deca9374843506fe0541129b", + "bc0657d31ca8fbcb5e2262b707d2661f860356ee", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/worker-module.http.html.headers": [ @@ -497725,7 +499560,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/xhr.http.html": [ - "70af057f3aee20fd7da71024ee883b730c2f5b6c", + "a54c8dec65e665c588931ca7795bd998754ecf47", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/xhr.http.html.headers": [ @@ -497733,7 +499568,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/a-tag.http.html": [ - "ba1c6cbabd0010a651f75ea3b1d2a895c1a9d1f3", + "5f24860f1752ea9482158111f839085315e21081", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/a-tag.http.html.headers": [ @@ -497741,7 +499576,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/fetch.http.html": [ - "fdb84527ad7cbfa961d2beb3fc39de35b7f872e3", + "75e1bac179008804ae1b309a65cd7c4a850583be", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/fetch.http.html.headers": [ @@ -497749,7 +499584,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/iframe-tag.http.html": [ - "4b44fec638bc713bc3b56b538e73f73557e9c8cc", + "8e40188f6c96725f23f92ccf410c59c489e957ea", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/iframe-tag.http.html.headers": [ @@ -497757,7 +499592,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/img-tag.http.html": [ - "5cfd0e29868425c1495d91d47cf188e5f7c0025b", + "21013c61e48edb361662cd0231005c255edf4a71", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/img-tag.http.html.headers": [ @@ -497765,7 +499600,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/script-tag.http.html": [ - "9011a2adfe1c3775940eb5931ce3de09136ec140", + "3e542dbb59a79efd10d6a95c8c82a0488cbab1f6", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/script-tag.http.html.headers": [ @@ -497781,7 +499616,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-module.http.html": [ - "5749ed2e610d03d3d1955238e8aef88f3ae4059e", + "5bd7631966481dbc4b146802f3d8ea219756cf88", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-module.http.html.headers": [ @@ -497805,7 +499640,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/xhr.http.html": [ - "47170d8b7191943f6768e540fe582223eadfc5e2", + "0e691f80797f333946fa11e43a7aee8c13f72292", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/xhr.http.html.headers": [ @@ -497813,7 +499648,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/a-tag.http.html": [ - "cc4e601f02960c9e83fb9d78c5a8c85d9dd25a39", + "c00ba92de5c6e36984862ad0b5a182ff98dc3d0e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/a-tag.http.html.headers": [ @@ -497821,7 +499656,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/fetch.http.html": [ - "63761b377ed3b8f53927d42830c1d16a51df0a6e", + "ed3bc61f01861c675907bbda28afc1e2e0aee24c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/fetch.http.html.headers": [ @@ -497829,7 +499664,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/iframe-tag.http.html": [ - "bc9d347f02fb0a6202967e5693a518eff60a93b2", + "a4fb7d8629b47146ed541ab93d3f2cb7761eaee1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/iframe-tag.http.html.headers": [ @@ -497837,7 +499672,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/img-tag.http.html": [ - "9e1351ad27ad3f99aee22b954eb6f2b797be5ff4", + "948089af7e88852d479077fc6cac2ca6aa60f763", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/img-tag.http.html.headers": [ @@ -497845,7 +499680,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/script-tag.http.html": [ - "8d45840c007bdaee3afebf4002d1c14f678fbb97", + "5d152c996afe5a398e751d2c69867a393df120ef", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/script-tag.http.html.headers": [ @@ -497853,7 +499688,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-classic.http.html": [ - "a843e75fd25d7e2076285ab1fd03cce0984bca39", + "de1c533bfc83394acb6b52de86b23da31429d462", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-classic.http.html.headers": [ @@ -497861,7 +499696,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-module.http.html": [ - "27e4d4495a3480e60cf4aa5d6a49fb248cc2c1d7", + "c088ac04d7f3359b4146dd8e73c1227871e6f4c3", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-module.http.html.headers": [ @@ -497869,7 +499704,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/worker-classic.http.html": [ - "708909e4856256d8419719a8428712479e6e56e8", + "8433c4d9df9afdf0992b5e879346edd24c2ee910", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/worker-classic.http.html.headers": [ @@ -497877,7 +499712,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/worker-module.http.html": [ - "619a3b3039479549deca9374843506fe0541129b", + "bc0657d31ca8fbcb5e2262b707d2661f860356ee", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/worker-module.http.html.headers": [ @@ -497885,7 +499720,7 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/xhr.http.html": [ - "c2ea9b622e94e91eadc22bf14eec206f3f4b8f2b", + "20d3eb1ff827a4b3916b756529ded620418fbe32", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/xhr.http.html.headers": [ @@ -497893,23 +499728,23 @@ "support" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/a-tag.http.html": [ - "c40ba811b6e554a004557a65f9513f1315c75bf6", + "c00ba92de5c6e36984862ad0b5a182ff98dc3d0e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/fetch.http.html": [ - "dfb07032dc5a117327a4e81fdc3cc655205565a5", + "ed3bc61f01861c675907bbda28afc1e2e0aee24c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/iframe-tag.http.html": [ - "6d43a194f891274a2540dce380ef6967711a67b5", + "a4fb7d8629b47146ed541ab93d3f2cb7761eaee1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/img-tag.http.html": [ - "661acb823487138d3fad945920db7c263c672907", + "948089af7e88852d479077fc6cac2ca6aa60f763", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/script-tag.http.html": [ - "07fd5ec6dc5fb2363cac0b4851e17c2fad71684d", + "5d152c996afe5a398e751d2c69867a393df120ef", "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-classic.http.html": [ @@ -497929,7 +499764,7 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.http-rp/unset/xhr.http.html": [ - "a353de2b6001acd878d35b40079378ccbc6a5fc8", + "20d3eb1ff827a4b3916b756529ded620418fbe32", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/a-tag.http.html": [ @@ -497937,19 +499772,19 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/fetch.http.html": [ - "475ca44bcba0905f37eaa4d9e1f866f122a92945", + "b0843010b787a621fd62d768b8e1c61436417fdd", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "9754cae0ccb79ef183aef8000521ebd64e8831e1", + "70b6f86033191598f393800bec9635cab4d72a5b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "2573ce2a51aa8db13c4e6083fff4fd011ff813d3", + "5d74b8662e55f97d9027bc244458da181e72dcc2", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "c24f793981fea89d94e1388f33e9f98b0fed359c", + "9ad1c791693919da38accbda6ebaaa534f4cd89b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ @@ -497957,11 +499792,11 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-module.http.html": [ - "20cd6ae2977cd0c3f84bf8588ccbca4da8cf493e", + "b97f3311f81e4933ab06ccca55dee7353cdf482f", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/worker-classic.http.html": [ - "36208a2f2301a58204c6672d97c392419a032a84", + "0cd0c64765e3925a2dd20e464bffd69b11e945df", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/worker-module.http.html": [ @@ -497969,27 +499804,27 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/xhr.http.html": [ - "7367fe7a68366e3c2c8c26ea425511eb90387449", + "70aee4ec28b381caa02db20a0a860f2913d04457", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/a-tag.http.html": [ - "c296e794fbe24f6bccc6059abc6d416562271095", + "36beb5760f365b0ca778012ced1cab5a62ef6cc2", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/fetch.http.html": [ - "26cb3e96f22cafaa7c1bedc789480ef66557385d", + "ed6e1c7e0cd19514cd5d2147f6459f1b2df93427", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/iframe-tag.http.html": [ - "b150737473a309bca6751c3f4b227eac3f2650ce", + "edd06e5c027422cfc8138425014652fae7c35110", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/img-tag.http.html": [ - "70c5a3af53e84b3bcddd043f1cfd9ad51d43f732", + "9395c9307329353e24bc1cae60c587ff018e8acf", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/script-tag.http.html": [ - "64cd47f58d429c30122a29b9535cd1057f4bb042", + "0d253b26ea76c83db1526b448b78df5e257b88bc", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-classic.http.html": [ @@ -498005,35 +499840,35 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/worker-module.http.html": [ - "e3185a29fd935e440b35e00219c9c623aeb6efdc", + "fb3fba8ef663ccb2216de9c4711a22370b64e6cc", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/no-referrer/xhr.http.html": [ - "cea1c7da6cb5140f209d394f35b335360166be2d", + "b8a8134149fddfb7905534494798aea034643022", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/a-tag.http.html": [ - "688fdaeb065d094c160b0e5162027acd9522f5ec", + "44879f5d1fc2a3204809373f7b68614cca07ce80", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/fetch.http.html": [ - "5e016c79f7c6d9fb3ae68b57e98061135b9c7686", + "014222203244162aae9484aa841cf8cfbfe43eba", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "5ba473ec569184d5b4f2e23713df7b352ca51299", + "cc80c5b686cb6d28bb22aed04c0da56a286df173", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/img-tag.http.html": [ - "c9f97bacd744201b142b0f72a5d321f85cc020d0", + "5aae8d81060aae32aa2e6e3bbbaaa7bab2edfdb9", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/script-tag.http.html": [ - "ad159a6832f73f317b2e5a7eee111da9053411ec", + "0cbe39c632cf08d2d06e90121ce5c9a7403e1532", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "4a684a48ec247226b49dfbc9084596707dc8786b", + "6e5f40d54249df8f79c465157704f8609e7745bd", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-module.http.html": [ @@ -498045,31 +499880,31 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/worker-module.http.html": [ - "ba4c7680eb712b6bbaba9eb73cc62f7fafeaf744", + "55eb25bc24fe28f15b8ce6c78e5ba1e72609cf65", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/xhr.http.html": [ - "93007affaf485ea5a9e7330892bbdf816bf8de6c", + "d5ecdddf67e4c22d438e71490a4e0736015541c2", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/a-tag.http.html": [ - "f16d23fb30b2ec8f63699cdafcdb9dcfb28c1bc6", + "53d4decc35b27a17b214fa38a7fec8aa8957b8bf", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/fetch.http.html": [ - "7e6e3452d697be012200112a4e3195253642987c", + "2bb4704f451c3a45acc1a8d575a73d794ad53851", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/iframe-tag.http.html": [ - "caa9d1bb2edb12ca675b52537063a15bcf72c383", + "97d69ffe1c0d4fff66317bf91788a8c1324daf97", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/img-tag.http.html": [ - "424789d69e446a94c36de5c791b5f26b21833adb", + "ba49c9c8ddffb5ad25247ced884e30b409d969c7", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/script-tag.http.html": [ - "8ad958190da0dc9124c6aa324bc66a2408b91b0b", + "d1eb996cc65c7113236a4da9b90e7551e82495dc", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-classic.http.html": [ @@ -498077,39 +499912,39 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-module.http.html": [ - "328d2677cd76bc9c4e17c737e86436d97ef40965", + "1cbe83cc0a03fd00628d6a8b614b8cc2ef8974f1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/worker-classic.http.html": [ - "a173a431758d532a9cda63af39a26a5419f8159a", + "d90cdc4fbe7d6ba0e55afd33de4b92967b690690", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/worker-module.http.html": [ - "3be4fae8983b60bd2baa7ae0d94383f9ba7c463b", + "eb55830303db2ec49edf4c1999eb796d33ac22e1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/origin/xhr.http.html": [ - "7129504b24ad3e264b8ff9ead0cde69f66e72327", + "3e743c30e3318b2268e527f290779350ab7b3814", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/a-tag.http.html": [ - "4148e128460e7d9f8a6eff53d2b7c9121fe5c82c", + "121fb003b4b359d05390e18788e03b639ab91682", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/fetch.http.html": [ - "085e8f1bb9be6f81ddfec2c711219291ff368102", + "9ae62490b427a146261ab2f911d5c567b38f879a", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/iframe-tag.http.html": [ - "c90e8c5f8a00699c42727ef1fc87fc2c818946c2", + "d197af252e83510ddb1f9338ee4df03ce2b81ce4", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/img-tag.http.html": [ - "d6070f0125bc39413c131c1ae3f23ba44ec2cb22", + "5745f609da29e712c07f0395f0d24ae88e1a1d17", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/script-tag.http.html": [ - "6d6b0d2aaf2fc86a5b972c9eea7343e13608be19", + "b60fb20b58c7ca1517d35fe740ec3a709b1ed957", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-classic.http.html": [ @@ -498117,11 +499952,11 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-module.http.html": [ - "5c0e6ad0b86f3c9105fb135a3e7f222102c95daf", + "001be4af9705fd705c71db0779dbbce0da58b5b7", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/worker-classic.http.html": [ - "a110488a0c5e7e987bf7a9deedcc14af7374a189", + "58c04ab190584d06826fe359ae9eb66eb7e11cb8", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/worker-module.http.html": [ @@ -498129,7 +499964,7 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/same-origin/xhr.http.html": [ - "3f39011b437e1019b78e91d80d0dce1ee61e6f59", + "924d350cb5d46614b8e48462b0d2bcdaa3e35b15", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/a-tag.http.html": [ @@ -498137,23 +499972,23 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "4290b15176bac6ece1c1d6c8429a48afecaae005", + "35d7ea426b07106b6b69b346d51498ad9de7a9c9", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "cbaf2624be16495ac973c786080db017c48e0750", + "a7ee5d9e24d9218fdaa566bd45ba25ea3d233079", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "86c570926e34d9160b9067dbc1ed242614853636", + "c76973736131fc334c2ee39dd91b029f8b464bda", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/script-tag.http.html": [ - "e3a6e72d524a7587ed1a46c7c4a300ee9c8f4a68", + "76174d3c217698fd8245b8210f46e384e5eb1b59", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html": [ - "477e644b255d3961c218b0bdef17c0e7ee034167", + "8288d864544660639fc4d4e6c8fa58d253f84852", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-module.http.html": [ @@ -498161,35 +499996,35 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "e410958029a8de6cda0e53c344a6bf9355d07e3c", + "62330f80d023a01f961813dfb6f6f1d7b5b19ffa", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/worker-module.http.html": [ - "37a0e23e22cc391031cc9771b380bca49a926a17", + "6d3f1993657a07f36954afc0b6db766e54560d61", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/xhr.http.html": [ - "4f61cba096b2e37ad033d9705d7c3087ca389750", + "a6829c2b3da724c76619bc0d1a0937c85873ffd3", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/a-tag.http.html": [ - "08e8f3f6c22174447463d55ec141dcc659187644", + "2c14a70c2746b18a243bcbccc69756314f1d5cb6", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/fetch.http.html": [ - "3a0c75bc15ef5bbd5e9464276d50aee99fd7dcb9", + "342365da7fa52988158c873d39a7402edaf7971d", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/iframe-tag.http.html": [ - "083012ea7636c0cd1fd7bc0bd209fbabb0d4ec6a", + "be4d7494f5d40e7a38c2732f5bd4e453689e7c96", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/img-tag.http.html": [ - "d3dc635d59322d4df132cc2aea33b0ef4bb39d2d", + "94e983555215dc0dc0ad8a4987f0e6808e7bb9a1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/script-tag.http.html": [ - "ec72a0eed2655e2527c6596ef7e4d36a9f383169", + "4b67d45c7b1055999487a1a4d54c8dd91a51782d", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-classic.http.html": [ @@ -498209,27 +500044,27 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/strict-origin/xhr.http.html": [ - "05802e3cfdfde9305b80dddbc7b5063a134be5ad", + "793fe211db1729db4281d7ddd6a17329c4b347ca", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/a-tag.http.html": [ - "dff62c2e7d79e1b241f39a0dc9dcb47fb2c73a56", + "3815612c67b481bf6cebee741a925f1aae259dc6", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/fetch.http.html": [ - "c066d0b0e25524d50fe7528c6c3b1a3b6fae5c74", + "aee1cef03d2cd2bce2d0739e2d23f92262501c4c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/iframe-tag.http.html": [ - "1668c77e5264455bb6c3d530cd2b6f234f189ed1", + "f978f5348553d4bb6194c76dab79636b919389a9", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/img-tag.http.html": [ - "c6a8aa79063097b35ca5e7a3b771cf2f4d3b46bf", + "df369004aca1bb0a8117c3aeb4e44cf80ae930b9", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/script-tag.http.html": [ - "4f19861458b4c1943f7e801532f5a10a967740d3", + "62b04cd422aca23447bfa5968409235e249475a1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -498241,47 +500076,47 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/worker-classic.http.html": [ - "a54ace700bb63c00bcad2016354211e24a1c467d", + "9a10d868f1e934539ac183fa7bdd67d76016b84b", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/worker-module.http.html": [ - "0864611a324762b2f8a4344327dc840b39f9ae87", + "8625bc2be3de23b40ccd5f14b0b5460426e3c96c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/xhr.http.html": [ - "e89ff67aa3425b1639d6f6f42d2c4d3bc4c469f1", + "b5e6906ca41009651f55f660dcfdf369a258fb3e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/a-tag.http.html": [ - "c40ba811b6e554a004557a65f9513f1315c75bf6", + "c00ba92de5c6e36984862ad0b5a182ff98dc3d0e", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/fetch.http.html": [ - "3c21a644218ce625ad988b367cd7921467f7b0b1", + "ed3bc61f01861c675907bbda28afc1e2e0aee24c", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/iframe-tag.http.html": [ - "ca487492db8a5b03ce45daacf62d94c02556ad84", + "a4fb7d8629b47146ed541ab93d3f2cb7761eaee1", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/img-tag.http.html": [ - "f774c78c509ce39de8992a557d79e64f000eb46b", + "948089af7e88852d479077fc6cac2ca6aa60f763", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/script-tag.http.html": [ - "76b530a3c76ac8a4f41d4832f758d8cbf1a0c7ac", + "5d152c996afe5a398e751d2c69867a393df120ef", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-classic.http.html": [ - "a843e75fd25d7e2076285ab1fd03cce0984bca39", + "de1c533bfc83394acb6b52de86b23da31429d462", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-module.http.html": [ - "27e4d4495a3480e60cf4aa5d6a49fb248cc2c1d7", + "c088ac04d7f3359b4146dd8e73c1227871e6f4c3", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/worker-classic.http.html": [ - "708909e4856256d8419719a8428712479e6e56e8", + "8433c4d9df9afdf0992b5e879346edd24c2ee910", "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/worker-module.http.html": [ @@ -498289,31 +500124,31 @@ "testharness" ], "referrer-policy/gen/srcdoc-inherit.meta/unset/xhr.http.html": [ - "b0dc12ef044f5b3bff563b324881a4abb9d0c7a8", + "20d3eb1ff827a4b3916b756529ded620418fbe32", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/a-tag.http.html": [ - "68724c1708df37f933f98959d4967354d4d581ec", + "ad1b95be6ea60b8b44b62bdf86b7680702fcaa83", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/fetch.http.html": [ - "02691e775d93981fef2a152d254a709ff8e5ab4e", + "d7a7c2d379424b9aa702a2a23d613d524ba42310", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "8669b55a899dee24a17204a5233d2f46401d9df8", + "1a3dd3dd4b74497aefc2ff6d15b75e3a946d8c34", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "244e578558a5ffc56950817e2f4eaa10cccd0470", + "7870f4c91321102baac2fa55a02a059dfbeec578", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "97cc4e7a6350f7b0016e4831d88c4d8f99530b9f", + "fc27a57138b9e790c0746ff94866d4dcf7f40b86", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ - "34af03ca6735b6372e0370da5dc1090c7b70d5b3", + "74ad68f0008fb441dbe8add3e62811475fbdd5b2", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-module.http.html": [ @@ -498329,27 +500164,27 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/xhr.http.html": [ - "d1160fb688f3c6a061bc35945961a9f7e9b27dda", + "46436365374e60a6cd07c99679d8818c22c4663c", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/a-tag.http.html": [ - "11f9f237259572e8017dad24438976faf6729671", + "36341adda3934cc6479892abec0386fa22b6e009", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/fetch.http.html": [ - "1c629b9b91ef54967fe708fa9554dd8b520d849d", + "25451f4dde48cdb67d9f672ee1ed2d78a40aebe8", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/iframe-tag.http.html": [ - "90aabf12765b9c096f39058e9bcf7bf89e2651c9", + "c61d37eaf47591bc4139595daf669b70471ddfd2", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/img-tag.http.html": [ - "f3212de9326bd05a2c45db8cb8ab7e9841809854", + "11da083b28a5b6694693f4868d4b000593147c1b", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/script-tag.http.html": [ - "bff2188c65715071dd617b1d2b0122df7917838c", + "2212cb9a0cfe5bcdc478c33738bda8567d2a8c41", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-classic.http.html": [ @@ -498357,7 +500192,7 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-module.http.html": [ - "4b636f7b5fbf6a5a5e0e4195fe8ef022f317b1f9", + "b09570e831a1f4b20b9e85563aebc66f2fdf7e9f", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/worker-classic.http.html": [ @@ -498365,35 +500200,35 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/worker-module.http.html": [ - "758c5450aedb0bf452d46c586da4979f1849ec54", + "140ea2da6fb59be09decde81a0a15820e35c55dc", "testharness" ], "referrer-policy/gen/srcdoc.meta/no-referrer/xhr.http.html": [ - "e46c3a647301d184d2eee675bbe2d4c8aa9bdf50", + "1bbb9c5c75fd5535d032d8eaa27e79d11d8ef5aa", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/a-tag.http.html": [ - "af24ac11e512bade895ce88d70df8e068feb05df", + "ee2e6c784398ece1c98eeab05c10638e5e3f965c", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/fetch.http.html": [ - "aa73eba7aa9fa47712b69b86687b855d4fa9ba51", + "12ddcd65ffac2aa4433a7d0b5692f18008a7640c", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "bff82896d007605f9f28669536439e6490460cf7", + "8acad56a6cf1f7d1d5359a706d57d9479adca095", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/img-tag.http.html": [ - "ce3147bd42cbce922d7c0a54185618f5bc36fb71", + "32c40aea692f847c27ff343b0d352822407139b9", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/script-tag.http.html": [ - "afa02cb7d8efb7e9ff37250a255fd734fdbbd3d2", + "6e56b646b0b7be374a4ba61526748998dee0aff4", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "d181521dae7b7ee0f6b318488f78f52db33970aa", + "cc0fdce675d8c0b9440d80bfbefba81d441bb00b", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-module.http.html": [ @@ -498409,27 +500244,27 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/xhr.http.html": [ - "07694c5abe483f10ed9a87beeaac8a7e6634aed3", + "5776162e7a1ff73d90e8d6db8bee5add60fa99d8", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/a-tag.http.html": [ - "c4db1513f60f33e82fcf4d60b0005b75032064e7", + "6dc1dacc6983c500d8a7078f627933c65a8ed775", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/fetch.http.html": [ - "4d2a7e3a88333c209997d4a5c47da0e20afec573", + "bd7784c901553ea2bd76edc1c026f17a040dc449", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/iframe-tag.http.html": [ - "fc6dd5cd35cefde191e1f19f6bcdf5b2e96b2123", + "d8824fa9f03e8733e5bcc2de63e3d694e4abfbc6", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/img-tag.http.html": [ - "551847872d9980b3bfb2b515052ef798b2fec07d", + "49e4bc5070be64c0c75e1efe29984d64df30113b", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/script-tag.http.html": [ - "72fbdfed834cbd6db82cd3c39d958f8e57fe9ea0", + "a8e94aa0177b608845bdaed38d9f5745e9929058", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/sharedworker-classic.http.html": [ @@ -498437,7 +500272,7 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/sharedworker-module.http.html": [ - "4fef6039978279841f6dd559bd8f94a47727c80e", + "b7926c2497516a36579a207750c178e1ff5906dc", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/worker-classic.http.html": [ @@ -498445,35 +500280,35 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/worker-module.http.html": [ - "888d5daad92e24067576d6f3b10d7a6c370a2668", + "36a8df402cc21d42b7cb0cf28cc76cd17f4e2f16", "testharness" ], "referrer-policy/gen/srcdoc.meta/origin/xhr.http.html": [ - "8d927e8173ae9553773324de6f2bd90c2278f453", + "5aaaca5685a22e3c75c2140868b8d1fb1b2c6ee5", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/a-tag.http.html": [ - "d0b8e664f8659bc4f20956a88870a7da369d6615", + "aadbf7fb9834e47f26b73ef642bd4b28a5729b90", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/fetch.http.html": [ - "f190cf566d598a396efc110dbd23949cd31371d2", + "df0fd291aafa137ed6d4ee285f2f2e6debdb0116", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/iframe-tag.http.html": [ - "6d412035e4793d806df62df2d6f6a5fb3037bed4", + "8f39518c1482b450c0ad294391d27b7e7a29b8b8", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/img-tag.http.html": [ - "9b3f3fe28830fbd1d88c6cfa214ef7688b218228", + "76937a1aa7c33f99725ddcefa889a89deafc0ca1", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/script-tag.http.html": [ - "5c2e5a3f447d3b3380605e0f92d2c2fdcf9989e8", + "2b286d7fe99c65dd116a3cdef15f5124c79c5033", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-classic.http.html": [ - "ec884c12ddca30d22351632e3a14869f2cf5d95c", + "9cf860273c6efcb4f7e185b0a5a931e622364670", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-module.http.html": [ @@ -498485,43 +500320,43 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/worker-module.http.html": [ - "0e71a00c9a6dd0ed1d87970ab1c0ffb0faf73be5", + "1eeb215c53ebcf2a342cb841ebb07abe41bc45a4", "testharness" ], "referrer-policy/gen/srcdoc.meta/same-origin/xhr.http.html": [ - "7219ad2a54f1a2f32575bc2b70cd3311bf355fe4", + "72e667fa3f1003ecfd91e07b9b874f742610f713", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/a-tag.http.html": [ - "82922cd3b54bae7dab3df75cbfd8dcdba21d925c", + "cf0711b74beb32f5152fe82697a1b310958887ee", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "d137e56be000f3536453dc44f9c85e83a8b258fd", + "33e4c1a6f7db24fe7743d4f0da0d3130694c44b1", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "83b016d810a79fbe1c1f3ee10f9b5e8854cc26ab", + "056c2849aeebf9ff9023b34ad9b968f5101001e9", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "e6989b7b6259d2cb0ed1590cd75cba1dbfdfec9d", + "9576422d11c43a1346698f66240b309b5d35fb35", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/script-tag.http.html": [ - "bbf0023296e177260b33c73857c70dd949894a69", + "b680ebe771db2de5391afe52527de20c13f66b8e", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html": [ - "c97a419c5d34b120ef523b8a0049ac21aec92f2e", + "6af874ec0f6228f58058f8cbc83cef2620da0ff6", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-module.http.html": [ - "b1251a00ab86127c7e5aa9b68989362b52f2fb5c", + "172f2c15a86b7324f6cfe76d0ef2d41b9746ce68", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "b020d307b158c39e07a3b53874b89e345f3b3aaa", + "1e32011c918a08d8ac7c208893f9810ec8480bff", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -498529,27 +500364,27 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/xhr.http.html": [ - "271ca91add2e8fffb353bf944da9669f583f522c", + "259bfeb4b06cea6cd4abc1b8fe4d11ef4042cd72", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/a-tag.http.html": [ - "e84c3016a2574e100b32e7346f506da96ae0e96a", + "753da36466c7faf6185c574b14b69c2dd53a968e", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/fetch.http.html": [ - "1f94e6e5731f91a4490161051440caf259c6ed1f", + "f96d1f936c6515bd536d03e11926ff9cd5851b0d", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/iframe-tag.http.html": [ - "023119615d5a468d927600d2deb872b863261e6d", + "11bc06518f00426426721bffedf71fca0469522c", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/img-tag.http.html": [ - "15e26233a450b6083a3848020faa7ea2dec4f330", + "19ba6cebb84936337e0bdd0e9f6c25128d2b1f65", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/script-tag.http.html": [ - "ef33ade33c7ffda62828ad9e7b03e3b9501f40ec", + "5a2729437ca5a8659e6be882e06d7230ba62f54e", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-classic.http.html": [ @@ -498557,39 +500392,39 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-module.http.html": [ - "6142c7cf8b296e3938a95bc269c9dec722d3681c", + "567c52ba79830777fab9aa078a1a147f4af5e41f", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/worker-classic.http.html": [ - "fa4b347b7835f9839b39ad954980f1678738c642", + "16428d85b9cc085e7410df7191f9123f7f72ecaf", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/worker-module.http.html": [ - "e4e8691939ca5f171158d8dfef70992ced4386d6", + "73e2d63e717e5c0bcc0eadb2c5e48108d04b968d", "testharness" ], "referrer-policy/gen/srcdoc.meta/strict-origin/xhr.http.html": [ - "13ff5fc9755b8db454bdad4e056a6e9485f80cab", + "64a7218f9195bf0a20ced3e0a2f272c794f1f3ed", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/a-tag.http.html": [ - "9bc9f831bf0c950213fe1ccb2f0824a8a09f1f80", + "ca36059a24a6a00b3a74eea491c46bf114d9d3c1", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/fetch.http.html": [ - "0cf6ad6f3935885552be12b1e0306a51d55058a7", + "401163abef6259ad1f3cdd579c231dd6a48d3f28", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/iframe-tag.http.html": [ - "e26510ce25ed928cea28797556395954003add20", + "403a67545acf23fd47b5165a13acee9b793c8b47", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/img-tag.http.html": [ - "7397fc93a55187ca774bb3762ac8f8e1c2c33837", + "f06a89ddea6f01c9b124fb92cbbc79554ed8a53b", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/script-tag.http.html": [ - "c0528e3d3ed83807f46d2848fe9dd6c6ed960d98", + "fba1aa8bcc3b8f6f0902745567a2d0dff5eb475f", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -498597,7 +500432,7 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-module.http.html": [ - "89b5698e6fe4d3addd9c835f6b417563b4709e58", + "c535aa1e16596d50910bc960c9f9e6144a662cf9", "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/worker-classic.http.html": [ @@ -498609,7 +500444,7 @@ "testharness" ], "referrer-policy/gen/srcdoc.meta/unsafe-url/xhr.http.html": [ - "219639f3a6d97bf2200761c9606df02a78b09404", + "199ced3e5e37514abad80bc4bbd719926450e71d", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/a-tag.http.html": [ @@ -498621,7 +500456,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "7c953a9fa72cae61e13ae8675adb8e8b35800d88", + "5c2ed3836d14eb8cae305036ed791c8950125c04", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/fetch.http.html.headers": [ @@ -498629,7 +500464,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html": [ - "705566d807d4e9eb42fe5abfd6bd80927436d203", + "26d595fcc6b4311cc36d51b93969d5fa6d7b7f21", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/iframe-tag.http.html.headers": [ @@ -498637,7 +500472,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html": [ - "7b785694b1cef47a511445b802dee7b95f255af3", + "0827ebde9c31f4e101cd611ef7a0376aaac8732f", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/img-tag.http.html.headers": [ @@ -498645,7 +500480,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html": [ - "65a8ccf6facbc6ff774b85962bd27a3e2b49d554", + "c5cad6a0433af93db1321accab35a1c0e1fbd847", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/script-tag.http.html.headers": [ @@ -498685,7 +500520,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "a6a57b7c443059b0b4b1ee292f06f7694d684753", + "b3380b89ba3477605a5fa18ea0d4715fe83eebdc", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/xhr.http.html.headers": [ @@ -498693,7 +500528,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/a-tag.http.html": [ - "9e815f629f5838413f60e9f3636530d9e66231f4", + "29adaac66b741de97c5caa966193b87eb6e0332d", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/a-tag.http.html.headers": [ @@ -498701,7 +500536,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/fetch.http.html": [ - "3320e7dedd64b82425544ac088349216f9917aeb", + "d6ac45a7284e50f8613ae42418188d34946707dc", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/fetch.http.html.headers": [ @@ -498709,7 +500544,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/iframe-tag.http.html": [ - "c5a6c910383fad6d493e7cad295a7ccac8aa7cce", + "d39830b579499cb0d29ed872edef335a863c17e7", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/iframe-tag.http.html.headers": [ @@ -498717,7 +500552,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/img-tag.http.html": [ - "8fa0dbc5b8216bcc324a0f5f4e06faa449ab0ab0", + "566c3252ecd190e9aa72d9bc135a9e9285d3fb9f", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/img-tag.http.html.headers": [ @@ -498725,7 +500560,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/script-tag.http.html": [ - "5bed4c11f28981873de6e3337f0a75fac2d5f98c", + "63e54ba482aeb4cacbfb5affcbf903375160dac0", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/script-tag.http.html.headers": [ @@ -498733,7 +500568,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/sharedworker-classic.http.html": [ - "2b149b9ed87ee0ba0aa23cc46c7d764cea0bccc5", + "25bbdd1a08d9c2e798938985bb773b2d18d22de3", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/sharedworker-classic.http.html.headers": [ @@ -498741,7 +500576,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/sharedworker-module.http.html": [ - "858ae2c8bc8b3840086049f0a8f8fed8b6919ccd", + "5845fa807de92a2314a01db396437ada5c60eea9", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/sharedworker-module.http.html.headers": [ @@ -498749,7 +500584,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/worker-classic.http.html": [ - "869faa6d7589028696d75128448a4ad27741cb71", + "7297e57a6458743be21455020020addee3de90f0", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/worker-classic.http.html.headers": [ @@ -498765,7 +500600,7 @@ "support" ], "referrer-policy/gen/top.http-rp/no-referrer/xhr.http.html": [ - "77a15e2dd09f55805615a99e047231538e436ea6", + "f80b28b5cbc21bb78378deecb255e400c06a1694", "testharness" ], "referrer-policy/gen/top.http-rp/no-referrer/xhr.http.html.headers": [ @@ -498773,7 +500608,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html": [ - "d90774e096e6151744f80a171f1b9b46b27c86b5", + "72e159c72e529aa32cc230f40ca467797a5b05be", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/a-tag.http.html.headers": [ @@ -498781,7 +500616,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/fetch.http.html": [ - "b019659e91882c3510263b7d6f41cd27e016e2c9", + "1dfb592eebbf2e835eec5ef90657b4dea4a9a6ea", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/fetch.http.html.headers": [ @@ -498789,7 +500624,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html": [ - "e3a8907ac19d7390512d4ae94c6c283388cb2689", + "557d6a532357dd12f993cbcec7a476c25079432e", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -498797,7 +500632,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html": [ - "e400d731c2770767304b89c0c9cb71839cd9a622", + "3987df15184e3eb6b9595f9f718c8c40bd2c949b", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/img-tag.http.html.headers": [ @@ -498805,7 +500640,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html": [ - "308240540a03cd17eaad2ac847f510654be9c178", + "788c8d04f2b5d90b55fa9077723e8ba66ccd53d0", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/script-tag.http.html.headers": [ @@ -498813,7 +500648,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html": [ - "befe32ab221a26ca8dd4e82c918dd9eb00a6feb9", + "1bc6f04b8cc73debbc4f14696c74a3169c57fa60", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html.headers": [ @@ -498821,7 +500656,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-module.http.html": [ - "c353e26d81deed93bdd6e13878be5b7ac7b1ea7f", + "a24ee872ad7db6918870560a814f9ef970994910", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-module.http.html.headers": [ @@ -498829,7 +500664,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "fded5a2a20c96c5ed77f6e6b4ee46048a8950435", + "7e6e8f3c5f61bf8f596ca02d8d068a49736cfe19", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -498837,7 +500672,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "2fcb84fa544f63c6b6c111a6fcdc997185a476c1", + "ae453ee0f00ea7897d9ea837d31157c453963796", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/worker-module.http.html.headers": [ @@ -498845,7 +500680,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/xhr.http.html": [ - "54122e015989a7fe86c367e14169c428ed57ec95", + "866577c3366b9f6d809b66c138672ac73690beda", "testharness" ], "referrer-policy/gen/top.http-rp/origin-when-cross-origin/xhr.http.html.headers": [ @@ -498853,7 +500688,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/a-tag.http.html": [ - "37597a81f502b95574ede38526da193c94aef7c7", + "496521351a1f19336145e7db1392930fca7b1e31", "testharness" ], "referrer-policy/gen/top.http-rp/origin/a-tag.http.html.headers": [ @@ -498861,7 +500696,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/fetch.http.html": [ - "ca2af79a20922036aa4d73714eaaad33c049104f", + "b4d01617390870ea78225f6953c81fb868acafc4", "testharness" ], "referrer-policy/gen/top.http-rp/origin/fetch.http.html.headers": [ @@ -498869,7 +500704,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/iframe-tag.http.html": [ - "795622918aadab00b6ee19d4231252ba5fd74e69", + "e2eb629831fa0e0905162e5a1d5ca3849032788f", "testharness" ], "referrer-policy/gen/top.http-rp/origin/iframe-tag.http.html.headers": [ @@ -498877,7 +500712,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/img-tag.http.html": [ - "dfc9e5b47c564fc6b0951c10a7c577711ad6978a", + "f0c99d563a3bf0fd190846fb3aa64f02cba3c202", "testharness" ], "referrer-policy/gen/top.http-rp/origin/img-tag.http.html.headers": [ @@ -498885,7 +500720,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/script-tag.http.html": [ - "c062f33481f6b614bafae4259bb690c99c4ecd26", + "f41884b6847b0fb1ca7934100d2c84ed6db88ccf", "testharness" ], "referrer-policy/gen/top.http-rp/origin/script-tag.http.html.headers": [ @@ -498909,7 +500744,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/worker-classic.http.html": [ - "524de9eb0af3aeb31859061424e8c451bd6f1c13", + "4e9a4c49112d598c1087c9198d016e09114cfdc7", "testharness" ], "referrer-policy/gen/top.http-rp/origin/worker-classic.http.html.headers": [ @@ -498917,7 +500752,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/worker-module.http.html": [ - "69852cc2cb97131f617e9d4ac72f1e6f93ca2e90", + "57ce11f6f94b83d98c02e271986aef602b8a8750", "testharness" ], "referrer-policy/gen/top.http-rp/origin/worker-module.http.html.headers": [ @@ -498925,7 +500760,7 @@ "support" ], "referrer-policy/gen/top.http-rp/origin/xhr.http.html": [ - "cbb1aa517239fab2975f68185a20444218a374e3", + "e1d6b7a798f3f3d47a411fdaa29ff052bbd9431d", "testharness" ], "referrer-policy/gen/top.http-rp/origin/xhr.http.html.headers": [ @@ -498933,7 +500768,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/a-tag.http.html": [ - "579f3c2857c1642fe90fbae9e4ac686204a18167", + "563e63e4a03729d6930a69f040b406a15693e427", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/a-tag.http.html.headers": [ @@ -498941,7 +500776,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/fetch.http.html": [ - "a392f281028baadce5287d701595156187f7da02", + "bc673974f3e491930d5f1af8597b3af42e0b590b", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/fetch.http.html.headers": [ @@ -498949,7 +500784,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/iframe-tag.http.html": [ - "9ed41f3905cb73e614aa2efd4697bad4f2f932ab", + "50e3b2e755b3fd38a48c6d9bbef3a34bd8783c21", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/iframe-tag.http.html.headers": [ @@ -498957,7 +500792,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/img-tag.http.html": [ - "22c025b4035ebe9cbc3deb7b3f9e9ff0fa026179", + "2f106e6e89310214026268e76265d4072a11c2ff", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/img-tag.http.html.headers": [ @@ -498965,7 +500800,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/script-tag.http.html": [ - "592374a71ad2e6e07e1970b9208025cf981e07c2", + "edb8136c04521b615c9045cf346c7ce143502b4c", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/script-tag.http.html.headers": [ @@ -498981,7 +500816,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/sharedworker-module.http.html": [ - "c353e26d81deed93bdd6e13878be5b7ac7b1ea7f", + "a24ee872ad7db6918870560a814f9ef970994910", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/sharedworker-module.http.html.headers": [ @@ -498997,7 +500832,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/worker-module.http.html": [ - "2fcb84fa544f63c6b6c111a6fcdc997185a476c1", + "ae453ee0f00ea7897d9ea837d31157c453963796", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/worker-module.http.html.headers": [ @@ -499005,7 +500840,7 @@ "support" ], "referrer-policy/gen/top.http-rp/same-origin/xhr.http.html": [ - "9c4aebb45f3ea72661e3d260a8b8260a8460613b", + "b28d7e378bda9fd5452296869225feb388409cf8", "testharness" ], "referrer-policy/gen/top.http-rp/same-origin/xhr.http.html.headers": [ @@ -499013,7 +500848,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html": [ - "1eb1327b9cda6af5941b05ad0b96be3e8f4e9995", + "72e159c72e529aa32cc230f40ca467797a5b05be", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/a-tag.http.html.headers": [ @@ -499021,7 +500856,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "f1f2cda305eb5e89105b29d378f33e5ff8332586", + "1dfb592eebbf2e835eec5ef90657b4dea4a9a6ea", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/fetch.http.html.headers": [ @@ -499029,7 +500864,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "6019e16a07541916230bf61dbc82c717ac098732", + "557d6a532357dd12f993cbcec7a476c25079432e", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/iframe-tag.http.html.headers": [ @@ -499037,7 +500872,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html": [ - "9a8767bbbf8d646dfdf691973283f9774ec612b7", + "3987df15184e3eb6b9595f9f718c8c40bd2c949b", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/img-tag.http.html.headers": [ @@ -499045,7 +500880,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html": [ - "62538978b802674f7d9319d2c5ec624027b540e6", + "788c8d04f2b5d90b55fa9077723e8ba66ccd53d0", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/script-tag.http.html.headers": [ @@ -499069,7 +500904,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "fded5a2a20c96c5ed77f6e6b4ee46048a8950435", + "7e6e8f3c5f61bf8f596ca02d8d068a49736cfe19", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/worker-classic.http.html.headers": [ @@ -499085,7 +500920,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html": [ - "e64ab4f686894fb65fe3b7c14a0adc402cd8b6c9", + "866577c3366b9f6d809b66c138672ac73690beda", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/xhr.http.html.headers": [ @@ -499093,7 +500928,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/a-tag.http.html": [ - "6b796b11e140a0dfb582679dfbc124cd7e8c1a5f", + "496521351a1f19336145e7db1392930fca7b1e31", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/a-tag.http.html.headers": [ @@ -499101,7 +500936,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/fetch.http.html": [ - "2287eb080c7d706ee4ab08074b318a40cb8ec78a", + "b4d01617390870ea78225f6953c81fb868acafc4", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/fetch.http.html.headers": [ @@ -499109,7 +500944,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/iframe-tag.http.html": [ - "b03d33776cff39792bb5790063541c0ef9a64ba2", + "e2eb629831fa0e0905162e5a1d5ca3849032788f", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/iframe-tag.http.html.headers": [ @@ -499117,7 +500952,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/img-tag.http.html": [ - "2d645870d721350b0e00b760f2bacdaf182ab3b2", + "f0c99d563a3bf0fd190846fb3aa64f02cba3c202", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/img-tag.http.html.headers": [ @@ -499125,7 +500960,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/script-tag.http.html": [ - "4baf28e65a6ac94a15e891d5e7258404cfad8d68", + "f41884b6847b0fb1ca7934100d2c84ed6db88ccf", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/script-tag.http.html.headers": [ @@ -499149,7 +500984,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/worker-classic.http.html": [ - "524de9eb0af3aeb31859061424e8c451bd6f1c13", + "4e9a4c49112d598c1087c9198d016e09114cfdc7", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/worker-classic.http.html.headers": [ @@ -499157,7 +500992,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/worker-module.http.html": [ - "69852cc2cb97131f617e9d4ac72f1e6f93ca2e90", + "57ce11f6f94b83d98c02e271986aef602b8a8750", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/worker-module.http.html.headers": [ @@ -499165,7 +501000,7 @@ "support" ], "referrer-policy/gen/top.http-rp/strict-origin/xhr.http.html": [ - "92c619c756d5bf82c1121c3ccc3a7429380873f2", + "e1d6b7a798f3f3d47a411fdaa29ff052bbd9431d", "testharness" ], "referrer-policy/gen/top.http-rp/strict-origin/xhr.http.html.headers": [ @@ -499173,7 +501008,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/a-tag.http.html": [ - "4882d9562dd17c53e2e2de2fdc1dcad17d50d470", + "67702eb9257a75acb3d597f1389a952e4798b17b", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/a-tag.http.html.headers": [ @@ -499181,7 +501016,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/fetch.http.html": [ - "11004418408ddd0f9c592d2abde760e6a26846a2", + "5c2ed3836d14eb8cae305036ed791c8950125c04", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/fetch.http.html.headers": [ @@ -499189,7 +501024,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/iframe-tag.http.html": [ - "66a4e14bfcb11b9a8a4a8aaf14d12f9de61fec42", + "26d595fcc6b4311cc36d51b93969d5fa6d7b7f21", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/iframe-tag.http.html.headers": [ @@ -499197,7 +501032,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/img-tag.http.html": [ - "2f3824895fec37f3256c2559a4f4a1ce3ae1cc09", + "0827ebde9c31f4e101cd611ef7a0376aaac8732f", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/img-tag.http.html.headers": [ @@ -499205,7 +501040,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/script-tag.http.html": [ - "b6adfab5181d477a13dd3fd069b58e341889bced", + "c5cad6a0433af93db1321accab35a1c0e1fbd847", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/script-tag.http.html.headers": [ @@ -499221,7 +501056,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-module.http.html": [ - "c353e26d81deed93bdd6e13878be5b7ac7b1ea7f", + "a24ee872ad7db6918870560a814f9ef970994910", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-module.http.html.headers": [ @@ -499229,7 +501064,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/worker-classic.http.html": [ - "fded5a2a20c96c5ed77f6e6b4ee46048a8950435", + "7e6e8f3c5f61bf8f596ca02d8d068a49736cfe19", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/worker-classic.http.html.headers": [ @@ -499245,7 +501080,7 @@ "support" ], "referrer-policy/gen/top.http-rp/unsafe-url/xhr.http.html": [ - "f631a7bdafde195201108218a808736967fd5e3d", + "b3380b89ba3477605a5fa18ea0d4715fe83eebdc", "testharness" ], "referrer-policy/gen/top.http-rp/unsafe-url/xhr.http.html.headers": [ @@ -499253,23 +501088,23 @@ "support" ], "referrer-policy/gen/top.http-rp/unset/a-tag.http.html": [ - "17d3584684bd16f623f8ff4689222aba69b637d7", + "67702eb9257a75acb3d597f1389a952e4798b17b", "testharness" ], "referrer-policy/gen/top.http-rp/unset/fetch.http.html": [ - "67c7c94c937990714b6b2471ddf9475143cd27a5", + "5c2ed3836d14eb8cae305036ed791c8950125c04", "testharness" ], "referrer-policy/gen/top.http-rp/unset/iframe-tag.http.html": [ - "dde5a90c1d56c76c44857cee367fdbd48befc47a", + "26d595fcc6b4311cc36d51b93969d5fa6d7b7f21", "testharness" ], "referrer-policy/gen/top.http-rp/unset/img-tag.http.html": [ - "99c300b8c8183bb667859549bd4428cca60f6383", + "0827ebde9c31f4e101cd611ef7a0376aaac8732f", "testharness" ], "referrer-policy/gen/top.http-rp/unset/script-tag.http.html": [ - "4f24b475f7649c34a9bd01f6b4c8550457ae6a43", + "c5cad6a0433af93db1321accab35a1c0e1fbd847", "testharness" ], "referrer-policy/gen/top.http-rp/unset/sharedworker-classic.http.html": [ @@ -499277,39 +501112,39 @@ "testharness" ], "referrer-policy/gen/top.http-rp/unset/sharedworker-module.http.html": [ - "c353e26d81deed93bdd6e13878be5b7ac7b1ea7f", + "a24ee872ad7db6918870560a814f9ef970994910", "testharness" ], "referrer-policy/gen/top.http-rp/unset/worker-classic.http.html": [ - "fded5a2a20c96c5ed77f6e6b4ee46048a8950435", + "7e6e8f3c5f61bf8f596ca02d8d068a49736cfe19", "testharness" ], "referrer-policy/gen/top.http-rp/unset/worker-module.http.html": [ - "2fcb84fa544f63c6b6c111a6fcdc997185a476c1", + "ae453ee0f00ea7897d9ea837d31157c453963796", "testharness" ], "referrer-policy/gen/top.http-rp/unset/xhr.http.html": [ - "c9384a47189a2b2828a79ae76a32ecf2685e8289", + "b3380b89ba3477605a5fa18ea0d4715fe83eebdc", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/a-tag.http.html": [ - "833f8e17b9f13426b010afb6425bc9e71827bb36", + "053832d237da6e2ad04a9be037789d4b68c928fd", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/fetch.http.html": [ - "fc8f1d9f52d6cba629cdf9349253357ebffdb345", + "fbff2ccc7dce0fac2cb2ba1fecc52f3ee40d3eba", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/iframe-tag.http.html": [ - "8706574d56796afbce4e50b1f23e9eccf10792f1", + "94de097619e65500fd1b1ddc14b214407fc681d4", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/img-tag.http.html": [ - "630042379e772a9bf50b074a0d34d7046cc069b3", + "87ed2485e47fc94441c1426a28518a33b691384d", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/script-tag.http.html": [ - "a864a9eacf4871840e99d3c47473d90da21c7c4f", + "b32b60eee9626eeff3a609e81c913acda77224e7", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html": [ @@ -499317,7 +501152,7 @@ "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-module.http.html": [ - "966ce5342365712e612cb9cbdce0d8e941126a76", + "1fb406cc8764b51569fb80b0a1dc48cfbdcfbe06", "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/worker-classic.http.html": [ @@ -499329,71 +501164,71 @@ "testharness" ], "referrer-policy/gen/top.meta/no-referrer-when-downgrade/xhr.http.html": [ - "1ba3a910fe45934c958d2bee3b8ca8bf347a78de", + "ba439701ab41ccfb5dd41562ea2a0b0250580cc2", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/a-tag.http.html": [ - "e6245bb61470ac4a7d3ee408dbb4a1ee5156822a", + "3760f51c6d3efde7717ac8311d7ae8808e2eeea9", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/fetch.http.html": [ - "05ddd5416347a2e0c40d92ac0094b1d448244374", + "046e853074e22df1f4e719e95944b8352dcc81ea", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/iframe-tag.http.html": [ - "15842a1098b1de34f268485c9141fb5464b3e7b8", + "3954e67fffb0aff5092047dd83a7a6fec15fea7b", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/img-tag.http.html": [ - "3182275440d4c3150b78dd01faadb353d52ab094", + "e3720a2df7e387c7ddb5724fd175783490f72add", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/script-tag.http.html": [ - "eac102ac92e670949ed588764c14f85e64cf937f", + "0bb90ddc53891b8045f1f3979f1eaade157a12ee", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/sharedworker-classic.http.html": [ - "c90577a54edf15834c6b9cc5a7d69cf29e2e4f96", + "b0a58ec0711b37fa7fdf0c6a2c22de894cf1026f", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/sharedworker-module.http.html": [ - "4852ee335aaa6e6cf952a9d1b0e114a9d1c0bf53", + "0de18a801ebe9b6521776959dff3c877efce13d5", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/worker-classic.http.html": [ - "1033835e94f6e893c79325ca04d85d5fda763a8e", + "61ef7547b3260a92e6ada13bcb9ed6ba440d37af", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/worker-module.http.html": [ - "a8e93024a284164a3b8ab431a987be042360a5a7", + "b90c47fb4a9a7588f218af28fcbd021a26956172", "testharness" ], "referrer-policy/gen/top.meta/no-referrer/xhr.http.html": [ - "9eac0101d9af3d5ec1ad53b8f1f8ebd443d3f561", + "365ae53ee9efa66323bd32a60d083627196f198c", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/a-tag.http.html": [ - "7ecd1c9eb8265027c4fe6c231f22e64a104bcddc", + "c90fbac8471f9a653b29d20ad3751c8fbcca1f8b", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/fetch.http.html": [ - "e8cb3a68a6bdb5c2b1caae3918f6f7c3e532c60f", + "026d1127cf79926e0c09b361bc8af290bf1c4f89", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/iframe-tag.http.html": [ - "dac3ff42c3aa3eb487bd87a24e25eea116b86bc7", + "ac41652006d109f35840b5b9aa79f7e6144e998b", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/img-tag.http.html": [ - "2fd0aaa83895c2b16eec45a5e5c3f06e4a93e7ba", + "c359cedf9dd7a79ae87ff71bbcd8ea53ba2053c5", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/script-tag.http.html": [ - "1ecb302d713fdb2def7482eb9d22ec8f6aeed20d", + "e85254c9c29c203f6eafa385952b5004a9958359", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html": [ - "72dafdf510d52ad7df03206f8dbacf078e691e7c", + "164e5a5d6f8963051d027069b69fcd46f46bfee9", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-module.http.html": [ @@ -499401,7 +501236,7 @@ "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/worker-classic.http.html": [ - "0d7647f69ee08baebca4a8ff45e94a4401d2ed51", + "f63136bb9f403944cabf7a6d058b358e94688e4c", "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/worker-module.http.html": [ @@ -499409,27 +501244,27 @@ "testharness" ], "referrer-policy/gen/top.meta/origin-when-cross-origin/xhr.http.html": [ - "99db87bbfb62e55539f116793a2e9c0bae42032e", + "38f8569c46126f2fce757fb0de4faeb0a86155ab", "testharness" ], "referrer-policy/gen/top.meta/origin/a-tag.http.html": [ - "0f3871d3e2af260f944b23ecf341ee8471d627ca", + "9eed6b4cc568078e9330300a30c3f4b9c89c25fc", "testharness" ], "referrer-policy/gen/top.meta/origin/fetch.http.html": [ - "aba770d8bd1497f52c59438f138ac3f1afadeea9", + "9e0eb9df863c12f0794d3f631294c513d7ed3b68", "testharness" ], "referrer-policy/gen/top.meta/origin/iframe-tag.http.html": [ - "cc5a0b4bacd188876b8687fe67290191cdbbc4a1", + "b2de0586e5c38a1bb2f3e8c8d659574e2990ccc2", "testharness" ], "referrer-policy/gen/top.meta/origin/img-tag.http.html": [ - "dc8bdd9a60c5cfe6426d83d598599e15a11e9b01", + "0be153073e4377ab13888371aed60b822955010f", "testharness" ], "referrer-policy/gen/top.meta/origin/script-tag.http.html": [ - "8b4bf54aa128bfc04a403760dbd5898a2befffca", + "1dd703daa8de27de1bdf962975e07593a338a5d8", "testharness" ], "referrer-policy/gen/top.meta/origin/sharedworker-classic.http.html": [ @@ -499445,71 +501280,71 @@ "testharness" ], "referrer-policy/gen/top.meta/origin/worker-module.http.html": [ - "3e1a50e46276c9ccd19e54e1c737ccb6562a638d", + "f5d00f8139f6dc0a04f2b8341f1dea000a8c4a35", "testharness" ], "referrer-policy/gen/top.meta/origin/xhr.http.html": [ - "9b11e25cbb1f69e67d0b8c1571256cfeeaca8ece", + "ce3c63264f2f1463014e932007014483cafe7494", "testharness" ], "referrer-policy/gen/top.meta/same-origin/a-tag.http.html": [ - "685a0fdfa106e5ac34359df572682a7118bc8ca7", + "e527be69a2fd13abf2573a22e63f917f831b36b9", "testharness" ], "referrer-policy/gen/top.meta/same-origin/fetch.http.html": [ - "9a8a0fcd69971819213f6764ba16d67e2a264a37", + "c9edccb7b0b38f9ce24e73e733484e83f272f0f3", "testharness" ], "referrer-policy/gen/top.meta/same-origin/iframe-tag.http.html": [ - "5bde564c1b911fdbc2bf97205319d919c11297c2", + "cffe9aaf42a7330565d425565426cd88a7c8ac3b", "testharness" ], "referrer-policy/gen/top.meta/same-origin/img-tag.http.html": [ - "d6268606e6d99b838728b9d66f5ca8d9da8a0177", + "169b379a3066a58ff81832bb0291b892b4372c5d", "testharness" ], "referrer-policy/gen/top.meta/same-origin/script-tag.http.html": [ - "e2bc9e850be415e5ab01fc7730331beb500e1811", + "f85b8d09ee7d33325441e9f8c343d6ef57abd63a", "testharness" ], "referrer-policy/gen/top.meta/same-origin/sharedworker-classic.http.html": [ - "6f09609ee73b20e5b57ea1baeba8d7791d1b7da3", + "dc152cf203bc15d36e4bcf1807d30fde8979e694", "testharness" ], "referrer-policy/gen/top.meta/same-origin/sharedworker-module.http.html": [ - "6e98fc0a9a7d702aa0a9f53dfd6cb001697fc44e", + "4af9a84e38f9ab2683bcfc0f065f3da0d4c4791d", "testharness" ], "referrer-policy/gen/top.meta/same-origin/worker-classic.http.html": [ - "31351fc0b37cb8efa1aee7143089e16586fc8de9", + "238e044777cc37fa5063ce9d59850fff7150f17d", "testharness" ], "referrer-policy/gen/top.meta/same-origin/worker-module.http.html": [ - "7be1046e26fcd78219eca1c992f6009b1d6c24b3", + "e12a18771c04b8b4a1aed7e3c1b29a7b149297a9", "testharness" ], "referrer-policy/gen/top.meta/same-origin/xhr.http.html": [ - "5a0bcc62a17600be84097a8229d97c1ba9ecb15d", + "f806606e39a4c6f3a9822169e3c76e4229ac296d", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/a-tag.http.html": [ - "31b591a3803a1302153407943803e358290c35f9", + "c90830faece9be944ac795fb6fe787338e36a8f0", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/fetch.http.html": [ - "e005fb26f39257a8528e081a5872fedf8e8cf872", + "76475a2a487830e05d5ccb0666b88d39e5f8365c", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/iframe-tag.http.html": [ - "45f24b7b9735f23a16c23bbaa29a6ac9892785c4", + "261b31cea303331cfd623a57bc82c03a76095b5c", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/img-tag.http.html": [ - "a4596ccfa9daab91ff9f36d3e2498e6395f4d862", + "f84e23faa9feab0d27b33001b9e70b743cea8166", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/script-tag.http.html": [ - "8e2bcdb2f5ba16e94bd720f043fc9f687f1ae9ac", + "692ccd81562927c289b108fce7c40196dc35b4ea", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html": [ @@ -499517,11 +501352,11 @@ "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-module.http.html": [ - "ec8e3c39f74445e153085de1f57a3074f5ca20eb", + "dca75da7bcdb70be64102293d19f5d8ba816d154", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/worker-classic.http.html": [ - "a6b03ca61159b35b012cb55b564439f2af589e79", + "fe4cb622a097deb627f154eddb868dd79b4313c5", "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/worker-module.http.html": [ @@ -499529,27 +501364,27 @@ "testharness" ], "referrer-policy/gen/top.meta/strict-origin-when-cross-origin/xhr.http.html": [ - "1bf1915b2541375f6ad33d8efa4a649ba3b0e716", + "38136d1dfa1886a3f60a82c88f452101ac8b7302", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/a-tag.http.html": [ - "6b6ef4f020124de1670eb7ce5ceb2f43c34d6ef9", + "a0d7b82ff0fe83b918dc7753a18ab2cee91972e5", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/fetch.http.html": [ - "c69a1913072d27c1d5ce4ac5e7dc8cb7cb0f35c1", + "e4a723a02863c2ab625a7494587f892dce5d23ca", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/iframe-tag.http.html": [ - "6991bab2152b26b9f05a2cc1393b33bb1c4e2269", + "a9a3f08183dfa4e2d6839e99703f4fbb36bb84ae", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/img-tag.http.html": [ - "01fb229751aab57dd077f6ce830c67d050f5d842", + "61caa7b5deb5c81137a9848e2be1d1cf3e82b945", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/script-tag.http.html": [ - "9394ebd19d9c168d766054f8bebbfeb1f6dce112", + "f8502d76ec48c99af07e2d0ac1200a8667919863", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/sharedworker-classic.http.html": [ @@ -499557,7 +501392,7 @@ "testharness" ], "referrer-policy/gen/top.meta/strict-origin/sharedworker-module.http.html": [ - "049341ced7f602965e8d581bd3052080cbc88c63", + "6950b050074f397167a26470f72ed8ba43be4129", "testharness" ], "referrer-policy/gen/top.meta/strict-origin/worker-classic.http.html": [ @@ -499569,27 +501404,27 @@ "testharness" ], "referrer-policy/gen/top.meta/strict-origin/xhr.http.html": [ - "73911039d94d204d645fec96841dfed7c8601c41", + "08fe4b8add017f7a3491bbf913cdb2ca7eab3205", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/a-tag.http.html": [ - "84799d5c5481c878264276afc486e11560e80b59", + "f25dfbc5fd9332b08035b0b91d050b5b732233da", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/fetch.http.html": [ - "895257a0c46cb9229ab0107886f7a8fdc5528494", + "46eb2b9d87916b84ef65a759e208858ad85554f1", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/iframe-tag.http.html": [ - "f9d2e150742eba99ea434e838bb0076d3eb8f4fe", + "f84dba4815066cfbd4a8d30db34eef2f54b2070b", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/img-tag.http.html": [ - "08ae5b9c2d7fb694b45dcbb2f872133caca43afd", + "8f8b278cff6c76ce3833c56c6f0662e72017ddc1", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/script-tag.http.html": [ - "cc7d0d28e6cd1973ddee71d3d556d680236787c1", + "b99cb1a63631df004c68eb27d999bedc9d51a861", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/sharedworker-classic.http.html": [ @@ -499601,59 +501436,59 @@ "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/worker-classic.http.html": [ - "ab217c7207f80b2610b622645a9f8195a2eca649", + "0d76a82ae5bd2c6b3f43c2a0bff3e4bad6d6ff0c", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/worker-module.http.html": [ - "2f09cbe2abff012131caa07dfdb7f0f81ea29dca", + "2725051576f2ad8f4f22081e07105bc5182a366a", "testharness" ], "referrer-policy/gen/top.meta/unsafe-url/xhr.http.html": [ - "a9e88dcd4b908953e4313be86f597fdf23a62504", + "b77d9ed3dff8b6cb6180248edbd31937ae0bdfcb", "testharness" ], "referrer-policy/gen/top.meta/unset/a-tag.http.html": [ - "f0653a3528ebe1b806bb1b1a6a179b55233eadc8", + "67702eb9257a75acb3d597f1389a952e4798b17b", "testharness" ], "referrer-policy/gen/top.meta/unset/fetch.http.html": [ - "b60e74b6c8d8af83590bb20891d8d0571ac7e56c", + "5c2ed3836d14eb8cae305036ed791c8950125c04", "testharness" ], "referrer-policy/gen/top.meta/unset/iframe-tag.http.html": [ - "1c5b7385a88ebeefd25ef4bccf9313e39dfd8468", + "26d595fcc6b4311cc36d51b93969d5fa6d7b7f21", "testharness" ], "referrer-policy/gen/top.meta/unset/img-tag.http.html": [ - "1654461c435add7c94cb599bf988eb20c74524d3", + "0827ebde9c31f4e101cd611ef7a0376aaac8732f", "testharness" ], "referrer-policy/gen/top.meta/unset/script-tag.http.html": [ - "cf83690a7160c39d2680fec819fe2c5bbc80f7d6", + "c5cad6a0433af93db1321accab35a1c0e1fbd847", "testharness" ], "referrer-policy/gen/top.meta/unset/sharedworker-classic.http.html": [ - "befe32ab221a26ca8dd4e82c918dd9eb00a6feb9", + "1bc6f04b8cc73debbc4f14696c74a3169c57fa60", "testharness" ], "referrer-policy/gen/top.meta/unset/sharedworker-module.http.html": [ - "c353e26d81deed93bdd6e13878be5b7ac7b1ea7f", + "a24ee872ad7db6918870560a814f9ef970994910", "testharness" ], "referrer-policy/gen/top.meta/unset/worker-classic.http.html": [ - "fded5a2a20c96c5ed77f6e6b4ee46048a8950435", + "7e6e8f3c5f61bf8f596ca02d8d068a49736cfe19", "testharness" ], "referrer-policy/gen/top.meta/unset/worker-module.http.html": [ - "2fcb84fa544f63c6b6c111a6fcdc997185a476c1", + "ae453ee0f00ea7897d9ea837d31157c453963796", "testharness" ], "referrer-policy/gen/top.meta/unset/xhr.http.html": [ - "f08273542e3af1a4d40d4b4eb3dc22ddf495d540", + "b3380b89ba3477605a5fa18ea0d4715fe83eebdc", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "40d2dfb536909b9dc06804e8890a97cb1843b860", + "235b568eddb6c7b087a04213f8f700e872de95e4", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer-when-downgrade/worker-classic.http.html": [ @@ -499665,15 +501500,15 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "31ecb964c1d48aad79472b4710a8b448508ad9c6", + "049f06c7538435dd24d95cb592769acc66709a3a", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer/fetch.http.html": [ - "f0b5085cf01ba0952ab4a8fda99165a4926b639e", + "7fd76e63435ab0b233610c5818e00b225757062b", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer/worker-classic.http.html": [ - "838618abcefdf8b52885098d7bea5fa5b24316eb", + "5bec21542b2a4df664754d72b2a333ab242006b8", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer/worker-module.http.html": [ @@ -499681,27 +501516,27 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/no-referrer/xhr.http.html": [ - "780d2972088de1402c6aa7cac0970f41212d4afd", + "c86c9717eb46d0d156de2f1e2cd89655d3ee9093", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin-when-cross-origin/fetch.http.html": [ - "04f7ee6382a1bb746a24d02082aa255237783913", + "10e759bb29912a16c0faf0300e59b8f8d4ec4648", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "2f28f3d8295e6c380c81a1b57872ee4fc2a41390", + "742aa6f0d9fdabcaa0858e52aa24d3d269e00bb5", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin-when-cross-origin/worker-module.http.html": [ - "561073b6b8bbbf98dbfcc3a3d3c21dc5fbcb8843", + "42da073f5052f9658344c139733954eefc1cf23c", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin-when-cross-origin/xhr.http.html": [ - "ddb97f3b6376117dc09c0a87ccdf0105878b8055", + "963b15df342891a768cd4fc6c92cd70b50a87a11", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin/fetch.http.html": [ - "e3982122d76b5b173ff46d910145d59a6c6e9814", + "79d633daa870708a1bb6d8dc16a13cc140863f9a", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin/worker-classic.http.html": [ @@ -499709,19 +501544,19 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin/worker-module.http.html": [ - "4dcff21a091afcc3f605cef25a01b43ab5b6d329", + "537dc9dc1ebb2cefde2feb249339038c442c9ea6", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/origin/xhr.http.html": [ - "bfb8ac9630825376fa7626df30f1d4f443594f86", + "16f0cebaa56df3c39ea64d0ce8ce922c08dc3cd9", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/same-origin/fetch.http.html": [ - "b1efc9672c8040862ed0096fe462607044cd1efa", + "713d3a3b0fa119d3cf4371ff9073bdd76b194d3d", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/same-origin/worker-classic.http.html": [ - "cfff603d4d98abbc6fd327379e47e23d25061b6b", + "e2a74bd5e9abe093980b6b1e4c22714f7125ff2e", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/same-origin/worker-module.http.html": [ @@ -499729,27 +501564,27 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/same-origin/xhr.http.html": [ - "6a2a9ed930c41b2b7718b758319706791d83fab3", + "395bb5f62e081ac81189e980c9b40cf5d929cf1b", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "d2e8af227ee0e47f5a0ceac099ddf806c72f1b77", + "c5ff91bc677be9d1bd3b5bdc2d4c5fdb1ceee201", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ - "fb4a59d83e8b1aec816301e60d6a085eec9ff788", + "6546fe5ecf0cc6438dad98c2af2a6451187cdbcd", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin-when-cross-origin/worker-module.http.html": [ - "ad719d3f3a45f473447ab6a5433789d9d134cde4", + "81a35cb9da8974399e7760ad4bf6617c1aeb5505", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin-when-cross-origin/xhr.http.html": [ - "0c3b514d58d3534f3e77c444f6271079275af693", + "e86f975b27d981b00ded893aa2d03ef83623c677", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin/fetch.http.html": [ - "ab28d7dfc1be4f89f970feb8ede4061d668e7d30", + "9f866a2ec0ee57b94525cad28a40d8f4070eeee4", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin/worker-classic.http.html": [ @@ -499761,27 +501596,27 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/strict-origin/xhr.http.html": [ - "12a5daa5b55e424601988d18f3b809f73119a75c", + "f737d900f6c83f54871cc26388e9c32c02c74d40", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unsafe-url/fetch.http.html": [ - "d6abf201b65720a5898781fc77d447390b1d6261", + "39790d452f14a34bd27c921ebb65a879afc97db0", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unsafe-url/worker-classic.http.html": [ - "d271abcace74898f975e6746f485dcdfa2dcae49", + "0f6f2140f373b61deaab876bfa0604e56f796bf3", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unsafe-url/worker-module.http.html": [ - "dff929b908b5fa59f5fb1ab20a556dc1e44942e6", + "7ef0c81886e483b23d1083633ea0fa00b22bbe93", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unsafe-url/xhr.http.html": [ - "3b50f13b0b09ef66f19268919773e4b8534c4361", + "31ffe149743767d924d2377a8a0799368fc95206", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unset/fetch.http.html": [ - "d9e05ec3e3c36cd89d7ef6cb79e33010ba003792", + "3d3478ff9974c17234e1957fc783ec0b4c6ff8b9", "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unset/worker-classic.http.html": [ @@ -499793,11 +501628,11 @@ "testharness" ], "referrer-policy/gen/worker-classic.http-rp/unset/xhr.http.html": [ - "c8c71ad114158c52fce43cd5649d98638f3aa744", + "ff58f802a4f0037b9dda103067be4128952e285f", "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer-when-downgrade/fetch.http.html": [ - "e3de0eb5f94fd8aa368026028ccf6d3040e60b1f", + "fe1a3d25a09db5e76fefcaf115ab94c7be47a19f", "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer-when-downgrade/worker-classic.http.html": [ @@ -499809,15 +501644,15 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer-when-downgrade/xhr.http.html": [ - "81a9bb8d583c93451e9d0d51e61fb94a15692300", + "a2a28d57603f853839a76364da033719fb330ef1", "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer/fetch.http.html": [ - "bba8c1788e66e1034566cc6335a448239b6d1421", + "bc8b3cdf0ca40cf7461acc15ea85c2bb341bea01", "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer/worker-classic.http.html": [ - "032d948c89a318b300c41be803088196f573643b", + "19eadf3a6739d33c2ed331a457ca82f5863a786e", "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer/worker-module.http.html": [ @@ -499825,15 +501660,15 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/no-referrer/xhr.http.html": [ - "b07e2f9a90aca71a7fb7b00d19754f93d5ffbe3d", + "0d4d12fa3bdaf8147b4c07cf3f406b769f3f6504", "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin-when-cross-origin/fetch.http.html": [ - "a35fdd9887ae9cc67835ef9909b68c660f6c67c1", + "bfd1aafab07624181994d2806153107b44167c9e", "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin-when-cross-origin/worker-classic.http.html": [ - "d5b545dfe37fa7097f161c3d24c9f5bb61e73ec8", + "6ca8eead21ecade54ced4e8077e243c92fb62068", "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin-when-cross-origin/worker-module.http.html": [ @@ -499841,11 +501676,11 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin-when-cross-origin/xhr.http.html": [ - "8dfca7cabd97ffa4d536862da61e5f75d530f932", + "8547c16770deb06079e688291de5a550bc229065", "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin/fetch.http.html": [ - "faeee3e8339386a94f63cb9eac8dea0431aa562d", + "b8d7d630bbd9136147ad7ee8e0be0bfc56fb4617", "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin/worker-classic.http.html": [ @@ -499857,11 +501692,11 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/origin/xhr.http.html": [ - "cf8d43536cbb3c1b65a12f2cea82e74984ff8339", + "c62b9a29245d69c0bfc5697cd9ef0a47ebe119bd", "testharness" ], "referrer-policy/gen/worker-module.http-rp/same-origin/fetch.http.html": [ - "28cb174a080a2425d95b979519108443cedacdb1", + "cc62412da81207d7b22f6c63e27459aae44da16f", "testharness" ], "referrer-policy/gen/worker-module.http-rp/same-origin/worker-classic.http.html": [ @@ -499869,15 +501704,15 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/same-origin/worker-module.http.html": [ - "3375dce27f3726f603c494c88f16a2a729da696d", + "13562c5ddbc247e42a03a929a1906a60ede638e7", "testharness" ], "referrer-policy/gen/worker-module.http-rp/same-origin/xhr.http.html": [ - "c4fdc4fe4030eb5a49cb1167fca2f1c20b04a44a", + "ed65b9b4d227da72fa3d4646f0d69e5d56d0f7ef", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin-when-cross-origin/fetch.http.html": [ - "92ec668fcf9e4985ead2808c479c62edb835731c", + "506b3ab3c2f83a80917fdb1ceff49d4424323599", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin-when-cross-origin/worker-classic.http.html": [ @@ -499885,35 +501720,35 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin-when-cross-origin/worker-module.http.html": [ - "1ca4d61d376c7cf0b7b2dc14c7249f28187af122", + "06f706202621916e8c3db387f860a48091384d01", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin-when-cross-origin/xhr.http.html": [ - "8ee62364f2040cb48fcd33c4ae2013910b865b13", + "579e294ff061e92c6833f13c2218b8b501419c00", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin/fetch.http.html": [ - "3ef2a1dd2f6edd586e78030cbb97d34655c5786d", + "1e0c95fcdbbffd888f0129d2359452970f4e2557", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin/worker-classic.http.html": [ - "52e252fb8a9000e6c72de6f95bb650f4b9a3a4de", + "5e81e09fbb019a36ff561ce0c749c22daf428e5b", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin/worker-module.http.html": [ - "54ab3755fd4eec55e20af1e36009bd320d693f3d", + "c0d370e8e9da48be69b8250fe2da5f7e7687e4f6", "testharness" ], "referrer-policy/gen/worker-module.http-rp/strict-origin/xhr.http.html": [ - "4f0e18b5331f91e2a3e7a7ddd8000ee37eacac3f", + "2751a743d156900b872186a7904e3a8e8e92ee02", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unsafe-url/fetch.http.html": [ - "00eacc02afd34b8325b16dfdc7ca7e5f9d0465aa", + "b07a1144da8691fc50514d313752c77ab870f0e2", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unsafe-url/worker-classic.http.html": [ - "1dd2b944a5fc81cbe7fe7af614ebdc28c9cafae4", + "f5f0fd461b6d3973c6959dbf0e246baf716e4e52", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unsafe-url/worker-module.http.html": [ @@ -499921,15 +501756,15 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/unsafe-url/xhr.http.html": [ - "b2a3eea3c3ccab7994a9deb92f5ce3541e526492", + "2c1f53cd9adfd82a3ad17499aaabbc05ae31bd0e", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unset/fetch.http.html": [ - "7909b673ab899b061df6f1e4d267dde2f009067d", + "790fcc5963b1e7e8d1572174c8cf22735f42d08a", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unset/worker-classic.http.html": [ - "5ffb93d77d30828477e1973c3326743d48418321", + "5c1625fb70ec1bf91d4cf630210b832fc102785a", "testharness" ], "referrer-policy/gen/worker-module.http-rp/unset/worker-module.http.html": [ @@ -499937,7 +501772,7 @@ "testharness" ], "referrer-policy/gen/worker-module.http-rp/unset/xhr.http.html": [ - "71ac7329b7b7096abcefcd9b7a0efd6bdee5b319", + "da200bb87ae0e4a5dfc773938215f891316687f0", "testharness" ], "referrer-policy/generic/iframe-src-change.html": [ @@ -500077,7 +501912,7 @@ "testharness" ], "referrer-policy/spec.src.json": [ - "1d6ed7cca6269b4179f1538a072c9c655ad4e4c5", + "8d2a6d2e0b169e7c6a9a610ab6177f09cd623b16", "support" ], "remote-playback/META.yml": [ @@ -500109,7 +501944,7 @@ "testharness" ], "remote-playback/idlharness.window.js": [ - "ba40f199633165111ab2bfd37624eb94871052d6", + "458bfd0c608b0f36c1b23be6b5a9bc13648e1e6b", "testharness" ], "remote-playback/watch-availability-initial-callback.html": [ @@ -500253,7 +502088,7 @@ "support" ], "resize-observer/devicepixel.html": [ - "6ecb8246d14dcfb4de9895f9920b4e30832214b6", + "7bada9363e2e832738d431570e9c1576da3b755a", "reftest" ], "resize-observer/eventloop.html": [ @@ -500273,7 +502108,7 @@ "testharness" ], "resize-observer/observe.html": [ - "58f200463df1ff9def0eb8337dd067068f470a1e", + "35c517a79698d1f24d8e9e888a3188001b4bb8b2", "testharness" ], "resize-observer/resources/iframe.html": [ @@ -500289,7 +502124,7 @@ "support" ], "resize-observer/svg.html": [ - "fe8d4282a905ce9451d58e7dfeee90d7bec4066d", + "b05a10c82e8054d2ade6b0b0e86317660086d283", "testharness" ], "resource-timing/META.yml": [ @@ -501065,7 +502900,7 @@ "support" ], "resources/idlharness.js": [ - "4f8ec0d1a663355e38a6425c79383c02342db4ea", + "d01da49c2d58959178bac9594d974eb729c0efa7", "support" ], "resources/idlharness.js.headers": [ @@ -501097,7 +502932,7 @@ "support" ], "resources/testharness.js": [ - "8d3b3e9dd6bf2a9d50b4e464c82d569370e85496", + "63883e15504d78c60344338d8b4e97da2d0109a3", "support" ], "resources/testharness.js.headers": [ @@ -501325,7 +503160,11 @@ "support" ], "scroll-animations/scroll-animation.html": [ - "62e5bb854aa2cc7d564c258f58e05342ffb8b446", + "711314789b12a892b0ef342c35abec89c0da3b53", + "testharness" + ], + "scroll-animations/scroll-timeline-invalidation.html": [ + "143943c4236725ab08a2d460f090f7b82c2e30db", "testharness" ], "scroll-animations/scroll-timeline-phases.tentative.html": [ @@ -501753,7 +503592,7 @@ "testharness" ], "server-timing/idlharness.https.any.js": [ - "b55c741df39e4766afd438daa9037b216b7780ad", + "44bffcf59e6bf6e03389352e5da76ee0b48e34b8", "testharness" ], "server-timing/navigation_timing_idl.https.html": [ @@ -505352,6 +507191,10 @@ "bcb4ee62e0c61c488791f5ac045908eacad79596", "testharness" ], + "shadow-dom/declarative/declarative-shadow-dom.tentative.html": [ + "792d4bf4b3ecd0b8a611cccdae5bc2e726486f25", + "testharness" + ], "shadow-dom/directionality-001-ref.html": [ "7a2eaeb8681e860a52e5bf1268665fb896e4a950", "support" @@ -506033,7 +507876,7 @@ "testharness" ], "signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html": [ - "40d1ae01fc450d3c51bc482dff3acf77aa6a3dfc", + "33a42f9cbddd0eb7252f01e52173fd75e80d0033", "testharness" ], "signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html": [ @@ -506577,11 +508420,11 @@ "testharness" ], "speech-api/idlharness.window-expected.txt": [ - "8499637d39dbeda63b33aa9c83429ca87fe6246c", + "91b9ac9f2d39a8642d4d8dea2273a952dc4dc1fb", "support" ], "speech-api/idlharness.window.js": [ - "6cfcbb2e95fd7e3e7d32aab6faae7cb231c6fec6", + "77eb6a1be9083214d78d8d4c659952b18be4db8e", "testharness" ], "speech-api/webspeech.js": [ @@ -508304,6 +510147,10 @@ "08c47454b6cb46887f6ab91c0e031d729538c572", "crashtest" ], + "svg/extensibility/foreignObject/foreign-object-with-position-under-clip-path.html": [ + "a6d34bfff12bb1c8c238557d63850aa8883fe7b2", + "reftest" + ], "svg/extensibility/foreignObject/masked-ref.html": [ "1a3b13c94516521266cf77e55abc11c3e81df8f8", "support" @@ -508565,7 +510412,7 @@ "testharness" ], "svg/geometry/svg-image-intrinsic-size-with-cssstyle-auto.html": [ - "6b49f62296433892913e74d0cc9c6bed7567fe31", + "0969e1e8e8f6d1df863acec29ead70c74bdf725d", "testharness" ], "svg/historical.html": [ @@ -508704,6 +510551,26 @@ "e6b37f29e5135b352d04d9997e68d13c2b1885fe", "reftest" ], + "svg/linking/reftests/reference/green-100x100.svg": [ + "120941444a4898197d6b6001f9908a6cd48b62ba", + "support" + ], + "svg/linking/reftests/url-processing-invalid-base.svg": [ + "fc5d7c6b0620da9b775f461359444979e2868245", + "reftest" + ], + "svg/linking/reftests/url-processing-whitespace-001.svg": [ + "6baa0fdd8448af7f73f6c3d431d1f4a2afb4798a", + "reftest" + ], + "svg/linking/reftests/url-processing-whitespace-002.svg": [ + "ee4969a532dcd1a249af74dd0205655cbaafebdc", + "reftest" + ], + "svg/linking/reftests/url-processing-whitespace-003.svg": [ + "1dabd9f8f97d0a97aed0faeed3b04ef07c0a515c", + "reftest" + ], "svg/linking/reftests/use-descendant-combinator-001.html": [ "5619e0ba6902656eacab0e69da808eb352247aa2", "reftest" @@ -510949,7 +512816,7 @@ "support" ], "tools/requirements_flake8.txt": [ - "0a45224016417cddbf59209196380cce0a089edf", + "1c4fb7262e5bcf3c3ca59bd013dcd14887abf327", "support" ], "tools/requirements_mypy.txt": [ @@ -515093,7 +516960,7 @@ "support" ], "tools/tox.ini": [ - "6dd70cd7b2a36e0e766d4a559a32897739b646db", + "46ab21ab29d5b21103677fe5e44cd4b9e9d4068b", "support" ], "tools/webdriver/README.md": [ @@ -515325,11 +517192,11 @@ "support" ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ - "e195fc0cff4aed40fa298e4f01e19a0caa5ce1ac", + "3fbfbfaac81371c774cbb1ac8e96de27fa3c854b", "support" ], "tools/wptrunner/wptrunner/browsers/firefox_android.py": [ - "50f8504f8e022afbbf91c44399441283cdf8ec3f", + "a6cb8f0dd3e0f669d47b4a9a4a728d99fc648988", "support" ], "tools/wptrunner/wptrunner/browsers/ie.py": [ @@ -515597,7 +517464,7 @@ "support" ], "tools/wptrunner/wptrunner/wptcommandline.py": [ - "8125700b4bf568fef7065d50b834aa763e22b0ad", + "93bd886aac1e2574ab239ec615a2d866a0510ae4", "support" ], "tools/wptrunner/wptrunner/wptlogging.py": [ @@ -515677,7 +517544,7 @@ "support" ], "tools/wptserve/setup.py": [ - "c9c364b8bacc72a6ff77f9d0c811b2d7d1810d13", + "759cb48d1f65f52f6500ed2b871c7ef430518ab6", "support" ], "tools/wptserve/wptserve/__init__.py": [ @@ -515769,11 +517636,11 @@ "testharness" ], "touch-events/idlharness.window-expected.txt": [ - "f4a01221fa006e4093c3248d813e6d10879830ff", + "26e968a07a183ad63acdfbba77c3ee8891133002", "support" ], "touch-events/idlharness.window.js": [ - "f88c9aab27f822023f5784d87dcecd907bd324be", + "88573286a2739465fa11ecb04647b8653f43305b", "testharness" ], "touch-events/multi-touch-interactions.js": [ @@ -516245,7 +518112,7 @@ "support" ], "uievents/idlharness.window.js": [ - "928c8c90f0ff4ed99fdec8183cb129bbbea82f3e", + "f6a74b8a3a7ac579d1246938eb7419774d0ad821", "testharness" ], "uievents/interface/README.md": [ @@ -516629,27 +518496,27 @@ "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/fetch.https.html": [ - "3956569f06d78cea52c66e03646a916233aa9617", + "b601fbbf3dbfb46800f1f57f8bba204011967611", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag.https.html": [ - "01e109324edea381da405d59f4857113b532688f", + "fbc73e5872a7a5b9d31502b5ba68db1ce63604bb", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/img-tag.https.html": [ - "bb7411da5c535918bcfe3c976ae88e627cb37a6d", + "b7b4ba03ee3f4b463c52eb1c7bdd8b343cb4d5a2", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/sharedworker-classic.https.html": [ - "552e5f9b843d9a8161bacfdfbd4b1b6045302411", + "3d9fc6eeb928ed5f6eca4eb0e0c2e3c1a41c2a68", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/sharedworker-import-data.https.html": [ - "7a4503da061ae996a0e74ca79e402758728cb484", + "0f345eb901e37ad299a2cfc2497599740e790901", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/sharedworker-module.https.html": [ - "7e41d9105bbb383cab242f861eae7acb90d3f922", + "c58a8b741c89ab1d98c3993b49b4b122650115df", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/websocket.https.html": [ @@ -516657,147 +518524,147 @@ "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worker-classic.https.html": [ - "75f5773e1d60c08de5ba38c0e32b4cbd45762e92", + "abc67d750240e48d39ada45e5c632383434baf2d", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worker-import-data.https.html": [ - "249fdd86bc8ba3d7400a9e42ed5a26f941c1ed1e", + "f61176cda2be4084fa54b7d773edf5799cf256f7", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worker-module.https.html": [ - "bea5b9d881decc71d2f949ff523d1621d9249a68", + "e82a6917d975ed7b91ceb5e332fddd90311a6a01", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-animation-import-data.https.html": [ - "42aada4af1467f08a1364f9226a1be3503fa340a", + "7b54ed289efb36f4b762a149368dcdfdb4097417", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-animation.https.html": [ - "273ae64994ee837256e1d577b4c32dd8960cfbe5", + "1d7e1fe5982fdd5c4b25306955de76a4b532c578", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-audio-import-data.https.html": [ - "ed144330daa112af3689e438871473b0b378b801", + "81a4e8a2f832e7745b40348da507d73c11219a1a", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-audio.https.html": [ - "73a374c2f66788c1133a645f4c0378fb82afb000", + "0aed1e59ac6efd5ccc720dadf40de4fa0203812b", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-layout-import-data.https.html": [ - "d12705e3136b8c2d22d929ccc8ab7bed69886990", + "c143066c787c166415b97bb08ee52afa46aadead", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-layout.https.html": [ - "353c760e44fcbbe5c570bf0feda4f7daf5efb87d", + "3095104f855cc75ed10eb4bd09b5bbc66412fab5", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-paint-import-data.https.html": [ - "b6cd672f9f072783f81ca5c228e66c79a6ee4795", + "c7d7f35d1306e209593112ec47ad1bc4e3959e39", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-paint.https.html": [ - "d49143ee6b7f292f3376035645e023fa68c4ba6d", + "43892ec28450221d9883b297b47eff09ebb6fdf7", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/xhr.https.html": [ - "40bfeba1921617ed5f15dddfc588967cdf2b44d2", + "dd17493029e8c0dce49f4e488b5a3e8d3db3786f", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/fetch.https.html": [ - "d02f4377fec111dec48502dfab1b8618dbe44f8f", + "24d3ed9946b95212767d3a4d304f12068c78fcf8", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/iframe-tag.https.html": [ - "4705c84bf3845a7eece78562d3412b6d413ac894", + "57fec0607ed54cee338fee7e31ce2c8b06655658", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/img-tag.https.html": [ - "cf105651f4941975c004b8d6e324166af26aa190", + "0639eb49fc56f900bcf6b35625e554c9be9994e2", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-classic.https-expected.txt": [ - "69ebe4e340ef7f849e254f994320a7b6690b3dd5", + "4e2784327c2db2380eef715a23b394639f133e31", "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-classic.https.html": [ - "28c0a307ca8f19de7eba93e2fea66a556598bff4", + "5e59b508df0dd4b171143832a57b26740398fd4b", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data.https.html": [ - "f082fc98d25cfa273388a00a0df37bd877b356f4", + "6132933adfb0534b7f8db48ee1ad6cb15f36bf90", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-module.https-expected.txt": [ - "175d5d71115938be3675333a7a74c3368fc92441", + "589f37881de7c60c3b1322921eb006ea5fb30563", "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-module.https.html": [ - "5286a0687dcf1e80f6f5144e5ff352b96a7b1fdc", + "2d48b7037bdc48eb347821c7af336b24c98a54ca", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/websocket.https.html": [ - "acacd6bacab76f3e0970be6976e8721da1558bbe", + "a2e6ad6cafc4fc8253b9520965c49bb5cf523be9", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-classic.https-expected.txt": [ - "677acdc49d67e12a684cce00aa3b94d6d8ae48d9", + "f7f1e0f1f70c7349e3790bbfb5672507945aa910", "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-classic.https.html": [ - "83011e09d19dbaa28edd7a01c4657a7b8ad30ef0", + "b707f78738d52baafdeca247b6fd610cf2f34fe1", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-import-data.https.html": [ - "1b817a46f78afe2ae650d84d5b8cc8ea367faaa5", + "d66684ecee5c3d7d983194aae3d5729981b68179", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-module.https-expected.txt": [ - "48deefab0115a8ae8a5768ba6e62c7ef188ee75c", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-module.https.html": [ - "c5a23c3ee710d5e6ef88b96b7750b8f5dce76f29", + "2207fcded26f98d83da30addf3eaac291f022617", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-animation-import-data.https.html": [ - "8b763f3bad921933f5b827733fe64daffeb91a1d", + "78b39da45b4cdf957d3da97bb7c0946b31204a66", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-animation.https.html": [ - "57c8bbcfe7ccb1861aedef71036aa1d4ab63c103", + "b560ec687e7f3b0f80bd5b474e14aa13c624d8b4", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-audio-import-data.https.html": [ - "4878d8b69f4057db6ea6675ba3b427f23bc99bdd", + "4098618e8278d722c29f43fc9f7f56770a8a4fb9", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-audio.https.html": [ - "b856c3c824a39bd060084df32d1fbdbba84a5eb4", + "9dd58b98ab70de7129a0b7f28aaa73b0ea6f9d6d", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-layout-import-data.https.html": [ - "1a88250516cc99d989b16dc9377aa188ef84130d", + "5690227c4380287cb6641fcfe85981bd4f0102db", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-layout.https.html": [ - "892e925e02aa8b5463b3eb05f41c089bd0f5b516", + "07aecb674317af92edf0fe461106d26fc60c115b", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-paint-import-data.https.html": [ - "ea72cad04a16e1951c7936cfd707a6899c5898d7", + "0bfe4cbfa4c063ad5c5d7db12f0478f6cee81a5b", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-paint.https.html": [ - "22fc143db2dea87e82d05090f14b8b5274ca1d62", + "887fe458cda421172290813862a2b0a31aff3163", "testharness" ], "upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/xhr.https.html": [ - "7d0ff6e1a372e03e92ad156485ae13f87ca81a2a", + "de3a6213649215d499c1a6e5867c71391d525bae", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/fetch.https.html": [ - "b65bb8451f0f184a431620ba90fc4c5a117b0eb9", + "4184e7c158c12b46d2d794e286319dae847a0347", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/fetch.https.html.headers": [ @@ -516805,7 +518672,7 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/websocket.https.html": [ - "f1933b620e9b60b4dbf54589eef8c164ccff4d4d", + "c41e4cde41f510b811c3b8aec859aeb8d864cae8", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/websocket.https.html.headers": [ @@ -516813,7 +518680,7 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/xhr.https.html": [ - "026d771dd7f2eed34eacb4e743591f9ecfb6903f", + "62a5883cadb84de71f1c2b0d3b59d4b7cb4cf962", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/xhr.https.html.headers": [ @@ -516821,7 +518688,7 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/unset/fetch.https.html": [ - "95c36dab7034119665014c2d1404d254857dc17a", + "2a7dbda8b59889d2dfa35490d10aca24e001f3d8", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/unset/websocket.https.html": [ @@ -516829,11 +518696,11 @@ "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/unset/xhr.https.html": [ - "89ab0fe4ef9f8fa5151daa253f943652bccbf5a1", + "fa60413af5e6aed779cc71bf07dc9f7381e87dcd", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/fetch.https.html": [ - "eea46ce9648d52c3cbf64c2e9d44a041a34bfd19", + "fb39f9bc5c826e34d9c143bc0b98baaf57809d47", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/websocket.https.html": [ @@ -516841,23 +518708,23 @@ "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/xhr.https.html": [ - "c0447cf3c021d6a7b5b439ed1d1b800d568e2385", + "d5f9b891b5c23eb9f0a12701f3be0e83c572a072", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/fetch.https.html": [ - "eef8276f29ec861d8b4671fb272df243242a53d9", + "1d8b60fea6cccaa767b1e86836af04007e6a6510", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/websocket.https.html": [ - "bd69ccf95c05b69480b25606eab1e5b857881028", + "bb031af962aef49f24a1d9958bbd2c52abb137ef", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/xhr.https.html": [ - "6fc52891e287e2c0bd30ee0b92d548ce53964b34", + "00c297642fea2ece71b8879d17ad2724f493c0c2", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/fetch.https.html": [ - "ea2320e6ce728ef5dfb3a12cf82de59decc9ff12", + "a69ca6ebb13f386adac79299865d05c1c8753349", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/fetch.https.html.headers": [ @@ -516865,7 +518732,7 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/websocket.https.html": [ - "124a03c37f4cc249708cf4f58bd7efc77c9257af", + "df2014e4491b3442e36a92d39e49bb99df09302a", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/websocket.https.html.headers": [ @@ -516873,7 +518740,7 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/xhr.https.html": [ - "b04b07adb5740fff3b9c22ae22c444189d753a92", + "8790654a036b12c13cf9a2c48c102f84b4cc6039", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/xhr.https.html.headers": [ @@ -516881,19 +518748,19 @@ "support" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/unset/fetch.https.html": [ - "d6b8cdf41712c1c9edc4b5ba5c5e2b5eb62bdda7", + "9f8b280cf47e5ea9864dbc16a0bb5a754b9aff88", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/unset/websocket.https.html": [ - "a4798e53a062c221e0d21b988a4a304377c52d80", + "9861314634870ded51ab4539e9d61a1fb856fa3b", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/unset/xhr.https.html": [ - "681c1cee442f6fa825727cbfd03fd0c1be837730", + "d71d1f76ed77a83b0216cc85fcf8f18342f77085", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/fetch.https.html": [ - "b355fd0c14c2765bec501b73fd2258d2773460bd", + "63cca40cd25ea280d87805100a94208715f7c6f9", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/websocket.https.html": [ @@ -516901,11 +518768,11 @@ "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/xhr.https.html": [ - "befbb210fc88f7cb9cd041e4b8fe8ab82114f7aa", + "279e92e9f17d7a32217622a5dbb0f51b3ac167fb", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/fetch.https.html": [ - "4dcb71be9dc18427f79658b25dfd5c630e191fce", + "593c92fa5062c326a8ab669874bd377098f84aa5", "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/websocket.https.html": [ @@ -516913,27 +518780,27 @@ "testharness" ], "upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/xhr.https.html": [ - "697ca251490963d4a1c5ff5990e8e6af99ec73cd", + "d307b33c4911f7252133e6aca425e7e94b9b1aa3", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/fetch.https.html": [ - "24c133ddd6d00c5dc89adddc1f73d9bc35284063", + "f8585f64d36f71b94a127707a5867598dd5b7d4f", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag.https.html": [ - "d57b8fe04aff4d2681070c6123bdb0b215c19f6f", + "8b63807eaae7712a33da1ba292fd14b6195604ab", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/img-tag.https.html": [ - "a44e08e94cf68a041ebbb129821b79372418218d", + "e7eb4050e2e66578f2f767ba312f2ccf82236a89", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/sharedworker-classic.https.html": [ - "2782a740cd4bd10c0ca222c046583a4d24663852", + "89db3b1be91cb324f60dbc77c1b2a17fb653fd4a", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/sharedworker-import-data.https.html": [ - "f375867070ef0e79cb2eb153f2993f7904b883c9", + "6e61de3bc4a99118667e3d2c614ab7abe7b48a21", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/sharedworker-module.https.html": [ @@ -516941,151 +518808,151 @@ "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/websocket.https.html": [ - "7855319f611ede2c978ca74a8e864f022325f78c", + "dfc63fe9b0a7ecac98e46fddbb7207181c985fe3", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worker-classic.https.html": [ - "b7a91ecf9779ad14fe8935e5496be58b06a96fc8", + "819ef182e91368891d117a2ee50399a86e0ed16f", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worker-import-data.https.html": [ - "cc301145a9f295a2356a14aae40b81823f8ef676", + "c060b0196daa6fd0f30f8ff5de3e399a5dd98315", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worker-module.https.html": [ - "ccb9304d8f81246e0bae4525085d1fd30755add5", + "0282683b9d061ca9ec86817bdbd4a466704b7916", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-animation-import-data.https.html": [ - "c1035e2b419f3e0b31d6e7640565deecc2190f59", + "0692fb893c609ea0d0e262b20d2fd053c6334668", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-animation.https.html": [ - "d4b8cff30770ec1f8e823dbca15ed6d0ac6392f2", + "7ec880806dedaaf50af66ad673bb0d7cb8ae9b92", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-audio-import-data.https.html": [ - "087bb0545622ce88f8ff3c2d398980660074506e", + "40160b4fef12c8d0280fc9b4b2f4e0107a4e41bc", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-audio.https.html": [ - "86907e4a8ea72b6c2896d633060ec8fa9eeca569", + "8dbc7012eda3ee4c35a583220c40af411b35afea", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-layout-import-data.https.html": [ - "285cefce45d69e1e97c2a99a5c0278af57cec4bf", + "c2808ac643c0831d1b696ae798cad9be5518a46c", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-layout.https.html": [ - "b6b3c5a3182a67a824086588f35ed8b00b96ba1b", + "cc19e2775c8bf01e1d30f63b3d935422008bc8f8", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-paint-import-data.https.html": [ - "58f6bc766a34b16a2eb55a8d2801887f9b655862", + "3ba203f3f9c0e47c539c3cb5c30a2d765138f298", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-paint.https.html": [ - "b456950c1de42b5402c3b9042a29aad0b1ad441c", + "62a48a1661589a852f75515fee103ad8f5f742e4", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/xhr.https.html": [ - "86da59ba5bacd23d46c8105f98f9bbe3f16f4180", + "3b5047d512aa40e106e98bb21955369b7c966f9a", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/fetch.https.html": [ - "bf99774df654598169466efc5ef914ed22586c52", + "117e32f3f504de40ec27f5d5c3a3d16fc77acb74", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/iframe-tag.https.html": [ - "e6e4fa8908b8f86f4855cad9886657cfe45093ab", + "679cb54eb2940749b45537739c913c55ddd471b8", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/img-tag.https.html": [ - "988adafc49481ad7db012b94ec603da9df89a33c", + "e9744a3aec032a36798e0e1593572c00612874b2", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-classic.https-expected.txt": [ - "69ebe4e340ef7f849e254f994320a7b6690b3dd5", + "4e2784327c2db2380eef715a23b394639f133e31", "support" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-classic.https.html": [ - "d1baacbc70b50d45a4c4acf34be5e3b43bc8905b", + "3be481acf37aba5fdb419fb94d9b3702b23c9c07", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data.https.html": [ - "0c9819b81616f606961328faf1cfa8c39e02bcdd", + "cbd2fabdea74f53a2317c93cef886a990ccf8cbc", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-module.https-expected.txt": [ - "511ea3c190a2bbd2b1e1c073da113ca86ec63d86", + "589f37881de7c60c3b1322921eb006ea5fb30563", "support" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-module.https.html": [ - "946ba63f6de29d1d931d212cf14246f1ce79572a", + "91e6ecd08e26430c16af4e26688ff93745b2f585", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/websocket.https.html": [ - "4081c6525f27319a963555b6d448ecdcbf7ea2f2", + "c7f3c265d8c275b792c97f9e0adc2d702acf1517", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-classic.https-expected.txt": [ - "62d4c2dbfcd50be443781b23cdd2a640b4d81657", + "f7f1e0f1f70c7349e3790bbfb5672507945aa910", "support" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-classic.https.html": [ - "64c5cdec3d034668a3438c31949442d4d413c657", + "7c0677a61c9342e11cf95c668afe19db3497f99e", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-import-data.https.html": [ - "2fc6ecad5c896e66beaaca2d5f7f226a55aa2400", + "f90e9bd4a8dbd394b855c490e7653f7ca1babd71", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-module.https-expected.txt": [ - "81cc5772c2b4689971010c8fb2cb4ac061070ec0", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-module.https.html": [ - "6b749b48437a4816b9cc17b4d6cce1705a5c597a", + "ccd461add227faadf4a0cba5786678fc76cbcbca", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-animation-import-data.https.html": [ - "ed00a2bd9da5234f05931412fbb531f522b12cdf", + "c34a6d0782254b85a33e4c0e8ee84acd8e61a6bd", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-animation.https.html": [ - "34332639c88683f2c43535df0d3aec74d5786a69", + "6be85c5e452f0596b5e9901e323b008f8f4d4b0a", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-audio-import-data.https.html": [ - "14185885554b4f32f9d0bda1040d359e3b29a46f", + "b0ee36fa6ff332677c333e82225cbda443664c91", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-audio.https.html": [ - "b31f83c03ee9b748d848e0f350568c85c891f49e", + "9636d3f55743c136e2a2aed3e8b97287fb368a6b", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-layout-import-data.https.html": [ - "cbd1d2d42eba55745099b12c9498462004c656d5", + "a0b031e4991ea281c6763113706fc74104543833", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-layout.https.html": [ - "bade461aedf5cbffeb30cf6cd5687d2714077085", + "663d0b8238ef5169029b50dfeb3a24a6485c9610", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-paint-import-data.https.html": [ - "4ea2a00137b65f45b9df58041e1af5677a79064f", + "48d31775224653afa35b6f994ba7acf986459bec", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-paint.https.html": [ - "3f7ce8c9b25dc81701887fc433b674097c5de3cb", + "69a4c90ec61f29266f759cc3bfeafe36e5e1d362", "testharness" ], "upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/xhr.https.html": [ - "3b54477e6283817e139f07d490fe254866e0b032", + "c326a81661837f1895bb89b5d09785e251e294ba", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/fetch.https.html": [ - "f7e759e42a2b9fb3e333b2beab9f4eddb112554b", + "ff9f627f551f44e63f17bbc4151d4b4a3245da29", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/fetch.https.html.headers": [ @@ -517093,7 +518960,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/iframe-tag.https.html": [ - "063dc6b03bafafc7c20e936143333c5b6e756eb5", + "d78bcbd80101ef8c9364777593125a586f3202b0", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/iframe-tag.https.html.headers": [ @@ -517101,7 +518968,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/img-tag.https.html": [ - "f74ae12454a7fda5fb926ba988e143f93b1c9e91", + "9950b5b5f515447a7540dd52518b998193736f62", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/img-tag.https.html.headers": [ @@ -517109,11 +518976,11 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-classic.https-expected.txt": [ - "69ebe4e340ef7f849e254f994320a7b6690b3dd5", + "4e2784327c2db2380eef715a23b394639f133e31", "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-classic.https.html": [ - "c2cb50c2a813fe0c5da68b162b81d1ab2ed1356f", + "677dfad716289b5d0ad17a5839956dc38226e393", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-classic.https.html.headers": [ @@ -517121,7 +518988,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import-data.https.html": [ - "303719094234f84ded4b02c32e97c80c9ceefd5d", + "7e268a47af4d140093771cbebf014e27dfd2b2c1", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import-data.https.html.headers": [ @@ -517129,11 +518996,11 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-module.https-expected.txt": [ - "175d5d71115938be3675333a7a74c3368fc92441", + "589f37881de7c60c3b1322921eb006ea5fb30563", "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-module.https.html": [ - "937b086170749123e74ecaaa96c351248d540ee4", + "4e20a8ab3dfbbfcb0f6489f7111dace180f33b29", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-module.https.html.headers": [ @@ -517141,7 +519008,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/websocket.https.html": [ - "41cbef5d00a4af1a33b537b4494084e3717caaf2", + "5573cace64057ec7455b6620a9dfb26b81497caa", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/websocket.https.html.headers": [ @@ -517161,7 +519028,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-import-data.https.html": [ - "e26c46dda1dc1929d3bcabd98c598cc3407d660d", + "85e1a9c08fe6c9260e6f6ea9baef43a26ee3f09e", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-import-data.https.html.headers": [ @@ -517169,11 +519036,11 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-module.https-expected.txt": [ - "48deefab0115a8ae8a5768ba6e62c7ef188ee75c", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-module.https.html": [ - "4bbea1361bfcc7dec530ce27013d731da6d60b91", + "5b0dc16408f2d5ca5e76e8c6fc7e98eb7481ccd5", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-module.https.html.headers": [ @@ -517181,7 +519048,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation-import-data.https.html": [ - "67101f6d19c512526cf932eef1f3d1f29fcf0aa1", + "a485bfc509061408d2ec9fe8440c1681b20e4822", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation-import-data.https.html.headers": [ @@ -517189,7 +519056,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation.https.html": [ - "ba7103686aa40a436026e5ebb374d8648a012739", + "511ff4625c1134c30a86479c65b077585803578e", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation.https.html.headers": [ @@ -517197,7 +519064,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-audio-import-data.https.html": [ - "83bd2f0a2ba05779c65fbba7ec4f305d8f9fff44", + "5822f29c88ba40a62265de37593090938c04d491", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-audio-import-data.https.html.headers": [ @@ -517205,7 +519072,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-audio.https.html": [ - "1894f57b4c95c7d7a7b5bc2eb234306d20bc0246", + "296e8af847b4f3041a729c9af2297b0d6935316d", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-audio.https.html.headers": [ @@ -517213,7 +519080,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout-import-data.https.html": [ - "f640d2539e438e1fadf79f4a3ec9b7148de9c55d", + "b7546cc6113a9c69f8d5841d4c0ec7969df0cf2e", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout-import-data.https.html.headers": [ @@ -517221,7 +519088,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout.https.html": [ - "9d9cc8ac478b011fe6cfab77985955dceee4170c", + "3ded6cdf25c150914b7d465406857481d69d2ca4", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout.https.html.headers": [ @@ -517229,7 +519096,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-paint-import-data.https.html": [ - "4ecca776aa18b41ec5b9cf7067d8d77937b17f39", + "fdc8c9106e67b80710db1581baca8afa02d51d62", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-paint-import-data.https.html.headers": [ @@ -517237,7 +519104,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-paint.https.html": [ - "823eb862c3c5564954ceeb47b7773e345147d826", + "2646219a98936d70190ad3e39c368ffec7f6ba41", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-paint.https.html.headers": [ @@ -517245,7 +519112,7 @@ "support" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/xhr.https.html": [ - "9e151850507ace33a72289232f7c89a64c94d1c0", + "c85f01adc1d03dffe7d9a18ca0c6e5b8a9dcfa42", "testharness" ], "upgrade-insecure-requests/gen/top.http-rp/upgrade/xhr.https.html.headers": [ @@ -517253,27 +519120,27 @@ "support" ], "upgrade-insecure-requests/gen/top.meta/unset/fetch.https.html": [ - "d150ea2d689b3ed831c9803b456c1db302d87fd1", + "39148c015beb6f73f505d0cc9a49e54f3d87a917", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/iframe-tag.https.html": [ - "4bfc96fb974a59eb9f2706a74759803eab182da1", + "12ef5a5b7001d4c1eb9c2cdd23c63df7c5edf5ac", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/img-tag.https.html": [ - "824eb27e5685572c9c261e5ac151d6776f28c875", + "a78db7560ad855e899d2356351889096d880289c", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/sharedworker-classic.https.html": [ - "661eb7d3e3fc37d882581a70d45f0eb4a8483794", + "4c5295cf7bfd79feb8d6792d31f6ac43ea0733b0", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/sharedworker-import-data.https.html": [ - "83a6bc50fa93379f321ff8b6bf4ec9b10e5a2b01", + "dde524fb0fc1c9067a3051dba29aa7be9ed8a027", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/sharedworker-module.https.html": [ - "1129964562a4fbfc744fb0103b3c6f0b83e89121", + "26776e4df76599ab75d2e58e49098aec66e24612", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/websocket.https.html": [ @@ -517285,71 +519152,71 @@ "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worker-import-data.https.html": [ - "d90bca9dbafade3fe28deba577a3d7e6eb2ca20d", + "3669e03083693207e7209c83bff865d417b398fa", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worker-module.https.html": [ - "29677ccb6b261c2e6dfa815e6839403845c5b110", + "6e5cce8af6d1a66dd99157ac77311504ac721092", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-animation-import-data.https.html": [ - "e96f2362b17366161348a3275791f1ebbb3e34c5", + "4ffc90cd8fc98c67c14aba56326873e8c5fd615b", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-animation.https.html": [ - "5f6b73b633515945561d876027f35d4983c1ca19", + "114f59fbea8af18b72e237e1a62e0167ffef028b", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-audio-import-data.https.html": [ - "d95fda7f21dd2232591bbf794076ec21b1024b3b", + "cad1c3580d38c5ad81ded3bc29fe2798012a1d31", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-audio.https.html": [ - "413997c64bf635ce896fc2c10dd1d774d2673a16", + "16ce32b7311eb1cbd1c1221a6bcb85cd58de7f53", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-layout-import-data.https.html": [ - "3fb5e1586f911ba610093ff439a1b4bcf1f74164", + "a6c633e97d691b35335cb31b8427944219cba85a", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-layout.https.html": [ - "34fdc73d7a3617dd32241b350ea6348d3a03788e", + "9c7f82d9e201bbacb7457c2ad69c34c5e20e2d80", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-paint-import-data.https.html": [ - "ce44071516f0669f1dd72b1a04f466ba7d0c62f8", + "7b484d0a4c45e58b61a428e0ab561f17c82f9e03", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/worklet-paint.https.html": [ - "e2a567edb188da3c85b1190e75c85e6702591696", + "dcf2a137289d62be118898f1e51a4a17dccffda2", "testharness" ], "upgrade-insecure-requests/gen/top.meta/unset/xhr.https.html": [ - "7e05d8ed1110c9d2164080294723b039d906d54f", + "ccb4ecf4acd4cc6e79ae0a5fcae5821cda76b102", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/fetch.https.html": [ - "e7e9d9ee3b0f1cded9ae8a806a8eecfa3c5923c0", + "5b3d886a8aafe2211df3247c5ed4d8bfe36cbd44", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/iframe-tag.https.html": [ - "1d93297b18c615d7e048260e41871092b433611b", + "76ad9eacc358f91c5e8e0eecbc03dcccbb9234b5", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/img-tag.https.html": [ - "d396deba63af2f256b421b18d61bf7f4b28d908c", + "6fe8940e13509ed27d964f873ca6954c5e46864a", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-classic.https-expected.txt": [ - "711eb410dd856d55c354fe031574d668ecad90ac", + "4e2784327c2db2380eef715a23b394639f133e31", "support" ], "upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-classic.https.html": [ - "dbe808d157a62ba85a6255ad72c9868ce06c6c92", + "b8ad00fa477e052708527b6b85e1621111c5a328", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data.https.html": [ - "d265b6ab51f48f7ce8d905facd7d65ed38ac2751", + "3ed32403341fb922196e6aa730313d681573b797", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-module.https-expected.txt": [ @@ -517373,55 +519240,55 @@ "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worker-import-data.https.html": [ - "10e5a0b5024698dcf16fd76309ed8bc9e303356c", + "0cb1533b2aa5373e2a4a2b988149c91925bdc8bb", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worker-module.https-expected.txt": [ - "bc3f21b852d61409f3e4a1feccc5d6966a22aa13", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worker-module.https.html": [ - "a3ae8a2747540a53cb3bcf429917f32d17465151", + "c6100c45be549f583d8c0d7c4509c474fc55cafe", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-animation-import-data.https.html": [ - "24d5287e29310bf8d95d3552792a724ebf858e41", + "99b161ff5efaf0d4d650c24d24e1d09e73c5b0d5", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-animation.https.html": [ - "9e3a0e1c993590fa5fce1e15f3801db1306a0a8d", + "ddded11818a31d45c633523a8c32db3d27cf09b4", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-audio-import-data.https.html": [ - "1f4a23b1141c8bbcc509d85b6c7c3fc5afcdcbbf", + "99e634cfaefc0f78dd916234924b31da750547c2", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-audio.https.html": [ - "8b096c6ca011d419aabe55616c7bf20dc7634852", + "e49a11154c1a2c3f39e16b1c062af7a9c9524190", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-layout-import-data.https.html": [ - "e615769653f49c80704ea58d0e55d4a72b33fb7f", + "c0b3b47918fa8e341915d2f69bce7dd3b71a00ad", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-layout.https.html": [ - "355b275aa4520097110c3028e0a9f58f4cce38cc", + "917e5f064a869d48e08f53e6775503bd0ceb71ed", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-paint-import-data.https.html": [ - "0e4aede115839ae9620f7102936b649ec2cd2198", + "847e38a536527b85a29774d4fe383c574d9acab0", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/worklet-paint.https.html": [ - "3f54a23e9a1f049420916438fd894b9bc65ad80f", + "09a5ac2eb73c5bd4ec30a348917f8febc9ce8c5b", "testharness" ], "upgrade-insecure-requests/gen/top.meta/upgrade/xhr.https.html": [ - "95b1be919fe347512fee2fcfe33b9c7da368b725", + "4d16491a4df4647c501579612c90e4fb5d048742", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/unset/fetch.https.html": [ - "da694db5273ed6e216f2ce81d4e5c3e50d83f119", + "607c6828e43d58187c65b62313faa580e8fc8dd4", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/unset/websocket.https.html": [ @@ -517429,11 +519296,11 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/unset/xhr.https.html": [ - "e7bc4c8fabac558d44837b9d221f564bbccf4de8", + "044aeb16765d0652f2b4ec1c14db4f5f35e02d57", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/upgrade/fetch.https.html": [ - "be4eaa2efb305ba84bf44184ecf25593ca5c3cfa", + "a7e4b9bd7b532404af55d8244a4f0a406b32be8c", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/upgrade/websocket.https.html": [ @@ -517441,11 +519308,11 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-classic-data.meta/upgrade/xhr.https.html": [ - "2263b234e6a98110188d6e152f2ad1369cad035c", + "5ecc9293b5afb108137b6c6abcf226f46b0bceaa", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/fetch.https.html": [ - "c82f6a0ba2dbb7e2fb319235bd4ba8b53df305f4", + "ee16cdf93ccf1aa1d7861a5635e6f94f2ff76890", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/fetch.https.html.headers": [ @@ -517453,7 +519320,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/websocket.https.html": [ - "8eeff5b1441805fc109659535231f09f96ea84fa", + "b5c7c6f1114d24449ebe59d73b5fcc780ad23116", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/websocket.https.html.headers": [ @@ -517473,11 +519340,11 @@ "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/worker-module.https-expected.txt": [ - "e1d69cfd6869757b7cdd56996a2af23411913d74", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/worker-module.https.html": [ - "6fe8db741d2607ce1e52fe98fcb44c4d358de07b", + "71b525fd972591acce1efd059ed9947171984917", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/worker-module.https.html.headers": [ @@ -517485,7 +519352,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/xhr.https.html": [ - "0feb767bbe727b906c2f2f4073562153cf4509fd", + "5e15f9fde17f90123fe4d85b422a9fe7d731e04f", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.http-rp/upgrade/xhr.https.html.headers": [ @@ -517493,15 +519360,15 @@ "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/unset/fetch.https.html": [ - "d6aa9233bfc431a35704ffb7308ca09be4ed0d37", + "6c530950209f716ea2693c2fc0f5490be07aabc8", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/unset/websocket.https.html": [ - "f3bd83f01b83ed4e557a2f4b253673b787db075e", + "781a159d8a49af26a056cd8f521880604b7ae965", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/unset/worker-classic.https.html": [ - "c95f17d7602a181a432955531660bbfce8111f89", + "9ae574fbbf8bb42400f632ae17bea3cf23e47acf", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/unset/worker-module.https.html": [ @@ -517509,23 +519376,23 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/unset/xhr.https.html": [ - "deb51764f46f1d53397996d26392ff31393323da", + "4362edad04e26a9820cd77d19b1a5b5772d83d63", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/fetch.https.html": [ - "d03bbb7fb7654a2a3dd6891f60913db8669ffa5c", + "0544c21008f050628583835a4b201fd3e74b21fe", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/websocket.https.html": [ - "9755a3f7d7adaa466341a8fd76c0feed97df32cd", + "6237b53146c46d85f67267c7b74cef04ced81a68", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/worker-classic.https-expected.txt": [ - "62d4c2dbfcd50be443781b23cdd2a640b4d81657", + "f7f1e0f1f70c7349e3790bbfb5672507945aa910", "support" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/worker-classic.https.html": [ - "93babaf49e12a9406293049223ab237131f4c55e", + "abce936167dea5051b74cd57b4f98e698d9e962a", "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/worker-module.https-expected.txt": [ @@ -517537,11 +519404,11 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-classic-inherit.meta/upgrade/xhr.https.html": [ - "5140fc4800ac9245009a2cafc4e3e3d1a5eaf273", + "7ac3d61e97b2f27234c76de28af68e4d878a1802", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/fetch.https.html": [ - "a3fa13ecfd9cd997db80d523a481f7e586cf760b", + "9ff76bc7878fa283dac081d136c60de6cd4807b6", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/fetch.https.html.headers": [ @@ -517549,7 +519416,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/websocket.https.html": [ - "53dc448d6c497c673505ab8c44bac3efb3a50167", + "2d8c1bef7eed4b13454c2fbcee399dfe47c285a2", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/websocket.https.html.headers": [ @@ -517557,7 +519424,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/xhr.https.html": [ - "1125fa454346c5897dba66c4b3dd6a72f5a9dd60", + "b406ddd6dab9cf12efa39e17c0b6671c17360a44", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.http-rp/upgrade/xhr.https.html.headers": [ @@ -517565,7 +519432,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-data.meta/unset/fetch.https.html": [ - "a3cd2146663d34f350d169a7de36c7c664639234", + "4a65c521dfdc8aa428fff3eef1e4342130b5a6e4", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.meta/unset/websocket.https.html": [ @@ -517573,11 +519440,11 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.meta/unset/xhr.https.html": [ - "cc450bfef7a0e55367d85228189f80c61a9e363c", + "eaad29b7d47b82619c49cbdd823fbf371d076a72", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.meta/upgrade/fetch.https.html": [ - "b50873f80858af44755b497e8bdfc06549255911", + "c0692396730c20a3f31656ec2360d8136860e459", "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.meta/upgrade/websocket.https.html": [ @@ -517585,11 +519452,11 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-module-data.meta/upgrade/xhr.https.html": [ - "cc0a17b9f1acd9ead23e96aeacedbba28e538508", + "5cce5cce98530bd48b0d3784d04a087326ade89a", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/fetch.https.html": [ - "4cde804eb79399c49f30ed68f12f26e3ea6005d7", + "aec22847af30373dcabf279e7e5efd5a581f91d0", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/fetch.https.html.headers": [ @@ -517605,11 +519472,11 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-classic.https-expected.txt": [ - "62d4c2dbfcd50be443781b23cdd2a640b4d81657", + "f7f1e0f1f70c7349e3790bbfb5672507945aa910", "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-classic.https.html": [ - "2df83cc4462bf006b2bbbaf8721040a47d3c267a", + "f2b6cd6757832df973601c680dea4e9502b29b53", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-classic.https.html.headers": [ @@ -517617,11 +519484,11 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-module.https-expected.txt": [ - "e1d69cfd6869757b7cdd56996a2af23411913d74", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-module.https.html": [ - "6b32437c20378f66b04b76209bb6d0fc3d3a9b9a", + "b9bb11aa42c6f43485406e28bde107589dc40ae5", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/worker-module.https.html.headers": [ @@ -517629,7 +519496,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/xhr.https.html": [ - "ad5f4ff66a48d29149c64a24fcab584d9af9b844", + "ba5febfc03af7ec807fa335dc8c583d3781b0c8d", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.http-rp/upgrade/xhr.https.html.headers": [ @@ -517637,7 +519504,7 @@ "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/unset/fetch.https.html": [ - "6707dc37e425606230a39a42c41a25cb05076cb8", + "08af12c58488c92e73e3b184339298319ec5cfdc", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/unset/websocket.https.html": [ @@ -517645,7 +519512,7 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/unset/worker-classic.https.html": [ - "a6a168275fc46aba0eac2ed61f614f847c459d58", + "cd1cd15697b28a836d864ea9fcd7cd46611c610a", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/unset/worker-module.https.html": [ @@ -517653,35 +519520,35 @@ "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/unset/xhr.https.html": [ - "d1ebd13509628a14d35b380c41d1f03b5782c9e7", + "f5c04836c05f617463a67b6e219e121d13e37e69", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/fetch.https.html": [ - "ce81bb794835ebb5707d9e77ff1579a43c337c40", + "dbe7b1460a8e87c687878b3f39e004ee12c64482", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/websocket.https.html": [ - "c7410632e17698eac8761419d93c9c71bdcd0690", + "a277dfe752d1e5a755645db9e253bc0bbfb572dc", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/worker-classic.https-expected.txt": [ - "49e8916d7421253c40b249631acb649c012e8a8f", + "f7f1e0f1f70c7349e3790bbfb5672507945aa910", "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/worker-classic.https.html": [ - "760fd75466fd2973b5ce0be751292e380b105979", + "3baf240f36188d7c70e4521c21b941fa24ca4d85", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/worker-module.https-expected.txt": [ - "bc3f21b852d61409f3e4a1feccc5d6966a22aa13", + "8b4c515e384b2724e1339d07b2e2d1dffc131498", "support" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/worker-module.https.html": [ - "5a7168ea992799db3c954f0f428cbba0f8f99e0b", + "7bc07b28e28b38d4842583cabca3afd886544915", "testharness" ], "upgrade-insecure-requests/gen/worker-module-inherit.meta/upgrade/xhr.https.html": [ - "cd15c2640caba472bb2b43893aea19efde5c5fb7", + "9d1a0fe15a4a5399558a7a2258d362318e4f197d", "testharness" ], "upgrade-insecure-requests/generic/test-case.sub.js": [ @@ -517773,7 +519640,7 @@ "support" ], "upgrade-insecure-requests/spec.src.json": [ - "43f2d6dbc1867c668198e2570414fd08df817dc8", + "0b987d76b7c0b87d6599f6441b314beb534be276", "support" ], "upgrade-insecure-requests/support/redirect-cors.py": [ @@ -518144,12 +520011,8 @@ "491f2b1675968783d5d9ccf77efc99e1b5013a84", "manual" ], - "vibration/silent-ignore-expected.txt": [ - "cf8e48fbb197087afea2ebe404817f2de0e09a83", - "support" - ], "vibration/silent-ignore.html": [ - "88ef5092a146606026a7c40eccbc1410038b62bf", + "a04c648bd181c24af4e63e8d3cb5ad6ca706654a", "testharness" ], "vibration/simple-array-manual.html": [ @@ -518300,16 +520163,16 @@ "776c59be658f749fcdd0a8ea6a92ac82c88d344e", "support" ], - "wake-lock/idlharness.https.any-expected.txt": [ - "2891448add546a4fc763a0082a097318614727f3", - "support" - ], - "wake-lock/idlharness.https.any.js": [ - "b5d764aee0d85e57b38ee5ff636d18e9c01c1dba", + "wake-lock/idlharness-worker.https.window.js": [ + "c747ad6872a91a5ca81fb1e7ca73f72e4e987097", "testharness" ], - "wake-lock/idlharness.https.any.worker-expected.txt": [ - "30f1815b29971d96e9ae672bed925f5b189ded1f", + "wake-lock/idlharness.https.window.js": [ + "f9e3c02175d519f454c15109b30fa567709cee2d", + "testharness" + ], + "wake-lock/resources/idlharness-worker.js": [ + "b84ed44a8c89713be559e9cec8a1e3f48c990179", "support" ], "wake-lock/resources/page1.html": [ @@ -518336,40 +520199,24 @@ "2ac6bce20d8b04ad3f2958f7326102dd9c5e0dcc", "manual" ], - "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt": [ - "5c219532f4955f7eff594daffc382008284590e3", - "support" - ], "wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ - "18a2d7c6ba282e7f77487c6744563f9eb2002ac0", + "f28a96141c8994125b04c29e440743d2e7837544", "testharness" ], - "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt": [ - "265fa6d27e28cbbdf93585f88cb42070154d09d9", - "support" - ], "wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html": [ "5587a85d4b027d360c35103f99bb6e6afe31f18a", "testharness" ], - "wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt": [ - "a0108cfc0dbf7b7254bc4e69a5c8c342e4193528", - "support" - ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html": [ - "8573f7aa63b8460f28dc174041f9a6a644468a89", + "d0f5a15c84bf83dfdaf801e8709d1d7c37f6d91a", "testharness" ], "wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers": [ "34b7437443cd9998c423260d05202be05d7b5d38", "support" ], - "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt": [ - "969fb83a654f6c2b7fd02f146577b6cc7033183d", - "support" - ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html": [ - "308217022e1e5fc3e592798c25d4c12aef9c60b2", + "73f343867e62c46c4f6e5a4458a384ef652bafd1", "testharness" ], "wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers": [ @@ -519000,8 +520847,12 @@ "cb8bc09c366a4f53b44d804ac3f7794f175677f4", "testharness" ], + "web-animations/interfaces/Animation/finished-expected.txt": [ + "4b6e01c50f83a4ccd2b49ac629b0200cf2f6f916", + "support" + ], "web-animations/interfaces/Animation/finished.html": [ - "563d4ba6dd4fbb91598302f6b64f418916168243", + "bee4fd8fb7a63137f45681dccc3b53d3570eefc8", "testharness" ], "web-animations/interfaces/Animation/id.html": [ @@ -519040,8 +520891,12 @@ "6c5d604b1e4c88bfffe03238e059dc2b97c6947d", "testharness" ], + "web-animations/interfaces/Animation/ready-expected.txt": [ + "a72b988a1a25048db7252462a70ab02b3c541fcc", + "support" + ], "web-animations/interfaces/Animation/ready.html": [ - "461c4e95814c2ff3e5e0211ef89a6dfdc05b0606", + "462e2a0484451e4cff1f0ffce84d2ea3bd7b456a", "testharness" ], "web-animations/interfaces/Animation/startTime.html": [ @@ -519861,7 +521716,7 @@ "testharness" ], "webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html": [ - "20780d94b730acf18f4d6ca93fe4abff1a6111db", + "c0cd49d32520fdf3c55248b1130da64d5845097d", "testharness" ], "webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html": [ @@ -520200,8 +522055,12 @@ "c58502af01192c13884f303b8345a017af9ad3a9", "testharness" ], + "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https-expected.txt": [ + "395b08d37dfb817df89b6728b1236ea6d455bfaf", + "support" + ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html": [ - "0914edbb3b0ababb646784be605177c8e4a79a09", + "ce39de54671b80a06d6931f5e32267f4bff60333", "testharness" ], "webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html": [ @@ -522973,7 +524832,7 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "25ddd99bb0981db40b4d147580a343e773fc7f1a", + "24b3db7a0880fcc20cb8841e8d03e09731b8e0c0", "support" ], "webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html": [ @@ -523012,8 +524871,12 @@ "096cc9dd1a15b0e35cfae50c7bb872b876672adc", "testharness" ], + "webrtc/RTCPeerConnection-onnegotiationneeded-expected.txt": [ + "3e6369889a80ec606df65ec77c754e706d00da42", + "support" + ], "webrtc/RTCPeerConnection-onnegotiationneeded.html": [ - "3b65faca927fad96d45911350be355a1886ba3fb", + "2eda7b5b341ca965dca970cdfa5c73b2f57e3189", "testharness" ], "webrtc/RTCPeerConnection-onsignalingstatechanged.https-expected.txt": [ @@ -523029,7 +524892,7 @@ "testharness" ], "webrtc/RTCPeerConnection-operations.https.html": [ - "e88c8b28172c1c0edbfaef4dda10a306470ad96f", + "a0921d315a3c20a2237cade41c51b2a34306b5d7", "testharness" ], "webrtc/RTCPeerConnection-remote-track-mute.https.html": [ @@ -528936,6 +530799,14 @@ "8a34fb480ac5f6c6533b14f121b0f688524fbf3e", "testharness" ], + "workers/WorkerNavigator_userAgentData.http.html": [ + "e47e7e7ceba638eda3d946b420d817a7013aa217", + "testharness" + ], + "workers/WorkerNavigator_userAgentData.https.html": [ + "91a63966c01fa30832b72bb16ce4c8926db716f9", + "testharness" + ], "workers/WorkerPerformanceNow.html": [ "467dad44e2082aa5594b4e51eb8d418ebb2cb85b", "testharness" @@ -530148,6 +532019,10 @@ "f62eeeb76b9f04b697eda7e586175da9acb4ad9e", "testharness" ], + "workers/modules/shared-worker-parse-error-failure.html": [ + "0d8e390382f1127856ed3c26ec5b3cd0a1648280", + "testharness" + ], "workers/name-property.html": [ "ccc2a9de3a9c59acc19eefb247b1c92b78a52941", "testharness" @@ -530580,6 +532455,10 @@ "604f69a43671137edbd2672fb417d1b342d86b51", "testharness" ], + "workers/shared-worker-parse-error-failure.html": [ + "3f1b4c5d85f403876f6b562cf09fdc1e1d37ab45", + "testharness" + ], "workers/support/ErrorEvent-error.js": [ "930b54c0d5881ed4d13de51df1b35aa4ab585735", "support" @@ -530685,7 +532564,7 @@ "support" ], "workers/support/WorkerNavigator.js": [ - "084e45b24585b9d43bd55e71fb727bd674977eca", + "eec2f6884a10562a0d21ab076b90e099dbb8891a", "support" ], "workers/support/WorkerSendingPerformanceNow.js": [ @@ -530704,6 +532583,10 @@ "f0884cc1d26a3ac6bc942d9c22a194338329b03d", "support" ], + "workers/support/check-error-arguments.js": [ + "64441f9225ec6cb662ace4b3f137fcc20121d125", + "support" + ], "workers/support/empty-worker.js": [ "49ceb2648a93410bdd5ee53ef0e114146210741b", "support" @@ -530873,7 +532756,7 @@ "testharness" ], "worklets/paint-worklet-csp.https.html": [ - "bf3b733b72b129d6979014b7a8ac5f522ce061b8", + "61019d19efa149cbbf9d885d0b4d8792b5fb04c3", "testharness" ], "worklets/paint-worklet-import.https.html": [ @@ -532453,7 +534336,7 @@ "support" ], "xhr/send-data-sharedarraybuffer.any.js": [ - "b902888f5600eaa87f481967579959c5f7137d3b", + "912f622697d538edbbc038f7ec76c2e63ee6ffa0", "testharness" ], "xhr/send-data-sharedarraybuffer.any.worker-expected.txt": [
diff --git a/third_party/blink/web_tests/external/wpt/bluetooth/idl/idlharness.tentative.https.window-expected.txt b/third_party/blink/web_tests/external/wpt/bluetooth/idl/idlharness.tentative.https.window-expected.txt index 779ed8f..48a4499 100644 --- a/third_party/blink/web_tests/external/wpt/bluetooth/idl/idlharness.tentative.https.window-expected.txt +++ b/third_party/blink/web_tests/external/wpt/bluetooth/idl/idlharness.tentative.https.window-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 206 tests; 149 PASS, 57 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 205 tests; 149 PASS, 56 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS idl_test setup PASS idl_test validation PASS Partial interface Navigator: original interface defined @@ -75,8 +75,7 @@ PASS BluetoothDevice interface: attribute id PASS BluetoothDevice interface: attribute name PASS BluetoothDevice interface: attribute gatt -FAIL BluetoothDevice interface: operation watchAdvertisements() assert_own_property: interface prototype object missing non-static operation expected property "watchAdvertisements" missing -FAIL BluetoothDevice interface: operation unwatchAdvertisements() assert_own_property: interface prototype object missing non-static operation expected property "unwatchAdvertisements" missing +FAIL BluetoothDevice interface: operation watchAdvertisements(optional WatchAdvertisementsOptions) assert_own_property: interface prototype object missing non-static operation expected property "watchAdvertisements" missing FAIL BluetoothDevice interface: attribute watchingAdvertisements assert_true: The prototype object must have a property "watchingAdvertisements" expected true got false FAIL BluetoothDevice interface: attribute onadvertisementreceived assert_true: The prototype object must have a property "onadvertisementreceived" expected true got false PASS BluetoothDevice interface: attribute ongattserverdisconnected
diff --git a/third_party/blink/web_tests/external/wpt/common/sab.js b/third_party/blink/web_tests/external/wpt/common/sab.js new file mode 100644 index 0000000..c7fd1a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/common/sab.js
@@ -0,0 +1,13 @@ +const createBuffer = (() => { + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sabConstructor = new WebAssembly.Memory({ shared:true, initial:0, maximum:0 }).buffer.constructor; + return (type, length) => { + if (type === "ArrayBuffer") { + return new ArrayBuffer(length); + } else if (type === "SharedArrayBuffer") { + return new sabConstructor(length); + } else { + throw new Error("type has to be ArrayBuffer or SharedArrayBuffer"); + } + } +})();
diff --git a/third_party/blink/web_tests/external/wpt/compression/compression-bad-chunks.tentative.any.js b/third_party/blink/web_tests/external/wpt/compression/compression-bad-chunks.tentative.any.js index cc71b000..af210a7 100644 --- a/third_party/blink/web_tests/external/wpt/compression/compression-bad-chunks.tentative.any.js +++ b/third_party/blink/web_tests/external/wpt/compression/compression-bad-chunks.tentative.any.js
@@ -28,13 +28,15 @@ // Use a getter to postpone construction so that all tests don't fail where // SharedArrayBuffer is not yet implemented. get value() { - return new SharedArrayBuffer(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + return new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; } }, { name: 'shared Uint8Array', get value() { - return new Uint8Array(new SharedArrayBuffer()) + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + return new Uint8Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer) } }, ];
diff --git a/third_party/blink/web_tests/external/wpt/compression/decompression-bad-chunks.tentative.any.js b/third_party/blink/web_tests/external/wpt/compression/decompression-bad-chunks.tentative.any.js index 51f3693..7dcb717 100644 --- a/third_party/blink/web_tests/external/wpt/compression/decompression-bad-chunks.tentative.any.js +++ b/third_party/blink/web_tests/external/wpt/compression/decompression-bad-chunks.tentative.any.js
@@ -28,13 +28,15 @@ // Use a getter to postpone construction so that all tests don't fail where // SharedArrayBuffer is not yet implemented. get value() { - return new SharedArrayBuffer(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + return new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; } }, { name: 'shared Uint8Array', get value() { - return new Uint8Array(new SharedArrayBuffer()) + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + return new Uint8Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer) } }, {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/CSSAnimation-effect.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/CSSAnimation-effect.tentative-expected.txt index 76507ee..194b7bc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/CSSAnimation-effect.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/CSSAnimation-effect.tentative-expected.txt
@@ -1,9 +1,9 @@ This is a testharness.js-based test. -FAIL Setting a null effect on a running animation fires an animationend event assert_true: Timed out waiting for animationend expected true got false +PASS Setting a null effect on a running animation fires an animationend event PASS Replacing an animation's effect with an effect that targets a different property should update both properties PASS Replacing an animation's effect with a shorter one that should have already finished, the animation finishes immediately PASS A play-pending animation's effect whose effect is replaced still exits the pending state -FAIL CSS animation events are dispatched at the original element even after setting an effect with a different target element assert_true: Timed out waiting for animationstart expected true got false +PASS CSS animation events are dispatched at the original element even after setting an effect with a different target element FAIL After replacing a finished animation's effect with a longer one it fires an animationstart event assert_true: Timed out waiting for animationstart expected true got false PASS Replacing the effect of a CSSAnimation causes subsequent changes to corresponding animation-* properties to be ignored Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-animations/event-dispatch.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-animations/event-dispatch.tentative-expected.txt index 7243520b..0906f8b2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-animations/event-dispatch.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/css/css-animations/event-dispatch.tentative-expected.txt
@@ -25,6 +25,6 @@ PASS Call Animation.cancel after restarting animation immediately. FAIL Set timeline and play transition after clearing the timeline. promise_test: Unhandled rejection with value: object "TypeError: Cannot assign to read only property 'timeline' of object '#<CSSAnimation>'" PASS Set null target effect after canceling the animation. -FAIL Cancel the animation after clearing the target effect. assert_true: Timed out waiting for animationend expected true got false +PASS Cancel the animation after clearing the target effect. Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/anonymous-block.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/anonymous-block.html new file mode 100644 index 0000000..915cca75 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/anonymous-block.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>CSS Flexbox: anonymous block</title> +<html> +<link href="support/flexbox.css" rel="stylesheet"> +<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-items"> +<link rel="match" href="reference/anonymous-block-ref.html"> +<body> +<p>This tests that text nodes that have a flexbox as a parent are wrapped in +anonymous blocks.</p> +<div class="flexbox">This text should be visible.</div> +</body> +</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/box-sizing.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-001.html similarity index 83% rename from third_party/blink/web_tests/css3/flexbox/box-sizing.html rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-001.html index 270d5fd..a117626 100644 --- a/third_party/blink/web_tests/css3/flexbox/box-sizing.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-001.html
@@ -1,6 +1,11 @@ <!DOCTYPE html> <html> -<link href="resources/flexbox.css" rel="stylesheet"> +<title>CSS Flexbox: box-sizing</title> +<link href="support/flexbox.css" rel="stylesheet"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-flow-property"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#box-sizing"> +<meta name="assert" content="This test checks the interactions between the flex layout mode and the two possible values for the box-sizing property: border-box and content-box" /> + <style> .flexbox { border: 2px solid orange; @@ -26,10 +31,10 @@ padding: 3px; } </style> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/check-layout-th.js"></script> -<body onload="checkLayout('.flexbox')"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body> <div id=log></div> All blue boxes are 100x100px with box-sizing: border-box and 2px border (4px border-top), we expect offsetWidth/Height to be <b>100x100</b> @@ -97,6 +102,7 @@ } [].forEach.call(document.querySelectorAll(".flexbox > div"), addExpectedSizes); [].forEach.call(document.querySelectorAll(".border-box"), addExpectedSizes); + checkLayout('.flexbox'); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-min-max-sizes-001.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-min-max-sizes-001.html new file mode 100644 index 0000000..3aa9ce6b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/box-sizing-min-max-sizes-001.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>CSS Flexbox: minimum / maximum sizes with box-sizing: border-box</title> +<link href="support/flexbox.css" rel="stylesheet"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#box-model"> +<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#min-max-widths"> +<meta name="assert" content="This test checks that a minimum and maximum sizes are correctly computed for flexbox children."> + +<style> +.flexbox { + background-color: teal; +} +.flexbox > div { + box-sizing: border-box; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.flexbox')"> +<div id=log></div> + +<div class="flexbox"> + <div style="border: 5px solid orange; padding: 5px; max-width: 30px; width: 40px;" data-expected-width=30></div> + <div style="border: 5px solid orange; padding: 5px; min-width: 30px; width: 10px;" data-expected-width=30></div> +</div> + +<div class="flexbox column"> + <div style="border: 5px solid orange; padding: 5px; max-height: 30px; height: 40px;" data-expected-height=30></div> + <div style="border: 5px solid orange; padding: 5px; min-height: 30px; height: 10px;" data-expected-height=30></div> +</div> + +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/column-flex-child-with-overflow-scroll.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/column-flex-child-with-overflow-scroll.html new file mode 100644 index 0000000..4c84a258 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/column-flex-child-with-overflow-scroll.html
@@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<title>Proper height of column flex children with overflow: scroll.</title> +<link href="support/flexbox.css" rel="stylesheet"> +<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#flex-direction-property"> +<meta name="assert" content="This test ensures children of flexbox with flex-direction: column|column-reverse does not shrink their height after applying the overflow: scroll style."/> +<style> +div { + box-sizing: border-box; +} + +.scroll { + overflow: scroll; +} + +.box { + width: 100px; + height: 75px; + padding: 5px; + border: 2px solid red; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.flexbox')"> +<div id=log></div> +<div class="flexbox column"> + <div class="box" data-expected-width="100" data-expected-height="75"></div> + <div class="box scroll" id="box2" data-expected-width="100" data-expected-height="75"></div> +</div> + +<div class="flexbox column-reverse"> + <div class="box" data-expected-width="100" data-expected-height="75"></div> + <div class="box scroll" id="box4" data-expected-width="100" data-expected-height="75"></div> +</div> +</body> +</html>
diff --git a/third_party/blink/web_tests/css3/flexbox/anonymous-block-expected.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/reference/anonymous-block-ref.html similarity index 100% rename from third_party/blink/web_tests/css3/flexbox/anonymous-block-expected.html rename to third_party/blink/web_tests/external/wpt/css/css-flexbox/reference/anonymous-block-ref.html
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/META.yml b/third_party/blink/web_tests/external/wpt/css/css-fonts/META.yml index 3c34ca4..e5ea857 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/META.yml +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/META.yml
@@ -3,3 +3,5 @@ - svgeesus - litherum - drott + - jfkthame +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html index ccbd4ef..1682630 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <style> @font-face { font-family: variable_axes;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html index 8b17761..c2b27be1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/fixed-stretch-style-over-weight.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <link rel="stylesheet" href="font-matching.css"> <!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence of properties (stretch over style, style over weight) and style over weight
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/font-matching.css b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/font-matching.css index 19825008..ebbef02 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/font-matching.css +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/font-matching.css
@@ -1,6 +1,7 @@ body { font-family: variable_axes, sans-serif; font-size: 80px; + font-synthesis: none; } #stretch_style_weight_1 {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/resources/variabletest_matching.ttf b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/resources/variabletest_matching.ttf index 7a09643..89ed12a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/resources/variabletest_matching.ttf +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/resources/variabletest_matching.ttf Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html index 3e6edda0..7589a15 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <style> @font-face { font-family: variable_axes;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html index 770efa9..e899c8b4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/stretch-distance-over-weight-distance.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <link rel="stylesheet" href="font-matching.css"> <!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence of properties (stretch over style, style over weight) and distance of stretch . -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html index d1b235c..5a7c139 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <style> @font-face { font-family: variable_axes;
diff --git a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html index 5cb2149..f263a111 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html +++ b/third_party/blink/web_tests/external/wpt/css/css-fonts/matching/style-ranges-over-weight-direction.html
@@ -1,5 +1,6 @@ <!DOCTYPE html> <html class="reftest-wait"> +<meta charset="utf-8"> <link rel="stylesheet" href="font-matching.css"> <!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence of properties (stretch over style, style over weight) and search
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html index dd19a835..c2b6aee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html
@@ -35,8 +35,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html index 4906638..0e52b19 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html
@@ -114,7 +114,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html index 6e5e9ac5..9e7172db 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html
@@ -36,7 +36,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.container')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.container'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html index 8e576bf..e4629fb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html
@@ -32,8 +32,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html index e2b2bdb..51e8ac18 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html
@@ -53,8 +53,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html index 8dcb91ed..7c95993e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html
@@ -46,8 +46,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html index b371688..de1869c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html
@@ -57,8 +57,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html index 82309e6..08779ec 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-create-implicit-tracks-001.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html index 7ea528b..bb3be69 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/positioned-grid-items-should-not-take-up-space-001.html
@@ -35,8 +35,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html index 0901dde..98d4e3c6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
@@ -44,8 +44,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the align-content property is applied correctly when using content-distribution values in vertical-lr writing mode.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html index 1b495c47..60864c1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
@@ -44,8 +44,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the align-content property is applied correctly when using content-distribution values for vertical-rl mode.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html index 444e46b9..cc3785da 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-distribution.html
@@ -39,8 +39,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the align-content property is applied correctly when using content-distribution values.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-lr.html index dbd27574..484ab78e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-lr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-lr.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div style="position: relative"> <p>direction: LTR | align-content: 'center'</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-rl.html index 440cf94..fc584d8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-rl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content-vertical-rl.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div style="position: relative"> <p>direction: LTR | align-content: 'center'</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content.html index fb3f7007..85d0d50 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-content.html
@@ -36,8 +36,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div style="position: relative"> <p>direction: LTR | align-content: 'center'</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html index 9c9e944..7d43a57 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-lr.html
@@ -33,8 +33,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-LR grids.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html index f7698e4..8a7d32c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding-vertical-rl.html
@@ -33,8 +33,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties on vertical-RL grids.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding.html index 9cdce09..37ec8cc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-margin-border-padding.html
@@ -32,8 +32,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the 'margin', 'border' and 'padding' properties are applied together correctly for 'align' and 'justify' properties.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-overflow.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-overflow.html index 3ae1827..37d5c14 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-overflow.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-overflow.html
@@ -34,8 +34,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the 'overflow' keyword is applied correctly for 'align' and 'justify' properties.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html index c8fd340..3b50bb4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html
@@ -41,8 +41,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that stretching alignment works as expected with orthogonal flows.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch.html index 9feeed3..7af6695a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-justify-stretch.html
@@ -39,8 +39,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div style="position: relative"> <div class="grid fit-content" data-expected-width="200" data-expected-height="400">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-stretching-replaced-items.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-stretching-replaced-items.html index 6ac5052..b1dbbd8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-stretching-replaced-items.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-stretching-replaced-items.html
@@ -29,8 +29,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that the alignment properties align-self and justify-self apply the 'stretch' value correctly on replaced elements.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align.html index a195945..79aa684 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align.html
@@ -35,8 +35,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div style="position: relative"> <div class="grid fit-content" data-expected-width="200" data-expected-height="400">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html index 8650273..ee931b9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html index 3d0155e8..2ef899fc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-003.html index c3d0dab39..47cb334 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-003.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-004.html index 55feb2c..d3f22e9b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-004.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html index e89cc1e..bb9de73d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html index 58a124d3..5a61e33 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html index 782bfcd..b50d8be7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html index b06cf544..fd394b8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 80); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html index 108b7fc3..0ef6351 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html index 34a70f3..d9eb6066 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 80); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-width="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-011.html index c3ad2e65..b53c32d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-011.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-012.html index c6d2e3b..4151e7b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-012.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-013.html index 61b66de..e87481f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-013.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 200); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-014.html index ee9c4ef..b74f09d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-014.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-015.html index 5eb383f..405dbcf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-015.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-016.html index 3f8c0d6..f3477a2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-016.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-017.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-017.html index e85b025..b9b91148 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-017.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-017.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 100); grid.style.alignItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-018.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-018.html index 0c387aa..e9bfe63 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-018.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-018.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-height", 80); grid.style.alignItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-019.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-019.html index 3a75c07c..49896c2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-019.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-019.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-020.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-020.html index d122098d..e04356b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-020.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-020.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 120); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-021.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-021.html index 89382a9..29aa8ff 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-021.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-021.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.alignItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-022.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-022.html index 70b9061..b986bbe 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-022.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-022.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-023.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-023.html index 6bae3d2..e896326a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-023.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-023.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 120); grid.style.justifyItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-024.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-024.html index d2e2535..b236ef1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-024.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-024.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XX X<br>X XXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-025.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-025.html index 7652f8bad..6f268ee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-025.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-025.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 120); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XXXXXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-026.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-026.html index b2462c5..c3bfc67 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-026.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-026.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 80); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XXXXXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-027.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-027.html index a88fd67..5f1512c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-027.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-027.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 120); grid.style.justifyItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XXXXXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-028.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-028.html index 4ae7171..2fb6511 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-028.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-028.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 80); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <div data-expected-height="100" id="item">XXXXXX<br>X<br>XX XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-029.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-029.html index 1883060..afe909f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-029.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-029.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-030.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-030.html index 36709d5..d3924e3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-030.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-030.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 100); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html index ad47a2a5..528e08b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-031.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 200); grid.style.justifyItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-032.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-032.html index 4f45695..011eea6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-032.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-032.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 100); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-width="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-033.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-033.html index 9ad862c..eace9b9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-033.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-033.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 100); grid.style.justifyItems = "normal"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-034.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-034.html index b253e828..7b22dff 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-034.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-034.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 100); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html index ff0e240d..18bb1bd0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-035.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 100); grid.style.justifyItems = "stretch"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html index 2664ea1..e63ce4f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html
@@ -29,6 +29,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { evaluateStyleChange(item, "before", "data-expected-width", 80); grid.style.justifyItems = "start"; @@ -36,7 +37,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div class="grid" id="grid"> <img data-expected-height="100" id="item" src="support/100x100-green.png"></img> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-005.html index ed3ca89..919c6ee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-005.html
@@ -36,6 +36,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { let before = { item1: {"data-offset-y": 16 }, @@ -55,7 +56,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div id="container"> <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0">É</div> <div id="item2" data-expected-width="50" data-expected-height="40" data-offset-x="50">É</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-006.html index a41f24bb..21e7d0d3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-006.html
@@ -37,6 +37,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { let before = { item1: {"data-offset-y": 8 }, @@ -56,7 +57,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div id="container"> <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0">É</div> <div id="item2" data-expected-width="50" data-expected-height="40" data-offset-x="50">É</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-007.html index 5131925..136a3616 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-007.html
@@ -38,6 +38,7 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { let before = { item1: {"data-offset-x": 4 }, @@ -57,7 +58,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div id="container"> <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0">É</div> <div id="item2" data-expected-width="40" data-expected-height="50" data-offset-y="50">É</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-008.html index c7e65dc..3145fb0cc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-alignment-style-changes-008.html
@@ -16,6 +16,7 @@ background: grey; justify-items: baseline; font-family: Ahem; + text-orientation: sideways; line-height: 1; } #container > div { writing-mode: vertical-lr; } @@ -38,17 +39,18 @@ <script src="/resources/check-layout-th.js"></script> <script src="support/style-change.js"></script> <script> +setup({ explicit_done: true }); function runTest() { let before = { - item1: {"data-offset-x": 5 }, + item1: {"data-offset-x": 2 }, item2: {"data-offset-x": 30 }, item3: {"data-offset-x": 0 } }; let after = { - item1: {"data-offset-x": 10 }, - item2: {"data-offset-x": 0 }, - item3: {"data-offset-x": 5 } + item1: {"data-offset-x": 4 }, + item2: {"data-offset-x": 0 }, + item3: {"data-offset-x": 2 } }; evaluateStyleChangeMultiple("before", before); @@ -57,7 +59,7 @@ done(); } </script> -<body onload="runTest()"> +<body onload="document.fonts.ready.then(() => { runTest(); })"> <div id="container"> <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0">É</div> <div id="item2" data-expected-width="40" data-expected-height="50" data-offset-y="50">É</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html index a1cc22a..e3a880f6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-001.html
@@ -35,13 +35,17 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "75"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.height = "300px"; item1.setAttribute("data-offset-y", "35"); item2.setAttribute("data-offset-y", "160"); - checkLayout('#grid'); + + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html index 052836c..7390548 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-002.html
@@ -35,13 +35,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "75"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); item1.style.height = "100px"; item1.setAttribute("data-offset-y", "50"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html index 6ff7e3d..f451ebea 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-003.html
@@ -36,13 +36,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "75"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); item1.style.height = "100px"; item1.setAttribute("data-offset-y", "50"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html index 6d80fac7..4d0a092 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-004.html
@@ -36,13 +36,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "75"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.height = "300px"; item1.setAttribute("data-offset-y", "35"); item2.setAttribute("data-offset-y", "160"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html index 5f3d2fa..9231779 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-005.html
@@ -34,13 +34,16 @@ <div id="item2">XXXXX</div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "90"); item2.setAttribute("data-offset-y", "345"); - checkLayout('#grid'); + checkLayout('#grid', false); item2.style.fontSize = "40px"; item1.setAttribute("data-offset-y", "90"); item2.setAttribute("data-offset-y", "330"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html index 566a878..ccb2dfd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-006.html
@@ -34,13 +34,16 @@ <div id="item2">XXXXX</div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "95"); item2.setAttribute("data-offset-y", "345"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.fontSize = "40px"; item1.setAttribute("data-offset-y", "80"); item2.setAttribute("data-offset-y", "330"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html index d9b5632f..da51ff3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-block-axis-alignment-auto-margins-007.html
@@ -35,13 +35,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-y", "75"); item2.setAttribute("data-offset-y", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.height = "300px"; item1.setAttribute("data-offset-y", "35"); item2.setAttribute("data-offset-y", "160"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html index 7268b612..9216ed37 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html index 59edcd1..4a4a397 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="140" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html index 6e5d3293..8361638 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html index 33d711d..ef6e810 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html index b3d51eb9..7c90338 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="70" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="60" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html index acbb165a6..b1f2136 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html index c881031..eeeadef 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="140" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html index 0ebc17c4..1329501 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html index 64b33b88..60a135df 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="140" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html index c860249..eb01d61 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html index d772e1a..ad3beb8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="140" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html index 8f9975d2..57db133a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html index 80418b12..9854540a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="90" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="220" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html index 70ad6f70..2f0cd54 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="45" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="160" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html index 3fb572ba..d2bd432 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html index e143769..53284b4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="90" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="220" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html index 5e5a8c0..f20ac0d02 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html index e7bafab..0d3a556f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html
@@ -31,7 +31,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and verticalRL item</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html index 769ce1e..c20489e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html
@@ -34,7 +34,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and item with fixed height</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html index a68868e..10a9adb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html
@@ -36,7 +36,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and item with relative height</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html index f69fac5c..8c6d7ab 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html
@@ -34,7 +34,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and item with fixed height</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-container-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-container-baseline-001.html index d352977..73b3c76b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-container-baseline-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-container-baseline-001.html
@@ -70,24 +70,24 @@ <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-y="40"></div> </div> -<div class="wrapper" style="writing-mode: vertical-lr;"> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> +<div class="wrapper" style="writing-mode: vertical-lr; text-orientation: sideways;"> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> <div class="grid"> <div class="i1"></div> <div class="i2" data-offset-x="0"></div> <div class="i3"></div> </div> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> -<div class="wrapper" style="writing-mode: vertical-lr;"> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> +<div class="wrapper" style="writing-mode: vertical-lr; text-orientation: sideways;"> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> <div class="grid"> <div class="i1"></div> <div class="i2" style="writing-mode: horizontal-tb;" data-offset-x="0"></div> <div class="i3"></div> </div> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> <div class="wrapper" style="writing-mode: vertical-lr; text-orientation: sideways;"> @@ -110,24 +110,24 @@ <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> -<div class="wrapper" style="writing-mode: vertical-rl;"> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> +<div class="wrapper" style="writing-mode: vertical-rl; text-orientation: sideways;"> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> <div class="grid"> <div class="i1"></div> <div class="i2" data-offset-x="75"></div> <div class="i3"></div> </div> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> -<div class="wrapper" style="writing-mode: vertical-rl;"> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> +<div class="wrapper" style="writing-mode: vertical-rl; text-orientation: sideways;"> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> <div class="grid"> <div class="i1"></div> <div class="i2" style="writing-mode: horizontal-tb;" data-offset-x="75"></div> <div class="i3"></div> </div> - <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="65"></div> + <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> <div class="wrapper" style="writing-mode: vertical-rl; text-orientation: sideways;"> @@ -140,7 +140,7 @@ <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> </div> -<div class="wrapper" style="writing-mode: vertical-rl; text-orientation: sideways;"> +<div class="wrapper" style="writing-mode: vertical-rl; text-orientation: sideways;"> <div style="display: inline-block; width: 20px; height: 10px; background: black" data-offset-x="75"></div> <div class="grid"> <div class="i1"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html index 5f8c8e23..1d83f53 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html
@@ -23,8 +23,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onLoad="checkLayout('.grid');"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html index c3f32c7..74a783b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html
@@ -23,8 +23,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onLoad="checkLayout('.grid');"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html index 70e434be..a03b549 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html
@@ -39,8 +39,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onLoad="checkLayout('.grid');"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html index 8202af25..bc8af31 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html
@@ -87,8 +87,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <!-- Check that gutters do not interfere with self alignment computation. --> <div class="container">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html index d1fb13aa..5c7825c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-001.html
@@ -35,13 +35,18 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "75"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.width = "300px"; item1.setAttribute("data-offset-x", "35"); item2.setAttribute("data-offset-x", "160"); - checkLayout('#grid'); + checkLayout('#grid', true); + + done(); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html index f17afa7..3aa47a2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-002.html
@@ -35,13 +35,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "75"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); item1.style.width = "100px"; item1.setAttribute("data-offset-x", "50"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html index 6500a29..0136d7b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-003.html
@@ -36,13 +36,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "75"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); item1.style.width = "100px"; item1.setAttribute("data-offset-x", "50"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html index af9c27e9..1ee0de7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-004.html
@@ -36,13 +36,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "75"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.width = "300px"; item1.setAttribute("data-offset-x", "35"); item2.setAttribute("data-offset-x", "160"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html index fd9e696..72427f1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-005.html
@@ -36,6 +36,7 @@ <div id="item2">XXXXX</div> </div> <script> +setup({ explicit_done: true }); document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "50"); item2.setAttribute("data-offset-x", "325"); @@ -45,8 +46,6 @@ item1.setAttribute("data-offset-x", "50"); item2.setAttribute("data-offset-x", "275"); - checkLayout('#grid', false); - - done(); + checkLayout('#grid', true); }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html index 4492f9b1e..ed54ce7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-006.html
@@ -35,6 +35,7 @@ <div id="item2">XX</div> </div> <script> +setup({ explicit_done: true }); document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "80"); item2.setAttribute("data-offset-x", "340"); @@ -44,8 +45,6 @@ item1.setAttribute("data-offset-x", "50"); item2.setAttribute("data-offset-x", "325"); - checkLayout('#grid', false); - - done(); + checkLayout('#grid', true); }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html index 7954e88f..0b991de 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-inline-axis-alignment-auto-margins-007.html
@@ -35,13 +35,16 @@ <div id="item2"></div> </div> <script> +setup({ explicit_done: true }); +document.fonts.ready.then(() => { item1.setAttribute("data-offset-x", "75"); item2.setAttribute("data-offset-x", "300"); - checkLayout('#grid'); + checkLayout('#grid', false); grid.style.width = "300px"; item1.setAttribute("data-offset-x", "35"); item2.setAttribute("data-offset-x", "160"); - checkLayout('#grid'); + checkLayout('#grid', true); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html index 32c2efb..a9ec6522 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html
@@ -29,8 +29,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that grid items alignment works as expected with VERTICAL-LR vs HORIZONTAL-TB orthogonal flows.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html index 845c6cea..2b3b7a4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html
@@ -29,8 +29,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that grid items alignment works as expected with VERTICAL-RL vs HORIZONTAL-TB orthogonal flows.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html index c506547..13313252 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html
@@ -29,8 +29,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that grid items alignment works as expected with HORIZONTAL-TB vs VERTICAL-RL orthogonal flows.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html index 1a70eff..e113989 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-lr.html
@@ -33,8 +33,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that align-self and justify-self properties are not applied when there is auto-margin in the corresponding axis. Instead, auto-margin alignment should be applied.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html index 46cdd89..42c6dd2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment-vertical-rl.html
@@ -33,8 +33,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that align-self and justify-self properties are not applied when there is auto-margin in the corresponding axis. Instead, auto-margin alignment should be applied.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment.html index 86b39819..f9fdfd7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-item-auto-margins-alignment.html
@@ -33,8 +33,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <p>This test checks that align-self and justify-self properties are not applied when there is auto-margin in the corresponding axis. Instead, auto-margin alignment should be applied.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html index 967b0e4b..b76e808d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html index 7ccf397..c7ae3f0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="180" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html index 68534b9..a56de0c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html index f2615f1..3aa7a3d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="180" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html index 725cb1a..d37e541 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="20" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="140" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html index bd381f1e..fe440bf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html index 3d5f2782..cdd8b5a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="180" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html index 3d96e08..a52265e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html index bbcadb59..2ff678e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="180" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html index 6fba51df..801f6590 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="180" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html index d07711d..596787d0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html index a80afc6..1b27bfc9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="200" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html index 90c0d049..a15bbc0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="380" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html index 16fec813..52d8ca64 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="20" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="290" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html index cd51a36..83071e0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="380" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html index fc30ac4b..1ea12200 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="RTL firstRowFirstColumn">X XX X</div> <div data-offset-x="200" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="RTL firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html index 8c2c79d5..041ee3f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html
@@ -53,7 +53,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html index dff798c..870e368 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html
@@ -32,7 +32,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and verticalRL item</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html index 27e89c1..80dba9c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html
@@ -35,7 +35,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and verticalLR item with fixed width</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html index 3530084e..daf06a4a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html
@@ -35,7 +35,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>Horizontal grid and verticalLR item with relative width</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html index 4e49df7..f40d063 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html
@@ -35,7 +35,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.inline-grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.inline-grid'); })"> <pre>Horizontal grid and verticalLR item with relative width</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html index 5f32149..93e622ce 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html
@@ -60,7 +60,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="170" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html index 2308b694..6b2d5c4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html
@@ -62,7 +62,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="25" data-offset-y="5" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="160" data-offset-y="105" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html index 1874baa..0a5d674 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html
@@ -66,7 +66,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="140" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html index 4c952d1..b9237a5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html
@@ -62,7 +62,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="140" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html index de975e6..39c75eb5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html
@@ -68,7 +68,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="13" data-offset-y="2" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="150" data-offset-y="104" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html index 426e095a..6565a603 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html
@@ -76,7 +76,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="16" data-offset-y="3" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="153" data-offset-y="105" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html index 843711dd1..55c1892 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html
@@ -61,7 +61,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="10" data-expected-height="60" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="210" data-offset-y="80" data-expected-width="30" data-expected-height="70" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html index 91e243f..6edecba 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html
@@ -63,7 +63,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="25" data-offset-y="5" data-expected-width="10" data-expected-height="60" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="210" data-offset-y="65" data-expected-width="30" data-expected-height="70" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html index 7312a770..ad2f8b1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html
@@ -67,7 +67,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <!-- The test cases with vertical-rl wirting-mode will fail becauuse of bug 779105 --> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="40" data-expected-height="80" class="firstRowFirstColumn verticalLR">X XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html index 82ad124..85606201 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html
@@ -63,7 +63,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <!-- The test cases with vertical-rl wirting-mode will fail becauuse of bug 779105 --> <div class="grid"> <div data-offset-x="5" data-offset-y="0" data-expected-width="40" data-expected-height="80" class="firstRowFirstColumn verticalLR">X XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html index c1dda475..f3a8476 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html
@@ -69,7 +69,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <!-- The test cases with vertical-rl wirting-mode will fail becauuse of bug 779105 --> <div class="grid"> <div data-offset-x="13" data-offset-y="2" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html index e2805ca..0121846f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html
@@ -73,7 +73,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <!-- The test cases with vertical-rl wirting-mode will fail becauuse of bug 779105 --> <div class="grid"> <div data-offset-x="70" data-offset-y="2" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html index 499f2c3a..4c8bd89ec 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="30" data-offset-y="5" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="145" data-offset-y="105" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html index b8f0874..6624ea00 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html
@@ -61,7 +61,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="10" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="125" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html index e224a0a..cc377a5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="10" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="125" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html index 8aa8a5e1..afbbfcb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html
@@ -63,7 +63,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="20" data-offset-y="2" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="134" data-offset-y="104" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html index 027c1a1..3cf29475 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html
@@ -71,7 +71,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="23" data-offset-y="3" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="137" data-offset-y="105" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html index 8389b06..e1b3fc4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html
@@ -59,7 +59,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="80" data-offset-y="5" data-expected-width="10" data-expected-height="60" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="165" data-offset-y="65" data-expected-width="30" data-expected-height="70" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html index 598d7b4..855ed7cde 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html
@@ -63,7 +63,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="60" data-offset-y="0" data-expected-width="40" data-expected-height="80" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="145" data-offset-y="60" data-expected-width="60" data-expected-height="90" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html index b843f9f5..6fa38b92 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html
@@ -59,7 +59,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="60" data-offset-y="0" data-expected-width="40" data-expected-height="80" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="145" data-offset-y="60" data-expected-width="60" data-expected-height="90" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html index a36ed19b..0ff8497 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html
@@ -65,7 +65,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="70" data-offset-y="2" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="154" data-offset-y="64" data-expected-width="46" data-expected-height="80" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html index 6afabd12..003c3bbb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html
@@ -73,7 +73,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="73" data-offset-y="3" data-expected-width="26" data-expected-height="70" class="firstRowFirstColumn verticalLR">X XX X</div> <div data-offset-x="157" data-offset-y="65" data-expected-width="46" data-expected-height="80" class="firstRowSecondColumn verticalRL">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html index e330ffa..e068131 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html
@@ -60,7 +60,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="40" data-offset-y="0" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="290" data-offset-y="120" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html index 7b1ce952..9049a826 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html
@@ -62,7 +62,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="30" data-offset-y="5" data-expected-width="60" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="295" data-offset-y="105" data-expected-width="70" data-expected-height="30" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html index 328f14d..42b92fd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html
@@ -66,7 +66,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="10" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="275" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html index b3a86eb..db5c0f8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html
@@ -62,7 +62,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="10" data-offset-y="0" data-expected-width="90" data-expected-height="30" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="275" data-offset-y="100" data-expected-width="100" data-expected-height="50" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html index 31165fe..3b0a3be 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html
@@ -68,7 +68,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="20" data-offset-y="2" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="284" data-offset-y="104" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html index d61281b..7d0fd5dc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html
@@ -76,7 +76,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid LTR"> <div data-offset-x="23" data-offset-y="3" data-expected-width="76" data-expected-height="20" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="289" data-offset-y="105" data-expected-width="86" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-001.html index b091a94..95b5f4fe 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-001.html
@@ -50,7 +50,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="60" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-002.html index 6fba94c6..10ea533 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-002.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="90" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="60" data-expected-height="130" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-003.html index e0a38328..51ad168 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-003.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="60" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-004.html index 4c4f1c7..f0f19e29 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-004.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="10" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="60" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-005.html index aaf5a20..c21500c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-005.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="60" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="40" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-006.html index 248d57f..65f5246 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-006.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="90" data-expected-height="60" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="40" data-expected-height="130" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-007.html index 7ec5c3f..6ba763e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-007.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="60" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="40" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-008.html index 55fc784..e433dde9b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-008.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="60" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="0" data-expected-width="40" data-expected-height="150" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html index fe164de..90de8d4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html
@@ -50,7 +50,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="125" data-expected-height="20" class="firstRowFirstColumn">XX X</div> <div data-offset-x="125" data-offset-y="0" data-expected-width="80" data-expected-height="125" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html index 9feba74..b71a318 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="110" data-expected-height="20" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="110" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html index b4a199a..8b1999b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="120" data-expected-height="20" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="130" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-012.html index 51a8b5d5..fe738f2e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-012.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="120" data-expected-height="20" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="80" data-expected-height="130" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-013.html index 3202d73..ffb52481 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-013.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="125" data-expected-height="80" class="firstRowFirstColumn">XX X</div> <div data-offset-x="125" data-offset-y="0" data-expected-width="20" data-expected-height="125" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-014.html index 6e283ae..34e1c5e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-014.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="110" data-expected-height="80" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="20" data-expected-height="110" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-015.html index 5f761f1d..df8749c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-015.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="120" data-expected-height="80" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="20" data-expected-height="130" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-016.html index 2378190..0005926 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-016.html
@@ -54,7 +54,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="120" data-expected-height="80" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="0" data-expected-width="20" data-expected-height="130" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html index 516ea38..ac851b2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html index a7bc034..d1640a5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-002.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="90" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="130" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html index 8c37726..6b9563b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-003.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html index 0503bc4..05332f1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-004.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html index 617c727..ce17538 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-005.html
@@ -52,7 +52,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html index 4ab4f962..ab6282ab 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-006.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="90" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="130" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html index 6a8862ac..f960fee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-007.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html index d5107aa..fae2519 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-008.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="0" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html index 04fd2cc..6fa50733 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-009.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="125" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="125" data-expected-width="125" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html index d2393a6..2ca7951b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-010.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="110" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="110" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html index 22a690f..f15f0c5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-011.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="130" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html index c2c4039..e5077b2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-012.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="130" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html index 0a32566..a7790b6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-013.html
@@ -52,7 +52,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="125" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="125" data-expected-width="125" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html index 9b7d51c3..5c7fd92c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-014.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="110" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="110" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html index c19da89..9265d657 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-015.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="130" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html index 772d0ea..46370e4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-016.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="0" data-offset-y="120" data-expected-width="130" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html index 7743374..b41aeb7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-001.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="240" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html index 28314ca..36cec78 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-002.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="240" data-offset-y="0" data-expected-width="10" data-expected-height="90" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="120" data-offset-y="100" data-expected-width="130" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html index 6cb3233..c8e34e4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-003.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="240" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html index 6b0cc055..d88a7300 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-004.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="240" data-offset-y="0" data-expected-width="10" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="60" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html index c7cdd9c7..d38de47 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-005.html
@@ -52,7 +52,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="190" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html index e26fc4e2..36aaff90 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-006.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="190" data-offset-y="0" data-expected-width="60" data-expected-height="90" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="130" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html index a9485c10..d32631e7d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-007.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="190" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html index 748a22c..f6616048 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-008.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="190" data-offset-y="0" data-expected-width="60" data-expected-height="100" class="firstRowFirstColumn">X XX X</div> <div data-offset-x="100" data-offset-y="100" data-expected-width="150" data-expected-height="40" class="firstRowSecondColumn">XX X<br>X XXX<br>X<br>XX XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html index 5d94f36..1f852aba 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-009.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="230" data-offset-y="0" data-expected-width="20" data-expected-height="125" class="firstRowFirstColumn">XX X</div> <div data-offset-x="125" data-offset-y="125" data-expected-width="125" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html index 1e6e2483..e691767 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-010.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="230" data-offset-y="0" data-expected-width="20" data-expected-height="110" class="firstRowFirstColumn">XX X</div> <div data-offset-x="140" data-offset-y="120" data-expected-width="110" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html index d854595..86a02c60 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-011.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="230" data-offset-y="0" data-expected-width="20" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="120" data-expected-width="130" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html index 56736a90..d99580ee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-012.html
@@ -55,7 +55,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="230" data-offset-y="0" data-expected-width="20" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="120" data-expected-width="130" data-expected-height="80" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html index 01ba6a16..59b953a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-013.html
@@ -52,7 +52,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="170" data-offset-y="0" data-expected-width="80" data-expected-height="125" class="firstRowFirstColumn">XX X</div> <div data-offset-x="125" data-offset-y="125" data-expected-width="125" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html index 5f3019a..4da2cd6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="170" data-offset-y="0" data-expected-width="80" data-expected-height="110" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="120" data-expected-width="110" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html index c311352..86ed82f66 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html
@@ -57,7 +57,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="170" data-offset-y="0" data-expected-width="80" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="120" data-expected-width="130" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html index 67746851..57a25d1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html
@@ -56,7 +56,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid"> <div data-offset-x="170" data-offset-y="0" data-expected-width="80" data-expected-height="120" class="firstRowFirstColumn">XX X</div> <div data-offset-x="120" data-offset-y="120" data-expected-width="130" data-expected-height="20" class="firstRowSecondColumn">XX X</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html index 49d0a39..dae81ce 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html
@@ -49,7 +49,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.inline-grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.inline-grid'); })"> <div style="height: 125px"> <pre>auto-sized rows - items with relative height</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html index 8517771..10c6d8a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html
@@ -51,7 +51,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.inline-grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.inline-grid'); })"> <pre>auto-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> <div class="inline-grid alignItemsBaseline columns height200">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html index 9122b5cb..a62999c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html
@@ -43,7 +43,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>flex rows - column-axis baseline - the blue orthogonal item didn't participate in the first iteration</pre> <div class="grid row alignItemsBaseline">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html new file mode 100644 index 0000000..754fec3f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002-ref.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat"> +<head> + <style> + +.grid-container { + height: 30px; + width: 300px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container > * { float: left; height: 30px; } +.grid-container > :nth-child(2n) { background: sienna; } +.grid-container > :nth-child(2n + 1) { background: orange; } + +</style> +</head> + +<body> + <p>The test passes if it has the same visual effect as reference.</p> + <div class="grid-container"> + <div style="width: 10px;"></div> + <div style="width: 20px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + </div> + <div class="grid-container"> + <div style="width: 10px;"></div> + <div style="width: 20px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 30px;"></div> + <div style="width: 50px; margin-left: 40px;"></div> + </div> + <div class="grid-container"> + <div style="width: 20px; margin-left: 10px"></div> + <div style="width: 30px;"></div> + <div style="width: 30px; margin-left: 40px;"></div> + <div style="width: 40px;"></div> + <div style="width: 50px;"></div> + <div style="width: 60px;"></div> + </div> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html new file mode 100644 index 0000000..723d876 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-002.html
@@ -0,0 +1,62 @@ +<!DOCTYPE html> +<html> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat"> +<link rel="match" href="grid-auto-repeat-multiple-values-002-ref.html"> +<head> + <style> + +.holder { + height: 30px; + width: 300px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container { + display: grid; + grid-template-columns: 10px 20px repeat(auto-fill, 30px 40px) 50px 60px; + grid-template-rows: repeat(auto-fill, minmax(30px, auto)); +} + +.grid-container > :nth-child(2n) { background: sienna; } +.grid-container > :nth-child(2n+1) { background: orange; } + </style> +</head> + +<body> + <p>The test passes if it has the same visual effect as reference.</p> + <div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + + <div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div style="grid-column: 7;"></div> + </div> + </div> + + <div class="holder"> + <div class="grid-container"> + <div style="grid-column: 2;"></div> + <div></div> + <div style="grid-column: 5;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html new file mode 100644 index 0000000..975c94b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003-ref.html
@@ -0,0 +1,104 @@ +<!DOCTYPE html> +<html> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat"> +<head> + <style> + +.grid-container { + height: 30px; + width: 300px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container > * { float: left; height: 30px; } +.grid-container > :nth-child(2n) { background: sienna; } +.grid-container > :nth-child(2n + 1) { background: orange; } + +.auto-fit-long { + width: 650px; +} + +.auto-fit-long > :nth-child(2n) { width: 30px; } +.auto-fit-long > :nth-child(2n+1) { width: 40px; } + +.auto-medium-fit { + width: 510px; +} + +</style> +</head> + +<body> + <p>The test passes if it has the same visual effect as reference.</p> + <div class="grid-container"> + <div style="width: 10px;"></div> + <div style="width: 20px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + </div> + <div class="grid-container"> + <div style="width: 10px;"></div> + <div style="width: 20px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 30px;"></div> + <div style="width: 50px;"></div> + </div> + <div class="grid-container auto-fit-long"> + <div style="width: 20px; margin-left: 10px"></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + <div class="grid-container auto-fit-long"> + <div style="width: 20px; margin-left: 10px"></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + <div class="grid-container auto-fit-long"> + <div style="width: 20px; margin-left: 10px"></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + <div class="grid-container"> + <div style="width: 20px; margin-left: 10px"></div> + <div style="width: 30px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 50px;"></div> + <div style="width: 60px;"></div> + </div> + <div class="grid-container"> + <div style="width: 10px;"></div> + <div style="width: 20px;"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 50px;"></div> + <div style="width: 60px;"></div> + </div> + <div class="grid-container"> + <div style="width: 40px; margin-left: 30px"></div> + <div style="width: 30px;"></div> + <div style="width: 40px;"></div> + <div style="width: 50px;"></div> + <div style="width: 60px;"></div> + </div> + <div class="grid-container auto-medium-fit"> + <div style="width: 10px;"></div> + <div style="width: 110px; margin-left: 20px"></div> + <div style="width: 30px;"></div> + </div> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html new file mode 100644 index 0000000..486259a5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-003.html
@@ -0,0 +1,127 @@ +<!DOCTYPE html> +<html> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#typedef-auto-repeat"> +<link rel="match" href="grid-auto-repeat-multiple-values-003-ref.html"> +<head> + <style> + +.holder { + height: 30px; + width: 300px; + border-bottom: 2px solid #cfbfcf; +} + +.wide-holder { + height: 30px; + width: 650px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container { + display: grid; + grid-template-columns: 10px 20px repeat(auto-fit, 30px 40px) 50px 60px; + grid-template-rows: repeat(auto-fill, minmax(30px, auto)); +} + +.grid-container > :nth-child(2n) { background: sienna; } +.grid-container > :nth-child(2n+1) { background: orange; } + </style> +</head> + +<body> + <p>The test passes if it has the same visual effect as reference.</p> + <div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + + <div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div style="grid-column: 7;"></div> + </div> + </div> + <!-- Test correct tracking of collapsed tracks --> + <div class="holder" style="width: 650px"> + <div class="grid-container"> + <div style="grid-column: 2;"></div> + <div></div> + <div style="grid-column: 6;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <div class="holder" style="width: 650px"> + <div class="grid-container"> + <div style="grid-column: 2;"></div> + <div></div> + <div style="grid-column: 10;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <div class="holder" style="width: 650px"> + <div class="grid-container"> + <div style="grid-column: 2;"></div> + <div></div> + <div style="grid-column: 12;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <div class="holder"> + <div class="grid-container"> + <div style="grid-column: 2;"></div> + <div></div> + <div style="grid-column: 5;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div style="grid-column: 5;"></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <!-- Test correct tracking of collapsed tracks when the grid begins in the middle of the repeat. --> + <div class="holder"> + <div class="grid-container"> + <div style="grid-column: 4;"></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> + </div> + <!-- Test grid span with correct tracking of collapsed tracks. --> + <div class="holder" style="width: 510px"> + <div class="grid-container"> + <div></div> + <div style="grid-column: 4 / 7;"></div> + <div></div> + </div> + </div> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html index c46722b..d697af4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html
@@ -25,6 +25,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> <script> +setup({ explicit_done: true }); function setGridTemplate(id, gridTemplateRows, gridTemplateColumns) { var gridElement = document.getElementById(id); @@ -60,10 +61,9 @@ done(); } - -window.addEventListener("load", testChangingGridDefinitions, false); </script> +<body onload="document.fonts.ready.then(() => { testChangingGridDefinitions(); })"> <div id="grid1" class="grid"> <div id="item1" class="autoRowAutoColumn">XXXX XXX XX X X</div> </div> @@ -71,3 +71,4 @@ <div id="grid2" class="grid"> <div id="item2" class="autoRowAutoColumn verticalLR">XXXX XXX XX X X</div> </div> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html index 40c642e1..c0be13e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html
@@ -26,7 +26,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid');"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html index ce191b6..ae65f220 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html
@@ -19,7 +19,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid');"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html new file mode 100644 index 0000000..d6569642 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002-ref.html
@@ -0,0 +1,216 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(<custom-ident\>*)' syntax"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions"> +<style> + +.holder { + width: 300px; + height: 20px; + border-bottom: 2px solid #cfbfcf; +} + +.holder > :nth-child(2) { + clear: left; /* Forces the div to a new line to simulate a new grid row. */ + padding-top: 2px; /* Simulates the grid row gap. */ +} + +.grid-container > * { float: left; height: 8px; } + +.grid-container > :nth-child(3n) { background: sienna; } +.grid-container > :nth-child(3n+1) { background: gold; } +.grid-container > :nth-child(3n+2) { background: orange; } + +.alt-color > :nth-child(2n) { background: sienna; } +.alt-color > :nth-child(2n+1) { background: orange; } + +.invis { width: 0px; visibility: none; } + +</style> + +<p>The test passes if it has the same visual effect as reference.</p> + +<div class="holder"> + <div class="grid-container"> + <div style="width:30px; margin-left:30px"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:50px; margin-left:170px"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:30px; margin-left:30px"></div> + <div style="width:30px; margin-left:40px"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:30px; margin-left:20px"></div> + <div style="width:30px; margin-left:40px"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:30px; margin-left:30px"></div> + <div style="width:50px; margin-left:110px"></div> + <div style="width:60px;"></div> + </div> + <div class="grid-container"> + <div style="width:10px"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:30px; margin-left:20px"></div> + <div style="width:50px; margin-left:110px"></div> + <div style="width:60px;"></div> + </div> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:50px; margin-left:10px;"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:90px; margin-left:10px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:90px;"></div> + <div class="invis"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div style="width:120px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:90px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:50px;"></div> + <div class="invis"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div style="width:90px;"></div> + <div style="width:30px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:50px;"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:20px;"></div> + <div style="width:140px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:20px;"></div> + <div class="invis"></div> + <div style="width:140px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="width:30px;"></div> + <div style="width:140px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:140px; margin-left:20px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:210px;"></div> + </div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002.html new file mode 100644 index 0000000..6b3b19ef --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-002.html
@@ -0,0 +1,219 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Support for named grid lines when 'grid-template-columns' and 'grid-template-rows' have multiple values inside of a repeat.</title> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(<custom-ident\>*)' syntax"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions"> +<link rel="match" href="grid-support-named-grid-lines-002-ref.html"> +<style> + +.holder { + width: 300px; + height: 20px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container { + display: grid; + /* + Defines the grid areas 'repeat', which covers the repeat only, and + 'around-repeat' which covers the repeat and one track on either end. + + Provides the line name 'all' in every track, the line names 'v' and 'u' + which alternate in every grid line. + */ + grid-template-columns: [v] 10px [around-repeat-start a t-start w-start u all] 20px [repeat-start b] repeat(auto-fill, [all x v] 30px [all w-end y u] 40px [all t-end z]) [repeat-end c v] 50px [around-repeat-end all d u] 60px [e v]; + grid-template-rows: + [w-start t-start around-repeat-start repeat-start] + repeat(auto-fill, 8px) + [w-end t-end around-repeat-end repeat-end ] + 8px; + grid-row-gap: 2px; +} + +.grid-container > :nth-child(3n) { background: sienna; } +.grid-container > :nth-child(3n+1) { background: gold; } +.grid-container > :nth-child(3n+2) { background: orange; } + +/* Alternate colors for some grid containers, where sometimes multiple grid + items would appear as one item or the actual ordering would be ambiguous + otherwise. */ +.alt-color > :nth-child(2n) { background: sienna; } +.alt-color > :nth-child(2n+1) { background: orange; } + +</style> + +<p>The test passes if it has the same visual effect as reference.</p> + +<!-- Use the line names just before and just after the repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:b / span 1"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:c / span 1"></div> + </div> +</div> + +<!-- Use line names that are inside a repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-column-start:x"></div> + <div style="grid-column-start:z"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-column-start:x"></div> + <div style="grid-column-start:z"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-column-start:x 1"></div> + <div style="grid-column-start:z 2"></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-column-start:x 1"></div> + <div style="grid-column-start:z 2"></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using a span that goes from outside a repeat to inside the repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:u / y"></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:u / z"></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using an area which has one end inside the repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using an area which spans the entire repeat. --> +<div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: around-repeat;"></div> + <div></div> + </div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html new file mode 100644 index 0000000..33f88bf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003-ref.html
@@ -0,0 +1,222 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(<custom-ident\>*)' syntax"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions"> +<style> + +.holder { + width: 300px; + height: 20px; + border-bottom: 2px solid #cfbfcf; +} + +.holder > :nth-child(2) { + clear: left; /* Forces the div to a new line to simulate a new grid row. */ + padding-top: 2px; /* Simulates the grid row gap. */ +} + +.grid-container > * { float: left; height: 8px; } + +.grid-container > :nth-child(3n) { background: sienna; } +.grid-container > :nth-child(3n+1) { background: gold; } +.grid-container > :nth-child(3n+2) { background: orange; } + +.alt-color > :nth-child(2n) { background: sienna; } +.alt-color > :nth-child(2n+1) { background: orange; } + +.invis { width: 0px; visibility: none; } + +</style> + +<p>The test passes if it has the same visual effect as reference.</p> + +<div class="holder"> + <div class="grid-container"> + <div style="width:30px; margin-left:30px"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:30px; margin-left:20px"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:30px; margin-left:30px"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> + <div class="grid-container"> + <div style="width:10px"></div> + <div style="width:20px"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:30px; margin-left:20px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px"></div> + <div style="width:20px"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:50px; margin-left:10px;"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:90px; margin-left:10px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:90px;"></div> + <div class="invis"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div style="width:120px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:90px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:50px;"></div> + <div class="invis"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div style="width:90px;"></div> + <div style="width:30px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:50px;"></div> + <div style="width:40px;"></div> + <div style="width:30px;"></div> + <div style="width:40px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:20px;"></div> + <div style="width:140px;"></div> + <div style="width:50px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:20px;"></div> + <div class="invis"></div> + <div style="width:140px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="width:30px;"></div> + <div style="width:140px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:140px; margin-left:20px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="width:10px;"></div> + <div style="width:210px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="width:10px;"></div> + <div style="width:210px;"></div> + <div style="width:60px;"></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div class="invis"></div> + <div style="width:10px;"></div> + <div class="invis"></div> + <div style="width:210px;"></div> + </div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003.html new file mode 100644 index 0000000..c2c722485 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-003.html
@@ -0,0 +1,224 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: Support for named grid lines when 'grid-template-columns' and 'grid-template-rows' have multiple values inside of a repeat.</title> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#named-lines" title="5.1.1. Named Grid Lines: the '(<custom-ident\>*)' syntax"> +<link rel="help" href="https://www.w3.org/TR/css-grid-1/#valdef-repeat-auto-fill" title="7.2.2.2. Repeat-to-fill: 'auto-fill' and 'auto-fit' repetitions"> +<link rel="match" href="grid-support-named-grid-lines-003-ref.html"> +<style> + +.holder { + width: 300px; + height: 20px; + border-bottom: 2px solid #cfbfcf; +} + +.grid-container { + display: grid; + /* + Defines the grid areas 'repeat', which covers the repeat only, and + 'around-repeat' which covers the repeat and one track on either end. + + Provides the line name 'all' in every track, the line names 'v' and 'u' + which alternates in every grid line. + */ + grid-template-columns: [v] 10px [around-repeat-start a t-start w-start u all] 20px [repeat-start b] repeat(auto-fit, [all x v] 30px [all w-end y u] 40px [all t-end z]) [repeat-end c v] 50px [around-repeat-end all d u] 60px [e v]; + grid-template-rows: + [w-start t-start around-repeat-start repeat-start] + repeat(auto-fit, 8px) + [w-end t-end around-repeat-end repeat-end ] + 8px; + grid-row-gap: 2px; +} + +.grid-container > :nth-child(3n) { background: sienna; } +.grid-container > :nth-child(3n+1) { background: gold; } +.grid-container > :nth-child(3n+2) { background: orange; } + +/* Alternate colors for some grid containers, where sometimes multiple grid + items would appear as one item or the actual ordering would be ambiguous + otherwise. */ +.alt-color > :nth-child(2n) { background: sienna; } +.alt-color > :nth-child(2n+1) { background: orange; } + +</style> + +<p>The test passes if it has the same visual effect as reference.</p> + +<!-- Use line names that are inside a repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-column-start:x"></div> + <div style="grid-column-start:z"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-column-start:x"></div> + <div style="grid-column-start:z"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-column-start:x 1"></div> + <div style="grid-column-start:z 2"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-column-start:x 1"></div> + <div style="grid-column-start:z 2"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using a span that goes from outside a repeat to inside the repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:u / y"></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-column:u / z"></div> + <div></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using an area which has one end inside the repeat. --> +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: t;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: w;"></div> + <div></div> + <div></div> + <div></div> + </div> +</div> + +<!-- Using an area which spans the entire repeat. --> +<div class="holder"> + <div class="grid-container"> + <div></div> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div></div> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div></div> + <div style="grid-area: around-repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container alt-color"> + <div></div> + <div style="grid-area: around-repeat;"></div> + <div></div> + </div> +</div> + +<div class="holder"> + <div class="grid-container"> + <div style="grid-area: around-repeat;"></div> + <div></div> + </div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-002.html index 9d1fefb0..a5174fe 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-definition/grid-support-repeat-002.html
@@ -25,6 +25,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> +setup({explicit_done: true}); var {style} = document.getElementById("grid"); function testGridTemplateColumnsRows(assignedValue, expectedValue = assignedValue) { @@ -36,31 +37,34 @@ }, `grid-template-columns: ${assignedValue}; and grid-template-rows: ${assignedValue};`); } -// Valid values. -testGridTemplateColumnsRows("repeat(1, auto)"); -testGridTemplateColumnsRows("repeat(2, auto)"); -testGridTemplateColumnsRows("repeat(2, minmax(50px, calc(50% + 50px)))"); -testGridTemplateColumnsRows("repeat(5, 10%)"); -testGridTemplateColumnsRows("max-content repeat(2, 25%) 1fr"); -testGridTemplateColumnsRows("repeat(2, min-content 50px)"); -testGridTemplateColumnsRows("repeat(2, [a] minmax(50px, 100px) [b] 25em [c])"); -testGridTemplateColumnsRows("[a] repeat(2, auto [b] 100px) [c]"); -testGridTemplateColumnsRows("[a] auto repeat(2, [b] 100px) [c]"); -testGridTemplateColumnsRows("[a] repeat(2, auto [b]) 100px [c]"); -testGridTemplateColumnsRows("[a] repeat(2, [b] 100px)"); -testGridTemplateColumnsRows("[a] repeat(2, [b] auto [c]) [d]"); -testGridTemplateColumnsRows("[a] min-content repeat(2, [b] 1fr [c] calc(10% + 20px)) [d] minmax(30em, 50em) [e]"); +document.fonts.ready.then(() => { + // Valid values. + testGridTemplateColumnsRows("repeat(1, auto)"); + testGridTemplateColumnsRows("repeat(2, auto)"); + testGridTemplateColumnsRows("repeat(2, minmax(50px, calc(50% + 50px)))"); + testGridTemplateColumnsRows("repeat(5, 10%)"); + testGridTemplateColumnsRows("max-content repeat(2, 25%) 1fr"); + testGridTemplateColumnsRows("repeat(2, min-content 50px)"); + testGridTemplateColumnsRows("repeat(2, [a] minmax(50px, 100px) [b] 25em [c])"); + testGridTemplateColumnsRows("[a] repeat(2, auto [b] 100px) [c]"); + testGridTemplateColumnsRows("[a] auto repeat(2, [b] 100px) [c]"); + testGridTemplateColumnsRows("[a] repeat(2, auto [b]) 100px [c]"); + testGridTemplateColumnsRows("[a] repeat(2, [b] 100px)"); + testGridTemplateColumnsRows("[a] repeat(2, [b] auto [c]) [d]"); + testGridTemplateColumnsRows("[a] min-content repeat(2, [b] 1fr [c] calc(10% + 20px)) [d] minmax(30em, 50em) [e]"); -// Reset values. -style.gridTemplateColumns = ""; -style.gridTemplateRows = ""; + // Reset values. + style.gridTemplateColumns = ""; + style.gridTemplateRows = ""; -// Wrong values. -testGridTemplateColumnsRows("repeat(-1, auto)", ""); -testGridTemplateColumnsRows("repeat(auto, 2)", ""); -testGridTemplateColumnsRows("repeat 2, auto", ""); -testGridTemplateColumnsRows("repeat(2 auto)", ""); -testGridTemplateColumnsRows("100px (repeat 2, auto)", ""); -testGridTemplateColumnsRows("repeat(2, 50px repeat(2, 100px))", ""); -testGridTemplateColumnsRows("100px repeat(2, [a])", ""); + // Wrong values. + testGridTemplateColumnsRows("repeat(-1, auto)", ""); + testGridTemplateColumnsRows("repeat(auto, 2)", ""); + testGridTemplateColumnsRows("repeat 2, auto", ""); + testGridTemplateColumnsRows("repeat(2 auto)", ""); + testGridTemplateColumnsRows("100px (repeat 2, auto)", ""); + testGridTemplateColumnsRows("repeat(2, 50px repeat(2, 100px))", ""); + testGridTemplateColumnsRows("100px repeat(2, [a])", ""); + done(); +}); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-001.html index 62fc14f..dc1602ab 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-001.html
@@ -30,8 +30,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-002.html index 19c75d7..6ff78b4b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-002.html
@@ -30,8 +30,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html index 81e0965..05d77f3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html index 5d9584d..168a719 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html index f0b49386..78ce9f76 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html index 142b2fd..83b5dc7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-001.html index 892f8f9..7c99eb9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-001.html
@@ -30,8 +30,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-002.html index 798cdbdb..447b5201 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-002.html
@@ -30,8 +30,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html index 74997fd..a21ab29d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html index edffee2..786efe82 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html index 92f94387..5bb2566 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html index d3e062e..5502aec 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html index ab66d70..d2c2215 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html
@@ -70,7 +70,6 @@ } setup({ explicit_done: true }); - window.addEventListener("load", runTests); function runTests() { checkGridSizeTracksAndImageSize("grid-1", "img-1", "200px", "200px", "200px", "200px", "200px", "200px"); @@ -102,6 +101,7 @@ } </script> +<body onload="document.fonts.ready.then(() => { runTests(); })"> <div id=log></div> <!-- Grids with only a 50x50 image as grid item. --> @@ -219,3 +219,4 @@ <img id="img-24" class="width100percent" src="support/500x500-green.png"> <div>ITEM</div> </div> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html index 350bce59..38e1a1b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html
@@ -27,8 +27,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html index 0f91381..8993e2f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html
@@ -28,8 +28,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html index 7406328..fc7c91db 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html index 7b8c956d..544e71c5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html
@@ -32,8 +32,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html index d014a22e7..907ef68 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-001.html
@@ -26,8 +26,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid justifyContentSpaceBetween" data-expected-width="200" data-expected-height="40"> <div class="item" data-expected-width="200" data-expected-height="40">XXX XX X XX X XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html index 150077fb..7c39525 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html
@@ -27,11 +27,14 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> <!-- Heuristic for estimating row-size for orthogonal items should also consider Content Alignment, so that grid container width is 40px. https://github.com/w3c/csswg-drafts/issues/2697 --> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid justifyContentStart alignContentSpaceBetween" data-expected-width="80" data-expected-height="200"> <div class="item" data-expected-width="40" data-expected-height="200">XXX XX X XX X XXX</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html index 052fee1..b3c692c8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid justifyContentSpaceAround" data-expected-width="200" data-expected-height="60"> <div class="item1" data-expected-width="100" data-expected-height="40">XXXX XXX</div> <div class="item2" data-expected-width="100" data-expected-height="20">XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html index 611c4b38..045e080a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html
@@ -31,8 +31,11 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> -<body onload="checkLayout('.grid')"> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div class="grid justifyContentSpaceBetween" data-expected-width="220" data-expected-height="40"> <div class="item1" data-expected-width="110" data-expected-height="40">XXXX XXX</div> <div class="item2" data-expected-width="60" data-expected-height="40">XXX</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html index d8e6daff..150878b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html
@@ -33,7 +33,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html index 1e9a42d..f3c2087 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html
@@ -20,7 +20,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html index 1097956..4dfcd126 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html
@@ -26,7 +26,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/check-layout-th.js"></script> -<body onload="checkLayout('.grid')"> +<script type="text/javascript"> + setup({ explicit_done: true }); +</script> +<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })"> <pre>rows: auto</pre>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent.html b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent.html index a788ca2..ed67f03 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-columns-computed-withcontent.html
@@ -80,6 +80,12 @@ '100px [two] 100px [two] 100px [two]'); test_computed_value("grid-template-columns", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])', '[three] 240px [four]'); +test_computed_value('grid-template-columns', '[a] 21px [b] repeat(auto-fill, [c] 22px [d] 23px [e]) [f] 24px [g]', + '[a] 21px [b c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e c] 22px [d] 23px [e f] 24px [g]'); +test_computed_value('grid-template-columns', '[a] 21px [b c] repeat(auto-fill, [d e] 22px [f g h] 23px [i j k l]) [m n] 24px [o]', + '[a] 21px [b c d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l d e] 22px [f g h] 23px [i j k l m n] 24px [o]'); +test_computed_value('grid-template-columns', '[a] repeat(2, [b] 20px [c d] 21px [e f g]) [h i] repeat(auto-fit, [j] 22px [k l m] 23px [n o p q]) [r s]', + '[a b] 20px [c d] 21px [e f g b] 20px [c d] 21px [e f g h i j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q j] 0px [k l m] 0px [n o p q r s]'); // <auto-track-list> = // [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html new file mode 100644 index 0000000..c18f296a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-001.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns"> +<meta name="assert" content="grid-template-columns computed value is the keyword none or a computed track list."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/css-grid/support/grid-child-utils.js"></script> +<style> + +#target { + display: grid; + width: 32px; + height: 10px; +}; + +</style> +</head> +<body> +<div id="container"> + <div id="target"> + <div></div> + <div></div> + <div id="child"></div> + <div style="grid-column: 7"></div> + <div></div> + </div> +</div> +<script> + +let autoFitTester = new GridChildHelper(gridChildHelperCol, + "[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h]) [i] 5px [k] 6px [l m] "); + +let autoFillTester = new GridChildHelper(gridChildHelperCol, + "[a] 1px [b] 2px [c d] repeat(auto-fill, [e f] 3px [g] 4px [h]) [i] 5px [k] 6px [l m] "); + +// Auto-fit +autoFitTester.runTest(3, "[a] 1px [b] 2px [c d e f] 3px [g] 0px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest(4, "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest(5, "[a] 1px [b] 2px [c d e f] 0px [g] 0px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest(6, "[a] 1px [b] 2px [c d e f] 0px [g] 0px [h e f] 0px [g] 4px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest("4 / 5", "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 0px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest("4 / 6", "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]"); +autoFitTester.runTest("3 / 6", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 0px [h i] 5px [k] 6px [l m]"); +// Auto-fill. These tests are semi-redundant, but should still pass. +autoFillTester.runTest(3, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]"); +autoFillTester.runTest(4, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]"); +autoFillTester.runTest(5, "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]"); +autoFillTester.runTest("4 / 7", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]"); +autoFillTester.runTest("3 / 6", "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h i] 5px [k] 6px [l m]"); + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html new file mode 100644 index 0000000..8cb9209c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-template-repeat-auto-computed-withcontent-002.html
@@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title> +<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns"> +<meta name="assert" content="grid-template-columns computed value is the keyword none or a computed track list."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/css-grid/support/grid-child-utils.js"></script> +<style> + +#target { + display: grid; + width: 54px; + height: 32px; +}; + +</style> +</head> +<body> +<div id="container"> + <div id="target"> + <div></div> + <div></div> + <div style="grid-column: 4"></div> + <div id="child"></div> + <div style="grid-column: 10"></div> + <div></div> + </div> +</div> +<script> + +// Style with 3 repeat tracks. +let style3 = + "[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h] 5px [i j]) [k] 7px [k] 8px [l m]"; +let col3Tester = new GridChildHelper(gridChildHelperCol, style3); +let rowTester = new GridChildHelper(gridChildHelperRow, style3); + +// Style with 2 repeat tracks. +let style2 = + "[a] 1px [b] 2px [c d] repeat(auto-fit, [e f] 3px [g] 4px [h]) [i j] 7px [k] 8px [l m]"; +let col2Tester = new GridChildHelper(gridChildHelperCol, style2); + +rowTester.runTest(3, + "[a] 1px [b] 2px [c d e f] 3px [g] 0px [h] 0px [i j k] 7px [k] 8px [l m]"); +rowTester.runTest(5, + "[a] 1px [b] 2px [c d e f] 0px [g] 0px [h] 5px [i j k] 7px [k] 8px [l m]"); +rowTester.runTest("3 / 8", + "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +rowTester.runTest("4 / span 2", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +rowTester.runTest("4 / 5", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j k] 7px [k] 8px [l m]"); + +col3Tester.runTest(3, + "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest(6, + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 3px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest("3 / 8", + "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h] 5px [i j e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest("5 / span 2", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j e f] 3px [g] 0px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest("7 / span 2", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest("5 / 8", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 5px [i j e f] 3px [g] 4px [h] 0px [i j e f] 0px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); +col3Tester.runTest("8 / 10", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h] 0px [i j e f] 0px [g] 0px [h] 5px [i j e f] 3px [g] 4px [h] 5px [i j k] 7px [k] 8px [l m]"); + +col2Tester.runTest(3, + "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 0px [g] 0px [h e f] 0px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]"); +col2Tester.runTest(6, + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 4px [h e f] 0px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]"); +col2Tester.runTest("3 / 8", + "[a] 1px [b] 2px [c d e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]"); +col2Tester.runTest("6 / span 2", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h e f] 0px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]"); +col2Tester.runTest("5 / 10", + "[a] 1px [b] 2px [c d e f] 0px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 4px [h e f] 3px [g] 0px [h i j] 7px [k] 8px [l m]"); + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-computed-nogrid.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-computed-nogrid.html new file mode 100644 index 0000000..6c2042fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/grid-template-computed-nogrid.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/#resolved-track-list" "title"="2.3. Resolved Value of a Track Listing"> +<meta name="assert" content="Checks the resolved value of grid-template-columns or grid-template-columns on an element which is not a grid container."> +<style> +#target { + display: block; + height: 1px; + font-size: 1px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="target"></div> +<script> +test_computed_value("grid-template-columns", "subgrid [a]"); +test_computed_value("grid-template-columns", "subgrid [a] [b]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] [b] [c]"); +test_computed_value("grid-template-columns", "subgrid [a] [b c d] [e f] [e f] [g]"); +test_computed_value("grid-template-columns", "subgrid [a b c] [d] [e f]"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c]) [g]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c]) [g h]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c d])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c d]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c d]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c d]) [g]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c d]) [g h]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c d])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c] [d]) [g]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d e])"); +test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c] [d e]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]"); +test_computed_value("grid-template-columns", "subgrid [a b] repeat(auto-fill, [c] [d e]) [g]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]"); +test_computed_value("grid-template-columns", "subgrid [a] [b] repeat(auto-fill, [c] [d e])"); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008-ref.html new file mode 100644 index 0000000..4cbb154 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008-ref.html
@@ -0,0 +1,322 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} + +.fill-0a { grid-template-columns: subgrid [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] [y] [y] [y] [z] } /* [x] [y] [y] [y] [z] */ +.fill-0d { grid-template-columns: subgrid [x] [z] [z] [z] [z] } /* [x] [z] [z] [z] [z] */ +.fill-0e { grid-template-columns: subgrid [x] [x] [x] [x] [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid [x] [x] [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0g { grid-template-columns: subgrid [x] [y] [z] [z] } /* [x] [y] [z] [z] [] */ +.fill-0h { grid-template-columns: subgrid [x] [y] [x] [y] [z] } /* [x] [y] [x] [y] [z] */ +.fill-0i { grid-template-columns: subgrid [x] [y] [x] [y] } /* [x] [y] [x] [y] [] */ +.fill-0j { grid-template-columns: subgrid [y] [y] [y] [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-0k { grid-template-columns: subgrid [x] [y] [z] [z] } /* [x] [y] [z] [z] [] */ +.fill-0l { grid-template-columns: subgrid [z] [x] [y] [z] } /* [z] [x] [y] [z] [] */ +.fill-0m { grid-template-columns: subgrid [z] [x] [y] [x] [y] } /* [z] [x] [y] [x] [y] */ +.fill-0n { grid-template-columns: subgrid [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0o { grid-template-columns: subgrid [z] [x] [y] [z] } /* [z] [x] [y] [z] [] */ +.fill-0p { grid-template-columns: subgrid [z] [x] [y] [z] [x] } /* [z] [x] [y] [z] [x] */ +.fill-0q { grid-template-columns: subgrid [x] [y] [z] [x] } /* [x] [y] [z] [x] [] */ +.fill-0r { grid-template-columns: subgrid [x] [y] [z] [y] [z] } /* [x] [y] [z] [y] [z] */ + +.fill-0s { + grid-column: 2 / span 5; + grid-template-columns: subgrid [w] [y] [z] [y] [z] [x]; /* [w] [y] [z] [y] [z] [x] */ +} + +.fill-0t { + grid-column: 1 / span 6; + grid-template-columns: subgrid [w] [y] [z] [y] [z] [x]; /* [w] [y] [z] [y] [z] [x] [] */ +} + +.subgrid > :nth-child(2n) { background: black; } +.subgrid > :nth-child(2n+1) { background: pink; } + + </style> + </head> +<body> + +<div class="grid"><div class="subgrid fill-0a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0d"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0e"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0f"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0g"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0h"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0i"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0j"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0k"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0l"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0m"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0n"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0o"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0p"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0q"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0r"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0s"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0t"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008.html new file mode 100644 index 0000000..2823817 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/subgrid/repeat-auto-fill-008.html
@@ -0,0 +1,358 @@ +<!DOCTYPE HTML> +<html> + <link rel="author" title="Mozilla" href="https://mozilla.org"> + <link rel="match" href="repeat-auto-fill-008-ref.html"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2/#resolved-track-list"> + <head> + <style> +html,body { + color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; +} + +.grid { + display: inline-grid; + grid-auto-columns: 15px; + border: 1px solid; +} + +.subgrid { + display: grid; + grid-column: 3 / span 4; + grid-auto-rows: 8px; + background: grey; +} + +.fill-0a { grid-template-columns: subgrid repeat(auto-fill, [y] [y]) [z] [z] [z] [z] [z] } /* [z] [z] [z] [z] [z] */ +.fill-0b { grid-template-columns: subgrid [z] repeat(auto-fill, [z] [z] [z]) [z] } /* [z] [z] [z] [z] [z] */ +.fill-0c { grid-template-columns: subgrid [x] repeat(auto-fill, [y] [y] [y]) [z] } /* [x] [y] [y] [y] [z] */ +.fill-0d { grid-template-columns: subgrid [x] repeat(auto-fill, [z] [z]) } /* [x] [z] [z] [z] [z] */ +.fill-0e { grid-template-columns: subgrid repeat(auto-fill, [x] [x]) [z] } /* [x] [x] [x] [x] [z] */ +.fill-0f { grid-template-columns: subgrid repeat(auto-fill, [x] [x]) [z] [z] [z] } /* [x] [x] [z] [z] [z] */ +.fill-0g { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] [z] } /* [x] [y] [z] [z] [] */ +.fill-0h { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] } /* [x] [y] [x] [y] [z] */ +.fill-0i { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) } /* [x] [y] [x] [y] [] */ +.fill-0j { grid-template-columns: subgrid repeat(auto-fill, [y]) [z] [z] } /* [y] [y] [y] [z] [z] */ +.fill-0k { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) [z] [z] } /* [x] [y] [z] [z] [] */ +.fill-0l { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y]) [z] } /* [z] [x] [y] [z] [] */ +.fill-0m { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y]) } /* [z] [x] [y] [x] [y] */ +.fill-0n { grid-template-columns: subgrid repeat(auto-fill, [x] [y]) repeat(100, [z])} /* [z] [z] [z] [z] [z] */ +.fill-0o { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y] [z]) } /* [z] [x] [y] [z] [] */ +.fill-0p { grid-template-columns: subgrid [z] repeat(auto-fill, [x] [y] [z]) [x] } /* [z] [x] [y] [z] [x] */ +.fill-0q { grid-template-columns: subgrid repeat(auto-fill, [x] [y] [z]) [x] } /* [x] [y] [z] [x] [] */ +.fill-0r { grid-template-columns: subgrid [x] repeat(auto-fill, [y] [z]) } /* [x] [y] [z] [y] [z] */ + +/* With span of 5... */ +.fill-0s { + grid-column: 2 / span 5; + grid-template-columns: subgrid [w] repeat(auto-fill, [y] [z]) [x]; /* [w] [y] [z] [y] [z] [x] */ +} + +/* With span of 6, same as fill-0s but with room for a partial additional repetition */ +.fill-0t { + grid-column: 1 / span 6; + grid-template-columns: subgrid [w] repeat(auto-fill, [y] [z]) [x]; /* [w] [y] [z] [y] [z] [x] [] */ +} + +.subgrid > :nth-child(2n) { background: black; } +.subgrid > :nth-child(2n+1) { background: pink; } + + </style> + </head> +<body> + +<div class="grid"><div class="subgrid fill-0a"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0b"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0c"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0d"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0e"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0f"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0g"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0h"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0i"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0j"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0k"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0l"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0m"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0n"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0o"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0p"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0q"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0r"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0s"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<div class="grid"><div class="subgrid fill-0t"> + <div style="grid-column:y 5"></div> + <div style="grid-column:y 4"></div> + <div style="grid-column:y 3"></div> + <div style="grid-column:y 2"></div> + <div style="grid-column:y 1"></div> + <div style="grid-column:y -1"></div> + <div style="grid-column:y -2"></div> + <div style="grid-column:y -3"></div> + <div style="grid-column:y -4"></div> + <div style="grid-column:y -5"></div> +</div></div> + +<script> + const expectedResults = [ + "subgrid [z] [z] [z] [z] [z]", + "subgrid [z] [z] [z] [z] [z]", + "subgrid [x] [y] [y] [y] [z]", + "subgrid [x] [z] [z] [z] [z]", + "subgrid [x] [x] [x] [x] [z]", + "subgrid [x] [x] [z] [z] [z]", + "subgrid [x] [y] [z] [z] []", + "subgrid [x] [y] [x] [y] [z]", + "subgrid [x] [y] [x] [y] []", + "subgrid [y] [y] [y] [z] [z]", + "subgrid [x] [y] [z] [z] []", + "subgrid [z] [x] [y] [z] []", + "subgrid [z] [x] [y] [x] [y]", + "subgrid [z] [z] [z] [z] [z]", + "subgrid [z] [x] [y] [z] []", + "subgrid [z] [x] [y] [z] [x]", + "subgrid [x] [y] [z] [x] []", + "subgrid [x] [y] [z] [y] [z]", + "subgrid [w] [y] [z] [y] [z] [x]", + "subgrid [w] [y] [z] [y] [z] [x] []", + ]; + [...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) { + let actual = window.getComputedStyle(subgrid)['grid-template-columns']; + let expected = expectedResults[i]; + if (actual != expected) { + let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" + + " Actual: \"" + actual + "\", Expected: \"" + expected + "\""; + document.body.appendChild(document.createTextNode(err)); + document.body.appendChild(document.createElement("br")); + } + }); +</script> + +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/support/grid-child-utils.js b/third_party/blink/web_tests/external/wpt/css/css-grid/support/grid-child-utils.js new file mode 100644 index 0000000..d75ad6e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/support/grid-child-utils.js
@@ -0,0 +1,45 @@ +// Any copyright is dedicated to the Public Domain. +// https://creativecommons.org/publicdomain/zero/1.0/ + +const gridChildHelperRow = "row"; +const gridChildHelperCol = "col"; + +// Helper for building testcases for grid-template-* with a child div in +// multiple positions. Prop is expected ot be one of gridChildHelperRow or +// gridChildHelperCol, to select testing grid rows or grid columns, +// respectively. +// The child div is found by the id of 'child'. +function GridChildHelper(prop, style){ + this.child = document.getElementById("child"); + this.style = style; + this.prop = prop; +} + +// Runs a test for computed values on the property the helper object was +// constructed with. The childStyle is used for choosing the grid row/column +// of the child div. +// expected is passed as-is to the computed value test. +// The child style is appended to the test name in such a way that different +// tests for the same parent style but different child style values will have +// different test names. +GridChildHelper.prototype.runTest = function(childStyle, expected) { + 'use strict'; + const childProps = { + [gridChildHelperCol]:"gridColumn", + [gridChildHelperRow]:"gridRow" + }; + const childProp = childProps[this.prop]; + + const parentProps = { + [gridChildHelperCol]:"grid-template-columns", + [gridChildHelperRow]:"grid-template-rows" + }; + const parentProp = parentProps[this.prop]; + + const oldChildStyle = this.child[childProp]; + this.child.style[childProp] = childStyle; + + test_computed_value(parentProp, this.style, expected, childProp + " = " + childStyle); + + this.child[childProp] = oldChildStyle; +}
diff --git a/third_party/blink/web_tests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html b/third_party/blink/web_tests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html index 8659c2e..b8df61c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html +++ b/third_party/blink/web_tests/external/wpt/css/css-layout-api/constraints-data-sab-failure.https.html
@@ -35,7 +35,8 @@ try { childFragment = await child.layoutNextFragment({ - data: { sab: new SharedArrayBuffer(4) } + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + data: { sab: new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer } }); } catch(e) { // Success! The structured cloning algorithm should have thrown an error.
diff --git a/third_party/blink/web_tests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html b/third_party/blink/web_tests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html index a6cfcf66..681de5b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html +++ b/third_party/blink/web_tests/external/wpt/css/css-layout-api/fragment-data-sab-failure.https.html
@@ -33,7 +33,8 @@ async layout(children, edges, constraints, styleMap) { const childFragments = await Promise.all(children.map(child => child.layoutNextFragment())); - return {autoBlockSize: 0, childFragments, data: {sab: new SharedArrayBuffer(4) }}; + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + return {autoBlockSize: 0, childFragments, data: {sab: new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer }}; } }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-auto-010.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-auto-010.html new file mode 100644 index 0000000..60ad082 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-auto-010.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: auto' with a valid 'lang' attribute specification</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-auto-010-ref.html"> + + <meta content="" name="flags"> + <meta content="When 'hyphens' is set to 'auto' and when 'lang' attribute is also set to a valid value, then words may be broken at hyphenation opportunities determined automatically by an hyphenation resource appropriate to the language of the text involved."> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 6ch; + } + + div#test + { + hyphens: auto; + } + + div#reference + { + hyphens: none; + } + </style> + + <body lang="en"> + + <p>Test passes if each black-bordered rectangles have identical inside content. + + <div id="test">regulation implementation</div> + + <div id="reference">regu-lation imple-menta-tion</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-010.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-010.html new file mode 100644 index 0000000..8ceaceb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-010.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: manual' with no explicit hyphenation opportunity (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-manual-010-ref.html"> + + <meta content="" name="flags"> + <meta content="When 'hyphens' is set to 'manual', then words can be hyphenated only if characters inside the words explicitly define hyphenation opportunities. In this test, the characters inside the word 'Deoxyribonucleic' do not explicitly define hyphenation opportunities, so it must not be hyphenated." name="assert"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 10ch; + } + + div#test + { + hyphens: manual; + } + + div#reference + { + hyphens: none; + } + </style> + + <body lang="en"> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "ucleic" should be outside of the black-bordered rectangles. + + <div id="test">Deoxyribonucleic acid</div> + + <div id="reference">Deoxyribonucleic acid</div> + + <!-- + + Extended form of abreviation DNA + + -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-011.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-011.html new file mode 100644 index 0000000..060dc756 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-011.html
@@ -0,0 +1,45 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: manual' with 2 explicit hyphenation opportunities</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-manual-011-ref.html"> + + <meta content="" name="flags"> + <meta content="When 'hyphens' is set to 'manual', then words can be hyphenated only if characters inside the words explicitly define hyphenation opportunities. In this test, the characters inside the word 'Deoxyribonucleic' explicitly define 2 hyphenation opportunities, so it can be hyphenated. Since 9 characters can all fit inside the line box of the block box, then the word 'Deoxyribonucleic' is hyphenated only after the 2nd soft hyphen." name="assert"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 10ch; + } + + div#test + { + hyphens: manual; + } + + div#reference + { + hyphens: none; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. + + <div id="test">Deoxy­ribo­nucleic acid</div> + + <div id="reference">Deoxyribo-nucleic acid</div> + + <!-- + + Extended form of abreviation DNA + + -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-012.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-012.html new file mode 100644 index 0000000..871f7c3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-012.html
@@ -0,0 +1,45 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: manual' with 4 explicit hyphenation opportunities</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-manual-011-ref.html"> + + <meta content="" name="flags"> + <meta content="When 'hyphens' is set to 'manual', then words can be hyphenated only if characters inside the words explicitly define hyphenation opportunities. In this test, the characters inside the word 'Deoxyribonucleic' explicitly define 4 hyphenation opportunities. Since 9 characters can all fit inside the line box of the block box, then the word 'Deoxyribonucleic' is hyphenated only after the 3rd soft hyphen." name="assert"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 10ch; + } + + div#test + { + hyphens: manual; + } + + div#reference + { + hyphens: none; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. + + <div id="test">Deo­xy­ribo­nu­cleic acid</div> + + <div id="reference">Deoxyribo-nucleic acid</div> + + <!-- + + Extended form of abreviation DNA + + -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-013.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-013.html new file mode 100644 index 0000000..17e3f6f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-manual-013.html
@@ -0,0 +1,45 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: manual' with 1 explicit hyphenation opportunity</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-manual-013-ref.html"> + + <meta content="" name="flags"> + <meta content="When 'hyphens' is set to 'manual', then words can be hyphenated only if characters inside the words explicitly define hyphenation opportunities. In this test, the characters inside the word 'Deoxyribonucleic' explicitly define 1 and only 1 hyphenation opportunity, so it can be hyphenated only at such point." name="assert"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 10ch; + } + + div#test + { + hyphens: manual; + } + + div#reference + { + hyphens: none; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only the "c" of "nucleic" should be outside of each black-bordered rectangles. + + <div id="test">Deoxy­ribonucleic acid</div> + + <div id="reference">Deoxy-ribonucleic acid</div> + + <!-- + + Extended form of abreviation DNA + + -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-none-011.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-none-011.html new file mode 100644 index 0000000..cd54cfd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/hyphens-none-011.html
@@ -0,0 +1,42 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'hyphens: none' with explicit hyphenation opportunities</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#hyphenation"> + <link rel="match" href="reference/hyphens-manual-010-ref.html"> + + <meta content="" name="flags"> + <meta content="This test checks that, when 'hyphens' is set to 'none', then long words are not hyphenated, even if characters inside long words explicitly define hyphenation opportunities." name="assert"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 10ch; + } + + div#test + { + hyphens: none; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "ucleic" should be outside of the black-bordered rectangles. + + <div id="test">Deoxy­ribo­nucleic acid</div> + + <div id="reference">Deoxyribonucleic acid</div> + + <!-- + + Extended form of abreviation DNA + + -->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-auto-010-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-auto-010-ref.html new file mode 100644 index 0000000..1384112 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-auto-010-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + hyphens: none; + margin-bottom: 0.25em; + width: 6ch; + } + </style> + + <body lang="en"> + + <p>Test passes if each black-bordered rectangles have identical inside content. + + <div>regu-lation imple-menta-tion</div> + + <div>regu-lation imple-menta-tion</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-010-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-010-ref.html new file mode 100644 index 0000000..f79ce17 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-010-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + hyphens: none; + margin-bottom: 0.25em; + width: 10ch; + } + </style> + + <body lang="en"> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "ucleic" should be outside of the black-bordered rectangles. + + <div>Deoxyribonucleic acid</div> + + <div>Deoxyribonucleic acid</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-011-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-011-ref.html new file mode 100644 index 0000000..98581bd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-011-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + hyphens: none; + margin-bottom: 0.25em; + width: 10ch; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. + + <div>Deoxyribo-nucleic acid</div> + + <div>Deoxyribo-nucleic acid</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-013-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-013-ref.html new file mode 100644 index 0000000..9fa6bee4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/hyphens/reference/hyphens-manual-013-ref.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + hyphens: none; + margin-bottom: 0.25em; + width: 10ch; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only the "c" of "nucleic" should be outside of each black-bordered rectangles. + + <div>Deoxy-ribonucleic acid</div> + + <div>Deoxy-ribonucleic acid</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-051.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-051.html new file mode 100644 index 0000000..26265118 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-051.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: inline starting with a collapsible white space</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2"> + <link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + + <style> + div + { + background-color: red; + color: green; + float: left; + font-family: Ahem; + font-size: 50px; + line-height: 1; + } + + span#break-spaces + { + white-space: break-spaces; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div><span id="break-spaces">AB
</span><span> CD</span></div> + +<!-- + + 
 == Line feed == 
 == 
 + +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-052.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-052.html new file mode 100644 index 0000000..28219d55 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/break-spaces-052.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: inline starting with a collapsible white space</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-phase-2"> + <link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + + <style> + div + { + background-color: red; + color: green; + display: inline-block; + font-family: Ahem; + font-size: 50px; + line-height: 1; + } + + span#break-spaces + { + white-space: break-spaces; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div><span id="break-spaces">AB
</span><span> CD</span></div> + +<!-- + + 
 == Line feed == 
 == 
 + +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-normal-011-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-normal-011-ref.html new file mode 100644 index 0000000..ac1f95f6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-normal-011-ref.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + white-space: pre; + width: 16ch; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. + + <div id="reference">Lorem ipsum. +Dolor sit amet. +consectetur</div> + + <div id="reference">Lorem ipsum. +Dolor sit amet. +consectetur</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-nowrap-011-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-nowrap-011-ref.html new file mode 100644 index 0000000..b70f993 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-nowrap-011-ref.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 16ch; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "or sit amet." should be outside of black-bordered rectangles. + + <div id="reference">Lorem ipsum. Dolor sit amet.<br> +consectetur</div> + + <div id="reference">Lorem ipsum. Dolor sit amet.<br> +consectetur</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-011-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-011-ref.html new file mode 100644 index 0000000..c3aecc8d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/white-space-pre-011-ref.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reference Test</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 16ch; + } + </style> + + <body> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "Dolor" should be outside of black-bordered rectangles. + + <div id="reference">Lorem ipsum. Dolor<br> + sit amet. <br> +consectetur</div> + + <div id="reference">Lorem ipsum. Dolor<br> + sit amet. <br> +consectetur</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-normal-011.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-normal-011.html new file mode 100644 index 0000000..1743f58f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-normal-011.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'white-space: normal' (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-property"> + <link rel="match" href="reference/white-space-normal-011-ref.html"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 16ch; + } + + div#test + { + white-space: normal; + } + + div#reference + { + white-space: pre; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. + + <div id="test">Lorem ipsum. Dolor + sit	amet. <br>consectetur</div> + + <div id="reference">Lorem ipsum. +Dolor sit amet. +consectetur</div> + +<!-- + + <div id="test">Lorem ipsum. Dolor + ^^^^^^^^ + 12345678 + + sit	amet. <br>consectetur</div> +^^^ +123 + + + + 	 == Horizontal tabulation == 	 == 	 + + 
 == Line feed == 
 == 
 + +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-nowrap-011.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-nowrap-011.html new file mode 100644 index 0000000..1c11d97 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-nowrap-011.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'white-space: nowrap' (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-property"> + <link rel="match" href="reference/white-space-nowrap-011-ref.html"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 16ch; + } + + div#test + { + white-space: nowrap; + } + + div#reference + { + white-space: normal; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "or sit amet." should be outside of black-bordered rectangles. + + <div id="test">Lorem ipsum. Dolor + sit	amet. <br>consectetur</div> + + <div id="reference">Lorem ipsum. Dolor sit amet.<br> +consectetur</div> + +<!-- + + + <div id="test">Lorem ipsum. Dolor + ^^^^^^^^ + 12345678 + + sit	amet. <br>consectetur</div> +^^^ +123 + + 	 == Horizontal tabulation == 	 == 	 + + 
 == Line feed == 
 == 
 + +-->
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-011.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-011.html new file mode 100644 index 0000000..88b9894d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/white-space-pre-011.html
@@ -0,0 +1,72 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Text: 'white-space: pre' (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#white-space-property"> + <link rel="match" href="reference/white-space-pre-011-ref.html"> + + <style> + div + { + border: black solid 2px; + font-family: monospace; + font-size: 32px; + margin-bottom: 0.25em; + width: 16ch; + } + + div#test + { + white-space: pre; + } + + div#reference + { + white-space: normal; + } + </style> + + <p>Test passes if the characters inside of each black-bordered rectangles are laid out identically. Only "Dolor" should be outside of black-bordered rectangles. + + <div id="test">Lorem ipsum. Dolor + sit	amet. <br>consectetur</div> + + <div id="reference">Lorem ipsum. Dolor<br> + sit amet. <br> +consectetur</div> + +<!-- + + <div id="test">Lorem ipsum. Dolor + ^^^^^^^^ + 12345678 + + sit	amet. <br>consectetur</div> +^^^ +123 + +Since 'tab-size' is by default 8, +since "sit" uses 3 characters +and since there are 3 white space characters +before "sit", then + + 8 +- + 3 +- + 3 +===== + 2 + +then the horizontal tabulation will be use as much space +as a sequence of 2 preserved white space characters. + + + 	 == Horizontal tabulation == 	 == 	 + + 
 == Line feed == 
 == 
 + +-->
diff --git a/third_party/blink/web_tests/external/wpt/editing/data/delete.js b/third_party/blink/web_tests/external/wpt/editing/data/delete.js index e5ca838..db53a36 100644 --- a/third_party/blink/web_tests/external/wpt/editing/data/delete.js +++ b/third_party/blink/web_tests/external/wpt/editing/data/delete.js
@@ -2474,5 +2474,25 @@ [["delete",""]], "<div><b>{}<br></b></div>", [true], + {"delete":[false,false,"",false,false,""]}], +["<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>", + [["delete",""]], + "<div><div><p>foobar</p></div></div>", + [true], + {"delete":[false,false,"",false,false,""]}], +["<div>foo</div><div></div><div>[]bar</div>", + [["delete",""]], + "<div>foobar</div>", + [true], + {"delete":[false,false,"",false,false,""]}], +["<div>foo</div><span></span><div>[]bar</div>", + [["delete",""]], + "<div>foobar</div>", + [true], + {"delete":[false,false,"",false,false,""]}], +["<div>foo</div><!-- comment --><div>[]bar</div>", + [["delete",""]], + "<div>foobar</div>", + [true], {"delete":[false,false,"",false,false,""]}] ]
diff --git a/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js b/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js index bbc2b11a..2b8829e 100644 --- a/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js +++ b/third_party/blink/web_tests/external/wpt/editing/data/forwarddelete.js
@@ -2359,5 +2359,25 @@ [["forwarddelete",""]], "<div><b>{}<br></b></div>", [true], + {"forwarddelete":[false,false,"",false,false,""]}], +["<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>", + [["forwarddelete",""]], + "<div><div><p>foobar</p></div></div>", + [true], + {"forwarddelete":[false,false,"",false,false,""]}], +["<div>foo[]</div><div></div><div>bar</div>", + [["forwarddelete",""]], + "<div>foobar</div>", + [true], + {"forwarddelete":[false,false,"",false,false,""]}], +["<div>foo[]</div><span></span><div>bar</div>", + [["forwarddelete",""]], + "<div>foobar</div>", + [true], + {"forwarddelete":[false,false,"",false,false,""]}], +["<div>foo[]</div><!-- comment --><div>bar</div>", + [["forwarddelete",""]], + "<div>foobar</div>", + [true], {"forwarddelete":[false,false,"",false,false,""]}] ]
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/caretnavigation.html b/third_party/blink/web_tests/external/wpt/editing/run/caretnavigation.html new file mode 100644 index 0000000..defe7fecf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/editing/run/caretnavigation.html
@@ -0,0 +1,69 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Caret navigation</title> + +<link rel="stylesheet" href="../support/reset.css"> + +<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="/resources/testdriver-actions.js"></script> + +<script> +const KEY_CODE_MAP = { + 'ArrowLeft': '\uE012', + 'ArrowUp': '\uE013', + 'ArrowRight': '\uE014', + 'ArrowDown': '\uE015', +}; + +/** + * Send key event to the target element using test driver. Supports human + * friendly key names for common keyboard scroll operations e.g., arrow keys, + * page keys, etc. + * @param {Node} target + * @param {string} key + * @returns {Promise} + */ +function keyPress(target, key) { + const code = KEY_CODE_MAP[key]; + + let actions = new test_driver.Actions() + .keyDown(code) + .keyUp(code); + + return actions.send(); +} +</script> + +<div id="container"> + <div contenteditable data-title="Move with ArrowLeft to BR following a div"> + <div>line 1</div> + <br> + <div class="caret">line 2</div> + </div> + <div contenteditable data-title="Move with ArrowLeft to BR following an img"> + <img style="display:block;width:100px;height:100px"> + <br> + <div class="caret">line 2</div> + </div> +</div> + +<script> +const container = document.getElementById("container"); + +for (const test of container.children) { + promise_test(async t => { + test.focus(); + getSelection().collapse(test.querySelector(".caret")); + await keyPress(test, "ArrowLeft"); + + const range = getSelection().getRangeAt(0); + + assert_equals(range.commonAncestorContainer.localName, "div"); + assert_equals(range.startOffset, 3); + assert_equals(range.commonAncestorContainer.childNodes[range.startOffset].localName, "br"); + }, test.dataset.title); +} +</script>
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/delete_6001-last-expected.txt b/third_party/blink/web_tests/external/wpt/editing/run/delete_6001-last-expected.txt index d5f2065..8cf8d05 100644 --- a/third_party/blink/web_tests/external/wpt/editing/run/delete_6001-last-expected.txt +++ b/third_party/blink/web_tests/external/wpt/editing/run/delete_6001-last-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 751 tests; 714 PASS, 37 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 787 tests; 750 PASS, 37 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS [["defaultparagraphseparator","div"],["delete",""]] "<p>foo<ol><li>bar<li>ba[z</ol><p>q]uz" queryCommandState("delete") before PASS [["defaultparagraphseparator","div"],["delete",""]] "<p>foo<ol><li>bar<li>ba[z</ol><p>q]uz" queryCommandValue("delete") before PASS [["defaultparagraphseparator","div"],["delete",""]] "<p>foo<ol><li>bar<li>ba[z</ol><p>q]uz" queryCommandIndeterm("delete") after @@ -751,5 +751,41 @@ PASS [["delete",""]] "<div><b>[foo]</b></div>" queryCommandIndeterm("delete") after PASS [["delete",""]] "<div><b>[foo]</b></div>" queryCommandState("delete") after PASS [["delete",""]] "<div><b>[foo]</b></div>" queryCommandValue("delete") after +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>": execCommand("delete", false, "") return value +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" checks for modifications to non-editable content +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" compare innerHTML +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandIndeterm("delete") before +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandState("delete") before +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandValue("delete") before +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandIndeterm("delete") after +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandState("delete") after +PASS [["delete",""]] "<div><div><p>foo</p></div></div><div></div><div><div>[]bar</div></div></div>" queryCommandValue("delete") after +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>": execCommand("delete", false, "") return value +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" checks for modifications to non-editable content +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" compare innerHTML +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandIndeterm("delete") before +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandState("delete") before +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandValue("delete") before +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandIndeterm("delete") after +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandState("delete") after +PASS [["delete",""]] "<div>foo</div><div></div><div>[]bar</div>" queryCommandValue("delete") after +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>": execCommand("delete", false, "") return value +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" checks for modifications to non-editable content +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" compare innerHTML +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandIndeterm("delete") before +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandState("delete") before +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandValue("delete") before +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandIndeterm("delete") after +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandState("delete") after +PASS [["delete",""]] "<div>foo</div><span></span><div>[]bar</div>" queryCommandValue("delete") after +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>": execCommand("delete", false, "") return value +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" checks for modifications to non-editable content +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" compare innerHTML +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandIndeterm("delete") before +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandState("delete") before +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandValue("delete") before +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandIndeterm("delete") after +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandState("delete") after +PASS [["delete",""]] "<div>foo</div><!-- comment --><div>[]bar</div>" queryCommandValue("delete") after Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_6001-last-expected.txt b/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_6001-last-expected.txt index c25b0f8..755c55fd 100644 --- a/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_6001-last-expected.txt +++ b/third_party/blink/web_tests/external/wpt/editing/run/forwarddelete_6001-last-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 418 tests; 382 PASS, 36 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 454 tests; 418 PASS, 36 FAIL, 0 TIMEOUT, 0 NOTRUN. FAIL [["forwarddelete",""]] "<ol><li>foo[<li>]bar</ol>" compare innerHTML assert_equals: Unexpected innerHTML (after normalizing inline style) expected "<ol><li>foobar</li></ol>" but got "<ol><li>foo</li><li>bar</li></ol>" PASS [["forwarddelete",""]] "<ol><li>foo[<li>]bar</ol>" queryCommandIndeterm("forwarddelete") before PASS [["forwarddelete",""]] "<ol><li>foo[<li>]bar</ol>" queryCommandState("forwarddelete") before @@ -418,5 +418,41 @@ PASS [["forwarddelete",""]] "<div><b>[foo]</b></div>" queryCommandIndeterm("forwarddelete") after PASS [["forwarddelete",""]] "<div><b>[foo]</b></div>" queryCommandState("forwarddelete") after PASS [["forwarddelete",""]] "<div><b>[foo]</b></div>" queryCommandValue("forwarddelete") after +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>": execCommand("forwarddelete", false, "") return value +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" checks for modifications to non-editable content +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" compare innerHTML +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandIndeterm("forwarddelete") before +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandState("forwarddelete") before +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandValue("forwarddelete") before +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandIndeterm("forwarddelete") after +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandState("forwarddelete") after +PASS [["forwarddelete",""]] "<div><div><p>foo[]</p></div></div><div></div><div><div>bar</div></div></div>" queryCommandValue("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>": execCommand("forwarddelete", false, "") return value +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" checks for modifications to non-editable content +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" compare innerHTML +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandIndeterm("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandState("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandValue("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandIndeterm("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandState("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><div></div><div>bar</div>" queryCommandValue("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>": execCommand("forwarddelete", false, "") return value +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" checks for modifications to non-editable content +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" compare innerHTML +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandIndeterm("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandState("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandValue("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandIndeterm("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandState("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><span></span><div>bar</div>" queryCommandValue("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>": execCommand("forwarddelete", false, "") return value +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" checks for modifications to non-editable content +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" compare innerHTML +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandIndeterm("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandState("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandValue("forwarddelete") before +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandIndeterm("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandState("forwarddelete") after +PASS [["forwarddelete",""]] "<div>foo[]</div><!-- comment --><div>bar</div>" queryCommandValue("forwarddelete") after Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html b/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html new file mode 100644 index 0000000..ea70d362 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html
@@ -0,0 +1,17 @@ +<!-- starts with a UTF-8 BOM --> +<!doctype html> +<meta charset="windows-1252"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<title>BOM handling</title> +<div id=log></div> +<script> + +test( + () => { + assert_equals(document.characterSet.toLowerCase(), "utf-8"); + }, + "document.characterSet should match the BOM" +); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html.headers b/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html.headers new file mode 100644 index 0000000..2340a89c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/bom-handling.html.headers
@@ -0,0 +1 @@ +Content-Type: text/html; charset=windows-1252
diff --git a/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.js b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.js index 7e18c81..eca0e1b 100644 --- a/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.js +++ b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.js
@@ -1,3 +1,6 @@ +// META: global=window,worker +// META: script=/common/sab.js + [ { "input": "Hi", @@ -77,15 +80,15 @@ ["ArrayBuffer", "SharedArrayBuffer"].forEach(arrayBufferOrSharedArrayBuffer => { test(() => { // Setup - const bufferLength = testData.destinationLength + destinationData.bufferIncrease, - destinationOffset = destinationData.destinationOffset, - destinationLength = testData.destinationLength, - destinationFiller = destinationData.filler, - encoder = new TextEncoder(), - buffer = new self[arrayBufferOrSharedArrayBuffer](bufferLength), - view = new Uint8Array(buffer, destinationOffset, destinationLength), - fullView = new Uint8Array(buffer), - control = new Array(bufferLength); + const bufferLength = testData.destinationLength + destinationData.bufferIncrease; + const destinationOffset = destinationData.destinationOffset; + const destinationLength = testData.destinationLength; + const destinationFiller = destinationData.filler; + const encoder = new TextEncoder(); + const buffer = createBuffer(arrayBufferOrSharedArrayBuffer, bufferLength); + const view = new Uint8Array(buffer, destinationOffset, destinationLength); + const fullView = new Uint8Array(buffer); + const control = new Array(bufferLength); let byte = destinationFiller; for (let i = 0; i < bufferLength; i++) { if (destinationFiller === "random") { @@ -128,19 +131,17 @@ Float64Array].forEach(view => { ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => { test(() => { - assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", new view(new self[arrayBufferOrSharedArrayBuffer](0)))); + assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", new view(createBuffer(arrayBufferOrSharedArrayBuffer, 0)))); }, "Invalid encodeInto() destination: " + view.name + ", backed by: " + arrayBufferOrSharedArrayBuffer); }); }); ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => { test(() => { - assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", new self[arrayBufferOrSharedArrayBuffer](10))); + assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", createBuffer(arrayBufferOrSharedArrayBuffer, 10))); }, "Invalid encodeInto() destination: " + arrayBufferOrSharedArrayBuffer); }); - - test(() => { const buffer = new ArrayBuffer(10), view = new Uint8Array(buffer);
diff --git a/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.serviceworker-expected.txt new file mode 100644 index 0000000..adb30e4f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.serviceworker-expected.txt
@@ -0,0 +1,109 @@ +This is a testharness.js-based test. +Found 105 tests; 63 PASS, 42 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS Invalid encodeInto() destination: DataView, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: DataView, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int8Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int8Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int16Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int16Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint16Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint16Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint8ClampedArray, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint8ClampedArray, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Float32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Float32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Float64Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: ArrayBuffer +PASS Invalid encodeInto() destination: SharedArrayBuffer +PASS encodeInto() and a detached output buffer +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.sharedworker-expected.txt new file mode 100644 index 0000000..adb30e4f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/encodeInto.any.sharedworker-expected.txt
@@ -0,0 +1,109 @@ +This is a testharness.js-based test. +Found 105 tests; 63 PASS, 42 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with Hi and destination length 0, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with Hi and destination length 0, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with A and destination length 10, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with A and destination length 10, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆 and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆 and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with 𝌆A and destination length 3, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with 𝌆A and destination length 3, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with U+d834AU+df06A¥Hi and destination length 10, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with AU+df06 and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with AU+df06 and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler 0 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler 0 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 0 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler 128 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler 128 +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler 128 Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 0, filler random +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 0, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS encodeInto() into ArrayBuffer with ¥¥ and destination length 4, offset 4, filler random +FAIL encodeInto() into SharedArrayBuffer with ¥¥ and destination length 4, offset 4, filler random Failed to execute 'encodeInto' on 'TextEncoder': The provided ArrayBufferView value must not be shared. +PASS Invalid encodeInto() destination: DataView, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: DataView, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int8Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int8Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int16Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int16Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Int32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Int32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint16Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint16Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Uint8ClampedArray, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Uint8ClampedArray, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Float32Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Float32Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: Float64Array, backed by: ArrayBuffer +PASS Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer +PASS Invalid encodeInto() destination: ArrayBuffer +PASS Invalid encodeInto() destination: SharedArrayBuffer +PASS encodeInto() and a detached output buffer +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/encoding/streams/decode-utf8.any.js b/third_party/blink/web_tests/external/wpt/encoding/streams/decode-utf8.any.js index 421b98c2..5abd8dc 100644 --- a/third_party/blink/web_tests/external/wpt/encoding/streams/decode-utf8.any.js +++ b/third_party/blink/web_tests/external/wpt/encoding/streams/decode-utf8.any.js
@@ -1,15 +1,14 @@ -// META: global=worker +// META: global=window,worker // META: script=resources/readable-stream-from-array.js // META: script=resources/readable-stream-to-array.js - +// META: script=/common/sab.js 'use strict'; ["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => { - const inputChunkData = [73, 32, 240, 159, 146, 153, 32, 115, 116, - 114, 101, 97, 109, 115] + const inputChunkData = [73, 32, 240, 159, 146, 153, 32, 115, 116, 114, 101, 97, 109, 115]; - const emptyChunk = new Uint8Array(new self[arrayBufferOrSharedArrayBuffer](0)); - const inputChunk = new Uint8Array(new self[arrayBufferOrSharedArrayBuffer](inputChunkData.length)); + const emptyChunk = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, 0)); + const inputChunk = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, inputChunkData.length)); inputChunk.set(inputChunkData);
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.js b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.js index 6ae6511..61de4142 100644 --- a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.js +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.js
@@ -1,10 +1,13 @@ +// META: global=window,worker +// META: script=/common/sab.js + ["ArrayBuffer", "SharedArrayBuffer"].forEach(arrayBufferOrSharedArrayBuffer => { test(() => { - const buf = new self[arrayBufferOrSharedArrayBuffer](2), - view = new Uint8Array(buf), - buf2 = new self[arrayBufferOrSharedArrayBuffer](2), - view2 = new Uint8Array(buf2), - decoder = new TextDecoder("utf-8"); + const buf = createBuffer(arrayBufferOrSharedArrayBuffer, 2); + const view = new Uint8Array(buf); + const buf2 = createBuffer(arrayBufferOrSharedArrayBuffer, 2); + const view2 = new Uint8Array(buf2); + const decoder = new TextDecoder("utf-8"); view[0] = 0xEF; view[1] = 0xBB; view2[0] = 0xBF;
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.serviceworker-expected.txt new file mode 100644 index 0000000..54db5fca --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.serviceworker-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +PASS Modify buffer after passing it in (ArrayBuffer) +FAIL Modify buffer after passing it in (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided value is not of type '(ArrayBuffer or ArrayBufferView)' +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.sharedworker-expected.txt new file mode 100644 index 0000000..54db5fca --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-copy.any.sharedworker-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +PASS Modify buffer after passing it in (ArrayBuffer) +FAIL Modify buffer after passing it in (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided value is not of type '(ArrayBuffer or ArrayBufferView)' +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.js b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.js index e0c5947..5717c2db 100644 --- a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.js +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.js
@@ -1,5 +1,7 @@ // META: title=Encoding API: Streaming decode +// META: global=window,worker // META: script=resources/encodings.js +// META: script=/common/sab.js var string = '\x00123ABCabc\x80\xFF\u0100\u1000\uFFFD\uD800\uDC00\uDBFF\uDFFF'; var octets = { @@ -28,7 +30,7 @@ var sub = []; for (var j = i; j < encoded.length && j < i + len; ++j) sub.push(encoded[j]); - var uintArray = new Uint8Array(new self[arrayBufferOrSharedArrayBuffer](sub.length)); + var uintArray = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, sub.length)); uintArray.set(sub); out += decoder.decode(uintArray, {stream: true}); }
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.serviceworker-expected.txt new file mode 100644 index 0000000..cf06537 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.serviceworker-expected.txt
@@ -0,0 +1,33 @@ +This is a testharness.js-based test. +PASS Streaming decode: utf-8, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 5 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 5 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 5 byte window (ArrayBuffer) +FAIL Streaming decode: utf-8, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.sharedworker-expected.txt new file mode 100644 index 0000000..cf06537 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/encoding/textdecoder-streaming.any.sharedworker-expected.txt
@@ -0,0 +1,33 @@ +This is a testharness.js-based test. +PASS Streaming decode: utf-8, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-8, 5 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-16le, 5 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 1 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 2 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 3 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 4 byte window (ArrayBuffer) +PASS Streaming decode: utf-16be, 5 byte window (ArrayBuffer) +FAIL Streaming decode: utf-8, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-8, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16le, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 1 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 2 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 3 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 4 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +FAIL Streaming decode: utf-16be, 5 byte window (SharedArrayBuffer) Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared. +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https-expected.txt new file mode 100644 index 0000000..2bd30f2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https-expected.txt
@@ -0,0 +1,29 @@ +This is a testharness.js-based test. +PASS Initialize global state +PASS HTMLImageElement fetches with an "image" Request.destination +PASS HTMLImageElement with srcset attribute fetches with an "image" Request.destination +PASS HTMLImageElement with a HTMLPictureElement parent attribute fetches with an "image" Request.destination +PASS SVGImageElement fetches with an "image" Request.destination +PASS fetch() fetches with an empty string Request.destination +PASS XMLHttpRequest() fetches with an empty string Request.destination +PASS EventSource() fetches with an empty string Request.destination +PASS HTMLAudioElement fetches with an "audio" Request.destination +PASS HTMLVideoElement fetches with a "video" Request.destination +PASS HTMLScriptElement fetches with a "script" Request.destination +FAIL AudioWorklet module fetches with a "audioworklet" Request.destination promise_test: Unhandled rejection with value: object "AbortError: The user aborted a request." +PASS HTMLLinkElement with rel=stylesheet fetches with a "style" Request.destination +PASS HTMLLinkElement with rel=preload and as=fetch fetches with an empty string Request.destination +PASS HTMLLinkElement with rel=preload and as=style fetches with a "style" Request.destination +PASS HTMLLinkElement with rel=preload and as=script fetches with a "script" Request.destination +PASS HTMLLinkElement with rel=preload and as=font fetches with a "font" Request.destination +PASS HTMLLinkElement with rel=preload and as=image fetches with a "image" Request.destination +PASS HTMLLinkElement with rel=preload and as=audio fetches with a "audio" Request.destination +PASS HTMLLinkElement with rel=preload and as=video fetches with a "video" Request.destination +PASS HTMLLinkElement with rel=preload and as=track fetches with a "track" Request.destination +PASS HTMLLinkElement with rel=preload and as=document fetches with a "document" Request.destination +PASS HTMLLinkElement with rel=preload and as=worker fetches with a "worker" Request.destination +PASS HTMLLinkElement with rel=preload and as=sharedworker fetches with a "sharedworker" Request.destination +PASS HTMLLinkElement with rel=preload and as=xslt fetches with a "xslt" Request.destination +PASS HTMLLinkElement with rel=preload and as=manifest fetches with a "manifest" Request.destination +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https.html b/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https.html index 27b5102..0094b0b 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https.html +++ b/third_party/blink/web_tests/external/wpt/fetch/api/request/destination/fetch-destination.https.html
@@ -170,6 +170,13 @@ }); }, 'HTMLScriptElement fetches with a "script" Request.destination'); +// audioworklet destination +////////////////////// +promise_test(async t => { + let audioContext = new frame.contentWindow.AudioContext(); + await audioContext.audioWorklet.addModule("dummy?dest=audioworklet"); +}, 'AudioWorklet module fetches with a "audioworklet" Request.destination'); + // Style destination ////////////////////
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff index 6401070..b334dd9 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-degreebottomraisepercent25-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff index 0e8b1e0a..cb70266 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-displaystyleverticalgap7000-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-extraascender3000-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-extraascender3000-rulethickness1000.woff index 6c0ca28..cf064b1 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-extraascender3000-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-extraascender3000-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff index 24aa4c5..61ab416 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernafterdegreeminus5000-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff index 1fca6f6..9ed8710 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-kernbeforedegree4000-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-rulethickness8000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-rulethickness8000.woff index 0863dc32..090caa9e 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-rulethickness8000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-rulethickness8000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/fonts/math/radical-verticalgap6000-rulethickness1000.woff b/third_party/blink/web_tests/external/wpt/fonts/math/radical-verticalgap6000-rulethickness1000.woff index 9808112c..873a3d9f 100644 --- a/third_party/blink/web_tests/external/wpt/fonts/math/radical-verticalgap6000-rulethickness1000.woff +++ b/third_party/blink/web_tests/external/wpt/fonts/math/radical-verticalgap6000-rulethickness1000.woff Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/script-factory.js b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/script-factory.js index 9db7552..ab7286e 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/script-factory.js +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/script-factory.js
@@ -1,8 +1,9 @@ // This creates a serialized <script> element that is useful for blob/data/srcdoc-style tests. -function createScript(sameOrigin, crossOrigin, parent="parent", id="") { +function createScript(sameOrigin, crossOrigin, type="parent", id="") { return `<script> const data = { id: "${id}", + opener: !!window.opener, origin: window.origin, sameOriginNoCORPSuccess: false, crossOriginNoCORPFailure: false }; @@ -18,6 +19,14 @@ records.push(record(fetch("${sameOrigin}/common/blank.html", { mode: "no-cors" }), "sameOriginNoCORPSuccess", true)); } -Promise.all(records).then(() => window.${parent}.postMessage(data, "*")); +Promise.all(records).then(() => { + // Using BroadcastChannel is useful for blob: URLs, which are always same-origin + if ("${type}" === "channel") { + const bc = new BroadcastChannel("${id}"); + bc.postMessage(data); + } else { + window.${type}.postMessage(data, "*"); + } +}); <\/script>`; }
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https-expected.txt b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https-expected.txt new file mode 100644 index 0000000..5539fdc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL COOP+COEP blob URL popup: window.open() assert_true: Cross-origin without CORP did not fail expected true got false +FAIL COOP+COEP blob URL popup: <a> assert_true: Cross-origin without CORP did not fail expected true got false +FAIL COOP+COEP blob URL popup: <a rel=noopener> assert_true: Cross-origin without CORP did not fail expected true got false +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html index c66988d0..c317f6bd 100644 --- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html
@@ -9,8 +9,9 @@ promise_test(t => { const origins = get_host_info(); const id = `tut mir leid ${type}`; - const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "opener", id)], {type: "text/html"}); + const blob = new Blob([createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)], {type: "text/html"}); const blobURL = URL.createObjectURL(blob); + const bc = new BroadcastChannel(id); if (type === "window.open()") { const popup = window.open(blobURL); @@ -32,13 +33,18 @@ } return new Promise(resolve => { - window.addEventListener("message", t.step_func(({ data }) => { + bc.onmessage = t.step_func(({ data }) => { assert_equals(data.id, id); assert_equals(data.origin, window.origin); assert_true(data.sameOriginNoCORPSuccess, "Same-origin without CORP did not succeed"); assert_true(data.crossOriginNoCORPFailure, "Cross-origin without CORP did not fail"); + if (type === "<a rel=noopener>") { + assert_false(data.opener); + } else { + assert_true(data.opener); + } resolve(); - })); + }); }); }, `COOP+COEP blob URL popup: ${type}`); });
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt index a51bd01..c559255c 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any-expected.txt
@@ -1,4 +1,5 @@ This is a testharness.js-based test. +FAIL SharedArrayBuffer constructor does not exist without COOP+COEP assert_equals: expected (undefined) undefined but got (function) function "function SharedArrayBuffer() { [native code] }" FAIL SharedArrayBuffer over MessageChannel without COOP+COEP assert_throws_dom: function "() => channel.port1.postMessage(sab)" did not throw FAIL SharedArrayBuffer over BroadcastChannel without COOP+COEP assert_throws_dom: function "() => channel.postMessage(sab)" did not throw FAIL SharedArrayBuffer over postMessage() without COOP+COEP assert_throws_dom: function "() => self.postMessage(sab)" did not throw
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js index 35098892..0db16fd 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.js
@@ -1,18 +1,29 @@ +// META: global=window,worker + test(() => { - const sab = new SharedArrayBuffer(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + assert_equals(globalThis.SharedArrayBuffer, undefined); + assert_false("SharedArrayBuffer" in globalThis); +}, "SharedArrayBuffer constructor does not exist without COOP+COEP"); + +test(() => { + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; const channel = new MessageChannel(); assert_throws_dom("DataCloneError", () => channel.port1.postMessage(sab)); }, "SharedArrayBuffer over MessageChannel without COOP+COEP"); test(() => { - const sab = new SharedArrayBuffer(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; const channel = new BroadcastChannel("Is mir egal"); assert_throws_dom("DataCloneError", () => channel.postMessage(sab)); }, "SharedArrayBuffer over BroadcastChannel without COOP+COEP"); if (self.GLOBAL.isWindow()) { test(() => { - const sab = new SharedArrayBuffer(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; assert_throws_dom("DataCloneError", () => self.postMessage(sab)); }, "SharedArrayBuffer over postMessage() without COOP+COEP"); }
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker-expected.txt new file mode 100644 index 0000000..85ff806 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +FAIL SharedArrayBuffer constructor does not exist without COOP+COEP assert_equals: expected (undefined) undefined but got (function) function "function SharedArrayBuffer() { [native code] }" +FAIL SharedArrayBuffer over MessageChannel without COOP+COEP assert_throws_dom: function "() => channel.port1.postMessage(sab)" did not throw +FAIL SharedArrayBuffer over BroadcastChannel without COOP+COEP assert_throws_dom: function "() => channel.postMessage(sab)" did not throw +FAIL Bonus: self.crossOriginIsolated assert_false: expected false got undefined +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker-expected.txt new file mode 100644 index 0000000..85ff806 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +FAIL SharedArrayBuffer constructor does not exist without COOP+COEP assert_equals: expected (undefined) undefined but got (function) function "function SharedArrayBuffer() { [native code] }" +FAIL SharedArrayBuffer over MessageChannel without COOP+COEP assert_throws_dom: function "() => channel.port1.postMessage(sab)" did not throw +FAIL SharedArrayBuffer over BroadcastChannel without COOP+COEP assert_throws_dom: function "() => channel.postMessage(sab)" did not throw +FAIL Bonus: self.crossOriginIsolated assert_false: expected false got undefined +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt index 56a936d..85ff806 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker-expected.txt
@@ -1,4 +1,5 @@ This is a testharness.js-based test. +FAIL SharedArrayBuffer constructor does not exist without COOP+COEP assert_equals: expected (undefined) undefined but got (function) function "function SharedArrayBuffer() { [native code] }" FAIL SharedArrayBuffer over MessageChannel without COOP+COEP assert_throws_dom: function "() => channel.port1.postMessage(sab)" did not throw FAIL SharedArrayBuffer over BroadcastChannel without COOP+COEP assert_throws_dom: function "() => channel.postMessage(sab)" did not throw FAIL Bonus: self.crossOriginIsolated assert_false: expected false got undefined
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js index 0202ec39..2917013e 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js
@@ -7,9 +7,11 @@ openReq.onupgradeneeded = e => { const db = e.target.result; const store = db.createObjectStore("store", { keyPath: "key" }); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; assert_throws_dom("DataCloneError", () => { - store.put({ key: 1, property: new SharedArrayBuffer() }); + store.put({ key: 1, property: sab }); }); t.done(); }; @@ -21,6 +23,8 @@ openReq.onupgradeneeded = e => { const db = e.target.result; const store = db.createObjectStore("store", { keyPath: "key" }); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; let getter1Called = false; let getter2Called = false; @@ -28,7 +32,7 @@ assert_throws_dom("DataCloneError", () => { store.put({ key: 1, property: [ { get x() { getter1Called = true; return 5; } }, - new SharedArrayBuffer(), + sab, { get x() { getter2Called = true; return 5; } } ]}); });
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js index ce643e8a..4c1c1fd 100644 --- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js +++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js
@@ -2,18 +2,23 @@ test(() => { assert_throws_dom("DataCloneError", () => { - new Notification("Bob: Hi", { data: new SharedArrayBuffer() }); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; + new Notification("Bob: Hi", { data: sab }); }) }, "SharedArrayBuffer cloning via the Notifications API's data member: basic case"); test(() => { + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; + let getter1Called = false; let getter2Called = false; assert_throws_dom("DataCloneError", () => { new Notification("Bob: Hi", { data: [ { get x() { getter1Called = true; return 5; } }, - new SharedArrayBuffer(), + sab, { get x() { getter2Called = true; return 5; } } ]}); });
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html deleted file mode 100644 index 601b900..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-crossorigin-parent-manual.sub.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<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> -</head> -<body> - <h1>User activation visibility across cross-origin frame boundary</h1> - <h2>Confirms that the state is visible in parent and not in child</h2> - <ol id="instructions"> - <li>Click anywhere on the green area (child frame). - </ol> - <iframe id="child" width="400" height="400"></iframe> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - let child = document.getElementById("child"); - - window.addEventListener("message", t.step_func(event => { - if (event.source === frames[0].frames[0] && event.data === 'checked') { - // Parent should be active after child is clicked. - assert_true(navigator.userActivation.isActive); - assert_true(navigator.userActivation.hasBeenActive); - t.done(); - } - })); - child.src = "http://{{domains[www1]}}:{{ports[http][0]}}/html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html"; - }, "Parent test"); - </script> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-sameorigin-parent-manual.html b/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-sameorigin-parent-manual.html deleted file mode 100644 index a7f423e..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/activation-hierarchy-sameorigin-parent-manual.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<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> -</head> -<body> - <h1>User activation visibility across same-origin frame boundary</h1> - <h2>Confirms that the state is visible in both parent and child</h2> - <ol id="instructions"> - <li>Click anywhere on the green area (child frame). - </ol> - <iframe id="child" width="400" height="400"></iframe> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - let child = document.getElementById("child"); - - window.addEventListener("message", t.step_func(event => { - if (event.source === frames[0].frames[0] && event.data === 'checked') { - // Parent should be active after child is clicked. - assert_true(navigator.userActivation.isActive); - assert_true(navigator.userActivation.hasBeenActive); - t.done(); - } - })); - child.src = "resources/activation-hierarchy-sameorigin-child.html"; - }, "Parent test"); - </script> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-crossorigin.sub.tentative.html b/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-crossorigin.sub.tentative.html new file mode 100644 index 0000000..a2f578f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-crossorigin.sub.tentative.html
@@ -0,0 +1,127 @@ +<!DOCTYPE html> +<!-- + Tentative due to: + https://github.com/whatwg/html/issues/1983 +--> +<html> +<head> + <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> + // Frame layout: + // top=origin0:this-file [ + // child1=origin1:child-one.html, + // child-xo=origin2:propagation-crossorigin-child.html [ + // gchild=origin3:child-two.html + // ] + // ] + let test_parent_initial = async_test("Parent frame initial state"); + let test_parent_final = async_test("Parent frame final state"); + + let test_child1_initial = async_test("Child1 frame initial state"); + let test_child1_final = async_test("Child1 frame final state"); + + let test_child_xo_initial = async_test("Child2 frame initial state"); + let test_child_xo_final = async_test("Child2 frame final state"); + + let test_gchild_initial = async_test("Grandchild frame initial state"); + let test_gchild_final = async_test("Grand child frame final state"); + + let num_children_to_load = 3; + let num_children_to_report = 3; + + function finishLoadPhase() { + test_parent_initial.step(() => { + assert_true(num_children_to_load == 0); + assert_false(navigator.userActivation.isActive); + assert_false(navigator.userActivation.hasBeenActive); + }); + test_parent_initial.done(); + + test_driver.click(document.getElementById("child-xo")); + } + + function finishReportPhase() { + test_parent_final.step(() => { + assert_true(num_children_to_report == 0); + assert_true(navigator.userActivation.isActive); + assert_true(navigator.userActivation.hasBeenActive); + }); + test_parent_final.done(); + // End of all tests. + } + + window.addEventListener("message", event => { + var msg = JSON.parse(event.data); + + if (msg.type == 'child-one-loaded') { + test_child1_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_child1_initial.done(); + } else if (msg.type == 'child-crossorigin-loaded') { + test_child_xo_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_child_xo_initial.done(); + } else if (msg.type == 'child-two-loaded') { + test_gchild_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_gchild_initial.done(); + } else if (msg.type == 'child-one-report') { + test_child1_final.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_child1_final.done(); + } else if (msg.type == 'child-crossorigin-report') { + // This msg was triggered by a user click. + test_child_xo_final.step(() => { + assert_true(msg.isActive); + assert_true(msg.hasBeenActive); + }); + test_child_xo_final.done(); + + // Ask remaining frames to report states. + let ask_report = JSON.stringify({"type": "report"}); + frames[0].postMessage(ask_report, "*"); + frames[1].frames[0].postMessage(ask_report, "*"); + } else if (msg.type == 'child-two-report') { + test_gchild_final.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_gchild_final.done(); + } + + // Phase switching. + if (msg.type.endsWith("-loaded")) { + if (--num_children_to_load == 0) + finishLoadPhase(); + } else if (msg.type.endsWith("-report")) { + if (--num_children_to_report == 0) + finishReportPhase(); + } + }); + </script> +</head> +<body> + <h1>User activation propagation across cross-origin frame boundary</h1> + <p>Tests that user activation does not propagate across cross-origin frame boundary.</p> + <ol id="instructions"> + <li>Click anywhere on the green area (child frame). + </ol> + <iframe id="child1" width="300px" height="40px" + src="http://{{domains[www1]}}:{{ports[http][0]}}/html/user-activation/resources/child-one.html"> + </iframe> + <iframe id="child-xo" width="300px" height="140px" + src="http://{{domains[www2]}}:{{ports[http][0]}}/html/user-activation/resources/propagation-crossorigin-child.sub.html"> + </iframe> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-sameorigin.tentative.html b/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-sameorigin.tentative.html new file mode 100644 index 0000000..76d2b68 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/user-activation/propagation-sameorigin.tentative.html
@@ -0,0 +1,127 @@ +<!DOCTYPE html> +<!-- + Tentative due to: + https://github.com/whatwg/html/issues/1983 +--> +<html> +<head> + <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> + // Frame layout: + // top=this-file [ + // child1=child-one.html, + // child-so=propagation-sameorigin-child.html [ + // gchild=child-two.html + // ] + // ] + let test_parent_initial = async_test("Parent frame initial state"); + let test_parent_final = async_test("Parent frame final state"); + + let test_child1_initial = async_test("Child1 frame initial state"); + let test_child1_final = async_test("Child1 frame final state"); + + let test_child_so_initial = async_test("Child2 frame initial state"); + let test_child_so_final = async_test("Child2 frame final state"); + + let test_gchild_initial = async_test("Grandchild frame initial state"); + let test_gchild_final = async_test("Grand child frame final state"); + + let num_children_to_load = 3; + let num_children_to_report = 3; + + function finishLoadPhase() { + test_parent_initial.step(() => { + assert_true(num_children_to_load == 0); + assert_false(navigator.userActivation.isActive); + assert_false(navigator.userActivation.hasBeenActive); + }); + test_parent_initial.done(); + + test_driver.click(document.getElementById("child-so")); + } + + function finishReportPhase() { + test_parent_final.step(() => { + assert_true(num_children_to_report == 0); + assert_true(navigator.userActivation.isActive); + assert_true(navigator.userActivation.hasBeenActive); + }); + test_parent_final.done(); + // End of all tests. + } + + window.addEventListener("message", event => { + var msg = JSON.parse(event.data); + + if (msg.type == 'child-one-loaded') { + test_child1_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_child1_initial.done(); + } else if (msg.type == 'child-sameorigin-loaded') { + test_child_so_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_child_so_initial.done(); + } else if (msg.type == 'child-two-loaded') { + test_gchild_initial.step(() => { + assert_false(msg.isActive); + assert_false(msg.hasBeenActive); + }); + test_gchild_initial.done(); + } else if (msg.type == 'child-one-report') { + test_child1_final.step(() => { + assert_true(msg.isActive); + assert_true(msg.hasBeenActive); + }); + test_child1_final.done(); + } else if (msg.type == 'child-sameorigin-report') { + // This msg was triggered by a user click. + test_child_so_final.step(() => { + assert_true(msg.isActive); + assert_true(msg.hasBeenActive); + }); + test_child_so_final.done(); + + // Ask remaining frames to report states. + let ask_report = JSON.stringify({"type": "report"}); + frames[0].postMessage(ask_report, "*"); + frames[1].frames[0].postMessage(ask_report, "*"); + } else if (msg.type == 'child-two-report') { + test_gchild_final.step(() => { + assert_true(msg.isActive); + assert_true(msg.hasBeenActive); + }); + test_gchild_final.done(); + } + + // Phase switching. + if (msg.type.endsWith("-loaded")) { + if (--num_children_to_load == 0) + finishLoadPhase(); + } else if (msg.type.endsWith("-report")) { + if (--num_children_to_report == 0) + finishReportPhase(); + } + }); + </script> +</head> +<body> + <h1>User activation propagation across same-origin frame boundary</h1> + <p>Tests that user activation propagates across same-origin frame boundary.</p> + <ol id="instructions"> + <li>Click anywhere on the green area (child frame). + </ol> + <iframe id="child1" width="300px" height="40px" + src="resources/child-one.html"> + </iframe> + <iframe id="child-so" width="300px" height="140px" + src="resources/propagation-sameorigin-child.html"> + </iframe> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html deleted file mode 100644 index 6dbd468..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-child.sub.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body style="background: lightgreen;"> - <h1>Child frame</h1> - <iframe id="grandchild" width="350" height="200"></iframe> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - var grandchild = document.getElementById("grandchild"); - - window.addEventListener("click", t.step_func(event => { - // Child should be active when clicked. - assert_true(navigator.userActivation.isActive); - assert_true(navigator.userActivation.hasBeenActive); - - // Ask grandchild to check its state (and notify top frame). - grandchild.contentWindow.postMessage('check-request', '*'); - - t.done(); - })); - - grandchild.src = "http://{{domains[www2]}}:{{ports[http][0]}}/html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html"; - }, "Child test"); - </script> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html deleted file mode 100644 index b9fe19a74..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-crossorigin-grandchild.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<head> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body style="background: lightgrey;"> - <h1>Grandchild frame</h1> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - window.addEventListener("message", event => { - if (event.source === parent && event.data === 'check-request') { - // Grandchild shouldn't be active after child is clicked. - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - // Notify top frame that checks are done. - parent.parent.postMessage('checked', '*'); - - t.done(); - } - }); - - }, "Grandchild test"); - </script> -</body>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-child.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-child.html deleted file mode 100644 index d54c7ef..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-child.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body style="background: lightgreen;"> - <h1>Child frame</h1> - <iframe id="grandchild" width="350" height="200"></iframe> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - var grandchild = document.getElementById("grandchild"); - - window.addEventListener("click", t.step_func(event => { - // Child should be active when clicked. - assert_true(navigator.userActivation.isActive); - assert_true(navigator.userActivation.hasBeenActive); - - // Ask grandchild to check its state (and notify top frame). - grandchild.contentWindow.postMessage('check-request', '*'); - - t.done(); - })); - - grandchild.src = "activation-hierarchy-sameorigin-grandchild.html"; - }, "Child test"); - </script> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-grandchild.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-grandchild.html deleted file mode 100644 index 9d664e23..0000000 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/activation-hierarchy-sameorigin-grandchild.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<head> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -</head> -<body style="background: lightgrey;"> - <h1>Grandchild frame</h1> - <script> - async_test(function(t) { - assert_false(navigator.userActivation.isActive); - assert_false(navigator.userActivation.hasBeenActive); - - window.addEventListener("message", event => { - if (event.source === parent && event.data === 'check-request') { - // Grandchild shouldn't be active after child is clicked. - assert_true(navigator.userActivation.isActive); - assert_true(navigator.userActivation.hasBeenActive); - - // Notify top frame that checks are done. - parent.parent.postMessage('checked', '*'); - - t.done(); - } - }); - - }, "Grandchild test"); - </script> -</body>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/child-two.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/child-two.html index dc507420..caf23f4 100644 --- a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/child-two.html +++ b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/child-two.html
@@ -8,7 +8,8 @@ }), "*"); window.addEventListener("message", event => { - if (event.data == "report") { + var msg = JSON.parse(event.data); + if (msg.type == "report") { window.top.postMessage(JSON.stringify({ "type": "child-two-report", "isActive": navigator.userActivation.isActive,
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-crossorigin-child.sub.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-crossorigin-child.sub.html new file mode 100644 index 0000000..3cdd688 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-crossorigin-child.sub.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> + <script> + window.top.postMessage(JSON.stringify({ + "type": "child-crossorigin-loaded", + "isActive": navigator.userActivation.isActive, + "hasBeenActive": navigator.userActivation.hasBeenActive + }), "*"); + + window.addEventListener("click", event => { + window.top.postMessage(JSON.stringify({ + "type": "child-crossorigin-report", + "isActive": navigator.userActivation.isActive, + "hasBeenActive": navigator.userActivation.hasBeenActive + }), "*"); + }); + </script> +</head> +<body style="background: lightgreen;"> + <!-- The midpoint of this frame should be outside the grandchild frame. --> + <div style="height: 75px;">Cross-origin child frame</div> + <iframe id="child2" width="270px" height="30px" + src="http://{{domains[www]}}:{{ports[http][0]}}/html/user-activation/resources/child-two.html"> + </iframe> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-sameorigin-child.html b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-sameorigin-child.html new file mode 100644 index 0000000..69ad50c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/user-activation/resources/propagation-sameorigin-child.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> + <script> + window.top.postMessage(JSON.stringify({ + "type": "child-sameorigin-loaded", + "isActive": navigator.userActivation.isActive, + "hasBeenActive": navigator.userActivation.hasBeenActive + }), "*"); + + window.addEventListener("click", event => { + window.top.postMessage(JSON.stringify({ + "type": "child-sameorigin-report", + "isActive": navigator.userActivation.isActive, + "hasBeenActive": navigator.userActivation.hasBeenActive + }), "*"); + }); + </script> +</head> +<body style="background: lightgreen;"> + <!-- The midpoint of this frame should be outside the grandchild frame. --> + <div style="height: 75px;">Same-origin child frame</div> + <iframe id="child2" width="270px" height="30px" + src="child-two.html"> + </iframe> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js index f195a70f..8b688403 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.js
@@ -1,7 +1,8 @@ // META: global=!default,window,serviceworker test(() => { - const sab = new SharedArrayBuffer(16); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; const ta = new Int32Array(sab); assert_throws_js(TypeError, () => {
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js index 290b443..9adc044 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.js
@@ -1,7 +1,8 @@ // META: global=!default,dedicatedworker,sharedworker test(() => { - const sab = new SharedArrayBuffer(16); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const sab = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; const ta = new Int32Array(sab); assert_equals(Atomics.wait(ta, 0, 0, 10), "timed-out");
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/structured-clone/structured-clone-battery-of-tests.js b/third_party/blink/web_tests/external/wpt/html/webappapis/structured-clone/structured-clone-battery-of-tests.js index ac5104c7..751a0e1 100644 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/structured-clone/structured-clone-battery-of-tests.js +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/structured-clone/structured-clone-battery-of-tests.js
@@ -592,3 +592,17 @@ }, requiresDocument: true }); + +check('ObjectPrototype must lose its exotic-ness when cloned', + () => Object.prototype, + (copy, original) => { + assert_not_equals(copy, original); + assert_true(copy instanceof Object); + + const newProto = { some: 'proto' }; + // Must not throw: + Object.setPrototypeOf(copy, newProto); + + assert_equals(Object.getPrototypeOf(copy), newProto); + } +);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/geolocation-sensor.idl b/third_party/blink/web_tests/external/wpt/interfaces/geolocation-sensor.idl index ef172f63..baa0f5c 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/geolocation-sensor.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/geolocation-sensor.idl
@@ -3,10 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: Geolocation Sensor (https://w3c.github.io/geolocation-sensor/) -[Constructor(optional GeolocationSensorOptions options = {}), - SecureContext, +[SecureContext, Exposed=(DedicatedWorker, Window)] interface GeolocationSensor : Sensor { + constructor(optional GeolocationSensorOptions options = {}); static Promise<GeolocationSensorReading> read(optional ReadOptions readOptions = {}); readonly attribute unrestricted double? latitude; readonly attribute unrestricted double? longitude;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/image-capture.idl b/third_party/blink/web_tests/external/wpt/interfaces/image-capture.idl index e9016a1f..148bd7b 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/image-capture.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/image-capture.idl
@@ -3,9 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: MediaStream Image Capture (https://w3c.github.io/mediacapture-image/) -[Exposed=Window, Constructor(MediaStreamTrack videoTrack)] +[Exposed=Window] interface ImageCapture { - Promise<Blob> takePhoto(optional PhotoSettings photoSettings); + constructor(MediaStreamTrack videoTrack); + Promise<Blob> takePhoto(optional PhotoSettings photoSettings = {}); Promise<PhotoCapabilities> getPhotoCapabilities(); Promise<PhotoSettings> getPhotoSettings();
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/mediasession.idl b/third_party/blink/web_tests/external/wpt/interfaces/mediasession.idl index 8671af5..059d1ec 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/mediasession.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/mediasession.idl
@@ -69,13 +69,7 @@ dictionary MediaSessionActionDetails { required MediaSessionAction action; -}; - -dictionary MediaSessionSeekActionDetails : MediaSessionActionDetails { double? seekOffset; -}; - -dictionary MediaSessionSeekToActionDetails : MediaSessionActionDetails { - required double seekTime; + double? seekTime; boolean? fastSeek; };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/mediastream-recording.idl b/third_party/blink/web_tests/external/wpt/interfaces/mediastream-recording.idl index 2d849ba9..5229512 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/mediastream-recording.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/mediastream-recording.idl
@@ -4,7 +4,7 @@ // Source: MediaStream Recording (https://w3c.github.io/mediacapture-record/) [Exposed=Window, - Constructor(MediaStream stream, optional MediaRecorderOptions options)] + Constructor(MediaStream stream, optional MediaRecorderOptions options = {})] interface MediaRecorder : EventTarget { readonly attribute MediaStream stream; readonly attribute DOMString mimeType; @@ -17,6 +17,7 @@ attribute EventHandler onerror; readonly attribute unsigned long videoBitsPerSecond; readonly attribute unsigned long audioBitsPerSecond; + readonly attribute BitrateMode audioBitrateMode; void start(optional unsigned long timeslice); void stop(); @@ -32,6 +33,12 @@ unsigned long audioBitsPerSecond; unsigned long videoBitsPerSecond; unsigned long bitsPerSecond; + BitrateMode audioBitrateMode = "vbr"; +}; + +enum BitrateMode { + "cbr", + "vbr" }; enum RecordingState {
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/video-raf.idl b/third_party/blink/web_tests/external/wpt/interfaces/video-raf.idl index 9c523e6c..0ab48e3 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/video-raf.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/video-raf.idl
@@ -4,8 +4,8 @@ // Source: HTMLVideoElement.requestAnimationFrame() (https://wicg.github.io/video-raf/) dictionary VideoFrameMetadata { - required DOMHighResTimeStamp presentationTime; - required DOMHighResTimeStamp expectedPresentationTime; + required DOMHighResTimeStamp timePresented; + required DOMHighResTimeStamp expectedDisplayTime; required unsigned long width; required unsigned long height; @@ -18,7 +18,7 @@ unsigned long rtpTimestamp; }; -callback VideoFrameRequestCallback = void(DOMHighResTimeStamp time, VideoFrameMetadata metadata); +callback VideoFrameRequestCallback = void(DOMHighResTimeStamp now, VideoFrameMetadata metadata); partial interface HTMLVideoElement { unsigned long requestAnimationFrame(VideoFrameRequestCallback callback);
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 0d5d40ba..006b27b2 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
@@ -96,9 +96,9 @@ object? keyframes, optional (unrestricted double or KeyframeEffectOptions) options = {}); constructor(KeyframeEffect source); - attribute Element? target; - attribute CSSOMString? pseudoElement; - attribute CompositeOperation composite; + attribute Element? target; + attribute CSSOMString? pseudoElement; + attribute CompositeOperation composite; sequence<object> getKeyframes(); void setKeyframes(object? keyframes); };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-bluetooth.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-bluetooth.idl index cbf09e1..73371e2 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/web-bluetooth.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/web-bluetooth.idl
@@ -80,14 +80,18 @@ readonly attribute DOMString? name; readonly attribute BluetoothRemoteGATTServer? gatt; - Promise<void> watchAdvertisements(); - void unwatchAdvertisements(); + Promise<void> watchAdvertisements( + optional WatchAdvertisementsOptions options = {}); readonly attribute boolean watchingAdvertisements; }; BluetoothDevice includes BluetoothDeviceEventHandlers; BluetoothDevice includes CharacteristicEventHandlers; BluetoothDevice includes ServiceEventHandlers; +dictionary WatchAdvertisementsOptions { + AbortSignal signal; +}; + [Exposed=Window, SecureContext] interface BluetoothManufacturerDataMap { readonly maplike<unsigned short, DataView>;
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 f66b0791..514d09f 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
@@ -130,6 +130,7 @@ }; dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { + unsigned long rtxSsrc; DOMString trackId; DOMString mediaSourceId; DOMString senderId;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl b/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl index e95acca..1b005c3c 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/webxr.idl
@@ -267,6 +267,7 @@ sequence<any> optionalFeatures; }; +[Exposed=Window] interface XRPermissionStatus: PermissionStatus { attribute FrozenArray<any> granted; };
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html index 5ecb66e..77ed4257 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html
@@ -4,6 +4,8 @@ <meta charset="utf-8"> <title>Fraction</title> <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fractions-mfrac"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fraction-with-nonzero-line-thickness"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#fraction-with-zero-line-thickness"> <meta name="assert" content="Verify fraction metrics for different sizes of numerator and denominator."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -12,6 +14,12 @@ math, mspace { font-size: 10px; } + div.shrink-wrap { + background: yellow; + display: inline-block; + margin-top: 5px; + padding-top: 5px; + } </style> <script> /* This test does not use any specific fonts and so the exact rules are not @@ -83,6 +91,21 @@ } }, "Dimension of mfrac elements"); + test(function() { + assert_true(MathMLFeatureDetection.has_mspace()); + assert_true(MathMLFeatureDetection.has_mfrac()); + + Array.from(document.getElementsByClassName("shrink-wrap")).forEach((container) => { + var marginPx = 2; // By default fractions have 1px margin on each side. + var epsilon = 1; + var containerWidth = container.getBoundingClientRect().width; + var children = container.getElementsByTagName("mspace"); + var numWidth = children[0].getBoundingClientRect().width; + var denWidth = children[1].getBoundingClientRect().width; + assert_approx_equals(containerWidth, marginPx + Math.max(numWidth, denWidth), epsilon, "Should be the maximum preferred width of numerator/denominator."); + }); + }, "Preferred width of mfrac elements"); + done(); } </script> @@ -134,5 +157,37 @@ </mfrac> </math> </p> + <div class="shrink-wrap"> + <math> + <mfrac> + <mspace width="30px" height="15px" style="background: blue"/> + <mspace width="15px" height="15px" style="background: green"/> + </mfrac> + </math> + </div> + <div class="shrink-wrap"> + <math> + <mfrac> + <mspace width="15px" height="15px" style="background: blue"/> + <mspace width="30px" height="15px" style="background: green"/> + </mfrac> + </math> + </div> + <div class="shrink-wrap"> + <math> + <mfrac linethickness="0px"> + <mspace width="30px" height="15px" style="background: blue"/> + <mspace width="15px" height="15px" style="background: green"/> + </mfrac> + </math> + </div> + <div class="shrink-wrap"> + <math> + <mfrac linethickness="0px"> + <mspace width="15px" height="15px" style="background: blue"/> + <mspace width="30px" height="15px" style="background: green"/> + </mfrac> + </math> + </div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt new file mode 100644 index 0000000..f95ceda7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width-expected.txt
@@ -0,0 +1,5 @@ +This is a testharness.js-based test. +FAIL Preferred width of mrow with mspace children assert_approx_equals: unknown expected 15 +/- 1 but got 30 +FAIL Preferred width of mrow with mn and mo children assert_true: expected true got false +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width.html new file mode 100644 index 0000000..b16ef28 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width.html
@@ -0,0 +1,121 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Preferred width of mrow-like elements</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#horizontally-group-sub-expressions-mrow"> +<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/#making-sub-expressions-invisible-mphantom"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-top-level-math-element"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#adjust-space-around-content-mpadded"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#operator-fence-separator-or-accent-mo"> +<meta name="assert" content="The preferred width of mrow-like elements is the sum of children's width, modulo extra spacing."> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script type="text/javascript"> + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + function runTests() + { + var epsilon = 1; + + function MrowWidthFromChildren(mrow) { + var first = mrow.firstElementChild.getBoundingClientRect(); + var last = mrow.lastElementChild.getBoundingClientRect(); + return last.right - first.left; + } + + test(function() { + assert_true(MathMLFeatureDetection.has_mspace()); + + Array.from(document.getElementById("mspace-tests").getElementsByClassName("shrink-wrap")).forEach((container) => { + var containerWidth = container.getBoundingClientRect().width; + var mrow = container.getElementsByClassName("mrow-like")[0]; + var mrowWidth = MrowWidthFromChildren(mrow); + assert_approx_equals(containerWidth, mrowWidth, epsilon, mrow.tagName); + }); + }, "Preferred width of mrow with mspace children"); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + + Array.from(document.getElementById("tokens-tests").getElementsByClassName("shrink-wrap")).forEach((container) => { + var containerWidth = container.getBoundingClientRect().width; + var mrow = container.getElementsByClassName("mrow-like")[0]; + var mrowWidth = MrowWidthFromChildren(mrow); + assert_approx_equals(containerWidth, mrowWidth, epsilon, mrow.tagName); + }); + }, "Preferred width of mrow with mn and mo children"); + + done(); + } +</script> +<style> +div.shrink-wrap { + background: yellow; + display: inline-block; + margin-top: 5px; + padding-top: 5px; +} +</style> +</head> +<body> + <div id="log"></div> + <div id="mspace-tests"> + <div><div class="shrink-wrap"> + <math><mrow class="mrow-like"><mspace width="30px" height="15px" style="background: blue"/><mspace width="20px" depth="30px" style="background: green"/><mspace width="15px" height="5px" depth="10px" style="background: black"/></mrow></math> + </div></div> + <div> + <div class="shrink-wrap"> + <math><mstyle class="mrow-like"><mspace width="30px" height="15px" style="background: blue"/><mspace width="20px" depth="30px" style="background: green"/><mspace width="15px" height="5px" depth="10px" style="background: black"/></mstyle></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math><mphantom class="mrow-like"><mspace width="30px" height="15px" style="background: blue"/><mspace width="20px" depth="30px" style="background: green"/><mspace width="15px" height="5px" depth="10px" style="background: black"/></mphantom></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math class="mrow-like"><mspace width="30px" height="15px" style="background: blue"/><mspace width="20px" depth="30px" style="background: green"/><mspace width="15px" height="5px" depth="10px" style="background: black"/></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math><unknown class="mrow-like"><mspace width="30px" height="15px" style="background: blue"/><mspace width="20px" depth="30px" style="background: green"/><mspace width="15px" height="5px" depth="10px" style="background: black"/></unknown></math> + </div> + </div> + <div> + </div> + </div> + <div id="tokens-tests"> + <div> + <div class="shrink-wrap"> + <math><mrow class="mrow-like"><mtext>blah</mtext><mo lspace="30px" rspace="20px">|</mo><mn>2</mn></mrow></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math><mstyle class="mrow-like"><mtext>blah</mtext><mo lspace="30px" rspace="20px">|</mo><mn>2</mn></mstyle></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math><mphantom class="mrow-like"><mtext>blah</mtext><mo lspace="30px" rspace="20px">|</mo><mn>2</mn></mphantom></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math class="mrow-like"><mtext>blah</mtext><mo lspace="30px" rspace="20px">|</mo><mn>2</mn></math> + </div> + </div> + <div> + <div class="shrink-wrap"> + <math><unknown class="mrow-like"><mtext>blah</mtext><mo lspace="30px" rspace="20px">|</mo><mn>2</mn></unknown></math> + </div> + </div> + </div> +</p> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html index 31bdff2..5577207 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html
@@ -58,7 +58,7 @@ var epsilon = 1; var emToPx = 25; - ["mrow", "mstyle", "mphantom", "mpadded"].forEach(tag => { + ["mrow", "mstyle", "mphantom", "mpadded", "merror", "mprescripts", "none", "unknown"].forEach(tag => { test(function() { assert_true(MathMLFeatureDetection.has_operator_spacing()); assert_approx_equals(spaceBeforeElement(`${tag}-op-1`), 2 * emToPx, epsilon); @@ -252,7 +252,7 @@ <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> </math> </p> - <!-- mpadded is an embellished operator if its children consist + <!-- mpadded is an embellished operator if its in-flow children consist of one embellished operator and zero or more space-like elements. --> <p> <math> @@ -305,5 +305,217 @@ <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> </math> </p> + <!-- merror is an embellished operator if its in-flow children consist + of one embellished operator and zero or more space-like elements. --> + <p> + <math> + <mn>X</mn> + <merror id="merror-op-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </merror> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <merror id="merror-nonop-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> <!-- "mn" is not space-like --> + </merror> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <merror id="merror-op-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </merror> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <merror id="merror-nonop-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> <!-- "mn" is not space-like --> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </merror> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <!-- mprescripts is an embellished operator if its in-flow children consist + of one embellished operator and zero or more space-like elements. --> + <p> + <math> + <mn>X</mn> + <mprescripts id="mprescripts-op-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </mprescripts> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <mprescripts id="mprescripts-nonop-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> <!-- "mn" is not space-like --> + </mprescripts> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mprescripts id="mprescripts-op-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </mprescripts> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mprescripts id="mprescripts-nonop-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> <!-- "mn" is not space-like --> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </mprescripts> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <!-- none is an embellished operator if its in-flow children consist + of one embellished operator and zero or more space-like elements. --> + <p> + <math> + <mn>X</mn> + <none id="none-op-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </none> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <none id="none-nonop-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> <!-- "mn" is not space-like --> + </none> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <none id="none-op-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </none> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <none id="none-nonop-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> <!-- "mn" is not space-like --> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </none> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <!-- unknown is an embellished operator if its in-flow children consist + of one embellished operator and zero or more space-like elements. --> + <p> + <math> + <mn>X</mn> + <unknown id="unknown-op-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </unknown> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <unknown id="unknown-nonop-1" class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> <!-- "mn" is not space-like --> + </unknown> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <unknown id="unknown-op-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </unknown> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <unknown id="unknown-nonop-2" class="testedElement"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> <!-- "mn" is not space-like --> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </unknown> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-002.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-002.html index 1bbed4e..a977410 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-002.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-002.html
@@ -55,7 +55,7 @@ var emToPx = 25; ["msub", "msup", "msubsup", "munder", "mover", "munderover", - "mmultiscripts", "mfrac", "maction", "semantics"].forEach(tag => { + "mmultiscripts", "mfrac"].forEach(tag => { test(function() { assert_true(MathMLFeatureDetection.has_operator_spacing()); var element = document.getElementsByTagName(tag)[0]; @@ -87,7 +87,7 @@ <body> <div id="log"></div> <!-- <msub>, <msup>, <msubsup>, <munder>, <mover>, <munderover>, - <mmultiscripts>, <mfrac>, <semantics> or <maction> are embellished + <mmultiscripts>, <mfrac> are embellished operators if their first in-flow child exists and is an embellished operator --> <p> @@ -174,27 +174,6 @@ <mn>X</mn> </math> </p> - <p> - <math> - <mn>X</mn> - <maction class="testedElement" actiontype="statusline"> - <mo lspace="2em" rspace="0em">X</mo> - <mn>STATUS MESSAGE</mn> - </maction> - <mn>X</mn> - </math> - </p> - <p> - <math> - <mn>X</mn> - <semantics class="testedElement"> - <mo lspace="2em" rspace="0em">X</mo> - <annotation>TEXT ANNOTATION</annotation> - <mn>X</mn> - </semantics> - <mn>X</mn> - </math> - </p> <!-- Only in-flow children affect determination of embellished operators. --> <p> @@ -341,43 +320,9 @@ <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> </math> </p> - <p> - <math> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <maction class="testedElement" actiontype="statusline"> - <mo lspace="2em" rspace="0em">X</mo> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>STATUS MESSAGE</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </maction> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </math> - </p> - <p> - <math> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <semantics class="testedElement"> - <mo lspace="2em" rspace="0em">X</mo> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <annotation>TEXT ANNOTATION</annotation> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </semantics> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </math> - </p> <!-- <msub>, <msup>, <msubsup>, <munder>, <mover>, <munderover>, - <mmultiscripts>, <mfrac>, <semantics> or <maction> are not embellished + <mmultiscripts>, <mfrac> are not embellished operators if their first in-flow child is not an embellished operator --> <p> <math> @@ -463,29 +408,6 @@ <mn>X</mn> </math> </p> - <p> - <math> - <mn>X</mn> - <maction class="testedElement" actiontype="statusline"> - <mn>X</mn> - <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo> - </maction> - <mn>X</mn> - </math> - </p> - <p> - <math> - <mn>X</mn> - <semantics class="testedElement"> - <mrow> - <mn>X</mn> - <mo lspace="2em" rspace="0em">X</mo> - </mrow> - <annotation>TEXT ANNOTATION</annotation> - </semantics> - <mn>X</mn> - </math> - </p> <!-- Only in-flow children affect determination of embellished operators. --> <p> @@ -632,44 +554,6 @@ <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> </math> </p> - <p> - <math> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <maction class="testedElement" actiontype="statusline"> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </maction> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </math> - </p> - <p> - <math> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <semantics class="testedElement"> - <mrow> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mo lspace="2em" rspace="0em">X</mo> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </mrow> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <annotation>TEXT ANNOTATION</annotation> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </semantics> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - <mn>X</mn> - <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> - </math> - </p> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003-expected.txt new file mode 100644 index 0000000..4eadf306 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +FAIL maction (embellished operator) assert_true: expected true got false +FAIL maction (embellished operator, from in-flow children) assert_true: expected true got false +FAIL maction (not embellished operator) assert_true: expected true got false +FAIL maction (not embellished operator, from in-flow children) assert_true: expected true got false +FAIL maction (not embellished operator, empty) assert_true: expected true got false +FAIL maction (embellished operator, one child) assert_true: expected true got false +FAIL maction (embellished operator, complex) assert_true: expected true got false +FAIL semantics (embellished operator) assert_true: expected true got false +FAIL semantics (embellished operator, from in-flow children) assert_true: expected true got false +FAIL semantics (not embellished operator) assert_true: expected true got false +FAIL semantics (not embellished operator, from in-flow children) assert_true: expected true got false +FAIL semantics (not embellished operator, empty) assert_true: expected true got false +FAIL semantics (embellished operator, one child) assert_true: expected true got false +FAIL semantics (embellished operator, complex) assert_true: expected true got false +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003.html new file mode 100644 index 0000000..77e3b88 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/embellished-operator-003.html
@@ -0,0 +1,394 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Embellished operators</title> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#embellished-operators"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#definition-of-space-like-elements"> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#layout-of-mrow"> +<meta name="assert" content="Verify definition of embellished operators"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/feature-detection.js"></script> +<script src="/mathml/support/box-navigation.js"></script> +<style> + /* Default spacing of operator 'X' is 0.2777777777777778em so quite different + from the measured/specified 0em and 1em. */ + math, math * { + font: 25px/1 Ahem; + } + mn { + color: black; + } + mtext.space-like { + color: lightblue !important; + } + .testedElement mo { + color: yellow !important; + } + .testedElement, .testedElement * { + color: blue !important; + background: blue !important; + } + .oof1 { + position: absolute; + } + .oof2 { + position: fixed; + } + .nobox { + display: none; + } + .allChildrenVisible > *:not(.nobox) { + display: inline-math; + } +</style> +<script> + function spaceBeforeElement(element) { + var mnBefore = previousInFlowSibling(element); + return element.getBoundingClientRect().left - mnBefore.getBoundingClientRect().right; + } + + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + + function runTests() { + var epsilon = 1; + var emToPx = 25; + + ["maction", "semantics"].forEach(tag => { + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[0]; + assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon); + }, `${tag} (embellished operator)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[1]; + assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon); + }, `${tag} (embellished operator, from in-flow children)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[2]; + assert_approx_equals(spaceBeforeElement(element), 0, epsilon); + }, `${tag} (not embellished operator)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[3]; + assert_approx_equals(spaceBeforeElement(element), 0, epsilon); + }, `${tag} (not embellished operator, from in-flow children)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[4]; + assert_approx_equals(spaceBeforeElement(element), 0, epsilon); + }, `${tag} (not embellished operator, empty)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[5]; + assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon); + }, `${tag} (embellished operator, one child)`); + + test(function() { + assert_true(MathMLFeatureDetection.has_operator_spacing()); + var element = document.getElementsByTagName(tag)[6]; + assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon); + }, `${tag} (embellished operator, complex)`); + }); + done(); + } +</script> +</head> +<body> + <div id="log"></div> + <!-- <semantics> or <maction> are embellished operators if their children + consist (in any order) of one embellished operator and zero or more + space-like elements. --> + <p> + <math> + <mn>X</mn> + <maction class="testedElement" actiontype="statusline"> + <mo lspace="2em" rspace="0em">X</mo> + <mn>STATUS MESSAGE</mn> + </maction> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <semantics class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <annotation>TEXT ANNOTATION</annotation> + <mn>X</mn> + </semantics> + <mn>X</mn> + </math> + </p> + + <!-- Only in-flow children affect determination of embellished operators. --> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <maction class="testedElement" actiontype="statusline"> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>STATUS MESSAGE</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </maction> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <semantics class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <annotation>TEXT ANNOTATION</annotation> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </semantics> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + + <!-- <semantics> or <maction> are not embellished + operators if their first in-flow child is not an embellished operator --> + <p> + <math> + <mn>X</mn> + <msub class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </msub> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <msup class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </msup> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <msubsup class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> + </msubsup> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <munder class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </munder> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <mover class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </mover> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <munderover class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </munderover> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <mmultiscripts class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <mfrac class="testedElement"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </mfrac> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <maction class="testedElement" actiontype="statusline"> + <mn>X</mn> + <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo> + </maction> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <semantics class="testedElement"> + <mrow> + <mn>X</mn> + <mo lspace="2em" rspace="0em">X</mo> + </mrow> + <annotation>TEXT ANNOTATION</annotation> + </semantics> + <mn>X</mn> + </math> + </p> + + <!-- Only in-flow children affect determination of embellished operators. --> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <maction class="testedElement" actiontype="statusline"> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </maction> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <semantics class="testedElement"> + <mrow> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </mrow> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <annotation>TEXT ANNOTATION</annotation> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </semantics> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + + <!-- Empty <maction> and <semantics> (invalid in MathML3). --> + <p> + <math> + <mn>X</mn> + <maction class="testedElement"> + </maction> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <semantics class="testedElement"> + </semantics> + <mn>X</mn> + </math> + </p> + + <!-- One-child <maction> and <semantics> (invalid in MathML3). --> + <p> + <math> + <mn>X</mn> + <maction class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </maction> + <mn>X</mn> + </math> + </p> + <p> + <math> + <mn>X</mn> + <semantics class="testedElement"> + <mo lspace="2em" rspace="0em">X</mo> + </semantics> + <mn>X</mn> + </math> + </p> + + <!-- Complex structure (invalid in MathML3). --> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <maction class="testedElement allChildrenVisible"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mtext class="space-like">X</mtext> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </maction> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> + <p> + <math> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <semantics class="testedElement allChildrenVisible"> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mo lspace="2em" rspace="0em">X</mo> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mtext class="space-like">X</mtext> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </semantics> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + <mn>X</mn> + <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn> + </math> + </p> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html index 53734dee..75e3f78 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html
@@ -63,9 +63,25 @@ } }, "Various combinations of height, depth and width."); + test(function() { + var container = document.getElementById("containerForPreferredWidth"); + var mspace = container.getElementsByTagName("mspace")[0]; + var containerWidth = container.getBoundingClientRect().width; + var mspaceWidth = mspace.getBoundingClientRect().width; + assert_approx_equals(containerWidth, mspaceWidth, epsilon); + }, "Preferred width"); + done(); } </script> +<style> +div.shrink-wrap { + background: yellow; + display: inline-block; + margin-top: 5px; + padding-top: 5px; +} +</style> </head> <body> <div id="log"></div> @@ -87,5 +103,10 @@ <mspace id="mspace2" width="75px" height="25px" depth="50px" style="background: green"/> </math> </p> + <div> + <div id="containerForPreferredWidth" class="shrink-wrap"> + <math><mspace width="75px" height="25px" depth="50px" style="background: green"/></math> + </div> + </div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1-expected.txt new file mode 100644 index 0000000..212c34c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1-expected.txt
@@ -0,0 +1,12 @@ +This is a testharness.js-based test. +PASS Test display math lowercase +PASS Test inline math lowercase +FAIL Test width on display=block math lowercase assert_approx_equals: math must be centered. expected 308 +/- 1 but got 58 +PASS Test display math uppercase +PASS Test inline math uppercase +FAIL Test width on display=block math uppercase assert_approx_equals: math must be centered. expected 308 +/- 1 but got 58 +PASS Test display math alternate_case +PASS Test inline math alternate_case +FAIL Test width on display=block math alternate_case assert_approx_equals: math must be centered. expected 308 +/- 1 but got 58 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html index 9ecd45f9..1d842cc 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html
@@ -31,7 +31,7 @@ 1, "math must be centered."); assert_approx_equals(after_block.left, content.left, 1, - "content before must be left aligned"); + "content after must be left aligned"); assert_less_than_equal(before_block.bottom, mspace_block.top, "new line before math"); assert_less_than_equal(mspace_block.bottom, after_block.top, @@ -56,6 +56,25 @@ assert_less_than_equal(mspace_inline.right, after_inline.left, "content after must be on the right of math"); }, `Test inline math ${transform}`); + + var before_block_and_specified_width = getBox("before_block_and_specified_width"); + var mspace_width = getBox("mspace_width"); + var after_block_and_specified_width = getBox("after_block_and_specified_width"); + test(function() { + assert_true(MathMLFeatureDetection.has_mspace()); + assert_approx_equals(before_block_and_specified_width.left, content.left, 1, + "content before must be left aligned"); + assert_approx_equals((mspace_width.left + mspace_width.right) / 2, + (content.left + content.right) / 2, + 1, + "math must be centered."); + assert_approx_equals(after_block_and_specified_width.left, content.left, 1, + "content after must be left aligned"); + assert_less_than_equal(before_block_and_specified_width.bottom, mspace_width.top, + "new line before math"); + assert_less_than_equal(mspace_width.bottom, after_block_and_specified_width.top, + "new line after math"); + }, `Test width on display=block math ${transform}`); } done(); }); @@ -86,6 +105,10 @@ <span id="before_inline" class="square"></span> <math display="inline"><mspace id="mspace_inline" width="50px" height="50px"/></math> <span id="after_inline" class="square"></span> + <br/> + <span id="before_block_and_specified_width" class="square"></span> + <math display="block" style="width:100px"><mspace id="mspace_width" width="50px" height="50px"/></math> + <span id="after_block_and_specified_width" class="square"></span> </div> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001-expected.txt b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001-expected.txt index fc20f1d7..9595d33b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001-expected.txt +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001-expected.txt
@@ -1,5 +1,66 @@ This is a testharness.js-based test. -FAIL default and invalid values on mrow assert_equals: no attribute expected 0 but got -1 -FAIL default and invalid values on MathML link assert_equals: no attribute expected 0 but got -1 +Found 62 tests; 50 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS default and invalid values for annotation without href +PASS default and invalid values for annotation with href +PASS default and invalid values for annotation-xml without href +PASS default and invalid values for annotation-xml with href +PASS default and invalid values for maction without href +PASS default and invalid values for maction with href +PASS default and invalid values for menclose without href +PASS default and invalid values for menclose with href +PASS default and invalid values for merror without href +PASS default and invalid values for merror with href +PASS default and invalid values for mfrac without href +PASS default and invalid values for mfrac with href +FAIL default and invalid values for mi without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mi with href assert_equals: no attribute expected 0 but got -1 +PASS default and invalid values for mmultiscripts without href +PASS default and invalid values for mmultiscripts with href +FAIL default and invalid values for mn without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mn with href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mo without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mo with href assert_equals: no attribute expected 0 but got -1 +PASS default and invalid values for mover without href +PASS default and invalid values for mover with href +PASS default and invalid values for mpadded without href +PASS default and invalid values for mpadded with href +PASS default and invalid values for mphantom without href +PASS default and invalid values for mphantom with href +PASS default and invalid values for mprescripts without href +PASS default and invalid values for mprescripts with href +PASS default and invalid values for mroot without href +PASS default and invalid values for mroot with href +FAIL default and invalid values for mrow without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mrow with href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for ms without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for ms with href assert_equals: no attribute expected 0 but got -1 +PASS default and invalid values for mspace without href +PASS default and invalid values for mspace with href +PASS default and invalid values for msqrt without href +PASS default and invalid values for msqrt with href +PASS default and invalid values for mstyle without href +PASS default and invalid values for mstyle with href +PASS default and invalid values for msub without href +PASS default and invalid values for msub with href +PASS default and invalid values for msubsup without href +PASS default and invalid values for msubsup with href +PASS default and invalid values for msup without href +PASS default and invalid values for msup with href +PASS default and invalid values for mtable without href +PASS default and invalid values for mtable with href +PASS default and invalid values for mtd without href +PASS default and invalid values for mtd with href +FAIL default and invalid values for mtext without href assert_equals: no attribute expected 0 but got -1 +FAIL default and invalid values for mtext with href assert_equals: no attribute expected 0 but got -1 +PASS default and invalid values for mtr without href +PASS default and invalid values for mtr with href +PASS default and invalid values for munder without href +PASS default and invalid values for munder with href +PASS default and invalid values for munderover without href +PASS default and invalid values for munderover with href +PASS default and invalid values for none without href +PASS default and invalid values for none with href +PASS default and invalid values for semantics without href +PASS default and invalid values for semantics with href Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001.html index 5dd040b..2352c62 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/tabindex-001.html
@@ -6,36 +6,53 @@ <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-top-level-math-element"> <meta name="assert" content="Verify default values for the tabIndex attribute"> + +<script src="/mathml/support/mathml-fragments.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> <div id="log"></div> <math> - <mrow id="mrow" onfocus="alert('fail')"></mrow> - <mrow id="mrow-link" href="javascript:alert('fail')" onfocus="alert('fail')"></mrow> </math> <script> + const htmlLinkableElements = + new Set([ + 'mi', 'mo', 'mn', 'ms', 'mtext', 'mrow' + ]); + + Object.keys(MathMLFragments).forEach(elName => { + const mathEl = document.querySelector('math'); + + mathEl.innerHTML = ` + <${elName} id="el" onfocus="alert('fail')"></${elName}> + <${elName} id="el-link" href="javascript:alert('fail')" onfocus="alert('fail')"></${elName}> + `; + + const el = mathEl.querySelector('#el'); + const elLink = mathEl.querySelector('#el-link'); + + const expectedDefault = (htmlLinkableElements.has(elName)) ? 0 : -1; + test(() => { - const mrow = document.getElementById('mrow'); - assert_equals(mrow.tabIndex, 0, "no attribute"); - mrow.setAttribute("tabindex", "invalid"); - assert_equals(mrow.getAttribute("tabindex"), "invalid"); - assert_equals(mrow.tabIndex, 0, "invalid"); - mrow.setAttribute("tabindex", "9999999999"); - assert_equals(mrow.getAttribute("tabindex"), "9999999999"); - assert_equals(mrow.tabIndex, 0, "too large integer"); - }, "default and invalid values on mrow"); + assert_equals(el.tabIndex, expectedDefault, "no attribute"); + el.setAttribute("tabindex", "invalid"); + assert_equals(el.getAttribute("tabindex"), "invalid"); + assert_equals(el.tabIndex, expectedDefault, "invalid"); + el.setAttribute("tabindex", "9999999999"); + assert_equals(el.getAttribute("tabindex"), "9999999999"); + assert_equals(el.tabIndex, expectedDefault, "too large integer"); + }, `default and invalid values for ${elName} without href`); test(() => { - const mrowLink = document.getElementById('mrow-link'); - assert_equals(mrow.tabIndex, 0, "no attribute"); - mrow.setAttribute("tabindex", "invalid"); - assert_equals(mrow.getAttribute("tabindex"), "invalid"); - assert_equals(mrow.tabIndex, 0, "invalid"); - mrow.setAttribute("tabindex", "9999999999"); - assert_equals(mrow.getAttribute("tabindex"), "9999999999"); - assert_equals(mrow.tabIndex, 0, "too large integer"); - }, "default and invalid values on MathML link"); + assert_equals(elLink.tabIndex, expectedDefault, "no attribute"); + elLink.setAttribute("tabindex", "invalid"); + assert_equals(elLink.getAttribute("tabindex"), "invalid"); + assert_equals(elLink.tabIndex, expectedDefault, "invalid"); + elLink.setAttribute("tabindex", "9999999999"); + assert_equals(elLink.getAttribute("tabindex"), "9999999999"); + assert_equals(elLink.tabIndex, expectedDefault, "too large integer"); + }, `default and invalid values for ${elName} with href`); + }); </script> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/axisheight.py b/third_party/blink/web_tests/external/wpt/mathml/tools/axisheight.py index d588560..abcc492 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/axisheight.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/axisheight.py
@@ -6,7 +6,8 @@ verticalArrowCodePoint = 0x21A8 v1 = 5 * mathfont.em v2 = 14 * mathfont.em -f = mathfont.create("axisheight%d-verticalarrow%d" % (v1, v2)) +f = mathfont.create("axisheight%d-verticalarrow%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v1 f.math.MinConnectorOverlap = 0 mathfont.createSquareGlyph(f, verticalArrowCodePoint)
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/fractions.py b/third_party/blink/web_tests/external/wpt/mathml/tools/fractions.py index 42cfe46..b5a18942 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/fractions.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/fractions.py
@@ -5,7 +5,8 @@ v1 = 7 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-axisheight%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("fraction-axisheight%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v1 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -20,7 +21,8 @@ v1 = 5 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-denominatordisplaystylegapmin%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("fraction-denominatordisplaystylegapmin%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.FractionDenominatorDisplayStyleGapMin = v1 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -35,7 +37,8 @@ v1 = 6 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-denominatordisplaystyleshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2)) +f = mathfont.create("fraction-denominatordisplaystyleshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = v1 @@ -50,7 +53,8 @@ v1 = 4 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-denominatorgapmin%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("fraction-denominatorgapmin%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -65,7 +69,8 @@ v1 = 3 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-denominatorshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2)) +f = mathfont.create("fraction-denominatorshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -80,7 +85,8 @@ v1 = 8 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-numeratordisplaystylegapmin%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("fraction-numeratordisplaystylegapmin%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -95,7 +101,8 @@ v1 = 2 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-numeratordisplaystyleshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2)) +f = mathfont.create("fraction-numeratordisplaystyleshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -110,7 +117,8 @@ v1 = 9 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-numeratorgapmin%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("fraction-numeratorgapmin%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -125,7 +133,8 @@ v1 = 11 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("fraction-numeratorshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2)) +f = mathfont.create("fraction-numeratorshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0 @@ -139,7 +148,8 @@ mathfont.save(f) v1 = 10 * mathfont.em -f = mathfont.create("fraction-rulethickness%d" % v1) +f = mathfont.create("fraction-rulethickness%d" % v1, + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.FractionDenominatorDisplayStyleGapMin = 0 f.math.FractionDenominatorDisplayStyleShiftDown = 0
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/largeop.py b/third_party/blink/web_tests/external/wpt/mathml/tools/largeop.py index 58ce7ae..f1f52c4 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/largeop.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/largeop.py
@@ -5,7 +5,8 @@ nAryWhiteVerticalBarCodePoint = 0x2AFF v1 = 5 * mathfont.em -f = mathfont.create("largeop-displayoperatorminheight%d" % v1) +f = mathfont.create("largeop-displayoperatorminheight%d" % v1, + "Copyright (c) 2016 MathML Association") f.math.DisplayOperatorMinHeight = v1 mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint) g = f.createChar(-1, "uni2AFF.display") @@ -15,8 +16,8 @@ v1 = 2 * mathfont.em v2 = 3 * mathfont.em -f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2)) -f.copyright = "Copyright (c) 2018 Igalia S.L." +f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2), + "Copyright (c) 2018 Igalia S.L.") f.math.DisplayOperatorMinHeight = v1 mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint) g = f.createChar(-1, "uni2AFF.display") @@ -33,8 +34,8 @@ v1 = 7 * mathfont.em v2 = 5 * mathfont.em -f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2)) -f.copyright = "Copyright (c) 2020 Igalia S.L." +f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2), + "Copyright (c) 2020 Igalia S.L.") f.math.DisplayOperatorMinHeight = v1 f.math.MinConnectorOverlap = 0 mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint)
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/limits.py b/third_party/blink/web_tests/external/wpt/mathml/tools/limits.py index 840a76ff..029c7b3 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/limits.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/limits.py
@@ -6,7 +6,8 @@ nArySumCodePoint = 0x2211 # largeop operator v = 3 * mathfont.em -f = mathfont.create("limits-lowerlimitbaselinedropmin%d" % v) +f = mathfont.create("limits-lowerlimitbaselinedropmin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, nArySumCodePoint) f.math.LowerLimitBaselineDropMin = v f.math.LowerLimitGapMin = 0 @@ -23,7 +24,8 @@ mathfont.save(f) v = 11 * mathfont.em -f = mathfont.create("limits-lowerlimitgapmin%d" % v) +f = mathfont.create("limits-lowerlimitgapmin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, nArySumCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = v @@ -40,7 +42,8 @@ mathfont.save(f) v = 5 * mathfont.em -f = mathfont.create("limits-upperlimitbaselinerisemin%d" % v) +f = mathfont.create("limits-upperlimitbaselinerisemin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, nArySumCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0 @@ -57,7 +60,8 @@ mathfont.save(f) v = 7 * mathfont.em -f = mathfont.create("limits-upperlimitgapmin%d" % v) +f = mathfont.create("limits-upperlimitgapmin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, nArySumCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0
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 dd2994d..d43d8c0f1 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
@@ -64,7 +64,7 @@ for mathvariant in mathvariantTransforms: if mathvariant == "auto": continue - font = mathfont.create("mathvariant-%s" % mathvariant) + font = mathfont.create("mathvariant-%s" % mathvariant, "Copyright (c) 2016 MathML Association") for baseChar in mathvariantTransforms[mathvariant]: if baseChar not in font: mathfont.createGlyphFromValue(font, baseChar)
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 index 8af2bd67..5627c8a 100755 --- 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
@@ -49,11 +49,13 @@ def createStretchy(aFont, codePoint, isHorizontal): if isHorizontal: aFont[codePoint].horizontalVariants = "h0 h1 h2 h3" + # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance) 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" + # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance) aFont[codePoint].verticalComponents = \ (("v2", False, 0, mathfont.em, 3 * mathfont.em), \ ("v1", True, mathfont.em, mathfont.em, 2 * mathfont.em)) @@ -96,7 +98,7 @@ operatorDictionary[key] = value # Create a WOFF font with glyphs for all the operator strings. -font = mathfont.create("operators") +font = mathfont.create("operators", "Copyright (c) 2019 Igalia S.L.") # Set parameters for largeop and stretchy tests. font.math.DisplayOperatorMinHeight = 2 * mathfont.em
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/percentscaledown.py b/third_party/blink/web_tests/external/wpt/mathml/tools/percentscaledown.py index ea09c44..1571a7e 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/percentscaledown.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/percentscaledown.py
@@ -5,17 +5,20 @@ v1 = 80 v2 = 40 -f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown%d" % (v1, v2)) +f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown%d" % (v1, v2), + "Copyright (c) 2019 Igalia S.L.") f.math.ScriptPercentScaleDown = v1 f.math.ScriptScriptPercentScaleDown = v2 mathfont.save(f) -f = mathfont.create("scriptpercentscaledown0-scriptscriptpercentscaledown%d" % v2) +f = mathfont.create("scriptpercentscaledown0-scriptscriptpercentscaledown%d" % v2, + "Copyright (c) 2019 Igalia S.L.") f.math.ScriptPercentScaleDown = 0 f.math.ScriptScriptPercentScaleDown = v2 mathfont.save(f) -f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown0" % v1) +f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown0" % v1, + "Copyright (c) 2019 Igalia S.L.") f.math.ScriptPercentScaleDown = v1 f.math.ScriptScriptPercentScaleDown = 0 mathfont.save(f)
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/radicals.py b/third_party/blink/web_tests/external/wpt/mathml/tools/radicals.py index 90fe1d9..e13f9333 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/radicals.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/radicals.py
@@ -12,15 +12,17 @@ mathfont.drawRectangleGlyph(g, mathfont.em, 3 * mathfont.em, 0) g = aFont.createChar(-1, "size3") mathfont.drawRectangleGlyph(g, mathfont.em, 4 * mathfont.em, 0) - overlap = mathfont.em / 2 aFont[radicalCodePoint].verticalVariants = "radical size1 size2 size3" + # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance) + aFont.math.MinConnectorOverlap = 0 aFont[radicalCodePoint].verticalComponents = \ (("size2", False, 0, mathfont.em, 3 * mathfont.em), \ ("size1", True, mathfont.em, mathfont.em, 2 * mathfont.em)) v1 = 25 v2 = 1 * mathfont.em -f = mathfont.create("radical-degreebottomraisepercent%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-degreebottomraisepercent%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = v1 f.math.RadicalDisplayStyleVerticalGap = 0 @@ -33,7 +35,8 @@ v1 = 7 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("radical-displaystyleverticalgap%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-displaystyleverticalgap%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = v1 @@ -46,7 +49,8 @@ v1 = 3 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("radical-extraascender%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-extraascender%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = 0 @@ -59,7 +63,8 @@ v1 = 5 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("radical-kernafterdegreeminus%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-kernafterdegreeminus%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = 0 @@ -72,7 +77,8 @@ v1 = 4 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("radical-kernbeforedegree%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-kernbeforedegree%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = 0 @@ -84,7 +90,8 @@ mathfont.save(f) v = 8 * mathfont.em -f = mathfont.create("radical-rulethickness%d" % v) +f = mathfont.create("radical-rulethickness%d" % v, + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = 0 @@ -97,7 +104,8 @@ v1 = 6 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("radical-verticalgap%d-rulethickness%d" % (v1, v2)) +f = mathfont.create("radical-verticalgap%d-rulethickness%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") createStretchyRadical(f) f.math.RadicalDegreeBottomRaisePercent = 0 f.math.RadicalDisplayStyleVerticalGap = 0
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/scripts.py b/third_party/blink/web_tests/external/wpt/mathml/tools/scripts.py index add1637..62c5115 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/scripts.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/scripts.py
@@ -4,7 +4,8 @@ import fontforge v = 3 * mathfont.em -f = mathfont.create("scripts-spaceafterscript%d" % v) +f = mathfont.create("scripts-spaceafterscript%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = v f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -18,7 +19,8 @@ mathfont.save(f) v = 7 * mathfont.em -f = mathfont.create("scripts-superscriptshiftup%d" % v) +f = mathfont.create("scripts-superscriptshiftup%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -32,7 +34,8 @@ mathfont.save(f) v = 5 * mathfont.em -f = mathfont.create("scripts-superscriptshiftupcramped%d" % v) +f = mathfont.create("scripts-superscriptshiftupcramped%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -46,7 +49,8 @@ mathfont.save(f) v = 6 * mathfont.em -f = mathfont.create("scripts-subscriptshiftdown%d" % v) +f = mathfont.create("scripts-subscriptshiftdown%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -60,7 +64,8 @@ mathfont.save(f) v = 11 * mathfont.em -f = mathfont.create("scripts-subsuperscriptgapmin%d" % v) +f = mathfont.create("scripts-subsuperscriptgapmin%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = v f.math.SubscriptBaselineDropMin = 0 @@ -75,7 +80,8 @@ v1 = 11 * mathfont.em v2 = 3 * mathfont.em -f = mathfont.create("scripts-subsuperscriptgapmin%d-superscriptbottommaxwithsubscript%d" % (v1, v2)) +f = mathfont.create("scripts-subsuperscriptgapmin%d-superscriptbottommaxwithsubscript%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = v1 f.math.SubscriptBaselineDropMin = 0 @@ -89,7 +95,8 @@ mathfont.save(f) v = 4 * mathfont.em -f = mathfont.create("scripts-subscripttopmax%d" % v) +f = mathfont.create("scripts-subscripttopmax%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -103,7 +110,8 @@ mathfont.save(f) v = 8 * mathfont.em -f = mathfont.create("scripts-superscriptbottommin%d" % v) +f = mathfont.create("scripts-superscriptbottommin%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0 @@ -117,7 +125,8 @@ mathfont.save(f) v = 9 * mathfont.em -f = mathfont.create("scripts-subscriptbaselinedropmin%d" % v) +f = mathfont.create("scripts-subscriptbaselinedropmin%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = v @@ -131,7 +140,8 @@ mathfont.save(f) v = 10 * mathfont.em -f = mathfont.create("scripts-superscriptbaselinedropmax%d" % v) +f = mathfont.create("scripts-superscriptbaselinedropmax%d" % v, + "Copyright (c) 2016 MathML Association") f.math.SpaceAfterScript = 0 f.math.SubSuperscriptGapMin = 0 f.math.SubscriptBaselineDropMin = 0
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/stacks.py b/third_party/blink/web_tests/external/wpt/mathml/tools/stacks.py index 9a4c291e6..bd0bf8a 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/stacks.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/stacks.py
@@ -5,7 +5,8 @@ v1 = 5 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("stack-bottomdisplaystyleshiftdown%d-axisheight%d" % (v1, v2)) +f = mathfont.create("stack-bottomdisplaystyleshiftdown%d-axisheight%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.StackBottomDisplayStyleShiftDown = v1 f.math.StackBottomShiftDown = 0 @@ -17,7 +18,8 @@ v1 = 6 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("stack-bottomshiftdown%d-axisheight%d" % (v1, v2)) +f = mathfont.create("stack-bottomshiftdown%d-axisheight%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.StackBottomDisplayStyleShiftDown = 0 f.math.StackBottomShiftDown = v1 @@ -28,7 +30,8 @@ mathfont.save(f) v = 4 * mathfont.em -f = mathfont.create("stack-displaystylegapmin%d" % v) +f = mathfont.create("stack-displaystylegapmin%d" % v, + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.StackBottomDisplayStyleShiftDown = 0 f.math.StackBottomShiftDown = 0 @@ -39,7 +42,8 @@ mathfont.save(f) v = 8 * mathfont.em -f = mathfont.create("stack-gapmin%d" % v) +f = mathfont.create("stack-gapmin%d" % v, + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = 0 f.math.StackBottomDisplayStyleShiftDown = 0 f.math.StackBottomShiftDown = 0 @@ -51,7 +55,8 @@ v1 = 3 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("stack-topdisplaystyleshiftup%d-axisheight%d" % (v1, v2)) +f = mathfont.create("stack-topdisplaystyleshiftup%d-axisheight%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.StackBottomDisplayStyleShiftDown = 0 f.math.StackBottomShiftDown = 0 @@ -63,7 +68,8 @@ v1 = 9 * mathfont.em v2 = 1 * mathfont.em -f = mathfont.create("stack-topshiftup%d-axisheight%d" % (v1, v2)) +f = mathfont.create("stack-topshiftup%d-axisheight%d" % (v1, v2), + "Copyright (c) 2016 MathML Association") f.math.AxisHeight = v2 f.math.StackBottomDisplayStyleShiftDown = 0 f.math.StackBottomShiftDown = 0
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/stretchstacks.py b/third_party/blink/web_tests/external/wpt/mathml/tools/stretchstacks.py index 7b888f4..28f1166 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/stretchstacks.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/stretchstacks.py
@@ -6,7 +6,8 @@ arrowCodePoint = 0x2192 # horizontal stretch operator v = 3 * mathfont.em -f = mathfont.create("stretchstack-bottomshiftdown%d" % v) +f = mathfont.create("stretchstack-bottomshiftdown%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, arrowCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0 @@ -23,7 +24,8 @@ mathfont.save(f) v = 11 * mathfont.em -f = mathfont.create("stretchstack-gapbelowmin%d" % v) +f = mathfont.create("stretchstack-gapbelowmin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, arrowCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0 @@ -40,7 +42,8 @@ mathfont.save(f) v = 5 * mathfont.em -f = mathfont.create("stretchstack-topshiftup%d" % v) +f = mathfont.create("stretchstack-topshiftup%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, arrowCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0 @@ -57,7 +60,8 @@ mathfont.save(f) v = 7 * mathfont.em -f = mathfont.create("stretchstack-gapabovemin%d" % v) +f = mathfont.create("stretchstack-gapabovemin%d" % v, + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, arrowCodePoint) f.math.LowerLimitBaselineDropMin = 0 f.math.LowerLimitGapMin = 0
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/underover.py b/third_party/blink/web_tests/external/wpt/mathml/tools/underover.py index df34e79..71a3138 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/underover.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/underover.py
@@ -8,7 +8,8 @@ accentBaseHeight = 4 * mathfont.em v = 3 * mathfont.em -f = mathfont.create("underover-accentbaseheight%d-overbarextraascender%d" % (accentBaseHeight, v)) +f = mathfont.create("underover-accentbaseheight%d-overbarextraascender%d" % (accentBaseHeight, v), + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, breveCodePoint) mathfont.createSquareGlyph(f, degreeCodePoint) f.math.AccentBaseHeight = accentBaseHeight @@ -27,7 +28,8 @@ mathfont.save(f) v = 11 * mathfont.em -f = mathfont.create("underover-accentbaseheight%d-overbarverticalgap%d" % (accentBaseHeight, v)) +f = mathfont.create("underover-accentbaseheight%d-overbarverticalgap%d" % (accentBaseHeight, v), + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, breveCodePoint) mathfont.createSquareGlyph(f, degreeCodePoint) f.math.AccentBaseHeight = accentBaseHeight @@ -46,7 +48,8 @@ mathfont.save(f) v = 5 * mathfont.em -f = mathfont.create("underover-accentbaseheight%d-underbarextradescender%d" % (accentBaseHeight, v)) +f = mathfont.create("underover-accentbaseheight%d-underbarextradescender%d" % (accentBaseHeight, v), + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, breveCodePoint) mathfont.createSquareGlyph(f, degreeCodePoint) f.math.AccentBaseHeight = accentBaseHeight @@ -65,7 +68,8 @@ mathfont.save(f) v = 7 * mathfont.em -f = mathfont.create("underover-accentbaseheight%d-underbarverticalgap%d" % (accentBaseHeight, v)) +f = mathfont.create("underover-accentbaseheight%d-underbarverticalgap%d" % (accentBaseHeight, v), + "Copyright (c) 2016 MathML Association") mathfont.createSquareGlyph(f, breveCodePoint) mathfont.createSquareGlyph(f, degreeCodePoint) f.math.AccentBaseHeight = accentBaseHeight
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/use-typo-lineheight.py b/third_party/blink/web_tests/external/wpt/mathml/tools/use-typo-lineheight.py index 9768979f..48cdd2d 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/use-typo-lineheight.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/use-typo-lineheight.py
@@ -1,7 +1,6 @@ #!/usr/bin/python from __future__ import print_function -from utils.misc import MathMLAssociationCopyright import fontforge font = fontforge.font() @@ -12,7 +11,7 @@ font.fontname = name font.familyname = name font.fullname = name -font.copyright = MathMLAssociationCopyright +font.copyright = "Copyright (c) 2016 MathML Association" glyph = font.createChar(ord(" "), "space") glyph.width = 1000
diff --git a/third_party/blink/web_tests/external/wpt/mathml/tools/utils/mathfont.py b/third_party/blink/web_tests/external/wpt/mathml/tools/utils/mathfont.py index 53633c91..03af206 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/utils/mathfont.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/utils/mathfont.py
@@ -1,16 +1,15 @@ from __future__ import print_function import fontforge -from misc import MathMLAssociationCopyright em = 1000 -def create(aName): +def create(aName, aCopyRight): print("Generating %s.woff..." % aName, end="") mathFont = fontforge.font() mathFont.fontname = aName mathFont.familyname = aName mathFont.fullname = aName - mathFont.copyright = MathMLAssociationCopyright + mathFont.copyright = aCopyRight mathFont.encoding = "UnicodeFull" # Create a space character. Also force the creation of some MATH subtables
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 d877a91..0d05346 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
@@ -8,7 +8,6 @@ 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/mathml/tools/xHeight.py b/third_party/blink/web_tests/external/wpt/mathml/tools/xHeight.py index 724352b..2103a73 100755 --- a/third_party/blink/web_tests/external/wpt/mathml/tools/xHeight.py +++ b/third_party/blink/web_tests/external/wpt/mathml/tools/xHeight.py
@@ -4,7 +4,8 @@ import fontforge v = mathfont.em / 2 -f = mathfont.create("xheight%d" % v) +f = mathfont.create("xheight%d" % v, + "Copyright (c) 2016 MathML Association") g = f.createChar(ord('x')) mathfont.drawRectangleGlyph(g, mathfont.em, v, 0) assert f.xHeight == v, "Bad x-height value!"
diff --git a/third_party/blink/web_tests/external/wpt/mediacapture-record/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/mediacapture-record/idlharness.window-expected.txt index 167919b..531f344 100644 --- a/third_party/blink/web_tests/external/wpt/mediacapture-record/idlharness.window-expected.txt +++ b/third_party/blink/web_tests/external/wpt/mediacapture-record/idlharness.window-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 68 tests; 58 PASS, 10 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 70 tests; 58 PASS, 12 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS idl_test setup PASS idl_test validation PASS MediaRecorder interface: existence and properties of interface object @@ -19,6 +19,7 @@ PASS MediaRecorder interface: attribute onerror PASS MediaRecorder interface: attribute videoBitsPerSecond PASS MediaRecorder interface: attribute audioBitsPerSecond +FAIL MediaRecorder interface: attribute audioBitrateMode assert_true: The prototype object must have a property "audioBitrateMode" expected true got false PASS MediaRecorder interface: operation start(optional unsigned long) PASS MediaRecorder interface: operation stop() PASS MediaRecorder interface: operation pause() @@ -38,6 +39,7 @@ PASS MediaRecorder interface: [object MediaRecorder] must inherit property "onerror" with the proper type PASS MediaRecorder interface: [object MediaRecorder] must inherit property "videoBitsPerSecond" with the proper type PASS MediaRecorder interface: [object MediaRecorder] must inherit property "audioBitsPerSecond" with the proper type +FAIL MediaRecorder interface: [object MediaRecorder] must inherit property "audioBitrateMode" with the proper type assert_inherits: property "audioBitrateMode" not found in prototype chain PASS MediaRecorder interface: [object MediaRecorder] must inherit property "start(optional unsigned long)" with the proper type PASS MediaRecorder interface: calling start(optional unsigned long) on [object MediaRecorder] with too few arguments must throw TypeError PASS MediaRecorder interface: [object MediaRecorder] must inherit property "stop()" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/mediasession/positionstate-expected.txt b/third_party/blink/web_tests/external/wpt/mediasession/positionstate-expected.txt new file mode 100644 index 0000000..d298b26 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mediasession/positionstate-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS Test setPositionState with a null value +PASS Test setPositionState with a valid value for forward playback +PASS Test setPositionState with optional position +PASS Test setPositionState with optional playback rate +PASS Test setPositionState with only duration +PASS Test setPositionState with zero duration +FAIL Test setPositionState with negative playback rate Failed to execute 'setPositionState' on 'MediaSession': The provided playbackRate cannot be less than or equal to zero. +PASS Test setPositionState throws a TypeError if duration is negative +PASS Test setPositionState throws a TypeError if position is negative +PASS Test setPositionState throws a TypeError if duration is less than position +PASS Test setPositionState throws a TypeError if playback rate is zero +PASS Test setPositionState throws a TypeError if duration is not specified +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/mediasession/positionstate.html b/third_party/blink/web_tests/external/wpt/mediasession/positionstate.html index 9033a7be..9141091 100644 --- a/third_party/blink/web_tests/external/wpt/mediasession/positionstate.html +++ b/third_party/blink/web_tests/external/wpt/mediasession/positionstate.html
@@ -42,16 +42,12 @@ }, 'Test setPositionState with zero duration'); test(() => { - assert_throws_js( - TypeError, - _ => { - window.navigator.mediaSession.setPositionState({ - duration: 60.9, - position: 10.1, - playbackRate: -2.0 - }); - }); -}, 'Test setPositionState throws a TypeError if playback rate is negative'); + window.navigator.mediaSession.setPositionState({ + duration: 60.9, + position: 10.1, + playbackRate: -2.0 + }); +}, 'Test setPositionState with negative playback rate'); test(() => { assert_throws_js(
diff --git a/third_party/blink/web_tests/external/wpt/orientation-sensor/orientation-sensor-tests.js b/third_party/blink/web_tests/external/wpt/orientation-sensor/orientation-sensor-tests.js index 5d35f3b..9d44d63 100644 --- a/third_party/blink/web_tests/external/wpt/orientation-sensor/orientation-sensor-tests.js +++ b/third_party/blink/web_tests/external/wpt/orientation-sensor/orientation-sensor-tests.js
@@ -42,7 +42,9 @@ // Throws if passed SharedArrayBuffer view. assert_throws_js(TypeError, - () => sensor.populateMatrix(new Float32Array(new SharedArrayBuffer(16)))); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + // WebAssembly.Memory's size is in multiples of 64 KiB + () => sensor.populateMatrix(new Float32Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer))); sensor.start();
diff --git a/third_party/blink/web_tests/external/wpt/origin-policy/resources/subframe-with-origin-policy.py b/third_party/blink/web_tests/external/wpt/origin-policy/resources/subframe-with-origin-policy.py index 258f237..68e3e20 100644 --- a/third_party/blink/web_tests/external/wpt/origin-policy/resources/subframe-with-origin-policy.py +++ b/third_party/blink/web_tests/external/wpt/origin-policy/resources/subframe-with-origin-policy.py
@@ -20,7 +20,6 @@ <title>Origin policy subframe</title> <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> <div id="log"></div>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-background-size.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-background-size.html new file mode 100644 index 0000000..8cc8370 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-background-size.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to background size</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + background-image: url(../resources/circles.png); + background-size: 0 0; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + background-size: 100% 100%; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to background size."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-set.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-set.html new file mode 100644 index 0000000..0cc52d0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-set.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to background image in image-set</title> +<style> + #main { + width: 100px; + height: 100px; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + background-image: -webkit-image-set(url(../resources/circles.png) 1x); + background-image: image-set(url(../resources/circles.png) 1x); + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to background image in image-set."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-two-steps.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-two-steps.html new file mode 100644 index 0000000..4dc9af9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-bg-image-two-steps.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP should fire for background image only when visible</title> +<style> + #main { + width: 100px; + height: 100px; + } + + /* contentful and preFCP classes are defined in test_fcp script. */ + #main.preFCP { + visibility: hidden; + } + + #main.contentful, #main.preFCP { + background-image: url(../resources/circles.png); + } + + #main.contentful { + visibility: visible; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires for background image only when visible."); +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-canvas-context.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-canvas-context.html new file mode 100644 index 0000000..18eb07b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-canvas-context.html
@@ -0,0 +1,23 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP when canvas context is created</title> +</head> +<body> +<script src="../resources/utils.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<canvas id="canvas" width="50" height="50"></canvas> +<script> + promise_test(async t => { + assert_precondition(window.PerformancePaintTiming, "Paint Timing isn't supported."); + await new Promise(r => window.addEventListener('load', r)); + await assertNoFirstContentfulPaint(); + const canvas = document.getElementById('canvas'); + const context = canvas.getContext('2d'); + context.fillRect(0, 0, 100, 100); + await assertFirstContentfulPaint(); + }, 'Canvas should count as contentful when context is created'); +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient-expected.txt b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient-expected.txt new file mode 100644 index 0000000..7af6d68 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Gradients should not count as contentful assert_equals: First contentful paint marked too early. expected 0 but got 1 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient.html new file mode 100644 index 0000000..3a356f3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-gradient.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP should not fire with gradient-only backgrounds</title> +<style> + #main { + width: 100px; + height: 100px; + background-image: linear-gradient(to bottom, orange, blue); + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + promise_test(async t => { + assert_precondition(window.PerformancePaintTiming, "Paint Timing isn't supported."); + const main = document.getElementById('main'); + await new Promise(r => window.addEventListener('load', r)); + await assertNoFirstContentfulPaint(); + }, 'Gradients should not count as contentful'); +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html new file mode 100644 index 0000000..76d459d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html
@@ -0,0 +1,39 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to 3d revealing of descendants</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + position: relative; + top: 0; + transform: rotateX(45deg); + transform-style: preserve-3d; + } + + /* + This tests that given multiplication effect of 3d transforms on bounding rect, + An element counts as contentful/paintable only when its bounding rect is truly non-empty */ + #child { + transform: rotateX(45deg); + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + transform: none; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + <div id="child">Text</div> +</div> +<script> + test_fcp("First contentful paint fires due to its ancestor getting rotating into view."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-expected.txt b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-expected.txt new file mode 100644 index 0000000..cf37721 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL First contentful paint fires due to 3d rotation into view. assert_equals: First contentful paint marked too early. expected 0 but got 1 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate.html new file mode 100644 index 0000000..0b7fc32 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to 3d rotation into view</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + transform: rotateY(90deg); + position: relative; + top: 0; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + transform: none; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main">Text</div> +<script> + test_fcp("First contentful paint fires due to 3d rotation into view.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale-transition.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale-transition.html new file mode 100644 index 0000000..e0ac85c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale-transition.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP in transition</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + transform: scale(0); + transition: transform 10s; + position: relative; + top: 0; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + transform: scale(1); + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main">TEXT</div> +<script> + test_fcp("First contentful paint fires when revealed during transition."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale.html new file mode 100644 index 0000000..5389e8a84 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-scale.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to scale change</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + transform: scale(0); + position: relative; + top: 0; + background-image: url(../resources/circles.png); + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + transform: none; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to scale becoming positive.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-text.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-text.html new file mode 100644 index 0000000..e1b3871 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-invisible-text.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP should still fire for invisible text</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + visibility: hidden; + color: rgba(0, 0, 0, 0); + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + visibility: visible; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + INVISIBLE +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element becoming visible.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity-descendant.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity-descendant.html new file mode 100644 index 0000000..8ada49b7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity-descendant.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to ancestor opacity</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + position: relative; + top: 0; + } + + #child { + opacity: 0; + } + + /* contentful and intermediate classes are defined in test_fcp script. */ + #main.contentful #child { + opacity: 1; + } + + #main.intermediate #child { + opacity: 1; + } + + #main.intermediate { + opacity: 0; + } + + #main.contentful { + opacity: 0.5; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + <div id="child">Text</div> +</div> +<script> + test_fcp("First contentful paint fires due to its ancestor getting positive opacity."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity.html new file mode 100644 index 0000000..83afdde19 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-opacity.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to opacity</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + position: relative; + top: 0; + background-image: url(../resources/circles.png); + opacity: 0; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + opacity: 0.1; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to opacity-revealed element."); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate-expected.txt b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate-expected.txt new file mode 100644 index 0000000..c4f945c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL First contentful paint fires due to transform-based intersection with document. assert_equals: First contentful paint marked too early. expected 0 but got 1 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate.html new file mode 100644 index 0000000..ee7975e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to transform-based intersection with document</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + transform: translate(-1000px); + position: relative; + top: 0; + background-image: url(../resources/circles.png); + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + transform: none; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to transform-based intersection with document.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds.html new file mode 100644 index 0000000..3553772d4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-out-of-bounds.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to intersection with document</title> +<style> + #main { + width: 100px; + height: 100px; + left: -1000px; + position: relative; + top: 0; + background-image: url(../resources/circles.png); + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + left: 0px; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"></div> +<script> + test_fcp("First contentful paint fires due to intersection with document.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow-expected.txt b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow-expected.txt new file mode 100644 index 0000000..f68b8c6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL First contentful paint fires even when element is hidden due to overflow. assert_equals: Expected first contentful paint not found. expected 1 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow.html new file mode 100644 index 0000000..d7cc3466 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-overflow.html
@@ -0,0 +1,35 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP with element clipped with overflow</title> +<style> + #main { + width: 100px; + height: 100px; + overflow: hidden; + display: none; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful { + display: block; + } + + #text { + top: 10000px; + position: relative; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + <div id="text">HELLO</div> +</div> +<script> + test_fcp("First contentful paint fires even when element is hidden due to overflow.") +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-display.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-display.html new file mode 100644 index 0000000..50fd626e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-display.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to pseudo-element text</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + } + + #main:after { + content: "TEXT"; + display: none; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful:after { + display: block; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element text.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image.html new file mode 100644 index 0000000..ba38edb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to pseudo-element image</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful:after { + content: url(../resources/circles.png); + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element image.") +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-opacity.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-opacity.html new file mode 100644 index 0000000..b209864d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-opacity.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to pseudo-element getting positive opacity</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + } + + #main:after { + content: "TEXT"; + opacity: 0; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful:after { + opacity: 0.5; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element getting positive opacity.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-text.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-text.html new file mode 100644 index 0000000..ea2105e4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-text.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to pseudo-element text</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful:after { + content: "TEXT" + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element text.") +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-visibility.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-visibility.html new file mode 100644 index 0000000..c903c47 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-visibility.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to pseudo-element becoming visible</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + } + + #main:after { + content: "TEXT"; + visibility: hidden; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful:after { + visibility: visible; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> +</div> +<script> + test_fcp("First contentful paint fires due to pseudo-element becoming visible.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg-expected.txt b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg-expected.txt new file mode 100644 index 0000000..a3e0ff8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL First contentful paint fires when SVG becomes contentful. assert_equals: First contentful paint marked too early. expected 0 but got 1 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg.html new file mode 100644 index 0000000..bcd2372cf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-svg.html
@@ -0,0 +1,40 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP with SVG</title> +<style> + #main { + width: 100px; + height: 100px; + left: 0px; + position: relative; + } + + #circle { + display: none; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful #circle { + display: block; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + <svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="myCircle" cx="5" cy="5" r="4" stroke="blue"/> + </defs> + <use id="circle" href="#myCircle" fill="green" /> + </svg> +</div> +<script> + test_fcp("First contentful paint fires when SVG becomes contentful.") +</script> +</body> + +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-frame.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-frame.html new file mode 100644 index 0000000..fff38cd2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-frame.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to loaded video frame</title> +</head> +<body> +<script src="../resources/utils.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video id="video" autoplay></video> +<script> + promise_test(async t => { + assert_precondition(window.PerformancePaintTiming, "Paint Timing isn't supported."); + await new Promise(r => window.addEventListener('load', r)); + await assertNoFirstContentfulPaint(); + const video = document.getElementById('video'); + video.setAttribute('src', '/media/test.mp4'); + await new Promise(resolve => { + video.oncanplay = resolve; + }); + await assertFirstContentfulPaint(); + }, 'Video should become contentful when first frame is loaded'); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-poster.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-poster.html new file mode 100644 index 0000000..ed9cabca --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-video-poster.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: FCP due to loaded video poster</title> +</head> +<body> +<script src="../resources/utils.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<video id="video" width="50" height="50"></video> +<script> + promise_test(async t => { + assert_precondition(window.PerformancePaintTiming, "Paint Timing isn't supported."); + await new Promise(r => window.addEventListener('load', r)); + await assertNoFirstContentfulPaint(); + const video = document.getElementById('video'); + const src = '../resources/circles.png'; + const image = new Image(); + image.src = src; + video.setAttribute('poster', src); + await new Promise(resolve => { + image.onload = async () => resolve(); + }) + await assertFirstContentfulPaint(); + }, 'Video should become contentful when poster is loaded'); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-whitespace.html b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-whitespace.html new file mode 100644 index 0000000..6e1f425 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/paint-timing/fcp-only/fcp-whitespace.html
@@ -0,0 +1,35 @@ +<!DOCTYPE html> +<head> +<title>Performance Paint Timing Test: Whitespace should not count as contentful</title> +<style> + #main { + position: relative; + width: 100px; + height: 100px; + background-image: url(../resources/circles.png); + background-size: 0 0; + } + + #text { + display: none; + } + + /* contentful class is defined in test_fcp script. */ + #main.contentful #text{ + display: block; + } +</style> +</head> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="main"> + <div id="whitespace"> </div> + <div id="text">TEXT</div> +</div> +<script> + test_fcp("Whitespace should not count as contentful.") +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/paint-timing/resources/utils.js b/third_party/blink/web_tests/external/wpt/paint-timing/resources/utils.js index 9375b17..fb60500 100644 --- a/third_party/blink/web_tests/external/wpt/paint-timing/resources/utils.js +++ b/third_party/blink/web_tests/external/wpt/paint-timing/resources/utils.js
@@ -23,45 +23,34 @@ } // Asserts that there is currently no FCP reported, even after some wait. -function assertNoFirstContentfulPaint(t) { - return waitTime(t).then(() => { - return waitForAnimationFrames(numFramesWaiting); - }).then(() => { - return new Promise((resolve, reject) => { - const observer = new PerformanceObserver(entryList =>{ - const entries = entryList.getEntriesByName('first-contentful-paint'); - observer.disconnect(); - if (entries.length > 0) - reject('Received a first contentful paint entry.'); - else - resolve(); - }); - observer.observe({type: 'paint', buffered: true}); - observer.observe({type: 'mark'}); - performance.mark('flush'); - }); - }); +async function assertNoFirstContentfulPaint(t) { + if (t) + await waitTime(t); + + await waitForAnimationFrames(numFramesWaiting); + assert_equals(performance.getEntriesByName('first-contentful-paint').length, 0, 'First contentful paint marked too early. '); } // Asserts that FCP is reported, possibly after some wait. The wait is needed // because sometimes the FCP relies on some CSS resources to finish loading. -function assertFirstContentfulPaint(t) { - return waitTime(t).then(() => { - return waitForAnimationFrames(numFramesWaiting); - }).then(() => { - return new Promise((resolve, reject) => { - const observer = new PerformanceObserver(entryList =>{ - const entries = entryList.getEntriesByName('first-contentful-paint'); - observer.disconnect(); - if (entries.length === 0) - reject('Did not receive a first contentful paint entry.'); - else { - resolve(); - } - }); - observer.observe({type: 'paint', buffered: true}); - observer.observe({type: 'mark'}); - performance.mark('flush'); - }); - }); +async function assertFirstContentfulPaint(t) { + if (t) + await waitTime(t); + await waitForAnimationFrames(numFramesWaiting); + assert_equals(performance.getEntriesByName('first-contentful-paint').length, 1, 'Expected first contentful paint not found. '); +} + +async function test_fcp(label) { + const style = document.createElement('style'); + document.head.appendChild(style); + await promise_test(async t => { + assert_precondition(window.PerformancePaintTiming, "Paint Timing isn't supported."); + const main = document.getElementById('main'); + await new Promise(r => window.addEventListener('load', r)); + await assertNoFirstContentfulPaint(); + main.className = 'preFCP'; + await assertNoFirstContentfulPaint(); + main.className = 'contentful'; + await assertFirstContentfulPaint(); + }, label); }
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html deleted file mode 100644 index f03f98a..0000000 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html +++ /dev/null
@@ -1,128 +0,0 @@ -<!doctype html> -<html> - <head> - <title>Lostpointercapture fires on document when target in shadow dom is removed</title> - <meta name="viewport" content="width=device-width"> - <link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=810882"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="/resources/testdriver.js"></script> - <script src="/resources/testdriver-actions.js"></script> - <script src="/resources/testdriver-vendor.js"></script> - </head> - <body onload="onLoad()"> - <template id="template"> - <style> - #content{ - height:100px; - width:100px; - background-color: lightgrey; - } - </style> - <div id="content"></div> - </template> - <h1>Pointer Events - lostpointercapture when capturing element in shadow dom is removed</h1> - <h4> - Test Description: - This test checks if lostpointercapture is fired at the document when the capturing node that is in shadow dom is removed from the shadow dom. - Complete the following actions: - <ol> - <li>Press left mouse button over "Set Capture" button. Pointer should be captured by the gray rectangle which is in shadow dom.</li> - <li>Gray rectangle will be removed from shadow dom.</li> - <li>"lostpointercapture" should be received on the document not on the gray rectangle.</li> - </ol> - </h4> - <div id="shadowhost"></div> - <br> - <input type="button" id="btnCapture" value="Set Capture"> - <div id="log"></div> - <script> - var logDiv = document.getElementById("log"); - function logMessage(message){ - var log = document.createElement("div"); - var messageNode = document.createTextNode(message); - log.appendChild(messageNode); - logDiv.appendChild(log); - } - var events = []; - - var host = document.getElementById("shadowhost"); - var shadowRoot = host.attachShadow({mode: "open"}); - var template = document.getElementById("template"); - var node = template.content.cloneNode(true); - shadowRoot.appendChild(node); - - var content = host.shadowRoot.getElementById("content"); - var captureButton = document.getElementById("btnCapture"); - - captureButton.addEventListener("pointerdown", function(event){ - logMessage("Pointer will be captured by the shadow dom gray rectangle."); - content.setPointerCapture(event.pointerId); - events.push("pointerdown@captureButton"); - }); - content.addEventListener("gotpointercapture", function(event){ - logMessage("Gray rectangle received pointercapture."); - logMessage("Removing gray rectangle from shadow dom.") - content.parentNode.removeChild(content); - events.push("gotpointercapture@content"); - }); - content.addEventListener("lostpointercapture", function(event){ - logMessage("Test Failed! The element removed from shadow dom should not receive lostpointercapture.") - events.push("lostpointercapture@content"); - if(window.promise_test && shadow_dom_test){ - shadow_dom_test.step(function(){ - assert_unreached("lostpointercapture must be fired on the document, not the capturing element"); - reject_test("lostpointercapture must not be dispatched on the disconnected node"); - shadow_dom_test.done(); - }); - } - }); - document.addEventListener("lostpointercapture", function(event){ - logMessage("Test Passed! Document received lostpointercapture."); - events.push("lostpointercapture@document"); - if(window.promise_test && shadow_dom_test){ - shadow_dom_test.step(function(){ - assert_array_equals(events, ["pointerdown@captureButton", - "gotpointercapture@content", - "lostpointercapture@document"]); - resolve_test(); - shadow_dom_test.done(); - }); - } - }); - - var shadow_dom_test = null; - var resolve_test = null; - var reject_test = null; - - function cleanup(){ - events = []; - shadow_dom_test = null; - resolve_test = null; - reject_test = null; - } - - function onLoad(){ - if(window.promise_test){ - promise_test(function(t){ - return new Promise(function(resolve, reject){ - shadow_dom_test = t; - resolve_test = resolve; - reject_test = reject; - t.add_cleanup(function(){ - cleanup(); - }); - var actions = new test_driver.Actions(); - var actions_promise = actions - .pointerMove(0, 0, {origin:captureButton}) - .pointerDown({button: actions.ButtonType.LEFT}) - .pointerUp({button: actions.ButtonType.LEFT}) - .send(); - }); - }, "lostpointercapture is dispatched on the document when shadow dom capturing element is removed"); - } - } - </script> - </body> -</html> -
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_shadow_host.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_shadow_host.html deleted file mode 100644 index 4b5c9f6..0000000 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_shadow_host.html +++ /dev/null
@@ -1,136 +0,0 @@ -<!doctype html> -<html> - <head> - <title>Lostpointercapture fires on document when target in shadow dom is removed</title> - <meta name="viewport" content="width=device-width"> - <link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=810882"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="/resources/testdriver.js"></script> - <script src="/resources/testdriver-actions.js"></script> - <script src="/resources/testdriver-vendor.js"></script> - <style> - #shadowhost{ - height:200px; - width:200px; - background-color:magenta; - } - </style> - </head> - <body onload="onLoad()"> - <template id="template"> - <style> - #content{ - height:100px; - width:100px; - background-color: lightgrey; - } - </style> - <div id="content"></div> - </template> - <h1>Pointer Events - lostpointercapture when capturing element in shadow dom is removed by removing the shadow host</h1> - <h4> - Test Description: - This test checks if lostpointercapture is fired at the document when the capturing node is removed from the document by removing the shadow host. - The shadow host is colored magenta and the shadow dom element is colored gray. - Complete the following actions: - <ol> - <li>Press left mouse button over "Set Capture" button. Pointer should be captured by the gray rectangle.</li> - <li>Shadow host magenta rectangle including the gray rectangle will be removed from shadow dom.</li> - <li>"lostpointercapture" should be received on the document not on the gray rectangle.</li> - </ol> - </h4> - <div id="shadowhost"></div> - <br> - <input type="button" id="btnCapture" value="Set Capture"> - <div id="log"></div> - <script> - var logDiv = document.getElementById("log"); - function logMessage(message){ - var log = document.createElement("div"); - var messageNode = document.createTextNode(message); - log.appendChild(messageNode); - logDiv.appendChild(log); - } - var events = []; - - var host = document.getElementById("shadowhost"); - var shadowRoot = host.attachShadow({mode: "open"}); - var template = document.getElementById("template"); - var node = template.content.cloneNode(true); - shadowRoot.appendChild(node); - - var content = host.shadowRoot.getElementById("content"); - var captureButton = document.getElementById("btnCapture"); - - captureButton.addEventListener("pointerdown", function(event){ - logMessage("Pointer will be captured by the shadow dom gray rectangle."); - content.setPointerCapture(event.pointerId); - events.push("pointerdown@captureButton"); - }); - content.addEventListener("gotpointercapture", function(event){ - logMessage("Gray rectangle received pointercapture."); - logMessage("Removing magenta rectangle (which includes gray rectangle) from shadow dom.") - host.parentNode.removeChild(host); - events.push("gotpointercapture@content"); - }); - content.addEventListener("lostpointercapture", function(event){ - logMessage("Test Failed! The element removed from shadow dom should not receive lostpointercapture.") - events.push("lostpointercapture@content"); - if(window.promise_test && shadow_dom_test){ - shadow_dom_test.step(function(){ - assert_unreached("lostpointercapture must be fired on the document, not the capturing element"); - reject_test("lostpointercapture must not be dispatched on the disconnected node"); - shadow_dom_test.done(); - }); - } - }); - document.addEventListener("lostpointercapture", function(event){ - logMessage("Test Passed! Document received lostpointercapture."); - events.push("lostpointercapture@document"); - if(window.promise_test && shadow_dom_test){ - shadow_dom_test.step(function(){ - assert_array_equals(events, ["pointerdown@captureButton", - "gotpointercapture@content", - "lostpointercapture@document"]); - resolve_test(); - shadow_dom_test.done(); - }); - } - }); - - var shadow_dom_test = null; - var resolve_test = null; - var reject_test = null; - - function cleanup(){ - events = []; - shadow_dom_test = null; - resolve_test = null; - reject_test = null; - } - - function onLoad(){ - if(window.promise_test){ - promise_test(function(t){ - return new Promise(function(resolve, reject){ - shadow_dom_test = t; - resolve_test = resolve; - reject_test = reject; - t.add_cleanup(function(){ - cleanup(); - }); - var actions = new test_driver.Actions(); - var actions_promise = actions - .pointerMove(0, 0, {origin:captureButton}) - .pointerDown({button: actions.ButtonType.LEFT}) - .pointerUp({button: actions.ButtonType.LEFT}) - .send(); - }); - }, "lostpointercapture is dispatched on the document when shadow host is removed"); - } - } - </script> - </body> -</html> -
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-custom-element.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-custom-element.html deleted file mode 100644 index e8f143b..0000000 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-custom-element.html +++ /dev/null
@@ -1,123 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>PointerCapture for Custome Shadow DOM</title> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width"> - <link rel="help" href= "https://bugs.chromium.org/p/chromium/issues/detail?id=810882"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="/resources/testdriver.js"></script> - <script src="/resources/testdriver-actions.js"></script> - <script src="/resources/testdriver-vendor.js"></script> - <script> - class WC extends HTMLElement{ - constructor(){ - super(); - let template = document.getElementById('template-wc'); - let node = template.content.cloneNode(true) ; - - let shadowRoot = this.attachShadow({mode: 'open'}); - shadowRoot.appendChild(node); - } - } - customElements.define("wc-wc", WC); - </script> - </head> - <body onload="onLoad()"> - <template id="template-wc"> - <style> - #content{ - height:50px; - width:50px; - background-color: magenta; - } - </style> - <div id="content"></div> - </template> - <h4>PointerCapture by Custom Element's Shadow DOM</h4> - The magenta box below is part of a custom element's Shadow DOM. - <ul> - <li> Click left mouse button inside the box and keep mouse button depressed</li> - <li> Move the mouse</li> - <li> There should be a message stating <em>Pointer was captured by custom element's Shadow DOM!</em></li> - <li> Release left mouse button</li> - <li> There should be a message stating <em>Pointer was released by custom element's Shadow DOM!</em></li> - </ul> - - <wc-wc id="wc-wc"></wc-wc> - <div id="log"></div> - <script> - var logDiv = document.getElementById("log"); - function logMessage(message){ - var log = document.createElement("div"); - var messageNode = document.createTextNode(message); - log.appendChild(messageNode); - logDiv.appendChild(log); - } - var events = []; - - var content = document.getElementById("wc-wc") - .shadowRoot.getElementById("content"); - - content.addEventListener("pointerdown", function(e){ - content.setPointerCapture(e.pointerId); - events.push("pointerdown@content"); - }); - content.addEventListener("gotpointercapture", function(e){ - logMessage("Pointer was captured by custom element's Shadow DOM!"); - events.push("gotpointercapture@content"); - }); - content.addEventListener("pointerup", function(e){ - content.releasePointerCapture(e.pointerId); - events.push("pointerup@content"); - }); - content.addEventListener("lostpointercapture", function(e){ - logMessage("Pointer was released by custom element's Shadow DOM!"); - events.push("lostpointercapture@content"); - if(window.promise_test && wc_shadow_dom_test){ - wc_shadow_dom_test.step(function(){ - assert_array_equals(events, ["pointerdown@content", - "gotpointercapture@content", "pointerup@content", - "lostpointercapture@content"]); - resolve_test(); - wc_shadow_dom_test.done(); - }); - } - }); - - var wc_shadow_dom_test = null; - var resolve_test = null; - var reject_test = null; - - function cleanup(){ - events = []; - shadow_dom_test = null; - resolve_test = null; - reject_test = null; - } - - function onLoad(){ - if(window.promise_test){ - promise_test(function(t){ - return new Promise(function(resolve, reject){ - wc_shadow_dom_test = t; - resolve_test = resolve; - reject_test = reject; - t.add_cleanup(function(){ - cleanup(); - }); - var contentRect = content.getBoundingClientRect(); - var actions = new test_driver.Actions(); - var actions_promise = actions - .pointerMove(contentRect.x, contentRect.y) - .pointerDown({button: actions.ButtonType.LEFT}) - .pointerUp({button: actions.ButtonType.LEFT}) - .send(); - }); - }, "PointerCapture works for custom element Shadow DOM."); - } - } - </script> - </body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-shadow-dom.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-shadow-dom.html deleted file mode 100644 index 8279665f..0000000 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_pointercapture-in-shadow-dom.html +++ /dev/null
@@ -1,114 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>PointerCapture for Shadow DOM Elements</title> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width"> - <link rel="help" href= "https://bugs.chromium.org/p/chromium/issues/detail?id=810882"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="/resources/testdriver.js"></script> - <script src="/resources/testdriver-actions.js"></script> - <script src="/resources/testdriver-vendor.js"></script> - </head> - <body onload="onLoad()"> - <template id="template"> - <style> - #content{ - height:100px; - width:100px; - background-color: lightgrey; - } - </style> - <div id="content"></div> - </template> - <h4>PointerCapture by Shadow DOM element</h4> - The light gray box below is part of Shadow DOM. - <ul> - <li> Click left mouse button inside the box and keep mouse button depressed </li> - <li> Move the mouse </li> - <li> There should be a message stating <em>Pointer was captured by Shadow DOM!</em></li> - <li> Release left mouse button - <li> There should be a message stating <em>Pointer was released by Shadow DOM!</em></li> - </ul> - <div id="shadowhost"></div> - <div id="log"></div> - <script> - var logDiv = document.getElementById("log"); - function logMessage(message){ - var log = document.createElement("div"); - var messageNode = document.createTextNode(message); - log.appendChild(messageNode); - logDiv.appendChild(log); - } - var events = []; - - var host = document.getElementById("shadowhost"); - var shadowRoot = host.attachShadow({mode: "open"}); - var template = document.getElementById("template"); - var node = template.content.cloneNode(true); - shadowRoot.appendChild(node); - - var content = host.shadowRoot.getElementById("content"); - - content.addEventListener("pointerdown", function(e){ - content.setPointerCapture(e.pointerId); - events.push("pointerdown@content"); - }); - content.addEventListener("gotpointercapture", function(e){ - logMessage("Pointer was captured by Shadow DOM!"); - events.push("gotpointercapture@content"); - }); - content.addEventListener("pointerup", function(e){ - content.releasePointerCapture(e.pointerId); - events.push("pointerup@content"); - }); - content.addEventListener("lostpointercapture", function(e){ - logMessage("Pointer was released by Shadow DOM!"); - events.push("lostpointercapture@content"); - if(window.promise_test && shadow_dom_test){ - shadow_dom_test.step(function(){ - assert_array_equals(events, ["pointerdown@content", - "gotpointercapture@content", "pointerup@content", - "lostpointercapture@content"]); - resolve_test(); - shadow_dom_test.done(); - }); - } - }); - - var shadow_dom_test = null; - var resolve_test = null; - var reject_test = null; - - function cleanup(){ - events = []; - shadow_dom_test = null; - resolve_test = null; - reject_test = null; - } - - function onLoad(){ - if(window.promise_test){ - promise_test(function(t){ - return new Promise(function(resolve, reject){ - shadow_dom_test = t; - resolve_test = resolve; - reject_test = reject; - t.add_cleanup(function(){ - cleanup(); - }); - var contentRect = content.getBoundingClientRect(); - var actions = new test_driver.Actions(); - var actions_promise = actions - .pointerMove(contentRect.x, contentRect.y) - .pointerDown({button: actions.ButtonType.LEFT}) - .pointerUp({button: actions.ButtonType.LEFT}) - .send(); - }); - }, "PointerCapture works for Shadow DOM element."); - } - } - </script> - </body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html b/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html index 004fa97..260bb00 100644 --- a/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html +++ b/third_party/blink/web_tests/external/wpt/portals/portal-activate-data.html
@@ -74,7 +74,8 @@ const w = await openBlankPortalHost(); await promise_rejects_dom( t, 'DataCloneError', w.DOMException, - openPortalAndActivate('', {data: new SharedArrayBuffer}, w)); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + openPortalAndActivate('', {data: new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer}, w)); }, "A SharedArrayBuffer cannot be passed through activate data."); promise_test(async t => {
diff --git a/third_party/blink/web_tests/external/wpt/resources/idlharness.js b/third_party/blink/web_tests/external/wpt/resources/idlharness.js index 4f8ec0d..d01da49 100644 --- a/third_party/blink/web_tests/external/wpt/resources/idlharness.js +++ b/third_party/blink/web_tests/external/wpt/resources/idlharness.js
@@ -2749,7 +2749,7 @@ var expected_typeof; if (this.name == "HTMLAllCollection") { - // Willful violation of JS. :( + // Result of [[IsHTMLDDA]] slot expected_typeof = "undefined"; } else if (this.members.some(function(member) { return member.legacycaller; })) { @@ -2922,7 +2922,7 @@ { if (this.name == "Document" && member.name == "all") { - // Willful violation of JS :( + // Result of [[IsHTMLDDA]] slot assert_equals(typeof property, "undefined"); } else
diff --git a/third_party/blink/web_tests/external/wpt/resources/testharness.js b/third_party/blink/web_tests/external/wpt/resources/testharness.js index 8d3b3e9..63883e1 100644 --- a/third_party/blink/web_tests/external/wpt/resources/testharness.js +++ b/third_party/blink/web_tests/external/wpt/resources/testharness.js
@@ -1484,7 +1484,7 @@ return function (object, property_name, description) { assert(typeof object === "object" || typeof object === "function" || - // Willful violation of JS. :( + // Or has [[IsHTMLDDA]] slot String(object) === "[object HTMLAllCollection]", name, description, "provided value is not an object");
diff --git a/third_party/blink/web_tests/external/wpt/svg/linking/reftests/reference/green-100x100.svg b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/reference/green-100x100.svg new file mode 100644 index 0000000..1209414 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/reference/green-100x100.svg
@@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg"> + <rect width="100" height="100" fill="green"/> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-invalid-base.svg b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-invalid-base.svg new file mode 100644 index 0000000..fc5d7c6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-invalid-base.svg
@@ -0,0 +1,15 @@ +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:html="http://www.w3.org/1999/xhtml"> + <title>An invalid base URL makes all internal references invalid</title> + <html:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#processingURL"/> + <html:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#SpecifyingPaint"/> + <html:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#PaintServerTemplates"/> + <html:link rel="match" href="reference/green-100x100.svg"/> + <html:base href="invalid:"/> + <linearGradient id="p2"> + <stop stop-color="orange"/> + </linearGradient> + <linearGradient id="p" href="#p2"/> + <rect width="100" height="100" fill="red"/> + <rect width="100" height="100" fill="url(#p) green"/> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-001.svg b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-001.svg new file mode 100644 index 0000000..6baa0fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-001.svg
@@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:html="http://www.w3.org/1999/xhtml"> + <title>Leading and trailing whitespace is stripped from (local) URL references (<paint>)</title> + <html:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#processingURL"/> + <html:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#SpecifyingPaint"/> + <html:link rel="match" href="reference/green-100x100.svg"/> + <linearGradient id="green"> + <stop stop-color="green"/> + </linearGradient> + <linearGradient id="red"> + <stop stop-color="red"/> + </linearGradient> + <rect width="50" height="50" fill="url(' #green') red"/> + <rect width="50" height="50" fill="url('#green ') red" x="50"/> + <rect width="50" height="50" fill="url(' #green ') red" y="50"/> + <rect width="50" height="50" fill="url(' # red ') green" y="50" x="50"/> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-002.svg b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-002.svg new file mode 100644 index 0000000..ee4969a5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-002.svg
@@ -0,0 +1,19 @@ +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:html="http://www.w3.org/1999/xhtml"> + <title>Leading and trailing whitespace is stripped from (local) URL references (<use> href)</title> + <html:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#processingURL"/> + <html:link rel="help" href="https://svgwg.org/svg2-draft/struct.html#UseElementHrefAttribute"/> + <html:link rel="match" href="reference/green-100x100.svg"/> + <defs> + <rect id="green" width="50" height="50" fill="green"/> + <rect id="red" width="50" height="50" fill="red"/> + </defs> + <rect width="100" height="100" fill="red"/> + <use href=" #green"/> + <use href="#green " x="50"/> + <use href=" #green " y="50"/> + <g transform="translate(50 50)"> + <rect id="green" width="50" height="50" fill="green"/> + <use href=" # red "/> + </g> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-003.svg b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-003.svg new file mode 100644 index 0000000..1dabd9f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/linking/reftests/url-processing-whitespace-003.svg
@@ -0,0 +1,24 @@ +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:html="http://www.w3.org/1999/xhtml"> + <title>Leading and trailing whitespace is stripped from (local) URL references (<linearGradient> href)</title> + <html:link rel="help" href="https://svgwg.org/svg2-draft/linking.html#processingURL"/> + <html:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#PaintServerTemplates"/> + <html:link rel="match" href="reference/green-100x100.svg"/> + <linearGradient id="green"> + <stop stop-color="green"/> + </linearGradient> + <linearGradient id="red"> + <stop stop-color="red"/> + </linearGradient> + <linearGradient id="g1" href=" #green"/> + <linearGradient id="g2" href="#green "/> + <linearGradient id="g3" href=" #green "/> + <linearGradient id="g4" href=" # red "> + <stop stop-color="green"/> + </linearGradient> + <rect width="100" height="100" fill="red"/> + <rect width="50" height="50" fill="url(#g1) red"/> + <rect width="50" height="50" fill="url(#g2) red" x="50"/> + <rect width="50" height="50" fill="url(#g3) red" y="50"/> + <rect width="50" height="50" fill="url(#g4) red" y="50" x="50"/> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/tools/requirements_flake8.txt b/third_party/blink/web_tests/external/wpt/tools/requirements_flake8.txt index 0a452240..1c4fb72 100644 --- a/third_party/blink/web_tests/external/wpt/tools/requirements_flake8.txt +++ b/third_party/blink/web_tests/external/wpt/tools/requirements_flake8.txt
@@ -1,4 +1,4 @@ flake8==3.7.9 pycodestyle==2.5.0 pyflakes==2.1.1 -pep8-naming==0.9.1 +pep8-naming==0.10.0
diff --git a/third_party/blink/web_tests/external/wpt/tools/tox.ini b/third_party/blink/web_tests/external/wpt/tools/tox.ini index 6dd70cd7..46ab21a 100644 --- a/third_party/blink/web_tests/external/wpt/tools/tox.ini +++ b/third_party/blink/web_tests/external/wpt/tools/tox.ini
@@ -15,7 +15,7 @@ json-e jsonschema -commands = pytest {posargs} +commands = pytest --cov=tools --cov-report=term {posargs} passenv = HYPOTHESIS_PROFILE
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py index e195fc0..3fbfbfa 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -86,6 +86,7 @@ "ca_certificate_path": config.ssl_config["ca_cert_path"], "e10s": kwargs["gecko_e10s"], "enable_webrender": kwargs["enable_webrender"], + "enable_fission": kwargs["enable_fission"], "stackfix_dir": kwargs["stackfix_dir"], "binary_args": kwargs["binary_args"], "timeout_multiplier": get_timeout_multiplier(test_type, @@ -174,7 +175,7 @@ "verify": kwargs["verify"], "headless": kwargs.get("headless", False) or "MOZ_HEADLESS" in os.environ, "sw-e10s": True, - "fission": get_bool_pref("fission.autostart")} + "fission": kwargs.get("enable_fission") or get_bool_pref("fission.autostart")} # The value of `sw-e10s` defaults to whether the "parent_intercept" # implementation is enabled for the current build. This value, however, @@ -502,13 +503,14 @@ class ProfileCreator(object): def __init__(self, logger, prefs_root, config, test_type, extra_prefs, e10s, - browser_channel, binary, certutil_binary, ca_certificate_path): + enable_fission, browser_channel, binary, certutil_binary, ca_certificate_path): self.logger = logger self.prefs_root = prefs_root self.config = config self.test_type = test_type self.extra_prefs = extra_prefs self.e10s = e10s + self.enable_fission = enable_fission self.browser_channel = browser_channel self.ca_certificate_path = ca_certificate_path self.binary = binary @@ -578,6 +580,9 @@ if self.e10s: profile.set_preferences({"browser.tabs.remote.autostart": True}) + if self.enable_fission: + profile.set_preferences({"fission.autostart": True}) + if self.test_type == "reftest": profile.set_preferences({"layout.interruptible-reflow.enabled": False}) @@ -645,10 +650,10 @@ def __init__(self, logger, binary, prefs_root, test_type, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, - ca_certificate_path=None, e10s=False, enable_webrender=False, stackfix_dir=None, - binary_args=None, timeout_multiplier=None, leak_check=False, asan=False, - stylo_threads=1, chaos_mode_flags=None, config=None, browser_channel="nightly", - headless=None, preload_browser=False, **kwargs): + ca_certificate_path=None, e10s=False, enable_webrender=False, enable_fission=False, + stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False, + asan=False, stylo_threads=1, chaos_mode_flags=None, config=None, + browser_channel="nightly", headless=None, preload_browser=False, **kwargs): Browser.__init__(self, logger) self.logger = logger @@ -671,6 +676,7 @@ test_type, extra_prefs, e10s, + enable_fission, browser_channel, binary, certutil_binary,
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py index 50f8504..a6cb8f0 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox_android.py
@@ -87,10 +87,10 @@ class ProfileCreator(FirefoxProfileCreator): def __init__(self, logger, prefs_root, config, test_type, extra_prefs, e10s, - browser_channel, certutil_binary, ca_certificate_path): + enable_fission, browser_channel, certutil_binary, ca_certificate_path): super(ProfileCreator, self).__init__(logger, prefs_root, config, test_type, extra_prefs, - e10s, browser_channel, None, certutil_binary, - ca_certificate_path) + e10s, enable_fission, browser_channel, None, + certutil_binary, ca_certificate_path) def _set_required_prefs(self, profile): profile.set_preferences({ @@ -162,6 +162,7 @@ test_type, extra_prefs, e10s, + False, browser_channel, certutil_binary, ca_certificate_path)
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wptcommandline.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wptcommandline.py index 8125700..93bd886a 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wptcommandline.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/wptcommandline.py
@@ -273,6 +273,10 @@ help="Enable the WebRender compositor in Gecko (defaults to disabled).") gecko_group.add_argument("--no-enable-webrender", dest="enable_webrender", action="store_false", help="Disable the WebRender compositor in Gecko.") + gecko_group.add_argument("--enable-fission", dest="enable_fission", action="store_true", default=None, + help="Enable fission in Gecko (defaults to disabled).") + gecko_group.add_argument("--no-enable-fission", dest="enable_fission", action="store_false", + help="Disable fission in Gecko.") gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store", help="Path to directory containing assertion stack fixing scripts") gecko_group.add_argument("--setpref", dest="extra_prefs", action='append',
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptserve/setup.py b/third_party/blink/web_tests/external/wpt/tools/wptserve/setup.py index c9c364b8..759cb48 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptserve/setup.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptserve/setup.py
@@ -1,6 +1,6 @@ from setuptools import setup -PACKAGE_VERSION = '2.0' +PACKAGE_VERSION = '3.0' deps = ["six>=1.8", "h2==3.0.1"] setup(name='wptserve',
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished-expected.txt new file mode 100644 index 0000000..4b6e01c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished-expected.txt
@@ -0,0 +1,26 @@ +This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: The user aborted a request. +PASS Test pausing then playing does not change the finished promise +PASS Test restarting a finished animation +PASS Test restarting a reversed finished animation +PASS Test redundant finishing of animation +PASS Finished promise does not resolve when paused +PASS Finished promise does not resolve when pause-pending +PASS The finished promise is fulfilled with its Animation +PASS finished promise is rejected when an animation is canceled by calling cancel() +PASS canceling an already-finished animation replaces the finished promise +PASS Test finished promise changes for animation duration changes +PASS Test finished promise changes when playbackRate == 0 +PASS Test finished promise resolves when reaching to the natural boundary. +PASS Test finished promise changes when a prior finished promise resolved and the animation falls out finished state +PASS Test no new finished promise generated when finished state is checked asynchronously +PASS Test new finished promise generated when finished state is checked synchronously +PASS Test synchronous finished promise resolved even if finished state is changed soon +PASS Test synchronous finished promise resolved even if asynchronous finished promise happens just before synchronous promise +PASS Test finished promise is not resolved when the animation falls out finished state immediately +PASS Test finished promise is not resolved once the animation falls out finished state even though the current finished promise is generated soon after animation state became finished +PASS Finished promise should be resolved after the ready promise is resolved +PASS Finished promise should be rejected after the ready promise is rejected +FAIL Finished promise does not report an unhandledrejection when rejected assert_unreached: Should not get an unhandled rejection Reached unreachable code +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html index 563d4ba..bee4fd8 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/finished.html
@@ -395,5 +395,22 @@ return Promise.race([timeout, testSuccess]); }, 'Finished promise should be rejected after the ready promise is rejected'); +promise_test(async t => { + const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); + + // Ensure the finished promise is created + const finished = animation.finished; + + window.addEventListener( + 'unhandledrejection', + t.unreached_func('Should not get an unhandled rejection') + ); + + animation.cancel(); + + // Wait a moment to allow a chance for the event to be dispatched. + await waitForAnimationFrames(2); +}, 'Finished promise does not report an unhandledrejection when rejected'); + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready-expected.txt b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready-expected.txt new file mode 100644 index 0000000..a72b988a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready-expected.txt
@@ -0,0 +1,8 @@ +This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: The user aborted a request. +PASS A new ready promise is created when play()/pause() is called +PASS Redundant calls to play() do not generate new ready promise objects +PASS The ready promise is fulfilled with its Animation +FAIL The ready promise does not report an unhandledrejection when rejected assert_unreached: Should not get an unhandled rejection Reached unreachable code +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready.html index 461c4e95..462e2a04 100644 --- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready.html +++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/ready.html
@@ -57,5 +57,22 @@ }); }, 'The ready promise is fulfilled with its Animation'); +promise_test(async t => { + const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); + + // Ensure the ready promise is created + const ready = animation.ready; + + window.addEventListener( + 'unhandledrejection', + t.unreached_func('Should not get an unhandled rejection') + ); + + animation.cancel(); + + // Wait a moment to allow a chance for the event to be dispatched. + await waitForAnimationFrames(2); +}, 'The ready promise does not report an unhandledrejection when rejected'); + </script> </body>
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html index 20780d94..c0cd49d3 100644 --- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html
@@ -149,7 +149,9 @@ buffer.copyFromChannel(x, 3); }, '7: buffer.copyFromChannel(x, 3)').throw(DOMException, 'IndexSizeError'); - let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + // WebAssembly.Memory's size is in multiples of 64 KiB + const shared_buffer = new Float32Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer); should( () => { buffer.copyFromChannel(shared_buffer, 0); @@ -202,7 +204,9 @@ buffer.copyToChannel(x, 3); }, '6: buffer.copyToChannel(x, 3)').throw(DOMException, 'IndexSizeError'); - let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + // WebAssembly.Memory's size is in multiples of 64 KiB + const shared_buffer = new Float32Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer); should( () => { buffer.copyToChannel(shared_buffer, 0);
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https-expected.txt b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https-expected.txt new file mode 100644 index 0000000..395b08d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +PASS # AUDIT TASK RUNNER STARTED. +PASS Executing "constructor-error" +PASS Executing "process-error" +PASS Audit report +PASS > [constructor-error] +FAIL X onprocessorerror argument should be an ErrorEvent when + the constructor of AudioWorkletProcessor has + an error. is not true. Got false. assert_true: expected true got false +FAIL < [constructor-error] 1 out of 1 assertions were failed. assert_true: expected true got false +PASS > [process-error] +FAIL X onprocessorerror argument should be an ErrorEvent when + the process method of the AudioWorkletProcessor method + has an error is not true. Got false. assert_true: expected true got false +FAIL < [process-error] 1 out of 1 assertions were failed. assert_true: expected true got false +FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed. assert_true: expected true got false +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html index 0914edb..ce39de5 100644 --- a/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html +++ b/third_party/blink/web_tests/external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-onerror.https.html
@@ -24,7 +24,11 @@ (task, should) => { let constructorErrorWorkletNode = new AudioWorkletNode(context, 'constructor-error'); - constructorErrorWorkletNode.onprocessorerror = () => { + constructorErrorWorkletNode.onprocessorerror = (e) => { + should(e instanceof ErrorEvent, + `onprocessorerror argument should be an ErrorEvent when + the constructor of AudioWorkletProcessor has + an error.`).beTrue(); // Without 'processorerror' event callback, this test will be // timed out. task.done(); @@ -37,7 +41,11 @@ let processErrorWorkletNode = new AudioWorkletNode(context, 'process-error'); processErrorWorkletNode.connect(context.destination); - processErrorWorkletNode.onprocessorerror = () => { + processErrorWorkletNode.onprocessorerror = (e) => { + should(e instanceof ErrorEvent, + `onprocessorerror argument should be an ErrorEvent when + the process method of the AudioWorkletProcessor method + has an error`).beTrue(); // Without 'processorerror' event callback, this test will be // timed out. task.done();
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js index 25ddd99b..24b3db7 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-helper.js
@@ -140,6 +140,15 @@ return answer; } +// Helper function to generate offer using a freshly +// created RTCPeerConnection object +async function generateOffer() { + const pc = new RTCPeerConnection(); + const offer = await pc.createOffer(); + pc.close(); + return offer; +} + // Run a test function that return a promise that should // never be resolved. For lack of better options, // we wait for a time out and pass the test if the
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded-expected.txt new file mode 100644 index 0000000..3e636988 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded-expected.txt
@@ -0,0 +1,19 @@ +This is a testharness.js-based test. +PASS Creating first data channel should fire negotiationneeded event +PASS calling createDataChannel twice should fire negotiationneeded event once +PASS addTransceiver() should fire negotiationneeded event +PASS Calling addTransceiver() twice should fire negotiationneeded event once +PASS Calling both addTransceiver() and createDataChannel() should fire negotiationneeded event once +PASS negotiationneeded event should not fire if signaling state is not stable +FAIL negotiationneeded event should fire only after signaling state goes back to stable after setRemoteDescription assert_false: negotiationneeded should not fire until the next iteration of the event loop after SRD success expected false got true +FAIL negotiationneeded event should fire only after signaling state goes back to stable after setLocalDescription assert_false: negotiationneeded should not fire until the next iteration of the event loop after SLD success expected false got true +FAIL negotiationneeded event should fire only after signalingstatechange event fires from setRemoteDescription assert_false: negotiationneeded should not fire before signalingstatechange fires expected false got true +FAIL negotiationneeded event should fire only after signalingstatechange event fires from setLocalDescription assert_false: negotiationneeded should not fire until the next iteration of the event loop after returning to stable expected false got true +PASS addTrack should cause negotiationneeded to fire +PASS removeTrack should cause negotiationneeded to fire on the caller +PASS removeTrack should cause negotiationneeded to fire on the callee +PASS Updating the direction of the transceiver should cause negotiationneeded to fire +PASS Calling setStreams should cause negotiationneeded to fire +PASS Adding two transceivers, one at a time, results in the expected number of negotiationneeded events +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded.html index 3b65fac..2eda7b5 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onnegotiationneeded.html
@@ -11,6 +11,7 @@ // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html // The following helper functions are called from RTCPeerConnection-helper.js: + // generateOffer // generateAnswer // generateAudioReceiveOnlyOffer // test_never_resolve @@ -193,38 +194,75 @@ t.add_cleanup(() => pc.close()); pc.addTransceiver('audio'); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + const offer = await pc.createOffer(); await pc.setLocalDescription(offer); let fired = false; pc.onnegotiationneeded = e => fired = true; pc.createDataChannel('test'); - const answer = await generateAnswer(offer); - pc.setRemoteDescription(answer); - assert_false(fired, "negotiationneeded should not fire until the next iteration of the event loop after returning to stable"); + await pc.setRemoteDescription(await generateAnswer(offer)); + await undefined; + assert_false(fired, "negotiationneeded should not fire until the next iteration of the event loop after SRD success"); await new Promise(resolve => pc.onnegotiationneeded = resolve); - }, 'negotiationneeded event should fire only after signaling state go back to stable after setRemoteDescription'); + }, 'negotiationneeded event should fire only after signaling state goes back to stable after setRemoteDescription'); promise_test(async t => { - const callee = new RTCPeerConnection(); - t.add_cleanup(() => callee.close()); + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); - const caller = new RTCPeerConnection(); - t.add_cleanup(() => caller.close()); + pc.addTransceiver('audio'); + await new Promise(resolve => pc.onnegotiationneeded = resolve); - callee.addTransceiver('audio'); - - const offer = await caller.createOffer(); let fired = false; - callee.onnegotiationneeded = e => fired = true; - await callee.setRemoteDescription(offer); - callee.createDataChannel('test'); + pc.onnegotiationneeded = e => fired = true; + await pc.setRemoteDescription(await generateOffer()); + pc.createDataChannel('test'); + await pc.setLocalDescription(await pc.createAnswer()); + await undefined; + assert_false(fired, "negotiationneeded should not fire until the next iteration of the event loop after SLD success"); - const answer = await callee.createAnswer(offer); - callee.setLocalDescription(answer); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + }, 'negotiationneeded event should fire only after signaling state goes back to stable after setLocalDescription'); + + promise_test(async t => { + const pc = new RTCPeerConnection(); + + t.add_cleanup(() => pc.close()); + + pc.addTransceiver('audio'); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + + const offer = await pc.createOffer(); + await pc.setLocalDescription(offer); + let fired = false; + pc.onnegotiationneeded = e => fired = true; + pc.createDataChannel('test'); + const p = pc.setRemoteDescription(await generateAnswer(offer)); + await new Promise(resolve => pc.onsignalingstatechange = resolve); + assert_false(fired, "negotiationneeded should not fire before signalingstatechange fires"); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + await p; + }, 'negotiationneeded event should fire only after signalingstatechange event fires from setRemoteDescription'); + + promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + + pc.addTransceiver('audio'); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + + let fired = false; + pc.onnegotiationneeded = e => fired = true; + await pc.setRemoteDescription(await generateOffer()); + pc.createDataChannel('test'); + + const p = pc.setLocalDescription(await pc.createAnswer()); + await new Promise(resolve => pc.onsignalingstatechange = resolve); assert_false(fired, "negotiationneeded should not fire until the next iteration of the event loop after returning to stable"); - - await new Promise(resolve => callee.onnegotiationneeded = resolve); - }, 'negotiationneeded event should fire only after signaling state go back to stable after setLocalDescription'); + await new Promise(resolve => pc.onnegotiationneeded = resolve); + await p; + }, 'negotiationneeded event should fire only after signalingstatechange event fires from setLocalDescription'); /* 5.1. RTCPeerConnection Interface Extensions @@ -299,7 +337,7 @@ assert_unreached('onnegotiationneeded misfired'); }); await callee.setRemoteDescription(offer); - const answer = await callee.createAnswer(offer); + const answer = await callee.createAnswer(); callee.setLocalDescription(answer); callee.removeTrack(sender);
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-operations.https.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-operations.https.html index e88c8b2..a0921d3 100644 --- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-operations.https.html +++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-operations.https.html
@@ -6,6 +6,320 @@ <script> 'use strict'; +// Helpers to test APIs "return a promise rejected with a newly created" error. +// Strictly speaking this means already-rejected upon return. +function promiseState(p) { + const t = {}; + return Promise.race([p, t]) + .then(v => (v === t)? "pending" : "fulfilled", () => "rejected"); +} + +// However, to allow promises to be used in implementations, this helper adds +// some slack: returning a pending promise will pass, provided it is rejected +// before the end of the current run of the event loop (i.e. on microtask queue +// before next task). +async function promiseStateFinal(p) { + for (let i = 0; i < 20; i++) { + await promiseState(p); + } + return promiseState(p); +} + +[promiseState, promiseStateFinal].forEach(f => promise_test(async t => { + assert_equals(await f(Promise.resolve()), "fulfilled"); + assert_equals(await f(Promise.reject()), "rejected"); + assert_equals(await f(new Promise(() => {})), "pending"); +}, `${f.name} helper works`)); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + await pc.setRemoteDescription(await pc.createOffer()); + const p = pc.createOffer(); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "createOffer must detect InvalidStateError synchronously when chain is empty (prerequisite)"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const p = pc.createAnswer(); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "createAnswer must detect InvalidStateError synchronously when chain is empty (prerequisite)"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const p = pc.setLocalDescription({type: "rollback"}); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "SLD(rollback) must detect InvalidStateError synchronously when chain is empty"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const p = pc.addIceCandidate(); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(pc.remoteDescription, null, "no remote desciption"); + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "addIceCandidate must detect InvalidStateError synchronously when chain is empty"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const transceiver = pc.addTransceiver("audio"); + transceiver.stop(); + const p = transceiver.sender.replaceTrack(null); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "replaceTrack must detect InvalidStateError synchronously when chain is empty and transceiver is stopped"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const transceiver = pc.addTransceiver("audio"); + transceiver.stop(); + const parameters = transceiver.sender.getParameters(); + const p = transceiver.sender.setParameters(parameters); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidStateError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "setParameters must detect InvalidStateError synchronously always when transceiver is stopped"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const {track} = new RTCPeerConnection().addTransceiver("audio").receiver; + assert_not_equals(track, null); + const p = pc.getStats(track); + const haveState = promiseStateFinal(p); + try { + await p; + assert_unreached("Control. Must not succeed"); + } catch (e) { + assert_equals(e.name, "InvalidAccessError"); + } + assert_equals(await haveState, "rejected", "promise rejected on same task"); +}, "pc.getStats must detect InvalidAccessError synchronously always"); + +// Helper builds on above tests to check if operations queue is empty or not. +// +// Meaning of "empty": Because this helper uses the sloppy promiseStateFinal, +// it may not detect operations on the chain unless they block the current run +// of the event loop. In other words, it may not detect operations on the chain +// that resolve on the emptying of the microtask queue at the end of this run of +// the event loop. + +async function isOperationsChainEmpty(pc) { + let p, error; + const signalingState = pc.signalingState; + if (signalingState == "have-remote-offer") { + p = pc.createOffer(); + } else { + p = pc.createAnswer(); + } + const state = await promiseStateFinal(p); + try { + await p; + // This helper tries to avoid side-effects by always failing, + // but createAnswer above may succeed if chained after an SRD + // that changes the signaling state on us. Ignore that success. + if (signalingState == pc.signalingState) { + assert_unreached("Control. Must not succeed"); + } + } catch (e) { + assert_equals(e.name, "InvalidStateError", + "isOperationsChainEmpty is working"); + } + return state == "rejected"; +} + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + assert_true(await isOperationsChainEmpty(pc), "Empty to start"); +}, "isOperationsChainEmpty detects empty in stable"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + await pc.setLocalDescription(await pc.createOffer()); + assert_true(await isOperationsChainEmpty(pc), "Empty to start"); +}, "isOperationsChainEmpty detects empty in have-local-offer"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + await pc.setRemoteDescription(await pc.createOffer()); + assert_true(await isOperationsChainEmpty(pc), "Empty to start"); +}, "isOperationsChainEmpty detects empty in have-remote-offer"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const p = pc.createOffer(); + assert_false(await isOperationsChainEmpty(pc), "Non-empty chain"); + await p; +}, "createOffer uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + await pc.setRemoteDescription(await pc.createOffer()); + const p = pc.createAnswer(); + assert_false(await isOperationsChainEmpty(pc), "Non-empty chain"); + await p; +}, "createAnswer uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const offer = await pc.createOffer(); + assert_true(await isOperationsChainEmpty(pc), "Empty before"); + const p = pc.setLocalDescription(offer); + assert_false(await isOperationsChainEmpty(pc), "Non-empty chain"); + await p; +}, "setLocalDescription uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const offer = await pc.createOffer(); + assert_true(await isOperationsChainEmpty(pc), "Empty before"); + const p = pc.setRemoteDescription(offer); + assert_false(await isOperationsChainEmpty(pc), "Non-empty chain"); + await p; +}, "setRemoteDescription uses operations chain"); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + pc1.addTransceiver("video"); + const offer = await pc1.createOffer(); + await pc1.setLocalDescription(offer); + const {candidate} = await new Promise(r => pc1.onicecandidate = r); + await pc2.setRemoteDescription(offer); + const p = pc2.addIceCandidate(candidate); + assert_false(await isOperationsChainEmpty(pc2), "Non-empty chain"); + await p; +}, "addIceCandidate uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const transceiver = pc.addTransceiver("audio"); + await new Promise(r => pc.onnegotiationneeded = r); + assert_false(await isOperationsChainEmpty(pc), "Empty chain"); + await new Promise(r => t.step_timeout(r, 0)); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); +}, "Firing of negotiationneeded uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const transceiver = pc.addTransceiver("audio"); + await new Promise(r => pc.onnegotiationneeded = r); + // Note: since the negotiationneeded event is fired from a chained synchronous + // function in the spec, queue a task before doing our precheck. + await new Promise(r => t.step_timeout(r, 0)); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + const p = transceiver.sender.replaceTrack(null); + assert_false(await isOperationsChainEmpty(pc), "Non-empty chain"); + await p; +}, "replaceTrack uses operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const transceiver = pc.addTransceiver("audio"); + await new Promise(r => pc.onnegotiationneeded = r); + await new Promise(r => t.step_timeout(r, 0)); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + const parameters = transceiver.sender.getParameters(); + const p = transceiver.sender.setParameters(parameters); + const haveState = promiseStateFinal(p); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + assert_equals(await haveState, "pending", "Method is async"); + await p; +}, "setParameters does NOT use the operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const p = pc.getStats(); + const haveState = promiseStateFinal(p); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + assert_equals(await haveState, "pending", "Method is async"); + await p; +}, "pc.getStats does NOT use the operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const {sender} = pc.addTransceiver("audio"); + await new Promise(r => pc.onnegotiationneeded = r); + await new Promise(r => t.step_timeout(r, 0)); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + const p = sender.getStats(); + const haveState = promiseStateFinal(p); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + assert_equals(await haveState, "pending", "Method is async"); + await p; +}, "sender.getStats does NOT use the operations chain"); + +promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const {receiver} = pc.addTransceiver("audio"); + await new Promise(r => pc.onnegotiationneeded = r); + await new Promise(r => t.step_timeout(r, 0)); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + const p = receiver.getStats(); + const haveState = promiseStateFinal(p); + assert_true(await isOperationsChainEmpty(pc), "Empty chain"); + assert_equals(await haveState, "pending", "Method is async"); + await p; +}, "receiver.getStats does NOT use the operations chain"); + promise_test(async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); @@ -28,6 +342,21 @@ }, "addIceCandidate chains onto SRD, fails before"); promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + + const offer = await pc.createOffer(); + pc.addTransceiver("video"); + await new Promise(r => pc.onnegotiationneeded = r); + const p = (async () => { + await pc.setLocalDescription(); + })(); + await new Promise(r => t.step_timeout(r, 0)); + await pc.setRemoteDescription(offer); + await p; +}, "Operations queue not vulnerable to recursion by chained negotiationneeded"); + +promise_test(async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); const pc2 = new RTCPeerConnection(); @@ -65,147 +394,4 @@ await pc1.setRemoteDescription(pc2.localDescription); }, "Negotiate solely by operations queue and signaling state"); -// Helpers to test APIs "return a promise rejected with a newly created" error. -// Strictly speaking this means already-rejected upon return. -function promiseState(p) { - const t = {}; - return Promise.race([p, t]) - .then(v => (v === t)? "pending" : "fulfilled", () => "rejected"); -} - -// However, to allow promises to be used in implementations, this helper adds -// some slack: returning a pending promise will pass, provided it is rejected -// before the end of the current run of the event loop (i.e. on microtask queue -// before next task). -async function promiseStateFinal(p) { - for (let i = 0; i < 20; i++) { - await promiseState(p); - } - return promiseState(p); -} - -promise_test(async t => { - assert_equals(await promiseState(Promise.resolve()), "fulfilled"); - assert_equals(await promiseState(Promise.reject()), "rejected"); - assert_equals(await promiseState(new Promise(() => {})), "pending"); -}, "promiseState helper works"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - const p = pc.setLocalDescription({type: "offer", sdp: "blah"}); - const haveState = promiseStateFinal(p); - try { - await p; - assert_unreached("Control. Must not succeed"); - } catch (e) { - assert_equals(e.name, "InvalidModificationError"); - } - assert_equals(await haveState, "rejected", "promise rejected on same task"); -}, "Operations chain must run first operation's sync part synchronously"); - -// Helper builds on above test to check if operations queue is empty or not. -async function isOperationsChainEmpty(pc) { - const type = pc.signalingState == "have-remote-offer" ? "answer" : "offer"; - const p = pc.setLocalDescription({type, sdp: "blah"}); - const state = await promiseStateFinal(p); - try { - await p; - assert_unreached("Control. Must not succeed"); - } catch (e) { - assert_equals(e.name, "InvalidModificationError", "isOperationsChainEmpty"); - } - return state == "rejected"; -} - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - assert_true(await isOperationsChainEmpty(pc), "Empty to start"); -}, "isOperationsChainEmpty detects empty"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - const p = await pc.createOffer(); - try { - await pc.setLocalDescription({type: "offer", sdp: "blah"}); - assert_unreached("Control. Must not succeed"); - } catch (e) { - assert_equals(e.name, "InvalidModificationError"); - } -}, "SLD(offer) must validate against LastCreatedOffer early (prerequisite)"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - await pc.setRemoteDescription(await pc.createOffer()); - try { - await pc.setLocalDescription({type: "offer", sdp: "blah"}); - assert_unreached("Control. Must not succeed"); - } catch (e) { - assert_equals(e.name, "InvalidModificationError"); - } -}, "SLD(offer) must validate input before signaling state (prerequisite)"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - const p = pc.createOffer(); - assert_true(!await isOperationsChainEmpty(pc), "Non-empty queue"); - await p; -}, "createOffer uses operations chain"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - await pc.setRemoteDescription(await pc.createOffer()); - const p = pc.createAnswer(); - assert_true(!await isOperationsChainEmpty(pc), "Non-empty queue"); - await p; -}, "createAnswer uses operations chain"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - - const offer = await pc.createOffer(); - const p = pc.setLocalDescription(offer); - assert_true(!await isOperationsChainEmpty(pc), "Non-empty queue"); - await p; -}, "setLocalDescription uses operations chain"); - -promise_test(async t => { - const pc = new RTCPeerConnection(); - t.add_cleanup(() => pc.close()); - pc.createDataChannel("dummy"); - - const offer = await pc.createOffer(); - assert_true(await isOperationsChainEmpty(pc), "Empty after settled"); - const p = pc.setRemoteDescription(offer); - assert_true(!await isOperationsChainEmpty(pc), "Non-empty queue"); - await p; -}, "setRemoteDescription uses operations chain"); - -promise_test(async t => { - const pc1 = new RTCPeerConnection(); - t.add_cleanup(() => pc1.close()); - const pc2 = new RTCPeerConnection(); - t.add_cleanup(() => pc2.close()); - - pc1.addTransceiver("video"); - const offer = await pc1.createOffer(); - await pc1.setLocalDescription(offer); - const {candidate} = await new Promise(r => pc1.onicecandidate = r); - await pc2.setRemoteDescription(offer); - const p = pc2.addIceCandidate(candidate); - assert_true(!await isOperationsChainEmpty(pc2), "Non-empty queue"); - await p; -}, "addIceCandidate uses operations chain"); - </script>
diff --git a/third_party/blink/web_tests/external/wpt/workers/modules/shared-worker-parse-error-failure.html b/third_party/blink/web_tests/external/wpt/workers/modules/shared-worker-parse-error-failure.html new file mode 100644 index 0000000..0d8e3903 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/workers/modules/shared-worker-parse-error-failure.html
@@ -0,0 +1,49 @@ +<!DOCTYPE html> +<title>SharedWorker: parse error failure</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../support/check-error-arguments.js"></script> +<script> + +// Check if module shared worker is supported. +// In this test scope, we only use simple non-nested static import as a feature +// of module shared worker, so we only check if static import is supported. +// +// This check is necessary to appropriately test parse error handling because +// we need to distingusih the parse error invoked by unsupported "import" in +// the top-level script from the parse error invoked by the statically imported +// script which is the one we want to check in this test. +promise_setup(async () => { + const scriptURL = 'resources/static-import-worker.js'; + const worker = new SharedWorker(scriptURL, { type: 'module' }); + const supportsModuleWorkers = await new Promise((resolve, reject) => { + worker.port.onmessage = e => { + resolve(e.data.length == 1 && e.data[0] == 'export-on-load-script.js'); + }; + worker.onerror = () => resolve(false); + }); + assert_precondition( + supportsModuleWorkers, + "Static import must be supported on module shared worker to run this test." + ); +}); + +promise_test(async () => { + const scriptURL = 'resources/syntax-error.js'; + const worker = new SharedWorker(scriptURL, { type: 'module' }); + const args = await new Promise(resolve => + worker.onerror = (...args) => resolve(args)); + window.checkErrorArguments(args); +}, 'Module shared worker construction for script with syntax error should ' + + 'dispatch an event named error.'); + +promise_test(async () => { + const scriptURL = 'resources/static-import-syntax-error.js'; + const worker = new SharedWorker(scriptURL, { type: 'module' }); + const args = await new Promise(resolve => + worker.onerror = (...args) => resolve(args)); + window.checkErrorArguments(args); +}, 'Static import on module shared worker for script with syntax error ' + + 'should dispatch an event named error.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/workers/shared-worker-parse-error-failure.html b/third_party/blink/web_tests/external/wpt/workers/shared-worker-parse-error-failure.html new file mode 100644 index 0000000..3f1b4c5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/workers/shared-worker-parse-error-failure.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<title>SharedWorker: parse error failure</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./support/check-error-arguments.js"></script> +<script> + +promise_test(async () => { + const scriptURL = 'modules/resources/syntax-error.js'; + const worker = new SharedWorker(scriptURL, { type: 'classic' }); + const args = await new Promise(resolve => + worker.onerror = (...args) => resolve(args)); + window.checkErrorArguments(args); +}, 'Classic shared worker construction for script with syntax error should ' + + 'dispatch an event named error.'); + +promise_test(async () => { + const scriptURL = 'modules/resources/static-import-worker.js'; + const worker = new SharedWorker(scriptURL, { type: 'classic' }); + const args = await new Promise(resolve => + worker.onerror = (...args) => resolve(args)); + window.checkErrorArguments(args); +}, 'Static import on classic shared worker should dispatch an event named ' + + 'error.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/workers/support/check-error-arguments.js b/third_party/blink/web_tests/external/wpt/workers/support/check-error-arguments.js new file mode 100644 index 0000000..64441f9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/workers/support/check-error-arguments.js
@@ -0,0 +1,4 @@ +window.checkErrorArguments = args => { + assert_equals(args.length, 1); + assert_equals(args[0].constructor, Event); +};
diff --git a/third_party/blink/web_tests/external/wpt/xhr/send-data-sharedarraybuffer.any.js b/third_party/blink/web_tests/external/wpt/xhr/send-data-sharedarraybuffer.any.js index b902888f..912f6226 100644 --- a/third_party/blink/web_tests/external/wpt/xhr/send-data-sharedarraybuffer.any.js +++ b/third_party/blink/web_tests/external/wpt/xhr/send-data-sharedarraybuffer.any.js
@@ -1,8 +1,9 @@ // META: title=XMLHttpRequest.send(sharedarraybuffer) test(() => { - var xhr = new XMLHttpRequest(); - var buf = new SharedArrayBuffer(); + const xhr = new XMLHttpRequest(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const buf = new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer; xhr.open("POST", "./resources/content.py", true); assert_throws_js(TypeError, function() { @@ -13,8 +14,9 @@ ["Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Uint16Array", "Int32Array", "Uint32Array", "Float32Array", "Float64Array", "DataView"].forEach((type) => { test(() => { - var xhr = new XMLHttpRequest(); - var arr = new self[type](new SharedArrayBuffer()); + const xhr = new XMLHttpRequest(); + // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()` + const arr = new self[type](new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer); xhr.open("POST", "./resources/content.py", true); assert_throws_js(TypeError, function() {
diff --git a/third_party/blink/web_tests/fast/dom/viewport/scroll-resize-events-fired.html b/third_party/blink/web_tests/fast/dom/viewport/scroll-resize-events-fired.html index 028664f..b731377 100644 --- a/third_party/blink/web_tests/fast/dom/viewport/scroll-resize-events-fired.html +++ b/third_party/blink/web_tests/fast/dom/viewport/scroll-resize-events-fired.html
@@ -8,17 +8,16 @@ <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> +<script src="../../../resources/gesture-util.js"></script> <script> var numCallsScroll = 0; var numCallsResize = 0; var pageScaleFactor = 2; + var source = GestureSourceType.MOUSE_INPUT; var t = async_test('verify that the scroll and resize events get fired on window.visualViewport'); - window.onload = t.step_func(function() { - // Turn off smooth scrolling. - internals.settings.setScrollAnimatorEnabled(false); - + window.onload = async () => { window.visualViewport.addEventListener('scroll', function(e) { numCallsScroll++; }); @@ -27,15 +26,15 @@ numCallsResize++; }); - // Scroll both viewports. - eventSender.mouseMoveTo(100, 100); - eventSender.continuousMouseScrollBy(100, 100); - assert_equals(numCallsScroll, 0); - assert_equals(numCallsResize, 0); + // Register the event handlers after the waitForCompositorCommit. + await waitForCompositorCommit(); + numCallsScroll = 0; + numCallsResize = 0; - // TODO(ymalik): Remove hook to internals to pinch-zoom here and browser - // zoom below. This will be required to upstream to w3c repo. - internals.setPageScaleFactor(pageScaleFactor); + // Scroll both viewports. + await smoothScroll(100, 100, 100, source, 'downright', SPEED_INSTANT); + + chrome.gpuBenchmarking.setPageScaleFactor(pageScaleFactor); // Verify viewport dimensions exclude scrollbar. requestAnimationFrame(function() { @@ -52,5 +51,5 @@ t.done(); }); }); - }); + } </script>
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div-expected.txt b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div-expected.txt deleted file mode 100644 index 33b2a55..0000000 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -PASS successfullyParsed is true - -TEST COMPLETE - -PASS event.wheelDeltaY is 0 -PASS event.wheelDeltaX is window.givenScrollLeft*-3 -PASS event.wheelDelta is window.givenScrollLeft*-3 -PASS div.scrollTop is window.expectedScrollTop -PASS div.scrollLeft is window.expectedScrollLeft
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html index 1dfa2c8..b061a4b 100644 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html +++ b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-div.html
@@ -1,60 +1,34 @@ -<html> - <head> - <script src="../../resources/js-test.js"></script> - <script> - var givenScrollTop = 0; - var givenScrollLeft = 2; - var expectedScrollTop = 0; - var expectedScrollLeft = 0; - var event; - var div; +<!DOCTYPE html> +<script src='../../resources/gesture-util.js'></script> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<div id="overflow" style="border:2px solid black;overflow:auto;height:200px;width:200px;"> + <div style="border:0px;background-color:red;height:300px;width:185px;"></div> + <div style="border:0px;background-color:green;height:300px;width:185px;"></div> +</div> - if (window.testRunner) - testRunner.waitUntilDone(); +<script> +var givenScrollLeft = 2; +var expectedScrollLeft = 0; +var last_event = null; +var source = GestureSourceType.MOUSE_INPUT; +const numTicksX = givenScrollLeft / pixelsPerTick(); +const expectedWheelDeltaX = numTicksX * LEGACY_MOUSE_WHEEL_TICK_MULTIPLIER; - function dispatchWheelEvent() - { - var overflowElement = document.getElementById("overflow"); - if (overflowElement) - overflowElement.addEventListener("mousewheel", mousewheelHandler, false); +function mousewheelHandler(e) +{ + last_event = e; +} - if (window.eventSender) { - eventSender.mouseMoveTo(100, 110); - eventSender.continuousMouseScrollBy(-window.givenScrollLeft, -window.givenScrollTop, true); - } +promise_test(async () => { + var overflowElement = document.getElementById("overflow"); + overflowElement.addEventListener("mousewheel", mousewheelHandler, false); - setTimeout('checkOffsets();', 100); - } - - function checkOffsets() - { - div = document.getElementById("overflow"); - shouldBe("div.scrollTop", "window.expectedScrollTop"); - shouldBe("div.scrollLeft", "window.expectedScrollLeft"); - - if (window.testRunner) - testRunner.notifyDone(); - } - - function mousewheelHandler(e) - { - event = e; - shouldBe("event.wheelDeltaY", "0"); - shouldBe("event.wheelDeltaX", "window.givenScrollLeft*-3"); - - if (e.wheelDeltaY) - shouldBe("event.wheelDelta", "0"); - else - shouldBe("event.wheelDelta", "window.givenScrollLeft*-3"); - } - </script> - </head> - - <body style="margin:0" onload="setTimeout('dispatchWheelEvent();', 100)"> - <div id="overflow" style="border:2px solid black;overflow:auto;height:200px;width:200px;"> - <div style="border:0px;background-color:red;height:300px;width:185px;"></div> - <div style="border:0px;background-color:green;height:300px;width:185px;"></div> - </div> - <div id="console"></div> - </body> -</html> + await smoothScroll(givenScrollLeft, 100, 110, source, 'right', SPEED_INSTANT, false /* precise_scrolling_deltas */, true /* scroll_by_page */); + await conditionHolds( () => { + return overflowElement.scrollLeft == window.expectedScrollLeft; + }); + assert_equals(last_event.wheelDeltaX, -Math.floor(expectedWheelDeltaX)); + assert_equals(last_event.wheelDelta, -Math.floor(expectedWheelDeltaX)); +}, 'one page of scroll on div moves the content by 0 pixels.'); +</script>
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page-expected.txt b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page-expected.txt deleted file mode 100644 index 2d9d80e6..0000000 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -PASS successfullyParsed is true - -TEST COMPLETE - -PASS event.wheelDeltaY is 0 -PASS event.wheelDeltaX is window.givenScrollLeft * -3 -PASS event.wheelDelta is window.givenScrollLeft * -3 -PASS document.scrollingElement.scrollTop is window.expectedScrollTop -PASS document.scrollingElement.scrollLeft is window.expectedScrollLeft
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html index ae1b48b..366807c 100644 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html +++ b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-non-scrolling-page.html
@@ -1,61 +1,37 @@ -<html> - <head> - <script src="../../resources/js-test.js"></script> - <script> - var givenScrollTop = 0; - var givenScrollLeft = 2; - var expectedScrollTop = 0; - var expectedScrollLeft = 0; - var event; - var div; +<!DOCTYPE html> +<script src='../../resources/gesture-util.js'></script> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<div style="height:900px;width:400px"> + <div style="background-color:red;height:900px;width:200px;position:relative;left:0px;top:0px"></div> + <div style="background-color:green;height:900px;width:200px;position:relative;left:200px;top:-900px"></div> +</div> +<div style="height:900px;width:400px"> + <div style="background-color:blue;height:900px;width:200px;position:relative;left:0px;top:0px"></div> + <div style="background-color:yellow;height:900px;width:200px;position:relative;left:200px;top:-900px"></div> +</div> - if (window.testRunner) - testRunner.waitUntilDone(); +<script> +var givenScrollLeft = 2; +var expectedScrollLeft = 0; +var last_event = null; +var source = GestureSourceType.MOUSE_INPUT; +const numTicksX = givenScrollLeft / pixelsPerTick(); +const expectedWheelDeltaX = numTicksX * LEGACY_MOUSE_WHEEL_TICK_MULTIPLIER; - function dispatchWheelEvent() - { - document.body.addEventListener("mousewheel", mousewheelHandler, false); +function mousewheelHandler(e) +{ + last_event = e; +} - if (window.eventSender) { - eventSender.mouseMoveTo(100, 110); - eventSender.continuousMouseScrollBy(-window.givenScrollLeft, -window.givenScrollTop, true); - } +promise_test(async () => { + document.body.addEventListener("mousewheel", mousewheelHandler, false); - setTimeout('checkOffsets();', 100); - } - - function checkOffsets() - { - shouldBe("document.scrollingElement.scrollTop", "window.expectedScrollTop"); - shouldBe("document.scrollingElement.scrollLeft", "window.expectedScrollLeft"); - - if (window.testRunner) - testRunner.notifyDone(); - } - - function mousewheelHandler(e) - { - event = e; - shouldBe("event.wheelDeltaY", "0"); - shouldBe("event.wheelDeltaX", "window.givenScrollLeft * -3"); - - if (e.wheelDeltaY) - shouldBe("event.wheelDelta", "0"); - else - shouldBe("event.wheelDelta", "window.givenScrollLeft * -3"); - } - </script> - </head> - - <body style="margin:0" onload="setTimeout('dispatchWheelEvent();', 100)"> - <div style="height:900px;width:400px"> - <div style="background-color:red;height:900px;width:200px;position:relative;left:0px;top:0px"></div> - <div style="background-color:green;height:900px;width:200px;position:relative;left:200px;top:-900px"></div> - </div> - <div style="height:900px;width:400px"> - <div style="background-color:blue;height:900px;width:200px;position:relative;left:0px;top:0px"></div> - <div style="background-color:yellow;height:900px;width:200px;position:relative;left:200px;top:-900px"></div> - </div> - <div id="console"></div> - </body> -</html> + await smoothScroll(givenScrollLeft, 100, 110, source, 'right', SPEED_INSTANT, false /* precise_scrolling_deltas */, true /* scroll_by_page */); + await conditionHolds( () => { + return document.scrollingElement.scrollLeft == window.expectedScrollLeft; + }); + assert_equals(last_event.wheelDeltaX, -Math.floor(expectedWheelDeltaX)); + assert_equals(last_event.wheelDelta, -Math.floor(expectedWheelDeltaX)); +}, 'This test checks one page of scroll on document moves the content by 0 pixels.'); +</script>
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div-expected.txt b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div-expected.txt deleted file mode 100644 index 64f34ec..0000000 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -PASS event.wheelDeltaY is 0 -PASS event.wheelDeltaX is window.givenScrollLeft * -3 -PASS event.wheelDelta is window.givenScrollLeft * -3 -PASS div.scrollTop == window.expectedScrollTop && div.scrollLeft == window.expectedScrollLeft became true -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div.html b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div.html index db79b113..7f9657a 100644 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div.html +++ b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-div.html
@@ -1,60 +1,44 @@ -<html> - <head> - <script src="../../resources/js-test.js"></script> - <script> - window.jsTestIsAsync = true; - var givenScrollTop = 0; - var givenScrollLeft = 2; // When paging, this is ignored. Every event is one page. - var expectedScrollTop = 0; - var expectedScrollLeft = 161; - var event; - var div; +<!DOCTYPE html> +<script src='../../resources/gesture-util.js'></script> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<!-- This div is 200 pixels high. The content results in scrool bars on + both edges, resulting in an effective content area of 185 x 185 on + linux. The paging context overlap is 24 pixels. So one page of scroll + moves the content by 185 - 24 -= 161 pixels. --> +<div id="overflow" style="border:2px solid black;overflow:auto;height:200px;width:200px;"> + <div style="height:300px;width:600px"> + <div style="background-color:red;height:300px;width:300px;position:relative;left:0px;top:0px"></div> + <div style="background-color:green;height:300px;width:300px;position:relative;left:300px;top:-300px"></div> + </div> + <div style="height:300px;width:600px"> + <div style="background-color:blue;height:300px;width:300px;position:relative;left:0px;top:0px"></div> + <div style="background-color:yellow;height:300px;width:300px;position:relative;left:300px;top:-300px"></div> + </div> +</div> - function runTest() - { - var overflowElement = document.getElementById("overflow"); - if (overflowElement) - overflowElement.addEventListener("mousewheel", mousewheelHandler, false); +<script> +var givenScrollLeft = 2; // When paging, this is ignored. Every event is one page. +var expectedScrollLeft = 161; +var last_event = null; +var source = GestureSourceType.MOUSE_INPUT; +const numTicksX = givenScrollLeft / pixelsPerTick(); +const expectedWheelDeltaX = numTicksX * LEGACY_MOUSE_WHEEL_TICK_MULTIPLIER; - if (window.eventSender) { - eventSender.mouseMoveTo(100, 110); - eventSender.continuousMouseScrollBy(-window.givenScrollLeft, -window.givenScrollTop, true); - } +function mousewheelHandler(e) +{ + last_event = e; +} - div = document.getElementById("overflow"); - shouldBecomeEqual("div.scrollTop == window.expectedScrollTop && " + - "div.scrollLeft == window.expectedScrollLeft", "true", finishJSTest); - } +promise_test(async () => { + var overflowElement = document.getElementById("overflow"); + overflowElement.addEventListener("mousewheel", mousewheelHandler, false); - function mousewheelHandler(e) - { - event = e; - shouldBe("event.wheelDeltaY", "0"); - shouldBe("event.wheelDeltaX", "window.givenScrollLeft * -3"); - - if (e.wheelDeltaY) - shouldBe("event.wheelDelta", "0"); - else - shouldBe("event.wheelDelta", "window.givenScrollLeft * -3"); - } - </script> - </head> - - <body style="margin:0" onload="runTest()"> - <!-- This div is 200 pixels high. The content results in scrool bars on - both edges, resulting in an effective content area of 185 x 185 on - linux. The paging context overlap is 24 pixels. So one page of scroll - moves the content by 185 - 24 -= 161 pixels. --> - <div id="overflow" style="border:2px solid black;overflow:auto;height:200px;width:200px;"> - <div style="height:300px;width:600px"> - <div style="background-color:red;height:300px;width:300px;position:relative;left:0px;top:0px"></div> - <div style="background-color:green;height:300px;width:300px;position:relative;left:300px;top:-300px"></div> - </div> - <div style="height:300px;width:600px"> - <div style="background-color:blue;height:300px;width:300px;position:relative;left:0px;top:0px"></div> - <div style="background-color:yellow;height:300px;width:300px;position:relative;left:300px;top:-300px"></div> - </div> - </div> - <div id="console"></div> - </body> -</html> + await smoothScroll(givenScrollLeft, 100, 110, source, 'right', SPEED_INSTANT, false /* precise_scrolling_deltas */, true /* scroll_by_page */); + await waitFor( () => { + return overflowElement.scrollLeft == window.expectedScrollLeft; + }); + assert_equals(last_event.wheelDeltaX, -Math.floor(expectedWheelDeltaX)); + assert_equals(last_event.wheelDelta, -Math.floor(expectedWheelDeltaX)); +}, 'This test checks one page of scroll on div moves the content by 161 pixels.'); +</script>
diff --git a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-page.html b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-page.html index f6cc300..8ceba76f 100644 --- a/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-page.html +++ b/third_party/blink/web_tests/fast/events/platform-wheelevent-paging-x-in-scrolling-page.html
@@ -1,52 +1,37 @@ -<html> - <head> - <script src="../../resources/js-test.js"></script> - <script> - window.jsTestIsAsync = true; - var givenScrollTop = 0; - var givenScrollLeft = 2; // When paging, this is ignored. Every event is one page. - var expectedScrollTop = 0; - var expectedScrollLeft = 700; // Window is 800x600. Scroll 87.5% of visible. - var event; - var div; +<!DOCTYPE html> +<script src='../../resources/gesture-util.js'></script> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<div style="margin:0;padding:0;height:200px;width:2400px"> + <div style="margin:0;padding:0;background-color:red;height:200px;width:1200px;position:relative;left:0px;top:0px"></div> + <div style="margin:0;padding:0;background-color:green;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div> +</div> +<div style="margin:0;padding:0;height:200px;width:2400px"> + <div style="margin:0;padding:0;background-color:blue;height:200px;width:1200px;position:relative;left:0px;top:0px"></div> + <div style="margin:0;padding:0;background-color:yellow;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div> +</div> - function runTest() - { - document.body.addEventListener("mousewheel", mousewheelHandler, false); +<script> +var givenScrollLeft = 2; // When paging, this is ignored. Every event is one page. +var expectedScrollLeft = 700; // Window is 800x600. Scroll 87.5% of visible. +var last_event = null; +var source = GestureSourceType.MOUSE_INPUT; +const numTicksX = givenScrollLeft / pixelsPerTick(); +const expectedWheelDeltaX = numTicksX * LEGACY_MOUSE_WHEEL_TICK_MULTIPLIER; - if (window.eventSender) { - eventSender.mouseMoveTo(100, 110); - eventSender.continuousMouseScrollBy(-window.givenScrollLeft, -window.givenScrollTop, true); - } +function mousewheelHandler(e) +{ + last_event = e; +} - // This test expects failure on mac: crbug.com/552694. - shouldBecomeEqual("document.scrollingElement.scrollTop == window.expectedScrollTop && " + - "document.scrollingElement.scrollLeft == window.expectedScrollLeft", "true", finishJSTest); - } +promise_test(async () => { + document.body.addEventListener("mousewheel", mousewheelHandler, false); - function mousewheelHandler(e) - { - event = e; - shouldBe("event.wheelDeltaY", "0"); - shouldBe("event.wheelDeltaX", "window.givenScrollLeft * -3"); - - if (e.wheelDeltaY) - shouldBe("event.wheelDelta", "0"); - else - shouldBe("event.wheelDelta", "window.givenScrollLeft * -3"); - } - </script> - </head> - - <body style="margin:0;padding:0" onload="runTest()"> - <div style="margin:0;padding:0;height:200px;width:2400px"> - <div style="margin:0;padding:0;background-color:red;height:200px;width:1200px;position:relative;left:0px;top:0px"></div> - <div style="margin:0;padding:0;background-color:green;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div> - </div> - <div style="margin:0;padding:0;height:200px;width:2400px"> - <div style="margin:0;padding:0;background-color:blue;height:200px;width:1200px;position:relative;left:0px;top:0px"></div> - <div style="margin:0;padding:0;background-color:yellow;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div> - </div> - <div id="console"></div> - </body> -</html> + await smoothScroll(givenScrollLeft, 100, 110, source, 'right', SPEED_INSTANT, false /* precise_scrolling_deltas */, true /* scroll_by_page */); + await waitFor( () => { + return navigator.platform.indexOf("Mac") != -1 ? true : document.scrollingElement.scrollLeft == window.expectedScrollLeft; + }); + assert_equals(last_event.wheelDeltaX, -Math.floor(expectedWheelDeltaX)); + assert_equals(last_event.wheelDelta, -Math.floor(expectedWheelDeltaX)); +}, 'This test checks one page of scroll on document moves the content by 700 pixels.'); +</script>
diff --git a/third_party/blink/web_tests/fast/html/imports/no-browsing-context-expected.txt b/third_party/blink/web_tests/fast/html/imports/no-browsing-context-expected.txt index c03b3ad..4eaeaa9b 100644 --- a/third_party/blink/web_tests/fast/html/imports/no-browsing-context-expected.txt +++ b/third_party/blink/web_tests/fast/html/imports/no-browsing-context-expected.txt
@@ -1,3 +1,4 @@ +CONSOLE WARNING: HTML Imports is deprecated and will be removed in M80, around February 2020. Please use ES modules instead. See https://www.chromestatus.com/features/5144752345317376 and https://developers.google.com/web/updates/2019/07/web-components-time-to-upgrade for more details. This ensures that @import doesn't work with headless documents. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html b/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html index c69822f..548415e 100644 --- a/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html +++ b/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-anchors.html
@@ -1,5 +1,6 @@ <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> +<script src="../../../resources/gesture-util.js"></script> <style> body { margin: 0px; @@ -26,19 +27,17 @@ var ch; // Initital scroll position. - var initialX = 0; var initialY = 10; // Amount to smooth scroll by. - var userScrollX = 51; var userScrollY = 205; // Amount to change the height of the element above the viewport. var changerY = 100; // End position: height of ch + userScroll. - var endX = 51; var endY = 305; + var source = GestureSourceType.MOUSE_INPUT; function scrollListener() { - if (window.scrollX == endX && window.scrollY == endY) { + if (window.scrollY == endY) { asyncTest.done(); return; } @@ -47,24 +46,13 @@ ch.style.height = changerY; } - window.onload = function() { - assert_false(!window.internals, 'This test requires internals'); - internals.runtimeFlags.scrollAnchoringEnabled = true; - // Turn on smooth scrolling. - internals.settings.setScrollAnimatorEnabled(true); - + window.onload = async () => { ch = document.getElementById("changer"); - document.getElementById('anchor').scrollIntoView(); + document.addEventListener("scroll", scrollListener); // Smooth scroll. - eventSender.mouseMoveTo(100, 100); - eventSender.continuousMouseScrollBy(-userScrollX, -userScrollY); - - asyncTest.step(function() { - assert_equals(window.scrollX, initialX); - assert_equals(window.scrollY, initialY); - }); - - document.addEventListener("scroll", scrollListener); + smoothScroll(userScrollY, 100, 100, source, 'down', SPEED_INSTANT, false /* precise_scrolling_deltas */); + await raf(); + document.getElementById('anchor').scrollIntoView(); } </script>
diff --git a/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-vertical-rl-anchors.html b/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-vertical-rl-anchors.html index 14b6a1a5..80627978 100644 --- a/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-vertical-rl-anchors.html +++ b/third_party/blink/web_tests/fast/scroll-behavior/smooth-scroll/ongoing-smooth-scroll-vertical-rl-anchors.html
@@ -1,5 +1,6 @@ <script src="../../../resources/testharness.js"></script> <script src="../../../resources/testharnessreport.js"></script> +<script src="../../../resources/gesture-util.js"></script> <style> html { -webkit-writing-mode: vertical-rl; @@ -32,15 +33,14 @@ var initialY = 0; // Amount to smooth scroll by. var userScrollX = -205; - var userScrollY = 51; // Amount to change the height of the element above the viewport. var changerX = 100; // End position: height of ch + userScroll. var endX = -305; - var endY = 51; + var source = GestureSourceType.MOUSE_INPUT; function scrollListener() { - if (window.scrollX == endX && window.scrollY == endY) { + if (window.scrollX == endX) { asyncTest.done(); return; } @@ -49,24 +49,13 @@ ch.style.width = changerX; } - window.onload = function() { - assert_false(!window.internals, 'This test requires internals'); - internals.runtimeFlags.scrollAnchoringEnabled = true; - // Turn on smooth scrolling. - internals.settings.setScrollAnimatorEnabled(true); - + window.onload = async () => { ch = document.getElementById("changer"); + document.addEventListener("scroll", scrollListener); + + // Smooth scroll. + smoothScroll(userScrollX, 100, 100, source, 'right', SPEED_INSTANT, false /* precise_scrolling_deltas */); + await raf(); window.scrollTo(initialX, initialY); - - asyncTest.step(function() { - assert_equals(window.scrollX, initialX); - assert_equals(window.scrollY, initialY); - - // Smooth scroll. - eventSender.mouseMoveTo(100, 100); - eventSender.continuousMouseScrollBy(-userScrollX, -userScrollY); - - document.addEventListener("scroll", scrollListener); - }); } -</script> +</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument-expected.txt b/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument-expected.txt new file mode 100644 index 0000000..c2541f4 --- /dev/null +++ b/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument-expected.txt
@@ -0,0 +1 @@ +PASS if no crash.
diff --git a/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument.html b/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument.html new file mode 100644 index 0000000..317cb7e2 --- /dev/null +++ b/third_party/blink/web_tests/fast/xsl/transformToDocument-contextDocument.html
@@ -0,0 +1,16 @@ +<body> +PASS if no crash. +<script> +if (window.testRunner) + testRunner.dumpAsText(); + +var xsltp = new XSLTProcessor(); +var xml = '<?xml version="1.0" encoding="UTF-8"?>'; +var style = '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> \ + </xsl:stylesheet>'; +var xmlDoc = new DOMParser().parseFromString(xml, "text/xml"); +var xslDoc = new DOMParser().parseFromString(style, "text/xml"); +xsltp.importStylesheet(xslDoc); +xsltp.transformToDocument(xmlDoc).addressSpace; +</script> +</body>
diff --git a/third_party/blink/web_tests/http/tests/activedomobject/media-expected.txt b/third_party/blink/web_tests/http/tests/activedomobject/media-expected.txt deleted file mode 100644 index 3120871..0000000 --- a/third_party/blink/web_tests/http/tests/activedomobject/media-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -Tests that reparenting media elements also reparents ActiveDOMObject. - -Before Reparenting -PASS: internals.contextLifecycleStateObserverObjectCount(document) should be '2' and is. -PASS: internals.contextLifecycleStateObserverObjectCount(iframe) should be '7' and is. -After Reparenting -PASS: internals.contextLifecycleStateObserverObjectCount(document) should be '5' and is. -PASS: internals.contextLifecycleStateObserverObjectCount(iframe) should be '5' and is.
diff --git a/third_party/blink/web_tests/http/tests/activedomobject/media.html b/third_party/blink/web_tests/http/tests/activedomobject/media.html deleted file mode 100644 index 0803012a..0000000 --- a/third_party/blink/web_tests/http/tests/activedomobject/media.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE HTML> -<html> -<body> -<p>Tests that reparenting media elements also reparents ActiveDOMObject.</p> -<iframe src="resources/media-frame.html"></iframe> -<script src="resources/activedomobject-test.js"></script> -<script> - function runTest() - { - window.iframe = document.querySelector('iframe').contentDocument; - - log('Before Reparenting'); - shouldBe('internals.contextLifecycleStateObserverObjectCount(document)', 2); - shouldBe('internals.contextLifecycleStateObserverObjectCount(iframe)', 7); - - document.body.appendChild(window.iframe.querySelector('video')); - - // The media element has an internal MutationObserver that is a - // ContextLifecycleStateObserver. It will not yet be GCed at this point, - // but a new one will be created in |document|, so the count is expected - // to differ by one. - log('After Reparenting'); - shouldBe('internals.contextLifecycleStateObserverObjectCount(document)', 5); - shouldBe('internals.contextLifecycleStateObserverObjectCount(iframe)', 5); - } -</script> -</body> -</html>
diff --git a/third_party/blink/web_tests/http/tests/activedomobject/resources/activedomobject-test.js b/third_party/blink/web_tests/http/tests/activedomobject/resources/activedomobject-test.js deleted file mode 100644 index cb36494..0000000 --- a/third_party/blink/web_tests/http/tests/activedomobject/resources/activedomobject-test.js +++ /dev/null
@@ -1,41 +0,0 @@ -function log(text) -{ - var pre = document.createElement('pre'); - pre.textContent = text; - document.body.appendChild(pre); -} - -function shouldBe(a, b) -{ - var evalA, evalB; - try { - evalA = eval(a); - } catch(e) { - evalA = e.toString(); - } - - try { - evalB = eval(b); - } catch(e) { - evalB = e.toString(); - } - - var message; - if (evalA === evalB) { - message = "PASS: " + a + " should be '" + evalB + "' and is."; - } else { - message = "FAIL: " + a + " should be '" + evalB + "' but instead is " + evalA + "."; - } - - message = String(message).replace(/\n/g, ""); - log(message); -} - -if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.waitUntilDone(); - window.onload = function() { - runTest(); - testRunner.notifyDone(); - } -}
diff --git a/third_party/blink/web_tests/http/tests/activedomobject/resources/marquee-frame.html b/third_party/blink/web_tests/http/tests/activedomobject/resources/marquee-frame.html deleted file mode 100644 index aea22cf..0000000 --- a/third_party/blink/web_tests/http/tests/activedomobject/resources/marquee-frame.html +++ /dev/null
@@ -1,6 +0,0 @@ -<!DOCTYPE HTML> -<html> -<body> -<marquee></marquee> -</body> -</html>
diff --git a/third_party/blink/web_tests/http/tests/activedomobject/resources/media-frame.html b/third_party/blink/web_tests/http/tests/activedomobject/resources/media-frame.html deleted file mode 100644 index 5534180..0000000 --- a/third_party/blink/web_tests/http/tests/activedomobject/resources/media-frame.html +++ /dev/null
@@ -1,6 +0,0 @@ -<!DOCTYPE HTML> -<html> -<body> -<video></video> -</body> -</html>
diff --git a/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore-expected.txt b/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore-expected.txt deleted file mode 100644 index 19f57406..0000000 --- a/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -PASS window.scrollY == 800 became true -PASS successfullyParsed is true - -TEST COMPLETE - - -Link to bottom -scrollY should be 800: PASS
diff --git a/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore.html b/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore.html index f7b2031..8191655 100644 --- a/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore.html +++ b/third_party/blink/web_tests/http/tests/navigation/same-document-scroll-position-restore.html
@@ -1,41 +1,41 @@ -<body> +<!DOCTYPE html> <div style="height: 1000px"></div> <a id="a" href="#bottom">Link to bottom</a> <div style="height: 1000px"></div> <a name="bottom"></a> -<script src="/js-test-resources/js-test.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/js-test-resources/gesture-util.js"></script> <script> -setPrintTestResultsLazily(); -if (window.testRunner) { - window.jsTestIsAsync = true; - testRunner.dumpAsText(); - testRunner.waitUntilDone(); -} - -window.onload = function() { - if (window.eventSender) { - function clickLink() { - var a = document.getElementById("a"); - eventSender.mouseMoveTo(a.offsetLeft + 2, a.offsetTop - 798); - eventSender.mouseDown(); - eventSender.mouseUp(); - } - eventSender.continuousMouseScrollBy(0, -800); - shouldBecomeEqual("window.scrollY == 800", "true", clickLink); - } -}; - +var a = document.getElementById("a"); +var source = GestureSourceType.MOUSE_INPUT; var haveSeenHashChange = false; +var asyncTest = async_test("Scroll position restored from history navigation to same document"); window.onhashchange = function() { if (!haveSeenHashChange) { haveSeenHashChange = true; + asyncTest.step(function() { + assert_greater_than(window.scrollY, 800); + }); history.back(); } else { - document.body.appendChild(document.createTextNode("scrollY should be 800: " + (window.scrollY == 800 ? "PASS" : "FAIL"))); - finishJSTest(); + asyncTest.step(function() { + assert_equals(window.scrollY, 800); + }); + asyncTest.done(); } } + +window.onload = async () => { + await smoothScroll(800, 0, 0, source, 'down', SPEED_INSTANT); + await waitFor( () => { + return window.scrollY == 800; + }); + + var x = a.getBoundingClientRect().left + 2; + var y = a.getBoundingClientRect().top + 2; + await mouseClickOn(x, y); +} </script> -</body>
diff --git a/third_party/blink/web_tests/media/controls/accessibility-time-element.html b/third_party/blink/web_tests/media/controls/accessibility-time-element.html index 2c711a0..f0b01b1 100644 --- a/third_party/blink/web_tests/media/controls/accessibility-time-element.html +++ b/third_party/blink/web_tests/media/controls/accessibility-time-element.html
@@ -21,14 +21,14 @@ 'elapsed time: 0:00'); assert_equals(remaining_time.getAttribute('aria-label'), - 'remaining time: / 0:00'); + 'total time: / 0:00'); video.oncanplaythrough = t.step_func_done(_ => { assert_equals(current_time.getAttribute('aria-label'), 'elapsed time: 0:00'); assert_equals(remaining_time.getAttribute('aria-label'), - 'remaining time: / 0:06'); + 'total time: / 0:06'); video.currentTime = 1; video.onseeked = t.step_func(_ => { @@ -36,7 +36,7 @@ 'elapsed time: 0:01'); assert_equals(remaining_time.getAttribute('aria-label'), - 'remaining time: / 0:06'); + 'total time: / 0:06'); }); }); });
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/button/button-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/button/button-appearance-basic-expected.png index 3962552..70d1865 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/button/button-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/button/button-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/range/range-appearance-basic-expected.png new file mode 100644 index 0000000..12fb08a --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/range/range-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt new file mode 100644 index 0000000..53e09e37 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Whitespace should not count as contentful. assert_equals: Expected first contentful paint not found. expected 1 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/mac/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt b/third_party/blink/web_tests/platform/mac/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt deleted file mode 100644 index b1b20a5..0000000 --- a/third_party/blink/web_tests/platform/mac/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -PASS event.wheelDeltaY is 0 -PASS event.wheelDeltaX is window.givenScrollLeft * -3 -PASS event.wheelDelta is window.givenScrollLeft * -3 -FAIL document.scrollingElement.scrollTop == window.expectedScrollTop && document.scrollingElement.scrollLeft == window.expectedScrollLeft failed to change to true in 0.5 seconds. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/button/button-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/button/button-appearance-basic-expected.png index 1dc63ec6..637e1dd 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/button/button-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/button/button-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/range/range-appearance-basic-expected.png new file mode 100644 index 0000000..35c6aeef --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/range/range-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt b/third_party/blink/web_tests/platform/win/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt deleted file mode 100644 index 2ddfc34..0000000 --- a/third_party/blink/web_tests/platform/win/fast/events/platform-wheelevent-paging-x-in-scrolling-page-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -PASS event.wheelDeltaY is 0 -PASS event.wheelDeltaX is window.givenScrollLeft * -3 -PASS event.wheelDelta is window.givenScrollLeft * -3 -PASS document.scrollingElement.scrollTop == window.expectedScrollTop && document.scrollingElement.scrollLeft == window.expectedScrollLeft became true -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/button/button-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/button/button-appearance-basic-expected.png index 290d8e9..7012628 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/button/button-appearance-basic-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/button/button-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/range/range-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/range/range-appearance-basic-expected.png new file mode 100644 index 0000000..03d32f8 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/range/range-appearance-basic-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image-expected.txt b/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image-expected.txt new file mode 100644 index 0000000..1be43ca --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-pseudo-element-image-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL First contentful paint fires due to pseudo-element image. assert_equals: Expected first contentful paint not found. expected 1 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt b/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt new file mode 100644 index 0000000..53e09e37 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/paint-timing/external/wpt/paint-timing/fcp-only/fcp-whitespace-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Whitespace should not count as contentful. assert_equals: Expected first contentful paint not found. expected 1 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/serial/serialPort_readable.html b/third_party/blink/web_tests/serial/serialPort_readable.html deleted file mode 100644 index 31fd156e..0000000 --- a/third_party/blink/web_tests/serial/serialPort_readable.html +++ /dev/null
@@ -1,236 +0,0 @@ -<!DOCTYPE html> -<script src="../resources/testharness.js"></script> -<script src="../resources/testharnessreport.js"></script> -<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> -<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> -<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> -<script src="resources/serial-test-utils.js"></script> -<script> - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - - assert_equals(port.readable, null); - - await port.open({ baudrate: 9600 }); - const readable = port.readable; - assert_true(readable instanceof ReadableStream); - - await port.close(); - assert_equals(port.readable, null); - - const reader = readable.getReader(); - const { value, done } = await reader.read(); - assert_true(done); - assert_equals(value, undefined); -}, 'SerialPort.readable is set by open() and closes on port close'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - - await port.open({ baudrate: 9600 }); - assert_true(port.readable instanceof ReadableStream); - - const reader = port.readable.getReader(); - await promise_rejects_js(t, TypeError, port.close()); - - reader.releaseLock(); - await port.close(); - assert_equals(port.readable, null); -}, 'Port cannot be closed while readable is locked'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size larger than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); - fakePort.write(data); - - const reader = port.readable.getReader(); - let { value, done } = await reader.read(); - assert_false(done); - compareArrays(data, value); - reader.releaseLock(); - - await port.close(); -}, 'Can read a small amount of data'); - -// ParityError is not (as of 2020/03/23) a valid DOMException, so cannot use -// promise_rejects_dom for it. -async function promise_rejects_with_parity_error(t, promise) { - return promise.then(() => { - assert_false('Should have rejected'); - }).catch(e => { - assert_equals(e.constructor, DOMException); - assert_equals(e.name, "ParityError"); - }); -} - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size smaller than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - const data = new Uint8Array(1024); // Much larger than buffersize above. - for (let i = 0; i < data.byteLength; ++i) - data[i] = i & 0xff; - fakePort.write(data); - - const reader = port.readable.getReader(); - const value = await readWithLength(reader, data.byteLength); - compareArrays(data, value); - reader.releaseLock(); - - await port.close(); -}, 'Can read a large amount of data'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size smaller than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); - fakePort.write(data); - fakePort.simulateParityError(); - - let readable = port.readable; - let reader = readable.getReader(); - let { value, done } = await reader.read(); - assert_false(done); - compareArrays(data, value); - - await promise_rejects_with_parity_error(t, reader.read()); - assert_not_equals(port.readable, readable); - - readable = port.readable; - assert_true(readable instanceof ReadableStream); - reader = port.readable.getReader(); - - await fakePort.waitForReadErrorCleared(); - fakePort.write(data); - - ({ value, done } = await reader.read()); - assert_false(done); - compareArrays(data, value); - reader.releaseLock(); - - await port.close(); - assert_equals(port.readable, null); -}, 'Parity error closes readable and replaces it with a new stream'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size smaller than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); - fakePort.write(data); - fakePort.simulateDisconnectOnRead(); - - const reader = port.readable.getReader(); - const { value, done } = await reader.read(); - assert_false(done); - compareArrays(data, value); - - await promise_rejects_dom(t, 'NetworkError', reader.read()); - assert_equals(port.readable, null); - - await port.close(); -}, 'Disconnect error closes readable and sets it to null'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size larger than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - fakePort.write(new TextEncoder().encode("Hello world!")); - - const decoder = new TextDecoderStream(); - const streamClosed = port.readable.pipeTo(decoder.writable); - const reader = decoder.readable.getReader(); - const { value, done } = await reader.read(); - assert_false(done); - assert_equals("Hello world!", value); - await reader.cancel(); - await streamClosed.catch(reason => { - assert_equals(undefined, reason); - }); - - await port.close(); -}, 'Can pipe readable through a transform stream.') - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size smaller than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - const reader = port.readable.getReader(); - const readPromise = reader.read(); - await reader.cancel(); - const { value, done } = await readPromise; - assert_true(done); - assert_equals(undefined, value); - - await port.close(); -}, 'Can cancel while reading'); - -serial_test(async (t, fake) => { - const { port, fakePort } = await getFakeSerialPort(fake); - // Select a buffer size larger than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - fakePort.write(new TextEncoder().encode("Hello world!")); - - const decoder = new TextDecoderStream(); - const streamClosed = port.readable.pipeTo(decoder.writable); - const readable = decoder.readable.pipeThrough(new TransformStream()) - .pipeThrough(new TransformStream()) - .pipeThrough(new TransformStream()) - .pipeThrough(new TransformStream()); - const reader = readable.getReader(); - const { value, done } = await reader.read(); - assert_false(done); - assert_equals("Hello world!", value); - await reader.cancel("arbitrary reason"); - await streamClosed.catch(reason => { - assert_equals("arbitrary reason", reason); - }); - - await port.close(); -}, 'Stream closure is observable through a long chain of transforms'); - -serial_test(async (t, fake) => { - let fakePort; - let chunkReceived; - await (async () => { - let port; - ({ port, fakePort } = await getFakeSerialPort(fake)); - - // Select a buffer size larger than the amount of data transferred. - await port.open({ baudrate: 9600, buffersize: 64 }); - - let writable; - chunkReceived = new Promise(resolve => { - writable = new WritableStream({ - write: function(chunk) { - resolve(); - } - }); - }); - - port.readable.pipeTo(writable); - })(); - - for (let i = 0; i < 50; ++i) { - GCController.collect(); - await new Promise(resolve => setTimeout(resolve, 0)); - } - - const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); - fakePort.write(data); - - await chunkReceived; -}, 'Dropping references to a port does not close its streams'); - -</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_cancel.html b/third_party/blink/web_tests/serial/serialPort_readable_cancel.html new file mode 100644 index 0000000..12af54e --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_cancel.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size smaller than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + const reader = port.readable.getReader(); + const readPromise = reader.read(); + await reader.cancel(); + const { value, done } = await readPromise; + assert_true(done); + assert_equals(undefined, value); + + await port.close(); +}, 'Can cancel while reading'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_chain.html b/third_party/blink/web_tests/serial/serialPort_readable_chain.html new file mode 100644 index 0000000..0e7639f8 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_chain.html
@@ -0,0 +1,35 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size larger than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + fakePort.write(new TextEncoder().encode("Hello world!")); + + const decoder = new TextDecoderStream(); + const streamClosed = port.readable.pipeTo(decoder.writable); + const readable = decoder.readable.pipeThrough(new TransformStream()) + .pipeThrough(new TransformStream()) + .pipeThrough(new TransformStream()) + .pipeThrough(new TransformStream()); + const reader = readable.getReader(); + const { value, done } = await reader.read(); + assert_false(done); + assert_equals("Hello world!", value); + await reader.cancel("arbitrary reason"); + await streamClosed.catch(reason => { + assert_equals("arbitrary reason", reason); + }); + + await port.close(); +}, 'Stream closure is observable through a long chain of transforms'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_closeLocked.html b/third_party/blink/web_tests/serial/serialPort_readable_closeLocked.html new file mode 100644 index 0000000..2100ae5 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_closeLocked.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + + await port.open({ baudrate: 9600 }); + assert_true(port.readable instanceof ReadableStream); + + const reader = port.readable.getReader(); + await promise_rejects_js(t, TypeError, port.close()); + + reader.releaseLock(); + await port.close(); + assert_equals(port.readable, null); +}, 'Port cannot be closed while readable is locked'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_disconnect.html b/third_party/blink/web_tests/serial/serialPort_readable_disconnect.html new file mode 100644 index 0000000..88b3e18 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_disconnect.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size smaller than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + fakePort.write(data); + fakePort.simulateDisconnectOnRead(); + + const reader = port.readable.getReader(); + const { value, done } = await reader.read(); + assert_false(done); + compareArrays(data, value); + + await promise_rejects_dom(t, 'NetworkError', reader.read()); + assert_equals(port.readable, null); + + await port.close(); +}, 'Disconnect error closes readable and sets it to null'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_gc.html b/third_party/blink/web_tests/serial/serialPort_readable_gc.html new file mode 100644 index 0000000..1a485f64 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_gc.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + let fakePort; + let chunkReceived; + await (async () => { + let port; + ({ port, fakePort } = await getFakeSerialPort(fake)); + + // Select a buffer size larger than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + let writable; + chunkReceived = new Promise(resolve => { + writable = new WritableStream({ + write: function(chunk) { + resolve(); + } + }); + }); + + port.readable.pipeTo(writable); + })(); + + for (let i = 0; i < 50; ++i) { + GCController.collect(); + await new Promise(resolve => setTimeout(resolve, 0)); + } + + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + fakePort.write(data); + + await chunkReceived; +}, 'Dropping references to a port does not close its streams'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_largeRead.html b/third_party/blink/web_tests/serial/serialPort_readable_largeRead.html new file mode 100644 index 0000000..bc913f2 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_largeRead.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size smaller than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + const data = new Uint8Array(1024); // Much larger than buffersize above. + for (let i = 0; i < data.byteLength; ++i) + data[i] = i & 0xff; + fakePort.write(data); + + const reader = port.readable.getReader(); + const value = await readWithLength(reader, data.byteLength); + compareArrays(data, value); + reader.releaseLock(); + + await port.close(); +}, 'Can read a large amount of data'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_open.html b/third_party/blink/web_tests/serial/serialPort_readable_open.html new file mode 100644 index 0000000..e489bd0 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_open.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + + assert_equals(port.readable, null); + + await port.open({ baudrate: 9600 }); + const readable = port.readable; + assert_true(readable instanceof ReadableStream); + + await port.close(); + assert_equals(port.readable, null); + + const reader = readable.getReader(); + const { value, done } = await reader.read(); + assert_true(done); + assert_equals(value, undefined); +}, 'SerialPort.readable is set by open() and closes on port close'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_parityError.html b/third_party/blink/web_tests/serial/serialPort_readable_parityError.html new file mode 100644 index 0000000..bda5a83 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_parityError.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +// ParityError is not (as of 2020/03/23) a valid DOMException, so cannot use +// promise_rejects_dom for it. +async function promise_rejects_with_parity_error(t, promise) { + return promise.then(() => { + assert_false('Should have rejected'); + }).catch(e => { + assert_equals(e.constructor, DOMException); + assert_equals(e.name, "ParityError"); + }); +} + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size smaller than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + fakePort.write(data); + fakePort.simulateParityError(); + + let readable = port.readable; + let reader = readable.getReader(); + let { value, done } = await reader.read(); + assert_false(done); + compareArrays(data, value); + + await promise_rejects_with_parity_error(t, reader.read()); + assert_not_equals(port.readable, readable); + + readable = port.readable; + assert_true(readable instanceof ReadableStream); + reader = port.readable.getReader(); + + await fakePort.waitForReadErrorCleared(); + fakePort.write(data); + + ({ value, done } = await reader.read()); + assert_false(done); + compareArrays(data, value); + reader.releaseLock(); + + await port.close(); + assert_equals(port.readable, null); +}, 'Parity error closes readable and replaces it with a new stream'); + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_pipeThrough.html b/third_party/blink/web_tests/serial/serialPort_readable_pipeThrough.html new file mode 100644 index 0000000..722b644 --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_pipeThrough.html
@@ -0,0 +1,31 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size larger than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + fakePort.write(new TextEncoder().encode("Hello world!")); + + const decoder = new TextDecoderStream(); + const streamClosed = port.readable.pipeTo(decoder.writable); + const reader = decoder.readable.getReader(); + const { value, done } = await reader.read(); + assert_false(done); + assert_equals("Hello world!", value); + await reader.cancel(); + await streamClosed.catch(reason => { + assert_equals(undefined, reason); + }); + + await port.close(); +}, 'Can pipe readable through a transform stream.') + +</script>
diff --git a/third_party/blink/web_tests/serial/serialPort_readable_smallRead.html b/third_party/blink/web_tests/serial/serialPort_readable_smallRead.html new file mode 100644 index 0000000..f0a842d --- /dev/null +++ b/third_party/blink/web_tests/serial/serialPort_readable_smallRead.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> +<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom.js"></script> +<script src="file:///gen/third_party/blink/public/mojom/serial/serial.mojom.js"></script> +<script src="resources/serial-test-utils.js"></script> +<script> + +serial_test(async (t, fake) => { + const { port, fakePort } = await getFakeSerialPort(fake); + // Select a buffer size larger than the amount of data transferred. + await port.open({ baudrate: 9600, buffersize: 64 }); + + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + fakePort.write(data); + + const reader = port.readable.getReader(); + let { value, done } = await reader.read(); + assert_false(done); + compareArrays(data, value); + reader.releaseLock(); + + await port.close(); +}, 'Can read a small amount of data'); + +</script>
diff --git a/third_party/blink/web_tests/virtual/dark-color-scheme/range/range-appearance-basic.html b/third_party/blink/web_tests/virtual/dark-color-scheme/range/range-appearance-basic.html new file mode 100644 index 0000000..98ed57d --- /dev/null +++ b/third_party/blink/web_tests/virtual/dark-color-scheme/range/range-appearance-basic.html
@@ -0,0 +1,70 @@ +<!DOCTYPE html> +<meta name="color-scheme" content="dark"> +<script src="../../../resources/run-after-layout-and-paint.js"></script> +<script src="../../../fast/forms/resources/common.js"></script> +<body> +<style> + #vertical { + -webkit-appearance: slider-vertical; + } +</style> + +<!-- no style for reference --> +<ul style="color:white"> + <li>Range: <input type="range" /><inpu style="color-scheme: dark" value=0 type="range" /><input style="color-scheme: dark" value=100 type="range" /></li> +</ul > + +<ul style="color:white"> + <li>Range value=30: <input style="color-scheme: dark" type="range" value="30"/></li> +</ul> + +<ul style="color:white"> + <li>Range vertical: <input style="color-scheme: dark" type="range" value="30" id="vertical" /></li> +</ul> + +<!-- disabled --> +<ul style="color:white"> + <li>Range disabled: <input style="color-scheme: dark" type="range" disabled/></li> +</ul> + +<!-- hover --> +<ul style="color:white"> + <li>Range hover: <input style="color-scheme: dark" type="range" id="hoverTarget"/></li> +</ul> + +<!-- datalist --> +<ul style="color:white"> + <li>Range datalist: <input style="color-scheme: dark" type="range" min="0" max="100" list="number" /></li> + <li>Range datalist disabled: <input style="color-scheme: dark" type="range" min="0" max="100" list="number" disabled /></li> + <datalist id="number"> + <option>10</option> + <option>30</option> + <option>50</option> + <option>70</option> + <option>90</option> + </datalist> +</ul> + +<!-- zoom --> +<ul style="color:white"> + <li>Range zoom: 3: <input style="color-scheme: dark; zoom: 3;" type="range"/></li> + <li>Range zoom: 3 v2:<input style="color-scheme: dark; zoom: 3;" type="range" value=0 /></li> +</ul> + +<ul style="color:white"> + <li>Range pressed: <input type="range" id="pressTarget" style="color-scheme: dark"/> + </li> +</ul> + +<script> + +runAfterLayoutAndPaint(function() { + var target = document.getElementById('hoverTarget'); + var target2 = document.getElementById('pressTarget'); + internals.setPseudoClassState(target, ":hover", true) + internals.setPseudoClassState(target2, ":active", true) +}, true); + +</script> + +</body>
diff --git a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-operations.https-expected.txt b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-operations.https-expected.txt index 170bb9d..c9320e9d 100644 --- a/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-operations.https-expected.txt +++ b/third_party/blink/web_tests/virtual/webrtc-wpt-plan-b/external/wpt/webrtc/RTCPeerConnection-operations.https-expected.txt
@@ -1,16 +1,30 @@ This is a testharness.js-based test. +PASS promiseState helper works +PASS promiseStateFinal helper works +FAIL createOffer must detect InvalidStateError synchronously when chain is empty (prerequisite) assert_equals: expected "InvalidStateError" but got "Error" +FAIL createAnswer must detect InvalidStateError synchronously when chain is empty (prerequisite) assert_equals: promise rejected on same task expected "rejected" but got "pending" +FAIL SLD(rollback) must detect InvalidStateError synchronously when chain is empty assert_equals: expected "InvalidStateError" but got "OperationError" +FAIL addIceCandidate must detect InvalidStateError synchronously when chain is empty assert_equals: expected "InvalidStateError" but got "TypeError" +FAIL replaceTrack must detect InvalidStateError synchronously when chain is empty and transceiver is stopped promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL setParameters must detect InvalidStateError synchronously always when transceiver is stopped promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL pc.getStats must detect InvalidAccessError synchronously always promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL isOperationsChainEmpty detects empty in stable assert_true: Empty to start expected true got false +FAIL isOperationsChainEmpty detects empty in have-local-offer assert_true: Empty to start expected true got false +FAIL isOperationsChainEmpty detects empty in have-remote-offer assert_equals: isOperationsChainEmpty is working expected "InvalidStateError" but got "Error" +PASS createOffer uses operations chain +FAIL createAnswer uses operations chain assert_equals: isOperationsChainEmpty is working expected "InvalidStateError" but got "Error" +FAIL setLocalDescription uses operations chain assert_true: Empty before expected true got false +FAIL setRemoteDescription uses operations chain assert_true: Empty before expected true got false +FAIL addIceCandidate uses operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL Firing of negotiationneeded uses operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL replaceTrack uses operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL setParameters does NOT use the operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL pc.getStats does NOT use the operations chain assert_true: Empty chain expected true got false +FAIL sender.getStats does NOT use the operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL receiver.getStats does NOT use the operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." FAIL addIceCandidate chains onto SRD, fails before promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." +FAIL Operations queue not vulnerable to recursion by chained negotiationneeded promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." FAIL Pack operations queue with implicit offer and answer promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." FAIL Negotiate solely by operations queue and signaling state promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." -PASS promiseState helper works -FAIL Operations chain must run first operation's sync part synchronously assert_equals: expected "InvalidModificationError" but got "OperationError" -FAIL isOperationsChainEmpty detects empty assert_equals: isOperationsChainEmpty expected "InvalidModificationError" but got "OperationError" -FAIL SLD(offer) must validate against LastCreatedOffer early (prerequisite) assert_equals: expected "InvalidModificationError" but got "OperationError" -FAIL SLD(offer) must validate input before signaling state (prerequisite) assert_equals: expected "InvalidModificationError" but got "OperationError" -FAIL createOffer uses operations chain assert_equals: isOperationsChainEmpty expected "InvalidModificationError" but got "OperationError" -FAIL createAnswer uses operations chain assert_equals: isOperationsChainEmpty expected "InvalidModificationError" but got "OperationError" -FAIL setLocalDescription uses operations chain assert_equals: isOperationsChainEmpty expected "InvalidModificationError" but got "OperationError" -FAIL setRemoteDescription uses operations chain assert_equals: isOperationsChainEmpty expected "InvalidModificationError" but got "OperationError" -FAIL addIceCandidate uses operations chain promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'addTransceiver' on 'RTCPeerConnection': This operation is only supported in 'unified-plan'." Harness: the test ran to completion.
diff --git a/third_party/closure_compiler/externs/automation.js b/third_party/closure_compiler/externs/automation.js index 58b2b54..8cde2fb 100644 --- a/third_party/closure_compiler/externs/automation.js +++ b/third_party/closure_compiler/externs/automation.js
@@ -195,7 +195,6 @@ LABEL_TEXT: 'labelText', LAYOUT_TABLE: 'layoutTable', LAYOUT_TABLE_CELL: 'layoutTableCell', - LAYOUT_TABLE_COLUMN: 'layoutTableColumn', LAYOUT_TABLE_ROW: 'layoutTableRow', LEGEND: 'legend', LINE_BREAK: 'lineBreak',
diff --git a/tools/binary_size/README.md b/tools/binary_size/README.md index 7d668a9..dda94ba 100644 --- a/tools/binary_size/README.md +++ b/tools/binary_size/README.md
@@ -27,17 +27,8 @@ ## Binary Size Gerrit Plugin - * Currently in development, should hopefully be launched soon. - * This bot surfaces the info from the binary size trybot on the cl view page - itself. - * Surfacing binary size impact for a change allows authors and reviewers - to easily assess whether or not it makes sense for the change. - * Shows you only the binary size metrics your patchset affects. - * Links to SuperSize html and text output for more details on which symbols - were changed. - * For tips on reducing binary size, see [Optimization Advice][optimization_advice]. - -[optimization_advice]: //docs/speed/binary_size/optimization_advice.md + * Introduced February 2020 to surface results from android-binary-size. + * Documented [here](/docs/speed/binary_size/android_binary_size_trybot.md). ## resource_sizes.py
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index f8e27f6..730e320 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -168,28 +168,29 @@ "includes": [1740], }, "chrome/browser/resources/settings/os_settings_resources.grd": { - "structures": [1760], + "includes": [1760], + "structures": [1780], }, "chrome/browser/resources/settings/settings_resources_vulcanized.grd": { - "includes": [1780], + "includes": [1800], }, "chrome/browser/resources/settings/settings_resources.grd": { - "includes": [1790], - "structures": [1800], + "includes": [1810], + "structures": [1820], }, "chrome/browser/resources/tab_strip/tab_strip_resources.grd": { - "structures": [1820], - "includes": [1840], + "structures": [1840], + "includes": [1860], }, "chrome/browser/resources/welcome/welcome_resources.grd": { - "includes": [1860], - "structures": [1880], + "includes": [1880], + "structures": [1900], }, "chrome/browser/supervised_user/supervised_user_unscaled_resources.grd": { - "includes": [1890], + "includes": [1910], }, "chrome/browser/vr/testapp/vr_testapp_resources.grd": { - "includes": [1900], + "includes": [1930], }, # END chrome/browser section.
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index e792795..fbbdc12 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -237,6 +237,8 @@ 'fuchsia-fyi-x64-dbg': 'debug_bot_fuchsia', 'fuchsia-fyi-x64-rel': 'release_bot_fuchsia', 'ios13-beta-simulator': 'ios_simulator_debug_static_bot', + 'ios13-sdk-device': 'ios_device_release_static_disable_signing_bot', + 'ios13-sdk-simulator': 'ios_simulator_debug_static_bot', 'ios-simulator': 'ios_error', 'ios-simulator-code-coverage': 'clang_code_coverage_ios', 'ios-simulator-cr-recipe': 'ios_simulator_debug_static_bot', @@ -372,7 +374,7 @@ 'chromium.gpu.fyi': { # These all use the 'trybot' mixins to ensure that dcheck is on. 'ANGLE GPU Android Release (Nexus 5X)': 'gpu_tests_android_release_trybot_arm64', - 'Android FYI dEQP Release (Nexus 5X)': 'deqp_android_release_trybot_arm64', + 'Android FYI dEQP Release (Nexus 5X)': 'angle_deqp_android_release_trybot_arm64', 'Android FYI Release (Nexus 5)': 'gpu_tests_android_release_trybot', 'Android FYI Release (Nexus 5X)': 'gpu_tests_android_release_trybot_arm64', 'Android FYI Release (Nexus 6)': 'gpu_tests_android_release_trybot', @@ -380,26 +382,26 @@ 'Android FYI Release (Nexus 9)': 'gpu_tests_android_release_trybot_arm64', 'Android FYI Release (NVIDIA Shield TV)': 'gpu_tests_android_release_trybot_arm64', 'Android FYI Release (Pixel 2)': 'gpu_tests_android_release_trybot', - 'Android FYI 32 Vk Release (Pixel 2)': 'gpu_tests_android_vulkan_ndk_release_trybot', - 'Android FYI 64 Vk Release (Pixel 2)': 'gpu_tests_android_vulkan_ndk_release_trybot_arm64', - 'Android FYI 32 dEQP Vk Release (Pixel 2)': 'deqp_android_vulkan_ndk_release_trybot', - 'Android FYI 64 dEQP Vk Release (Pixel 2)': 'deqp_android_vulkan_ndk_release_trybot_arm64', + 'Android FYI 32 Vk Release (Pixel 2)': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', + 'Android FYI 64 Vk Release (Pixel 2)': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', + 'Android FYI 32 dEQP Vk Release (Pixel 2)': 'angle_deqp_android_vulkan_ndk_release_trybot', + 'Android FYI 64 dEQP Vk Release (Pixel 2)': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', 'Android FYI SkiaRenderer GL (Nexus 5X)': 'gpu_tests_android_release_trybot_arm64', 'Android FYI SkiaRenderer Vulkan (Pixel 2)': 'gpu_tests_android_release_trybot', 'GPU FYI Linux Builder': 'gpu_fyi_tests_release_trybot', - 'GPU FYI Linux Ozone Builder': 'gpu_fyi_tests_ozone_linux_system_gbm_libdrm_release_trybot', + 'GPU FYI Linux Ozone Builder': 'angle_ozone_linux_system_gbm_libdrm_release_trybot', 'GPU FYI Linux Builder (dbg)': 'gpu_fyi_tests_debug_trybot', - 'GPU FYI Linux dEQP Builder': 'deqp_release_trybot', + 'GPU FYI Linux dEQP Builder': 'angle_deqp_release_trybot', 'GPU FYI Mac Builder': 'gpu_fyi_tests_release_trybot', 'GPU FYI Mac Builder (dbg)': 'gpu_fyi_tests_debug_trybot', - 'GPU FYI Mac dEQP Builder': 'deqp_release_trybot', - 'GPU FYI Perf Android 64 Builder': 'gpu_tests_android_vulkan_ndk_release_trybot_arm64', + 'GPU FYI Mac dEQP Builder': 'angle_deqp_release_trybot', + 'GPU FYI Perf Android 64 Builder': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', 'GPU FYI Win Builder': 'gpu_fyi_tests_release_trybot_x86', 'GPU FYI Win Builder (dbg)': 'gpu_fyi_tests_debug_trybot_x86', - 'GPU FYI Win dEQP Builder': 'deqp_release_trybot_x86', + 'GPU FYI Win dEQP Builder': 'angle_deqp_release_trybot_x86', 'GPU FYI Win x64 Builder': 'gpu_fyi_tests_release_trybot', 'GPU FYI Win x64 Builder (dbg)': 'gpu_fyi_tests_debug_trybot', - 'GPU FYI Win x64 dEQP Builder': 'deqp_release_trybot', + 'GPU FYI Win x64 dEQP Builder': 'angle_deqp_release_trybot', 'GPU FYI Win x64 DX12 Vulkan Builder': 'gpu_fyi_tests_dx12vk_release_trybot', 'GPU FYI Win x64 DX12 Vulkan Builder (dbg)': 'gpu_fyi_tests_dx12vk_debug_trybot', 'GPU FYI XR Win x64 Builder': 'gpu_fyi_tests_release_trybot', @@ -507,18 +509,18 @@ }, 'chromium.swangle': { - 'linux-swangle-tot-angle-x64': 'deqp_release_trybot', - 'linux-swangle-tot-angle-x86': 'deqp_release_trybot_x86', - 'linux-swangle-tot-swiftshader-x64': 'deqp_release_trybot', - 'linux-swangle-tot-swiftshader-x86': 'deqp_release_trybot_x86', - 'linux-swangle-x64': 'deqp_release_trybot', - 'linux-swangle-x86': 'deqp_release_trybot_x86', - 'win-swangle-tot-angle-x64': 'deqp_release_trybot', - 'win-swangle-tot-angle-x86': 'deqp_release_trybot_x86', - 'win-swangle-tot-swiftshader-x64': 'deqp_release_trybot', - 'win-swangle-tot-swiftshader-x86': 'deqp_release_trybot_x86', - 'win-swangle-x64': 'deqp_release_trybot', - 'win-swangle-x86': 'deqp_release_trybot_x86', + 'linux-swangle-tot-angle-x64': 'angle_deqp_release_trybot', + 'linux-swangle-tot-angle-x86': 'angle_deqp_release_trybot_x86', + 'linux-swangle-tot-swiftshader-x64': 'angle_deqp_release_trybot', + 'linux-swangle-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', + 'linux-swangle-x64': 'angle_deqp_release_trybot', + 'linux-swangle-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-tot-angle-x64': 'angle_deqp_release_trybot', + 'win-swangle-tot-angle-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-tot-swiftshader-x64': 'angle_deqp_release_trybot', + 'win-swangle-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-x64': 'angle_deqp_release_trybot', + 'win-swangle-x86': 'angle_deqp_release_trybot_x86', }, 'chromium.dev': { @@ -707,17 +709,17 @@ 'gpu-fyi-try-android-l-nexus-5-32': 'gpu_tests_android_release_trybot', 'gpu-fyi-try-android-l-nexus-6-32': 'gpu_tests_android_release_trybot', 'gpu-fyi-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', - 'gpu-fyi-try-android-m-nexus-5x-deqp-64': 'deqp_android_release_trybot_arm64', + 'gpu-fyi-try-android-m-nexus-5x-deqp-64': 'angle_deqp_android_release_trybot_arm64', 'gpu-fyi-try-android-m-nexus-5x-skgl-64': 'gpu_tests_android_release_trybot_arm64', 'gpu-fyi-try-android-m-nexus-6p-64': 'gpu_tests_android_release_trybot_arm64', 'gpu-fyi-try-android-m-nexus-9-64': 'gpu_tests_android_release_trybot_arm64', 'gpu-fyi-try-android-n-nvidia-shield-tv-64': 'gpu_tests_android_release_trybot_arm64', 'gpu-fyi-try-android-p-pixel-2-32': 'gpu_tests_android_release_trybot', 'gpu-fyi-try-android-p-pixel-2-skv-32': 'gpu_tests_android_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-32': 'deqp_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-deqp-vk-64': 'deqp_android_vulkan_ndk_release_trybot_arm64', - 'gpu-fyi-try-android-q-pixel-2-vk-32': 'gpu_tests_android_vulkan_ndk_release_trybot', - 'gpu-fyi-try-android-q-pixel-2-vk-64': 'gpu_tests_android_vulkan_ndk_release_trybot_arm64', + 'gpu-fyi-try-android-q-pixel-2-deqp-vk-32': 'angle_deqp_android_vulkan_ndk_release_trybot', + 'gpu-fyi-try-android-q-pixel-2-deqp-vk-64': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', + 'gpu-fyi-try-android-q-pixel-2-vk-32': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', + 'gpu-fyi-try-android-q-pixel-2-vk-64': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', 'gpu-try-android-m-nexus-5x-64': 'gpu_tests_android_release_trybot_arm64', 'linux_android_dbg_ng': 'android_debug_bot', 'try-nougat-phone-tester': 'android_debug_trybot_arm64', @@ -725,22 +727,23 @@ 'android-pie-arm64-dbg': 'android_debug_trybot_arm64', }, + # TODO(jmadill/ynovikov): Migrate these to angle waterfall. http://anglebug.com/4483 'tryserver.chromium.angle': { 'android_angle_rel_ng': 'gpu_tests_android_release_trybot_arm64', - 'android_angle_vk32_rel_ng': 'gpu_tests_android_vulkan_ndk_release_trybot', - 'android_angle_vk64_rel_ng': 'gpu_tests_android_vulkan_ndk_release_trybot_arm64', - 'android_angle_deqp_rel_ng': 'deqp_android_release_trybot_arm64', - 'android_angle_vk32_deqp_rel_ng': 'deqp_android_vulkan_ndk_release_trybot', - 'android_angle_vk64_deqp_rel_ng': 'deqp_android_vulkan_ndk_release_trybot_arm64', + 'android_angle_vk32_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot', + 'android_angle_vk64_rel_ng': 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64', + 'android_angle_deqp_rel_ng': 'angle_deqp_android_release_trybot_arm64', + 'android_angle_vk32_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot', + 'android_angle_vk64_deqp_rel_ng': 'angle_deqp_android_vulkan_ndk_release_trybot_arm64', 'fuchsia-angle-rel': 'gpu_fyi_tests_release_trybot_fuchsia', 'linux-angle-rel': 'gpu_fyi_tests_release_trybot', - 'linux_angle_ozone_rel_ng': 'gpu_fyi_tests_ozone_linux_system_gbm_libdrm_release_trybot', - 'linux_angle_deqp_rel_ng': 'deqp_release_trybot', + 'linux_angle_ozone_rel_ng': 'angle_ozone_linux_system_gbm_libdrm_release_trybot', + 'linux_angle_deqp_rel_ng': 'angle_deqp_release_trybot', 'mac-angle-rel': 'gpu_fyi_tests_release_trybot', 'win-angle-rel-32': 'gpu_fyi_tests_release_trybot_x86', 'win-angle-rel-64': 'gpu_fyi_tests_release_trybot', - 'win-angle-deqp-rel-32': 'deqp_release_trybot_x86', - 'win-angle-deqp-rel-64': 'deqp_release_trybot', + 'win-angle-deqp-rel-32': 'angle_deqp_release_trybot_x86', + 'win-angle-deqp-rel-64': 'angle_deqp_release_trybot', }, 'tryserver.chrome': { @@ -797,13 +800,13 @@ 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia', 'fuchsia_x64': 'release_trybot_fuchsia', 'fuchsia-x64-cast': 'release_trybot_fuchsia_cast', - 'gpu-fyi-try-linux-intel-dqp': 'deqp_release_trybot', + 'gpu-fyi-try-linux-intel-dqp': 'angle_deqp_release_trybot', 'gpu-fyi-try-linux-intel-exp': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-linux-intel-rel': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-linux-intel-sk-dawn-rel': 'gpu_tests_sk_dawn_release_trybot', 'gpu-fyi-try-linux-intel-skv': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-linux-nvidia-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-linux-nvidia-dqp': 'deqp_release_trybot', + 'gpu-fyi-try-linux-nvidia-dqp': 'angle_deqp_release_trybot', 'gpu-fyi-try-linux-nvidia-exp': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-linux-nvidia-rel': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-linux-nvidia-skv': 'gpu_fyi_tests_release_trybot', @@ -864,14 +867,14 @@ }, 'tryserver.chromium.mac': { - 'gpu-fyi-try-mac-amd-dqp': 'deqp_release_trybot', + 'gpu-fyi-try-mac-amd-dqp': 'angle_deqp_release_trybot', 'gpu-fyi-try-mac-amd-pro-rel': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-mac-amd-retina-dbg': 'gpu_fyi_tests_debug_trybot', 'gpu-fyi-try-mac-amd-retina-exp': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-mac-amd-retina-rel': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-mac-asan': 'gpu_fyi_tests_release_trybot_asan', 'gpu-fyi-try-mac-intel-dbg': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-mac-intel-dqp': 'deqp_release_trybot', + 'gpu-fyi-try-mac-intel-dqp': 'angle_deqp_release_trybot', 'gpu-fyi-try-mac-intel-exp': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-mac-intel-rel': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-mac-nvidia-retina-dbg': 'gpu_fyi_tests_debug_trybot', @@ -912,32 +915,32 @@ }, 'tryserver.chromium.swangle': { - 'linux-swangle-try-tot-angle-x64': 'deqp_release_trybot', - 'linux-swangle-try-tot-angle-x86': 'deqp_release_trybot_x86', - 'linux-swangle-try-tot-swiftshader-x64': 'deqp_release_trybot', - 'linux-swangle-try-tot-swiftshader-x86': 'deqp_release_trybot_x86', - 'linux-swangle-try-x64': 'deqp_release_trybot', - 'linux-swangle-try-x86': 'deqp_release_trybot_x86', - 'win-swangle-try-tot-angle-x64': 'deqp_release_trybot', - 'win-swangle-try-tot-angle-x86': 'deqp_release_trybot_x86', - 'win-swangle-try-tot-swiftshader-x64': 'deqp_release_trybot', - 'win-swangle-try-tot-swiftshader-x86': 'deqp_release_trybot_x86', - 'win-swangle-try-x64': 'deqp_release_trybot', - 'win-swangle-try-x86': 'deqp_release_trybot_x86', + 'linux-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', + 'linux-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', + 'linux-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', + 'linux-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', + 'linux-swangle-try-x64': 'angle_deqp_release_trybot', + 'linux-swangle-try-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-try-tot-angle-x64': 'angle_deqp_release_trybot', + 'win-swangle-try-tot-angle-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-try-tot-swiftshader-x64': 'angle_deqp_release_trybot', + 'win-swangle-try-tot-swiftshader-x86': 'angle_deqp_release_trybot_x86', + 'win-swangle-try-x64': 'angle_deqp_release_trybot', + 'win-swangle-try-x86': 'angle_deqp_release_trybot_x86', }, 'tryserver.chromium.win': { 'gpu-fyi-try-win7-amd-dbg-32': 'gpu_fyi_tests_debug_trybot_x86', - 'gpu-fyi-try-win7-amd-dqp-32': 'deqp_release_trybot_x86', + 'gpu-fyi-try-win7-amd-dqp-32': 'angle_deqp_release_trybot_x86', 'gpu-fyi-try-win7-amd-rel-32': 'gpu_fyi_tests_release_trybot_x86', - 'gpu-fyi-try-win7-nvidia-dqp-64': 'deqp_release_trybot', + 'gpu-fyi-try-win7-nvidia-dqp-64': 'angle_deqp_release_trybot', 'gpu-fyi-try-win7-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86', 'gpu-fyi-try-win7-nvidia-rel-64': 'gpu_fyi_tests_release_trybot', - 'gpu-fyi-try-win10-intel-dqp-64': 'deqp_release_trybot', + 'gpu-fyi-try-win10-intel-dqp-64': 'angle_deqp_release_trybot', 'gpu-fyi-try-win10-intel-exp-64': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-win10-intel-rel-64': 'gpu_fyi_tests_release_trybot', 'gpu-fyi-try-win10-nvidia-dbg-64': 'gpu_fyi_tests_debug_trybot', - 'gpu-fyi-try-win10-nvidia-dqp-64': 'deqp_release_trybot', + 'gpu-fyi-try-win10-nvidia-dqp-64': 'angle_deqp_release_trybot', 'gpu-fyi-try-win10-nvidia-dx12vk-dbg-64': 'gpu_fyi_tests_dx12vk_debug_trybot', 'gpu-fyi-try-win10-nvidia-dx12vk-rel-64': 'gpu_fyi_tests_dx12vk_release_trybot', 'gpu-fyi-try-win10-nvidia-exp-64': 'gpu_fyi_tests_release_trybot', @@ -1252,6 +1255,30 @@ 'android_without_codecs', 'release_trybot', 'strip_debug_info', ], + 'angle_deqp_android_release_trybot_arm64': [ + 'angle_deqp_tests', 'android', 'shared_release_trybot', 'arm64', + ], + + 'angle_deqp_android_vulkan_ndk_release_trybot': [ + 'angle_deqp_tests', 'android', 'vulkan_ndk', 'shared_release_trybot', + ], + + 'angle_deqp_android_vulkan_ndk_release_trybot_arm64': [ + 'angle_deqp_tests', 'android', 'vulkan_ndk', 'shared_release_trybot', 'arm64', + ], + + 'angle_deqp_release_trybot': [ + 'angle_deqp_tests', 'shared_release_trybot', + ], + + 'angle_deqp_release_trybot_x86': [ + 'angle_deqp_tests', 'shared_release_trybot', 'x86', + ], + + 'angle_ozone_linux_system_gbm_libdrm_release_trybot': [ + 'angle_tests', 'ozone_linux', 'system_gbm_libdrm', 'release_trybot', + ], + 'asan_clang_shared_v8_heap_minimal_symbols_release_tot': [ 'asan', 'clang_tot', 'shared', 'v8_heap', 'minimal_symbols', 'release', ], @@ -1605,40 +1632,29 @@ 'debug_bot', 'x86', 'no_com_init_hooks', 'chrome_with_codecs' ], - 'deqp_android_release_trybot_arm64': [ - 'angle_deqp_tests', 'android', 'shared_release_trybot', 'arm64', + 'gpu_fyi_tests_android_vulkan_ndk_release_trybot': [ + 'gpu_fyi_android_tests', 'vulkan_ndk', 'release_trybot', 'static_angle', ], - 'deqp_android_vulkan_ndk_release_trybot': [ - 'angle_deqp_tests', 'android', 'vulkan_ndk', 'shared_release_trybot', - ], - - 'deqp_android_vulkan_ndk_release_trybot_arm64': [ - 'angle_deqp_tests', 'android', 'vulkan_ndk', 'shared_release_trybot', 'arm64', - ], - - 'deqp_release_trybot_x86': [ - 'angle_deqp_tests', 'shared_release_trybot', 'x86', - ], - - 'deqp_release_trybot': [ - 'angle_deqp_tests', 'shared_release_trybot', + 'gpu_fyi_tests_android_vulkan_ndk_release_trybot_arm64': [ + 'gpu_fyi_android_tests', 'vulkan_ndk', 'release_trybot', 'arm64', + 'static_angle', ], 'gpu_fyi_tests_debug_trybot': [ 'gpu_fyi_tests', 'debug_bot', ], - 'gpu_fyi_tests_dx12vk_debug_trybot': [ - 'gpu_fyi_tests', 'dx12vk', 'debug_bot', - ], - 'gpu_fyi_tests_debug_trybot_x86': [ 'gpu_fyi_tests', 'debug_bot', 'x86', ], - 'gpu_fyi_tests_ozone_linux_system_gbm_libdrm_release_trybot': [ - 'gpu_fyi_tests', 'ozone_linux', 'system_gbm_libdrm', 'release_trybot', + 'gpu_fyi_tests_dx12vk_debug_trybot': [ + 'gpu_fyi_tests', 'dx12vk', 'debug_bot', + ], + + 'gpu_fyi_tests_dx12vk_release_trybot': [ + 'gpu_fyi_tests', 'dx12vk', 'release_trybot', ], 'gpu_fyi_tests_release_trybot': [ @@ -1649,6 +1665,10 @@ 'gpu_fyi_tests', 'release_trybot', 'asan', 'disable_nacl', ], + 'gpu_fyi_tests_release_trybot_fuchsia': [ + 'gpu_fyi_tests', 'release_trybot', 'fuchsia', + ], + 'gpu_fyi_tests_release_trybot_tsan': [ 'gpu_fyi_tests', 'release_trybot', 'tsan', 'disable_nacl', ], @@ -1657,14 +1677,6 @@ 'gpu_fyi_tests', 'release_trybot', 'x86', ], - 'gpu_fyi_tests_release_trybot_fuchsia': [ - 'gpu_fyi_tests', 'release_trybot', 'fuchsia', - ], - - 'gpu_fyi_tests_dx12vk_release_trybot': [ - 'gpu_fyi_tests', 'dx12vk', 'release_trybot', - ], - 'gpu_tests_android_release_bot_minimal_symbols_arm64_fastbuild': [ 'gpu_tests', 'android', 'release_bot', 'minimal_symbols', 'arm64', 'resource_whitelisting', 'static_angle', 'android_fastbuild', 'webview_google', @@ -1704,14 +1716,6 @@ 'use_java_coverage', 'partial_code_coverage_instrumentation', ], - 'gpu_tests_android_vulkan_ndk_release_trybot': [ - 'gpu_tests', 'android', 'vulkan_ndk', 'release_trybot', 'static_angle', - ], - - 'gpu_tests_android_vulkan_ndk_release_trybot_arm64': [ - 'gpu_tests', 'android', 'vulkan_ndk', 'release_trybot', 'arm64', 'static_angle', - ], - 'gpu_tests_debug_bot': [ 'gpu_tests', 'debug_bot', ], @@ -1818,6 +1822,10 @@ 'ios_deployment_target_9_0', 'cronet_ios' ], + 'ios_device_release_static_disable_signing_bot': [ + 'ios_device', 'ios_disable_code_signing', 'release_bot', + ], + 'ios_simulator_debug_static_bot': [ 'ios_simulator', 'debug_static_bot', ], @@ -2168,6 +2176,15 @@ 'gn_args': 'build_angle_deqp_tests=true', }, + 'angle_tests': { + 'mixins': ['angle_trace_perf_tests', 'gpu_tests', + 'internal_gles_conform_tests'], + }, + + 'angle_trace_perf_tests': { + 'gn_args': 'build_angle_trace_perf_tests=true', + }, + 'arm': { 'gn_args': 'target_cpu="arm"', }, @@ -2398,8 +2415,12 @@ 'gn_args': 'use_goma=true', }, + 'gpu_fyi_android_tests': { + 'mixins': ['android', 'angle_trace_perf_tests', 'gpu_tests'], + }, + 'gpu_fyi_tests': { - 'mixins': ['gpu_tests', 'internal_gles_conform_tests'], + 'mixins': ['angle_trace_perf_tests', 'gpu_tests', 'internal_gles_conform_tests'], }, 'gpu_tests': { @@ -2431,6 +2452,16 @@ 'gn_args': 'ios_deployment_target=\"9.0\"', }, + 'ios_device': { + 'mixins': ['ios'], + 'gn_args': 'target_cpu="arm64"', + }, + + 'ios_disable_code_signing': { + # defaults to true under ios_sdk.gni + 'gn_args': 'ios_enable_code_signing=false' + }, + 'ios_simulator': { 'mixins': ['ios', 'ios_use_goma_rbe' ], 'gn_args': 'target_cpu="x64"',
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 346c98d..9ec1a1e 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -20,6 +20,11 @@ If a user action is not being used any more, put an <obsolete> tag under the <action> tag with necessary explanation. Don't delete things in this file. +Please send CLs to chromium-metrics-reviews@google.com rather than to specific +individuals. These CLs will be automatically reassigned to a reviewer within +about 5 minutes. This approach helps the metrics team to load-balance incoming +reviews. Googlers can read more about this at go/gwsq-gerrit. + TODO(yiyaoliu): Currently, only file-level comments are supported. By running extract_actions.py, comments at other places will be deleted. Ideally, comments @@ -22673,6 +22678,10 @@ </action> <action name="Sync_NavigateToSyncAdvancedPage"> + <obsolete> + Deprecated as of 03/2020. Navigation to settings routes are recorded in + WebUI.Settings.PathVisited histogram. + </obsolete> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 3632dfb..bf584458 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -28554,6 +28554,12 @@ <int value="3" label="Only normal priority frames seen."/> </enum> +<enum name="FrameReportType"> + <int value="0" label="Presented Frame"/> + <int value="1" label="Missed Deadline Frame"/> + <int value="2" label="Dropped Frame"/> +</enum> + <enum name="FrameSiteInstanceProcessRelationship"> <summary> Used to describe the relationship between frames hosted in a process, @@ -35726,6 +35732,17 @@ <int value="8" label="Krb5 failed to parse"/> </enum> +<enum name="KerberosEncryptionTypes"> + <summary> + Encryption types that are allowed when requesting Kerberos tickets from a + Kerberos Authentication server. Any set of types can be mapped into one of + the categories below. + </summary> + <int value="0" label="All"/> + <int value="1" label="Strong"/> + <int value="2" label="Legacy"/> +</enum> + <enum name="KerberosErrorType"> <int value="0" label="Success"/> <int value="1" label="Unspecified error"/> @@ -37766,6 +37783,7 @@ <int value="-1650769314" label="enable-webgl2-compute-context"/> <int value="-1649778035" label="disable-clear-browsing-data-counters"/> <int value="-1648216169" label="NewOmniboxAnswerTypes:disabled"/> + <int value="-1646016597" label="IsolatePrerenders:disabled"/> <int value="-1645071473" label="ChromeColors:disabled"/> <int value="-1641832607" label="DragToPinTabs:enabled"/> <int value="-1638815914" label="enable-experimental-productivity-features"/> @@ -40780,6 +40798,7 @@ <int value="1932204471" label="SyncPseudoUSSThemes:disabled"/> <int value="1932732886" label="OpenVR:enabled"/> <int value="1933282728" label="OmniboxUICuesForSearchHistoryMatches:enabled"/> + <int value="1933376478" label="IsolatePrerenders:enabled"/> <int value="1935405622" label="AppServiceInstanceRegistry:disabled"/> <int value="1936810062" label="WebVrVsyncAlign:enabled"/> <int value="1938279796" label="PromosOnLocalNtp:disabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index f132ecf..afd8167 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -17,6 +17,11 @@ Please pretty-print and validate your edits by running the pretty_print.py and validate_format.py scripts in the same directory as this file before uploading your change for review. + +Please send CLs to chromium-metrics-reviews@google.com rather than to specific +individuals. These CLs will be automatically reassigned to a reviewer within +about 5 minutes. This approach helps the metrics team to load-balance incoming +reviews. Googlers can read more about this at go/gwsq-gerrit. --> <histogram-configuration> @@ -2683,7 +2688,7 @@ </histogram> <histogram name="Android.DownloadManager.Menu.Action" - enum="Android.DownloadManager.Menu.Actions" expires_after="2020-05-31"> + enum="Android.DownloadManager.Menu.Actions" expires_after="2020-09-20"> <owner>dtrainor@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary>The count of Download Home top level menu actions taken.</summary> @@ -3224,7 +3229,7 @@ <histogram name="Android.IntentNonSafelistedHeaderNames" enum="AndroidIntentNonSafelistedHeaderNameHashes" - expires_after="2020-04-26"> + expires_after="2020-10-31"> <owner>jochen@chromium.org</owner> <owner>peconn@chromium.org</owner> <summary> @@ -7081,7 +7086,7 @@ </histogram> <histogram name="Apps.LogDisplayTypeClickedResultZeroState" - enum="AppListSearchResultDisplayType" expires_after="2020-07-06"> + enum="AppListSearchResultDisplayType" expires_after="2020-09-20"> <owner>jiameng@chromium.org</owner> <owner>thanhdng@chromium.org</owner> <owner>tby@chromium.org</owner> @@ -8094,7 +8099,7 @@ </histogram> <histogram name="Arc.SdkVersionUpgradeType" enum="ArcSdkVersionUpgradeType" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>niwa@google.com</owner> <owner>yusukes@google.com</owner> <summary> @@ -9491,7 +9496,7 @@ </histogram> <histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue" - expires_after="2020-07-06"> + expires_after="2020-09-20"> <owner>kuscher@google.com</owner> <summary> The current state of the shelf (alignment) tracked over time by logging on a @@ -10003,7 +10008,7 @@ </histogram> <histogram name="Ash.WindowCycleController.DesksSwitchDistance" units="units" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>afakhry@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -11853,6 +11858,27 @@ </summary> </histogram> +<histogram name="AuthPolicy.KerberosEncryptionTypes.AuthenticateUser" + enum="KerberosEncryptionTypes" expires_after="M86"> + <owner>fsandrade@chromium.org</owner> + <owner>tomdobro@chromium.org</owner> + <summary> + The Kerberos encryption types used while succesfully authenticating an user. + This value comes from the DeviceKerberosEncryptionTypes policy. + </summary> +</histogram> + +<histogram name="AuthPolicy.KerberosEncryptionTypes.JoinADDomain" + enum="KerberosEncryptionTypes" expires_after="M86"> + <owner>fsandrade@chromium.org</owner> + <owner>tomdobro@chromium.org</owner> + <summary> + The Kerberos encryption types used while succesfully joining an Active + Directory domain. This value comes from the advanced settings of the + domainjoin screen. + </summary> +</histogram> + <histogram name="AuthPolicy.NumGposToDownload" units="units" expires_after="2020-08-23"> <owner>fsandrade@chromium.org</owner> @@ -13772,7 +13798,7 @@ </histogram> <histogram name="Autofill.ProfileSuggestionsMadeWithFormatter" - enum="BooleanCreated" expires_after="2020-03-30"> + enum="BooleanCreated" expires_after="2020-09-30"> <owner>battre@chromium.org</owner> <owner>src/components/autofill/OWNERS</owner> <summary> @@ -14980,7 +15006,7 @@ <histogram name="AutoScreenBrightness.AdapterDecisionAtUserChange.BrightnessChange.Cause" - enum="AutoScreenBrightnessBrightnessChangeCause" expires_after="2020-07-19"> + enum="AutoScreenBrightnessBrightnessChangeCause" expires_after="2020-09-20"> <owner>jiameng@chromium.org</owner> <summary> When user changes brightness manually, we will ask the model whether it also @@ -15038,7 +15064,7 @@ </histogram> <histogram name="AutoScreenBrightness.BrightnessChange.Cause" - enum="AutoScreenBrightnessBrightnessChangeCause" expires_after="2020-07-19"> + enum="AutoScreenBrightnessBrightnessChangeCause" expires_after="2020-09-20"> <owner>jiameng@chromium.org</owner> <summary>Reason for the model to change brightness. Chrome OS only.</summary> </histogram> @@ -15147,7 +15173,7 @@ </histogram> <histogram name="AutoScreenBrightness.DailyUserAdjustment.SupportedAls" - units="count" expires_after="2020-07-19"> + units="count" expires_after="2020-09-20"> <owner>jiameng@chromium.org</owner> <summary> Number of times that a user has made brightness adjustments on a device with @@ -16813,6 +16839,17 @@ </summary> </histogram> +<histogram name="Blink.Canvas.MaximumInflightResources" + units="canvas resources" expires_after="2021-01-31"> + <owner>aaronhk@chromium.org</owner> + <owner>fserb@chromium.org</owner> + <summary> + Reports the maximum number or canvas resources used at any one time by a + canvas resource provider. Logged in the destructor of + CanvasResourceProvider. + </summary> +</histogram> + <histogram name="Blink.Canvas.NumCanvasesPerPage" units="canvases" expires_after="2021-01-31"> <owner>aaronhk@chromium.org</owner> @@ -23976,7 +24013,7 @@ </histogram> <histogram name="ChromeOS.CWP.ParseCPUFrequencies" - enum="ChromeOSParseCPUFrequencyStatus" expires_after="2020-06-01"> + enum="ChromeOSParseCPUFrequencyStatus" expires_after="2020-09-20"> <owner>gmx@chromium.org</owner> <owner>cwp-team@google.com</owner> <summary> @@ -26460,6 +26497,24 @@ </summary> </histogram> +<histogram name="CompositorLatency.MissedDeadlineFrame" units="microseconds" + expires_after="2021-03-16"> + <owner>sadrul@chromium.org</owner> + <owner>graphics-dev@chromium.org</owner> + <summary> + Tracks the duration of various stages in the pipeline as a single frame goes + through the various stages in the compositor. This is reported for frames + that went through all the compositor stages in chromium, and was presented + to the user, but were delayed and missed their deadline. + + Warning: This metric may include reports from clients with low-resolution + clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports + will cause this metric to have an abnormal distribution. When considering + revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the + solution. + </summary> +</histogram> + <histogram name="CompositorLatency.MissedFrame" units="microseconds" expires_after="2020-08-31"> <obsolete> @@ -26499,6 +26554,15 @@ </summary> </histogram> +<histogram name="CompositorLatency.Type" enum="FrameReportType" + expires_after="2021-03-16"> + <owner>sadrul@chromium.org</owner> + <owner>graphics-dev@chromium.org</owner> + <summary> + Whether frame is dropped or presented meeting or missing the deadline. + </summary> +</histogram> + <histogram name="ConfigureDisplays.External.Modeset.AttemptSucceeded" enum="BooleanSuccess" expires_after="2020-10-30"> <owner>dcastagna@chromium.org</owner> @@ -27562,11 +27626,18 @@ <owner>feed@chromium.org</owner> <summary> Tracks each instance of user engagement with the feed, by scrolling or - interacting with a card (opening the URL or using the menu). We track every - interaction, and we report ENGAGED and ENGAGED_SIMPLE once per user visit. - The SCROLLED engagement type represents a single instance of the user - scrolling, and is reported when the scroll direction changes, or 200ms pass - with no further scroll events. + interacting with a card (opening the URL or using the menu). Note that each + event type reports samples very differently and buckets can't be directly + compared. We're mostly interested in unique user counts. We track every + interaction, and we report ENGAGED and ENGAGED_SIMPLE once per user visit. A + user visit is when the user scrolls or interacts with the NTP more than 5 + minutes after the previous visit. The SCROLLED engagement type represents a + single instance of the user scrolling, and is reported when the scroll + direction changes, or 200ms pass with no further scroll events. The + INTERACTED engagement type represents one instance of using the menu or + opening a feed article into its own tab. SCROLLED and INTERACTED are + reported for every occurrence, thus we could end up with more scrolled and + interected than ENGAGED or ENGAGED_SIMPLE samples. </summary> </histogram> @@ -28397,7 +28468,7 @@ </histogram> <histogram name="ContextMenu.TimeToTakeAction.Abandoned" units="ms" - expires_after="2020-06-30"> + expires_after="2020-09-20"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary> @@ -28410,7 +28481,7 @@ </histogram> <histogram name="ContextMenu.TimeToTakeAction.SelectedItem" units="ms" - expires_after="2020-06-30"> + expires_after="2020-09-20"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary> @@ -49930,7 +50001,7 @@ </histogram> <histogram name="ExploreSites.SiteTilesClickIndex2" units="units" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>dewittj@chromium.org</owner> <owner>petewil@chromium.org</owner> <summary> @@ -59782,7 +59853,7 @@ </histogram> <histogram name="GPU.ContextLost" enum="ContextLostReason" - expires_after="2020-06-28"> + expires_after="2020-09-20"> <owner>sievers@chromium.org</owner> <summary> The reason a GPU command buffer context of a given type was lost. @@ -60713,7 +60784,7 @@ </histogram> <histogram name="GPU.IOSurface.TexImageTime" units="ms" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>ccameron@chromium.org</owner> <summary> The time that it took for a call to CGLTexImageIOSurface2D to complete. @@ -61809,7 +61880,7 @@ </histogram> <histogram name="GridTabSwitcher.ThumbnailFetchingResult" - enum="GridTabSwitcherThumbnailFetchingResult" expires_after="2020-07-19"> + enum="GridTabSwitcherThumbnailFetchingResult" expires_after="2020-09-20"> <owner>yusufo@chromium.org</owner> <owner>wychen@chromium.org</owner> <summary> @@ -71327,7 +71398,9 @@ <histogram name="Media.AudioOutputResampler.OpenLowLatencyStream" enum="AudioOutputResamplerLowLatencyOpenStreamResult" - expires_after="2020-04-05"> + expires_after="2021-04-05"> + <owner>armax@chromium.org</owner> + <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> Whether a low latency stream to be rendered through the resampler was opened @@ -78414,6 +78487,24 @@ </summary> </histogram> +<histogram base="true" name="Memory.GPU.PeakMemoryAllocationSource" units="KB" + expires_after="2020-08-09"> +<!-- Name completed by a combination of the following two histogram_suffixes: --> + +<!-- histogram_suffixes name="GPU.PeakMemoryUsage" --> + +<!-- and histogram_suffixes name="GPU.PeakMemoryAllocationSource" --> + + <owner>jonross@chromium.org</owner> + <owner>graphics-dev@chromium.org</owner> + <owner>sadrul@chromium.org</owner> + <summary> + The maximum amount of memory of the GPU process allocated by a particular + source during a user interaction (e.g. tab-switch, page-load, scroll etc.). + See Memory.GPU.PeakMemoryUsage. + </summary> +</histogram> + <histogram base="true" name="Memory.GPU.PeakMemoryUsage" units="KB" expires_after="2020-08-09"> <!-- Name completed by histogram_suffixes name="GPU.PeakMemoryUsage" --> @@ -103408,7 +103499,7 @@ </histogram> <histogram name="NQE.CellularSignalStrength.LevelAvailable" - enum="BooleanAvailable" expires_after="2020-07-19"> + enum="BooleanAvailable" expires_after="2020-09-20"> <owner>tbansal@chromium.org</owner> <owner>bengr@chromium.org</owner> <summary> @@ -104345,7 +104436,7 @@ </histogram> <histogram name="OccludedWindowMouseEvents" units="events" - expires_after="2020-04-01"> + expires_after="2020-10-01"> <owner>davidbienvenu@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -123565,7 +123656,7 @@ </histogram> <histogram name="Power.ExternalDisplayOpenResult" - enum="ExternalDisplayOpenResult" expires_after="2020-06-21"> + enum="ExternalDisplayOpenResult" expires_after="2020-09-20"> <owner>tbroch@chromium.org</owner> <summary> The result of attempting to open an I2C device to control an external @@ -135985,6 +136076,17 @@ </summary> </histogram> +<histogram name="SafeBrowsing.RT.ThreatInfoSize" units="verdicts" + expires_after="2021-03-20"> + <owner>xinghuilu@chromium.org</owner> + <owner>chrome-safebrowsing-alerts@google.com</owner> + <summary> + Logs the number of verdicts received in the real time URL check response. + Logged on each resource check for which a lookup request is sent to the + server. + </summary> +</histogram> + <histogram name="SafeBrowsing.ThreatReport.DomIsAmbiguous" enum="Boolean" expires_after="M77"> <obsolete> @@ -136403,6 +136505,16 @@ </summary> </histogram> +<histogram name="SafeBrowsing.V4LocalDatabaseManager.ThreatInfoSize" + units="verdicts" expires_after="2021-03-20"> + <owner>xinghuilu@chromium.org</owner> + <owner>chrome-safebrowsing-alerts@google.com</owner> + <summary> + Records the number of verdicts received in the full hash check. Logged each + time a full hash check response is received. + </summary> +</histogram> + <histogram name="SafeBrowsing.V4LocalDatabaseManager.TimeSinceLastUpdateResponse" units="ms" expires_after="2021-03-04"> @@ -156573,7 +156685,7 @@ </histogram> <histogram name="Startup.ColdStartWithExternalURLTime" units="ms" - expires_after="2020-07-06"> + expires_after="2020-09-20"> <owner>jif@chromium.org</owner> <summary> The duration of all initializations in a cold start triggered by an external @@ -166865,7 +166977,7 @@ </histogram> <histogram name="Translate.CLD3.LanguageDetected" enum="CLD3LanguageCode" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>frechette@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary> @@ -166973,7 +167085,7 @@ </histogram> <histogram name="Translate.DeclineTranslateCloseInfobar" units="units" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>kenjibaheux@google.com</owner> <summary> The number of times the translate infobar was closed by clicking the X @@ -166982,7 +167094,7 @@ </histogram> <histogram name="Translate.DeclineTranslateDismissUI" units="units" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>kenjibaheux@google.com</owner> <summary> The number of times the translate UI was closed without translating in the @@ -167312,7 +167424,7 @@ </histogram> <histogram name="Translate.RevertTranslation" units="units" - expires_after="2020-07-19"> + expires_after="2020-09-20"> <owner>kenjibaheux@google.com</owner> <summary> The number of times the show original button was clicked in the translate @@ -168804,7 +168916,7 @@ </histogram> <histogram name="UMA.MetricsIDsReset" enum="BooleanHit" - expires_after="2020-05-10"> + expires_after="2020-09-20"> <owner>jwd@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -169184,7 +169296,7 @@ </histogram> <histogram name="UMA.TruncatedEvents.UserAction" units="events" - expires_after="2020-09-13"> + expires_after="2020-09-20"> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -171026,7 +171138,7 @@ </summary> </histogram> -<histogram name="V8.GCBackgroundMarking" units="ms" expires_after="2020-07-06"> +<histogram name="V8.GCBackgroundMarking" units="ms" expires_after="2020-09-20"> <owner>ulan@chromium.org</owner> <summary> Time spent in background tasks doing marking in one GC cycle. It is recorded @@ -181482,7 +181594,7 @@ </histogram> <histogram name="WindowOcclusionChanged" enum="WindowOcclusionState" - expires_after="2020-04-01"> + expires_after="2020-10-01"> <owner>davidbienvenu@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -184977,6 +185089,14 @@ <affected-histogram name="CompositorLatency.DroppedFrame.TouchScroll"/> <affected-histogram name="CompositorLatency.DroppedFrame.WheelScroll"/> <affected-histogram name="CompositorLatency.MainThreadAnimation"/> + <affected-histogram + name="CompositorLatency.MissedDeadlineFrame.CompositorAnimation"/> + <affected-histogram + name="CompositorLatency.MissedDeadlineFrame.MainThreadAnimation"/> + <affected-histogram name="CompositorLatency.MissedDeadlineFrame.PinchZoom"/> + <affected-histogram name="CompositorLatency.MissedDeadlineFrame.RAF"/> + <affected-histogram name="CompositorLatency.MissedDeadlineFrame.TouchScroll"/> + <affected-histogram name="CompositorLatency.MissedDeadlineFrame.WheelScroll"/> <affected-histogram name="CompositorLatency.MissedFrame"> <obsolete> Removed on 01/2020. MissedFrame changed to DroppedFrame for more clarity. @@ -188441,11 +188561,22 @@ <affected-histogram name="GPU.ContextMemory.WebGL"/> </histogram_suffixes> +<histogram_suffixes name="GPU.PeakMemoryAllocationSources" separator="."> + <suffix name="CommandBuffer" label="GPU Command Buffer."/> + <suffix name="SharedContextState" label="Shared Context State."/> + <suffix name="SharedImageStub" label="Shared Image Stub."/> + <suffix name="Skia" label="Skia."/> + <suffix name="Unknown" label="No source specified."/> + <affected-histogram name="Memory.GPU.PeakMemoryAllocationSource.ChangeTab"/> + <affected-histogram name="Memory.GPU.PeakMemoryAllocationSource.PageLoad"/> + <affected-histogram name="Memory.GPU.PeakMemoryAllocationSource.Scroll"/> +</histogram_suffixes> + <histogram_suffixes name="GPU.PeakMemoryUsage" separator="."> - <suffix name="ChangeTab" label="Changing Tabs."/> - <suffix name="PageLoad" label="Page Load."/> - <suffix name="Scroll" label="Scroll."/> - <affected-histogram name="Memory.GPU.PeakMemoryUsage"/> + <suffix base="true" name="ChangeTab" label="Changing Tabs."/> + <suffix base="true" name="PageLoad" label="Page Load."/> + <suffix base="true" name="Scroll" label="Scroll."/> + <affected-histogram name="Memory.GPU.PeakMemoryAllocationSource"/> </histogram_suffixes> <histogram_suffixes name="GPU.ProtectedVideoType" separator="."> @@ -198195,6 +198326,7 @@ <suffix name="WheelScroll" label="Mousewheel driven interaction"/> <affected-histogram name="CompositorLatency"/> <affected-histogram name="CompositorLatency.DroppedFrame"/> + <affected-histogram name="CompositorLatency.MissedDeadlineFrame"/> <affected-histogram name="CompositorLatency.MissedFrame"> <obsolete> Removed on 01/2020. MissedFrame changed to DroppedFrame for more clarity.
diff --git a/tools/metrics/structured/compile_time_validation.py b/tools/metrics/structured/compile_time_validation.py index 1ff5143a..7f7b931 100644 --- a/tools/metrics/structured/compile_time_validation.py +++ b/tools/metrics/structured/compile_time_validation.py
@@ -3,6 +3,8 @@ # found in the LICENSE file. """Verifies that structured.xml is well-structured.""" +from collections import Counter +from model import _METRIC_TYPE from model import _EVENT_TYPE, _EVENTS_TYPE from model import _PROJECT_TYPE, _PROJECTS_TYPE @@ -34,6 +36,40 @@ "name: '{}'.").format(event['name'])) +def eventNamesUnique(data): + """Check that no two events have the same name.""" + name_counts = Counter( + event['name'] for event in data[_EVENTS_TYPE.tag][_EVENT_TYPE.tag]) + for name, count in name_counts.items(): + if count != 1: + raise Exception( + "Structured metrics events have duplicate name '{}'.".format(name)) + + +def projectNamesUnique(data): + """Check that no two projects have the same name.""" + name_counts = Counter( + project['name'] + for project in data[_PROJECTS_TYPE.tag][_PROJECT_TYPE.tag]) + for name, count in name_counts.items(): + if count != 1: + raise Exception( + "Structured metrics projects have duplicate name '{}'.".format(name)) + + +def metricNamesUniqueWithinEvent(data): + """Check that no two metrics within an event have the same name.""" + for event in data[_EVENTS_TYPE.tag][_EVENT_TYPE.tag]: + name_counts = Counter(metric['name'] for metric in event[_METRIC_TYPE.tag]) + for name, count in name_counts.items(): + if count != 1: + raise Exception(("Structured metrics event '{}' has duplicated metric " + "name '{}'.").format(event['name'], name)) + + def validate(data): eventsReferenceValidProjects(data) projectAndEventNamesDontCollide(data) + eventNamesUnique(data) + projectNamesUnique(data) + metricNamesUniqueWithinEvent(data)
diff --git a/tools/metrics/structured/validate_format.py b/tools/metrics/structured/validate_format.py index 365aa0f6..79715f01 100755 --- a/tools/metrics/structured/validate_format.py +++ b/tools/metrics/structured/validate_format.py
@@ -15,56 +15,101 @@ STRUCTURED_XML = path_util.GetInputFile(('tools/metrics/structured/' 'structured.xml')) -def checkEventsHaveOwners(config): - """Check that every event in the config has at least one owner.""" + +def checkElementOwners(config, element_tag): + """Check that every element in the config has at least one owner.""" errors = [] - events = set() - for event_node in config.getElementsByTagName('event'): - event_name = event_node.getAttribute('name') - # Check for duplicate event names. - if event_name in events: - errors.append("duplicate event name '%s'" % event_name) - events.add(event_name) + for node in config.getElementsByTagName(element_tag): + name = node.getAttribute('name') + owner_nodes = node.getElementsByTagName('owner') - owner_nodes = event_node.getElementsByTagName('owner') - metric_nodes = event_node.getElementsByTagName('metric') - - # Check <owner> tag is present for each event. + # Check <owner> tag is present for each element. if not owner_nodes: - errors.append("<owner> tag is required for event '%s'." % event_name) + errors.append( + "<owner> tag is required for %s '%s'." % (element_tag, name)) continue for owner_node in owner_nodes: # Check <owner> tag actually has some content. if not owner_node.childNodes: - errors.append( - "<owner> tag for event '%s' should not be empty." % event_name) + errors.append("<owner> tag for '%s' should not be empty." % name) for email in owner_node.childNodes: # Check <owner> tag's content is an email address, not a username. if not re.match('^.+@(chromium\.org|google\.com)$', email.data): - errors.append("<owner> tag for event '%s' expects a Chromium or " + errors.append("<owner> tag for %s '%s' expects a Chromium or " "Google email address, instead found '%s'." % - (event_name, email.data.strip())) + (element_tag, name, email.data.strip())) - # Check for duplicate metric names within an event. + return errors + + +def checkElementsNotDuplicated(config, element_tag): + errors = [] + elements = set() + + for node in config.getElementsByTagName(element_tag): + name = node.getAttribute('name') + # Check for duplicate names. + if name in elements: + errors.append("duplicate %s name '%s'" % (element_tag, name)) + elements.add(name) + + return errors + + +def checkMetricNamesWithinEventNotDuplicated(events): + errors = [] + + for node in events.getElementsByTagName('event'): + name = node.getAttribute('name') metrics = set() - for metric_node in metric_nodes: + for metric_node in node.getElementsByTagName('metric'): metric_name = metric_node.getAttribute('name') if metric_name in metrics: - errors.append("duplicate metric name '%s' for event '%s'" % - (metric_name, event_name)) + errors.append( + "duplicate metric name '%s' for event '%s'" % (metric_name, name)) metrics.add(metric_name) return errors + +def checkEventsReferenceValidProjects(events, projects): + errors = [] + + projects = { + project.getAttribute('name') + for project in projects.getElementsByTagName('project') + } + + for node in events.getElementsByTagName('event'): + name = node.getAttribute('name') + project = node.getAttribute('project') + + # An event's project can either be empty (not specified), or must be a + # project listed in the projects section. + if project and project not in projects: + errors.append( + "event '%s' references nonexistent project '%s'" % (name, project)) + + return errors + + def main(): with open(STRUCTURED_XML, 'r') as config_file: document = minidom.parse(config_file) [config] = document.getElementsByTagName('structured-metrics') - [events] = document.getElementsByTagName('events') + [events] = config.getElementsByTagName('events') + [projects] = config.getElementsByTagName('projects') - errors = checkEventsHaveOwners(config) + errors = [] + errors.extend(checkElementOwners(events, 'event')) + errors.extend(checkElementOwners(projects, 'project')) + errors.extend(checkElementsNotDuplicated(events, 'event')) + errors.extend(checkElementsNotDuplicated(projects, 'project')) + errors.extend(checkMetricNamesWithinEventNotDuplicated(events)) + errors.extend(checkEventsReferenceValidProjects(events, projects)) + if errors: return 'ERRORS:' + ''.join('\n ' + e for e in errors)
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 528375c..0ff90e65 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -4925,6 +4925,19 @@ </metric> </event> +<event name="MainFrameNavigation" singular="True"> + <owner>thegreenfrog@chromium.org</owner> + <summary> + Metric associated with a main frame navigation. Currently implemented only + on iOS. + </summary> + <metric name="DidCommit" enum="Boolean"> + <summary> + Set to 1 if the navigation successfully commited. + </summary> + </metric> +</event> + <event name="Media.Autoplay.Attempt"> <owner>mlamouri@chromium.org</owner> <owner>media-dev@chromium.org</owner> @@ -6367,6 +6380,26 @@ Measure of memory consumed by XSL Stylesheet resources in Blink Web Cache. </summary> </metric> + <metric name="WebMediaPlayer.Audio"> + <summary> + Measure of total memory used by media/webmediaplayer/audio. + </summary> + </metric> + <metric name="WebMediaPlayer.DataSource"> + <summary> + Measure of total memory used by media/webmediaplayer/data_source. + </summary> + </metric> + <metric name="WebMediaPlayer.Demuxer"> + <summary> + Measure of total memory used by media/webmediaplayer/demuxer. + </summary> + </metric> + <metric name="WebMediaPlayer.Video"> + <summary> + Measure of total memory used by media/webmediaplayer/video. + </summary> + </metric> </event> <event name="Memory.TabFootprint"> @@ -6966,11 +6999,6 @@ is in the foreground. Measured in milliseconds. </summary> </metric> - <metric name="DidCommit"> - <summary> - Set to 1 if the navigation successfully commited. - </summary> - </metric> <metric name="DocumentTiming.NavigationToDOMContentLoadedEventFired"> <summary> Measures the time in milliseconds from navigation timing's navigation @@ -7821,7 +7849,7 @@ nearest 10. </summary> </metric> - <metric name="ThirdPartyCookieBlockingEnabledForSite"> + <metric name="ThirdPartyCookieBlockingEnabledForSite" enum="Boolean"> <owner>dullweber@chromium.org</owner> <owner>huanzhong@chromium.org</owner> <summary>
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index a5e9708..b109b26 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -50,6 +50,7 @@ resource_sizes_monochrome_public_minimal_apks,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py, resource_sizes_system_webview_apk,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py, resource_sizes_system_webview_google_apk,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py, +resource_sizes_trichrome_google,"agrieve@chromium.org, jbudorick@chromium.org",Build,https://chromium.googlesource.com/chromium/src/+/HEAD/tools/binary_size/README.md#resource_sizes_py, speedometer,hablich@chromium.org,Blink,, speedometer-future,hablich@chromium.org,Blink,, speedometer2,hablich@chromium.org,Blink,,
diff --git a/tools/perf/core/minidump_unittest.py b/tools/perf/core/minidump_unittest.py index 9e6570de..7ccc00e 100644 --- a/tools/perf/core/minidump_unittest.py +++ b/tools/perf/core/minidump_unittest.py
@@ -14,15 +14,27 @@ import py_utils +# Possible ways that gl::Crash() will show up in a stack trace. +CRASH_SIGNATURES = [ + 'gl::Crash', + 'chrome!Crash', +] + + class BrowserMinidumpTest(tab_test_case.TabTestCase): + def assertContainsAtLeastOne(self, expected_values, checked_value): + for expected in expected_values: + if expected in checked_value: + return + raise AssertionError( + 'None of %s found in %s' % (expected_values, checked_value)) + @decorators.Isolated # Minidump symbolization doesn't work in ChromeOS local mode if the rootfs is # still read-only, so skip the test in that case. # TODO(crbug.com/1038043): Test is failing on chromeos-betty-chrome. - # TODO(crbug.com/1056235): Re-enable on Linux once the crashes are fixed. @decorators.Disabled('chromeos-local', 'chromeos-board-betty', - 'chromeos-board-betty-pi-arc', - 'chromeos-amd64-generic-rel', 'linux') + 'chromeos-board-betty-pi-arc') def testSymbolizeMinidump(self): # Wait for the browser to restart fully before crashing self._LoadPageThenWait('var sam = "car";', 'sam') @@ -51,7 +63,7 @@ # Now symbolize that minidump and make sure there are no longer any present succeeded, stack = self._browser.SymbolizeMinidump(crash_minidump_path) self.assertTrue(succeeded) - self.assertIn('gl::Crash', stack) + self.assertContainsAtLeastOne(CRASH_SIGNATURES, stack) all_unsymbolized_after_symbolize_paths = \ self._browser.GetAllUnsymbolizedMinidumpPaths() @@ -67,8 +79,7 @@ # TODO(crbug.com/1038043): Test is failing on chromeos-betty-chrome. # TODO(crbug.com/1056235): Re-enable on Linux once the crashes are fixed. @decorators.Disabled('chromeos-local', 'chromeos-board-betty', - 'chromeos-board-betty-pi-arc', - 'chromeos-amd64-generic-rel', 'linux') + 'chromeos-board-betty-pi-arc') def testMultipleCrashMinidumps(self): # Wait for the browser to restart fully before crashing self._LoadPageThenWait('var cat = "dog";', 'cat') @@ -133,7 +144,7 @@ # unsymbolized succeeded, stack = self._browser.SymbolizeMinidump(second_crash_path) self.assertTrue(succeeded) - self.assertIn('gl::Crash', stack) + self.assertContainsAtLeastOne(CRASH_SIGNATURES, stack) after_symbolize_all_paths = self._browser.GetAllMinidumpPaths() if after_symbolize_all_paths is not None:
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index a179295..ef17159 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -255,6 +255,11 @@ 'type': TEST_TYPES.GENERIC, }, { + 'name': 'resource_sizes_trichrome_google', + 'isolate': 'resource_sizes_trichrome_google', + 'type': TEST_TYPES.GENERIC, + }, + { 'name': 'resource_sizes_system_webview_apk', 'isolate': 'resource_sizes_system_webview_apk', 'type': TEST_TYPES.GENERIC, @@ -302,6 +307,11 @@ 'type': TEST_TYPES.GENERIC, }, { + 'name': 'resource_sizes_trichrome_google', + 'isolate': 'resource_sizes_trichrome_google', + 'type': TEST_TYPES.GENERIC, + }, + { 'name': 'resource_sizes_system_webview_apk', 'isolate': 'resource_sizes_system_webview_apk', 'type': TEST_TYPES.GENERIC, @@ -689,6 +699,7 @@ 'resource_sizes_chrome_modern_public_minimal_apks': RESOURCE_SIZES_METADATA, 'resource_sizes_monochrome_minimal_apks': RESOURCE_SIZES_METADATA, 'resource_sizes_monochrome_public_minimal_apks': RESOURCE_SIZES_METADATA, + 'resource_sizes_trichrome_google': RESOURCE_SIZES_METADATA, 'resource_sizes_system_webview_apk': RESOURCE_SIZES_METADATA, 'resource_sizes_system_webview_google_apk': RESOURCE_SIZES_METADATA, }
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 877283b3..6d1f66e 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -306,6 +306,7 @@ crbug.com/1023366 [ desktop ] system_health.common_desktop/browse:media:youtube:2019 [ Skip ] crbug.com/1042632 [ win ] system_health.common_desktop/load:tools:gmail:2019 [ Skip ] crbug.com/1050068 [ win7 ] system_health.common_desktop/load:media:9gag [ Skip ] +crbug.com/1064281 [ linux ] system_health.common_desktop/long_running:tools:gmail-foreground [ Skip ] # Benchmark: system_health.common_mobile @@ -396,6 +397,7 @@ crbug.com/1036143 [ android-pixel-2 ] v8.browsing_mobile/browse:chrome:omnibox:2019 [ Skip ] crbug.com/1039801 [ android-webview ] v8.browsing_mobile/browse:social:pinterest_infinite_scroll:2019 [ Skip ] crbug.com/1039801 [ android-go ] v8.browsing_mobile/browse:social:pinterest_infinite_scroll:2019 [ Skip ] +crbug.com/1064284 [ android-pixel-2 ] v8.browsing_mobile/browse:social:pinterest_infinite_scroll:2019 [ Skip ] # Benchmark: v8.browsing_mobile-future crbug.com/1036141 [ android-webview ] v8.browsing_mobile-future/browse:shopping:lazada:2019 [ Skip ]
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index b1eb863..406e50a 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -227,7 +227,7 @@ <item id="proxy_config_system" hash_code="11258689" type="0" content_hash_code="77057929" os_list="linux,windows" file_path="net/proxy_resolution/configured_proxy_resolution_service.cc"/> <item id="proxy_script_fetcher" hash_code="37531401" type="0" deprecated="2018-03-16" content_hash_code="31866133" file_path=""/> <item id="puch_client_channel" hash_code="34459548" type="0" deprecated="2020-01-23" content_hash_code="92475475" file_path=""/> - <item id="query_tiles_image_loader" hash_code="95103115" type="0" content_hash_code="75070538" os_list="linux,windows" file_path="chrome/browser/upboarding/query_tiles/cached_image_loader.cc"/> + <item id="query_tiles_image_loader" hash_code="95103115" type="0" content_hash_code="75070538" os_list="linux,windows" file_path="chrome/browser/upboarding/query_tiles/internal/cached_image_loader.cc"/> <item id="quic_chromium_incoming_pending_session" hash_code="120830730" type="0" content_hash_code="52904665" os_list="linux,windows" file_path="net/quic/quic_chromium_client_session.cc"/> <item id="quic_chromium_incoming_session" hash_code="87635401" type="0" content_hash_code="78573093" os_list="linux,windows" file_path="net/quic/quic_chromium_client_session.cc"/> <item id="quic_chromium_packet_writer" hash_code="20153177" type="0" content_hash_code="29657765" os_list="linux,windows" file_path="net/quic/quic_chromium_packet_writer.cc"/>
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index a344eb01..d4a8d1a 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -483,8 +483,6 @@ return "layoutTable"; case ax::mojom::Role::kLayoutTableCell: return "layoutTableCell"; - case ax::mojom::Role::kLayoutTableColumn: - return "layoutTableColumn"; case ax::mojom::Role::kLayoutTableRow: return "layoutTableRow"; case ax::mojom::Role::kLegend: @@ -869,8 +867,6 @@ return ax::mojom::Role::kLayoutTable; if (0 == strcmp(role, "layoutTableCell")) return ax::mojom::Role::kLayoutTableCell; - if (0 == strcmp(role, "layoutTableColumn")) - return ax::mojom::Role::kLayoutTableColumn; if (0 == strcmp(role, "layoutTableRow")) return ax::mojom::Role::kLayoutTableRow; if (0 == strcmp(role, "legend"))
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom index e0961e1..877976f 100644 --- a/ui/accessibility/ax_enums.mojom +++ b/ui/accessibility/ax_enums.mojom
@@ -222,7 +222,6 @@ kLabelText, kLayoutTable, kLayoutTableCell, - kLayoutTableColumn, kLayoutTableRow, kLegend, kLineBreak,
diff --git a/ui/accessibility/ax_language_detection.cc b/ui/accessibility/ax_language_detection.cc index 8350e96..ea70f3db 100644 --- a/ui/accessibility/ax_language_detection.cc +++ b/ui/accessibility/ax_language_detection.cc
@@ -57,7 +57,7 @@ // Assign languages with higher probability a higher score. // TODO(chrishall): consider more complex scoring - unsigned int score = kMaxDetectedLanguagesPerSpan; + int score = kMaxDetectedLanguagesPerSpan; for (const auto& lang : languages) { lang_counts_[lang] += score;
diff --git a/ui/accessibility/ax_language_detection.h b/ui/accessibility/ax_language_detection.h index 69401d7..d8424e5 100644 --- a/ui/accessibility/ax_language_detection.h +++ b/ui/accessibility/ax_language_detection.h
@@ -150,11 +150,11 @@ friend class AXLanguageDetectionTestFixture; // Store a count of the occurrences of a given language. - std::unordered_map<std::string, unsigned int> lang_counts_; + std::unordered_map<std::string, int> lang_counts_; // Cache of last calculated top language results. // A vector of pairs of (score, language) sorted by descending score. - std::vector<std::pair<unsigned int, std::string>> top_results_; + std::vector<std::pair<int, std::string>> top_results_; // Boolean recording that we have not mutated the statistics since last // calculating top results, setting this to false will cause recalculation
diff --git a/ui/accessibility/ax_role_properties.cc b/ui/accessibility/ax_role_properties.cc index 424e8ff..c72c580 100644 --- a/ui/accessibility/ax_role_properties.cc +++ b/ui/accessibility/ax_role_properties.cc
@@ -580,14 +580,7 @@ } bool IsTableColumn(ax::mojom::Role role) { - switch (role) { - case ax::mojom::Role::kColumn: - return true; - case ax::mojom::Role::kLayoutTableColumn: - return kExposeLayoutTableAsDataTable; - default: - return false; - } + return role == ax::mojom::Role::kColumn; } bool IsTableHeader(ax::mojom::Role role) {
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index 6f4e876..b44bb25 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -2710,8 +2710,6 @@ return ATK_ROLE_SECTION; case ax::mojom::Role::kLayoutTableCell: return ATK_ROLE_SECTION; - case ax::mojom::Role::kLayoutTableColumn: - return ATK_ROLE_SECTION; case ax::mojom::Role::kLayoutTableRow: return ATK_ROLE_SECTION; case ax::mojom::Role::kLineBreak:
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm index 28cdccef..e8b61cda 100644 --- a/ui/accessibility/platform/ax_platform_node_mac.mm +++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -143,7 +143,6 @@ {ax::mojom::Role::kLabelText, NSAccessibilityGroupRole}, {ax::mojom::Role::kLayoutTable, NSAccessibilityGroupRole}, {ax::mojom::Role::kLayoutTableCell, NSAccessibilityGroupRole}, - {ax::mojom::Role::kLayoutTableColumn, NSAccessibilityGroupRole}, {ax::mojom::Role::kLayoutTableRow, NSAccessibilityGroupRole}, {ax::mojom::Role::kLegend, NSAccessibilityGroupRole}, {ax::mojom::Role::kLineBreak, NSAccessibilityGroupRole},
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index 9e3aee6..9454688 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -4890,9 +4890,6 @@ case ax::mojom::Role::kLayoutTableCell: return ROLE_SYSTEM_CELL; - case ax::mojom::Role::kLayoutTableColumn: - return ROLE_SYSTEM_COLUMN; - case ax::mojom::Role::kLayoutTableRow: return ROLE_SYSTEM_ROW; @@ -5720,9 +5717,6 @@ case ax::mojom::Role::kLayoutTableCell: return L"gridcell"; - case ax::mojom::Role::kLayoutTableColumn: - return L"region"; - case ax::mojom::Role::kLayoutTableRow: return L"row"; @@ -6390,9 +6384,6 @@ case ax::mojom::Role::kLayoutTableCell: return UIA_DataItemControlTypeId; - case ax::mojom::Role::kLayoutTableColumn: - return UIA_PaneControlTypeId; - case ax::mojom::Role::kLayoutTableRow: return UIA_DataItemControlTypeId;
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java index db08c9fb..82df5d2b 100644 --- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java +++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
@@ -960,6 +960,11 @@ window.setAttributes(params); } + @CalledByNative + private boolean applyDisableSurfaceControlWorkaround() { + return mDisplayAndroid.applyDisableSurfaceControlWorkaround(); + } + @SuppressLint("NewApi") // mSupportedRefreshRateModes should only be set if Display.Mode is available. @TargetApi(Build.VERSION_CODES.M)
diff --git a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java index fbed317..2c11f783 100644 --- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java +++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java
@@ -20,7 +20,7 @@ * anywhere, as long as the corresponding WindowAndroids are destroyed. The observers are * held weakly so to not lead to leaks. */ -public class DisplayAndroid { +public abstract class DisplayAndroid { /** * DisplayAndroidObserver interface for changes to this Display. */ @@ -254,6 +254,8 @@ update(null, null, null, null, null, null, isDisplayServerWideColorGamut, null, null, null); } + public abstract boolean applyDisableSurfaceControlWorkaround(); + /** * Update the display to the provided parameters. Null values leave the parameter unchanged. */
diff --git a/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java b/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java index 516e3a86..53f2262 100644 --- a/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java +++ b/ui/android/java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java
@@ -23,12 +23,16 @@ */ /* package */ class PhysicalDisplayAndroid extends DisplayAndroid { private static final String TAG = "DisplayAndroid"; + private static final String SAMSUNG_DEX_DISPLAY = "Desktop"; // When this object exists, a positive value means that the forced DIP scale is set and // the zero means it is not. The non existing object (i.e. null reference) means that // the existence and value of the forced DIP scale has not yet been determined. private static Float sForcedDIPScale; + // This is a workaround for crbug.com/1042581. + private final boolean mDisableSurfaceControlWorkaround; + private static boolean hasForcedDIPScale() { if (sForcedDIPScale == null) { String forcedScaleAsString = CommandLine.getInstance().getSwitchValue( @@ -123,6 +127,7 @@ /* package */ PhysicalDisplayAndroid(Display display) { super(display.getDisplayId()); + mDisableSurfaceControlWorkaround = display.getName().equals(SAMSUNG_DEX_DISPLAY); } @SuppressWarnings("deprecation") @@ -162,4 +167,9 @@ bitsPerComponent(pixelFormatId), display.getRotation(), isWideColorGamut, null, display.getRefreshRate(), currentMode, supportedModes); } + + @Override + public boolean applyDisableSurfaceControlWorkaround() { + return mDisableSurfaceControlWorkaround; + } }
diff --git a/ui/android/java/src/org/chromium/ui/display/VirtualDisplayAndroid.java b/ui/android/java/src/org/chromium/ui/display/VirtualDisplayAndroid.java index 5719ba4..46cb4fb 100644 --- a/ui/android/java/src/org/chromium/ui/display/VirtualDisplayAndroid.java +++ b/ui/android/java/src/org/chromium/ui/display/VirtualDisplayAndroid.java
@@ -57,4 +57,9 @@ public void destroy() { getManager().removeVirtualDisplay(this); } + + @Override + public boolean applyDisableSurfaceControlWorkaround() { + return false; + } }
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/RENDER_TESTS.md b/ui/android/javatests/src/org/chromium/ui/test/util/RENDER_TESTS.md index 684601e..37f6a92 100644 --- a/ui/android/javatests/src/org/chromium/ui/test/util/RENDER_TESTS.md +++ b/ui/android/javatests/src/org/chromium/ui/test/util/RENDER_TESTS.md
@@ -2,7 +2,81 @@ ## Fixing a failing Render Test -### Failing on trybots +Which section applies to the test you are investigating is determined by whether +the test class is manually creating a RenderTestRule or using the +SkiaGoldBuilder. + +### Skia Gold Comparison + +The newer form of pixel comparison backed by +[Skia Gold](https://skia.org/dev/testing/skiagold). If a test is running in +this mode, there will be mentions of "Skia Gold" in the reported failure. + +#### Failing on trybots + +Anytime a patchset produces new golden images, Gold should automatically +comment on your CL with a link to the triage page. If it fails to do so (e.g. +your test is failing because it is producing an image that was explicitly +marked as negative/invalid by someone previously), you can do the following to +access the triage page manually: + +1. On the failed trybot run, locate and follow the `results_details` link under +the `chrome_public_test_apk` step to go to the **Suites Summary** page. +2. On the **Suites Summary** page, follow the link to the test suite that is +failing. +3. On the **Test Results of Suite** page, follow the links in the **log** column +corresponding to the renders mentioned in the failure stack trace. The links +will be named "Skia Gold triage link for entire CL". + +Once on the triage page, make sure you are logged in at the top-right. +Currently, only @google.com accounts work, but other domains such as +chromium.org can be whitelisted if requested. You should then be able to +triage any newly produced images. + +If the newly generated golden images are "breaking", i.e. it would be a +regression if Chrome continued to produce the old golden images (such as due +to a major UI change), you should **NOT** approve them as-is. + +Instead: +1. Increment the revision using SkiaGoldBuilders's `setRevision`. +1. If you would like to add a description of what the revision represents that +will be visible on the Gold triage page, add or modify a call to +SkiaGoldBuilder's `setDescription` +1. Upload the new patchset, re-run the tryjobs, and approve the new baselines. + +The revision increment is so that Gold separates any new golden images from any +that were produced before. It will affect **any** images produced using +RenderTestRule that had its revision incremented (i.e. any images produced in +that test class), so you may have to re-triage additional images. If there +are many images that need to be triaged, you can use the "Bulk Triage" option +in Gold under the "ACTIONS" menu item. + +#### Failing on CI bots + +If a test is failing on the CI bots, i.e. after a CL has already been merged, +you can perform the same steps as in the above section with the following +differences: + +1. You must manually find the triage links, as Gold has nowhere to post a +comment to. Alternatively, you can check for untriaged images directly in the +[gold instance](https://chrome-gold.skia.org). +2. Triage links are for specific images instead of for an entire CL, and are +thus named after the the render name. + +#### Failing locally + +Skia Gold does not allow you to update golden images from local runs. You will +still have access to the generated image, the closest golden image, and the diff +between them in the test results, but this is purely for local debugging. New +golden images must come from either trybots or CI bots. + +### Legacy/Local Pixel Comparison + +The older form of pixel comparison that does everything locally. If a test is +running in this mode, there will be no mention of "Skia Gold" in the reported +failure. + +#### Failing on trybots To investigate why a Render Test is failing on the trybots: @@ -46,7 +120,7 @@ `//chrome/test/data/android/manage_render_test_goldens.py`, otherwise the goldens for it will not be uploaded. -### Failing locally +#### Failing locally Follow the steps in [*Running the tests locally*](#running-the-tests-locally) below to generate renders. @@ -65,6 +139,22 @@ [RenderTestRule](https://cs.chromium.org/chromium/src/ui/android/javatests/src/org/chromium/ui/test/util/RenderTestRule.java) or [ChromeRenderTestRule](https://cs.chromium.org/chromium/src/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeRenderTestRule.java). +To enable use of Skia Gold for managing golden images, use +RenderTestRule.SkiaGoldBuilder instead of creating a +RenderTestRule manually. This will become the default eventually, but is still +going through the experimental stage. If you want maximum stability, prefer the +older approach for now. If you want an easier rebaselining process in exchange +for potentially running into some early growing pains, prefer the use of Skia +Gold. + +Rebaselining the old way requires downloading all new goldens locally, running +a script to upload them to a Google Storage bucket, and committing the updated +SHA1 files. Rebaselining via Gold is done entirely through a web UI. + +If you want to separate your baselines from the default `android-render-tests` +corpus in Gold, you can call `setCorpus()` on your +`SkiaGoldBuilder` instance before calling `build()`. + ### Running the tests locally When running instrumentation tests locally, pass the `--local-output` option to @@ -83,6 +173,9 @@ ### Generating golden images locally +**Note that this section only applies to tests running in the legacy/local pixel +comparison mode** + New golden images may be downloaded from the trybots or retrieved locally. This section elaborates how to do the latter.
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/RenderTestRule.java b/ui/android/javatests/src/org/chromium/ui/test/util/RenderTestRule.java index 85767c8..6201f812 100644 --- a/ui/android/javatests/src/org/chromium/ui/test/util/RenderTestRule.java +++ b/ui/android/javatests/src/org/chromium/ui/test/util/RenderTestRule.java
@@ -14,6 +14,8 @@ import android.view.ViewGroup; import android.widget.EditText; +import org.json.JSONException; +import org.json.JSONObject; import org.junit.Assert; import org.junit.rules.TestWatcher; import org.junit.runner.Description; @@ -28,6 +30,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -41,6 +44,45 @@ * A TestRule for creating Render Tests. An exception will be thrown after the test method completes * if the test fails. * + * Skia Gold/newer diffing approach: + * + * <pre> + * {@code + * + * @RunWith(BaseJUnit4ClassRunner.class) + * public class MyTest extends DummyUiActivityTestCase > + * @Rule + * public RenderTestRule mRenderTestRule = new RenderTestRule.SkiaGoldBuilder() + * // Optional, only necessary if you want your results to be kept in a different + * // corpus than the default. + * .setCorpus("android-render-tests-my-fancy-feature") + * // Optional, only necessary once a CL lands that should invalidate previous golden + * // images, e.g. a UI rework. + * .setRevision(2) + * // Optional, only necessary if you want a message to be associated with these + * // golden images and shown in the Gold web UI, e.g. the reason why the revision was + * // incremented. + * .setDescription("Material design rework") + * .build(); + * + * @Test + * // "RenderTest" feature still required. + * @Feature({"RenderTest"}) + * public void testViewAppearance() { + * // Setup the UI. + * ... + * + * // Render the UI Elements. + * mRenderTestRule.render(bigWidgetView, "big_widget"); + * mRenderTestRule.render(smallWidgetView, "small_widget"); + * } + * } + * + * } + * </pre> + * + * Legacy/local diffing approach: + * * <pre> * {@code * @@ -66,6 +108,7 @@ * * } * </pre> + * */ public class RenderTestRule extends TestWatcher { private static final String TAG = "RenderTest"; @@ -73,6 +116,7 @@ private static final String DIFF_FOLDER_RELATIVE = "/diffs"; private static final String FAILURE_FOLDER_RELATIVE = "/failures"; private static final String GOLDEN_FOLDER_RELATIVE = "/goldens"; + private static final String SKIA_GOLD_FOLDER_RELATIVE = "/skia_gold"; /** * This is a list of model-SDK version identifiers for devices we maintain golden images for. @@ -105,6 +149,11 @@ private Map<String, DiffReport> mMismatchReports = new HashMap<>(); + private boolean mUseSkiaGold; + private String mSkiaGoldCorpus; + private int mSkiaGoldRevision; + private String mSkiaGoldRevisionDescription; + /** * An exception thrown after a Render Test if images do not match the goldens or goldens are * missing on a render test device. @@ -123,6 +172,21 @@ mOutputFolder = CommandLine.getInstance().getSwitchValue("render-test-output-dir"); } + // Skia Gold-specific constructor used by the builder. + protected RenderTestRule(int revision, String corpus, String description) { + assert revision >= 0; + + mUseSkiaGold = true; + mSkiaGoldCorpus = (corpus == null) ? "android-render-tests" : corpus; + mSkiaGoldRevisionDescription = description; + mSkiaGoldRevision = revision; + + // The output folder can be overridden with the --render-test-output-dir command. + mOutputFolder = CommandLine.getInstance().getSwitchValue("render-test-output-dir"); + // Unused when using Skia Gold, but compiler complains about it being uninitialized. + mGoldenFolder = null; + } + @Override protected void starting(Description desc) { // desc.getClassName() gets the fully qualified name. @@ -177,7 +241,34 @@ public void compareForResult(Bitmap testBitmap, String id) throws IOException { Assert.assertTrue("Render Tests must have the RenderTest feature.", mHasRenderTestFeature); - String filename = imageName(mTestClassName, mVariantPrefix, id); + if (mUseSkiaGold) { + compareForResultSkiaGold(testBitmap, id); + } else { + compareForResultLocal(testBitmap, id); + } + } + + public void compareForResultSkiaGold(Bitmap testBitmap, String id) throws IOException { + // Save the image and its metadata to a location where it can be pulled by the test runner + // for comparison after the test finishes. + String imageName = getImageName(mTestClassName, mVariantPrefix, id); + String jsonName = getJsonName(mTestClassName, mVariantPrefix, id); + + saveBitmap(testBitmap, createOutputPath(SKIA_GOLD_FOLDER_RELATIVE, imageName)); + JSONObject goldKeys = new JSONObject(); + try { + goldKeys.put("source_type", mSkiaGoldCorpus); + if (!TextUtils.isEmpty(mSkiaGoldRevisionDescription)) { + goldKeys.put("revision_description", mSkiaGoldRevisionDescription); + } + } catch (JSONException e) { + Assert.fail("Failed to create Skia Gold JSON keys: " + e.toString()); + } + saveString(goldKeys.toString(), createOutputPath(SKIA_GOLD_FOLDER_RELATIVE, jsonName)); + } + + public void compareForResultLocal(Bitmap testBitmap, String id) throws IOException { + String filename = getImageName(mTestClassName, mVariantPrefix, id); BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = testBitmap.getConfig(); @@ -304,11 +395,27 @@ /** * Creates an image name combining the image description with details about the device * (eg model, current orientation). + */ + private String getImageName(String testClass, String variantPrefix, String desc) { + return String.format("%s.png", getFileName(testClass, variantPrefix, desc)); + } + + /** + * Creates a JSON name combining the description with details about the device (e.g. model, + * current orientation). + */ + private String getJsonName(String testClass, String variantPrefix, String desc) { + return String.format("%s.json", getFileName(testClass, variantPrefix, desc)); + } + + /** + * Creates a generic filename (without a file extension) combining the description with details + * about the device (e.g. model, current orientation). * * This function must be kept in sync with |RE_RENDER_IMAGE_NAME| from * src/build/android/pylib/local/device/local_device_instrumentation_test_run.py. */ - private String imageName(String testClass, String variantPrefix, String desc) { + private String getFileName(String testClass, String variantPrefix, String desc) { if (!TextUtils.isEmpty(mNightModePrefix)) { desc = mNightModePrefix + "-" + desc; } @@ -317,8 +424,12 @@ desc = variantPrefix + "-" + desc; } - return String.format( - Locale.getDefault(), "%s.%s.%s.png", testClass, desc, modelSdkIdentifier()); + if (mUseSkiaGold) { + return String.format( + "%s.%s.%s.rev_%s", testClass, desc, modelSdkIdentifier(), mSkiaGoldRevision); + } + + return String.format("%s.%s.%s", testClass, desc, modelSdkIdentifier()); } /** @@ -341,6 +452,15 @@ } /** + * Saves the given |string| to the |file|. + */ + private static void saveString(String string, File file) throws IOException { + try (PrintWriter out = new PrintWriter(file)) { + out.println(string); + } + } + + /** * Convenience method to create a File pointing to |filename| in |mGoldenFolder|. */ private File createGoldenPath(String filename) throws IOException { @@ -367,6 +487,34 @@ } /** + * Builder to create a RenderTestRule for use with Skia Gold. + */ + public static class SkiaGoldBuilder { + private int mRevision; + private String mCorpus; + private String mDescription; + + public SkiaGoldBuilder setRevision(int revision) { + mRevision = revision; + return this; + } + + public SkiaGoldBuilder setCorpus(String corpus) { + mCorpus = corpus; + return this; + } + + public SkiaGoldBuilder setDescription(String description) { + mDescription = description; + return this; + } + + public RenderTestRule build() { + return new RenderTestRule(mRevision, mCorpus, mDescription); + } + } + + /** * Compares two Bitmaps. * @return A pair of DiffReport and Bitmap. If the DiffReport.mResult is MISMATCH or MATCH, * the Bitmap will be a generated pixel-by-pixel difference.
diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc index 6c761b5..c7d8d996 100644 --- a/ui/android/window_android.cc +++ b/ui/android/window_android.cc
@@ -254,6 +254,12 @@ Java_WindowAndroid_setPreferredRefreshRate(env, GetJavaObject(), 60.f); } +bool WindowAndroid::ApplyDisableSurfaceControlWorkaround() { + JNIEnv* env = AttachCurrentThread(); + return Java_WindowAndroid_applyDisableSurfaceControlWorkaround( + env, GetJavaObject()); +} + bool WindowAndroid::HasPermission(const std::string& permission) { JNIEnv* env = AttachCurrentThread(); return Java_WindowAndroid_hasPermission(
diff --git a/ui/android/window_android.h b/ui/android/window_android.h index b5781ba..21aa04c 100644 --- a/ui/android/window_android.h +++ b/ui/android/window_android.h
@@ -112,6 +112,8 @@ void SetForce60HzRefreshRate(); + bool ApplyDisableSurfaceControlWorkaround(); + class TestHooks { public: virtual ~TestHooks() = default;
diff --git a/ui/aura/DEPS b/ui/aura/DEPS index df859b2a..06cfc00 100644 --- a/ui/aura/DEPS +++ b/ui/aura/DEPS
@@ -27,4 +27,7 @@ "native_window_occlusion_tracker_win_interactive_test\.cc": [ "+mojo/core/embedder/embedder.h", ], + "window_event_dispatcher_unittest\.cc": [ + "+ui/wm/core", + ], }
diff --git a/ui/aura/client/default_capture_client.cc b/ui/aura/client/default_capture_client.cc index 0ce9d550..963dbcc0 100644 --- a/ui/aura/client/default_capture_client.cc +++ b/ui/aura/client/default_capture_client.cc
@@ -21,15 +21,14 @@ DefaultCaptureClient::DefaultCaptureClient(Window* root_window) : root_window_(root_window), capture_window_(nullptr) { - if (root_window_) - SetCaptureClient(root_window_, this); + DCHECK(root_window_); + SetCaptureClient(root_window_, this); } DefaultCaptureClient::~DefaultCaptureClient() { if (global_capture_window_ == capture_window_) global_capture_window_ = nullptr; - if (root_window_) - SetCaptureClient(root_window_, nullptr); + SetCaptureClient(root_window_, nullptr); } void DefaultCaptureClient::SetCapture(Window* window) {
diff --git a/ui/aura/client/default_capture_client.h b/ui/aura/client/default_capture_client.h index 7ca3e47..b498701 100644 --- a/ui/aura/client/default_capture_client.h +++ b/ui/aura/client/default_capture_client.h
@@ -15,7 +15,7 @@ class AURA_EXPORT DefaultCaptureClient : public client::CaptureClient { public: - explicit DefaultCaptureClient(Window* root_window = nullptr); + explicit DefaultCaptureClient(Window* root_window); ~DefaultCaptureClient() override; protected:
diff --git a/ui/aura/native_window_occlusion_tracker_win.cc b/ui/aura/native_window_occlusion_tracker_win.cc index b19207d4..6310b83e 100644 --- a/ui/aura/native_window_occlusion_tracker_win.cc +++ b/ui/aura/native_window_occlusion_tracker_win.cc
@@ -130,10 +130,19 @@ } NativeWindowOcclusionTrackerWin::~NativeWindowOcclusionTrackerWin() { - // |occlusion_calculator_| must be deleted on its sequence because it needs - // to unregister event hooks on COMSTA thread. // This code is intended to be used in tests and shouldn't be reached in - // production code because it blocks the main thread. + // production. + + // The occlusion tracker should be destroyed after all windows; window + // destructors should call Disable() and thus remove them from the map, so by + // the time we reach here the map should be empty. (Proceeding with a + // non-empty map would result in CheckedObserver failure since any remaining + // windows still have the tracker as a registered observer.) + DCHECK(hwnd_root_window_map_.empty()) + << "Occlusion tracker torn down while a Window still exists"; + + // |occlusion_calculator_| must be deleted on its sequence because it needs + // to unregister event hooks on COMSTA thread. This blocks the main thread. base::WaitableEvent done_event; update_occlusion_task_runner_->PostTask( FROM_HERE,
diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h index dfd9724..4f8e58d 100644 --- a/ui/aura/test/aura_test_base.h +++ b/ui/aura/test/aura_test_base.h
@@ -14,6 +14,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/env.h" #include "ui/aura/test/aura_test_helper.h" +#include "ui/aura/window_tree_host.h" #if defined(OS_WIN) #include "base/win/scoped_com_initializer.h" @@ -53,11 +54,11 @@ // Returns whether |event| was handled. bool DispatchEventUsingWindowDispatcher(ui::Event* event); - Window* root_window() { return helper_->root_window(); } - WindowTreeHost* host() { return helper_->host(); } - ui::EventSink* event_sink() { return helper_->event_sink(); } - TestScreen* test_screen() { return helper_->test_screen(); } - client::FocusClient* focus_client() { return helper_->focus_client(); } + Window* root_window() { return helper_->GetContext(); } + WindowTreeHost* host() { return helper_->GetHost(); } + ui::EventSink* event_sink() { return host()->event_sink(); } + TestScreen* test_screen() { return helper_->GetTestScreen(); } + client::FocusClient* focus_client() { return helper_->GetFocusClient(); } private: base::test::TaskEnvironment task_environment_;
diff --git a/ui/aura/test/aura_test_helper.cc b/ui/aura/test/aura_test_helper.cc index a1775c2..daeca12 100644 --- a/ui/aura/test/aura_test_helper.cc +++ b/ui/aura/test/aura_test_helper.cc
@@ -20,6 +20,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_targeter.h" +#include "ui/aura/window_tree_host.h" #include "ui/base/ime/init/input_method_factory.h" #include "ui/base/ime/init/input_method_initializer.h" #include "ui/compositor/compositor.h" @@ -83,7 +84,6 @@ wm_state_ = std::make_unique<wm::WMState>(); // Needs to be before creating WindowTreeClient. focus_client_ = std::make_unique<TestFocusClient>(); - capture_client_ = std::make_unique<client::DefaultCaptureClient>(); if (!env) { // Some tests suites create Env globally rather than per test. @@ -122,14 +122,14 @@ host_.reset(test_screen_->CreateHostForPrimaryDisplay()); host_->window()->SetEventTargeter(std::make_unique<WindowTargeter>()); - client::SetFocusClient(root_window(), focus_client_.get()); - client::SetCaptureClient(root_window(), capture_client()); - parenting_client_ = - std::make_unique<TestWindowParentingClient>(root_window()); + Window* root_window = GetContext(); + client::SetFocusClient(root_window, focus_client_.get()); + capture_client_ = std::make_unique<client::DefaultCaptureClient>(root_window); + parenting_client_ = std::make_unique<TestWindowParentingClient>(root_window); - root_window()->Show(); + root_window->Show(); // Ensure width != height so tests won't confuse them. - host()->SetBoundsInPixels(gfx::Rect(host_size)); + host_->SetBoundsInPixels(gfx::Rect(host_size)); g_instance = this; } @@ -138,8 +138,8 @@ g_instance = nullptr; teardown_called_ = true; parenting_client_.reset(); - client::SetFocusClient(root_window(), nullptr); - client::SetCaptureClient(root_window(), nullptr); + client::SetFocusClient(GetContext(), nullptr); + capture_client_.reset(); host_.reset(); if (display::Screen::GetScreen() == test_screen_.get()) @@ -147,7 +147,6 @@ test_screen_.reset(); focus_client_.reset(); - capture_client_.reset(); ui::ShutdownInputMethodForTesting(); @@ -180,7 +179,23 @@ run_loop.RunUntilIdle(); } -client::CaptureClient* AuraTestHelper::capture_client() { +Window* AuraTestHelper::GetContext() { + return host_ ? host_->window() : nullptr; +} + +WindowTreeHost* AuraTestHelper::GetHost() { + return host_.get(); +} + +TestScreen* AuraTestHelper::GetTestScreen() { + return test_screen_.get(); +} + +client::FocusClient* AuraTestHelper::GetFocusClient() { + return focus_client_.get(); +} + +client::CaptureClient* AuraTestHelper::GetCaptureClient() { return capture_client_.get(); }
diff --git a/ui/aura/test/aura_test_helper.h b/ui/aura/test/aura_test_helper.h index 83b758fe..d07555a0 100644 --- a/ui/aura/test/aura_test_helper.h +++ b/ui/aura/test/aura_test_helper.h
@@ -10,7 +10,6 @@ #include "base/macros.h" #include "build/build_config.h" #include "ui/aura/window_event_dispatcher.h" -#include "ui/aura/window_tree_host.h" namespace ui { class ContextFactory; @@ -26,6 +25,7 @@ class Env; class TestScreen; class Window; +class WindowTreeHost; namespace client { class CaptureClient; @@ -57,14 +57,11 @@ // Flushes message loop. void RunAllPendingInMessageLoop(); - Window* root_window() { return host_ ? host_->window() : nullptr; } - ui::EventSink* event_sink() { return host_->event_sink(); } - WindowTreeHost* host() { return host_.get(); } - - TestScreen* test_screen() { return test_screen_.get(); } - - client::FocusClient* focus_client() { return focus_client_.get(); } - client::CaptureClient* capture_client(); + Window* GetContext(); + WindowTreeHost* GetHost(); + TestScreen* GetTestScreen(); + client::FocusClient* GetFocusClient(); + client::CaptureClient* GetCaptureClient(); Env* GetEnv();
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc index b6d3e68..49bfbd9 100644 --- a/ui/aura/window_event_dispatcher_unittest.cc +++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -47,6 +47,7 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/transform.h" #include "ui/platform_window/platform_window_init_properties.h" +#include "ui/wm/core/capture_controller.h" namespace aura { namespace { @@ -2795,40 +2796,49 @@ ui::PlatformWindowInitProperties{gfx::Rect(20, 30, 100, 50)}); second_host->InitHost(); second_host->window()->Show(); - client::SetCaptureClient(second_host->window(), - client::GetCaptureClient(root_window())); - test::EventCountDelegate delegate; - std::unique_ptr<Window> window_first(CreateTestWindowWithDelegate( - &delegate, 123, gfx::Rect(20, 10, 10, 20), root_window())); - window_first->Show(); + // AuraTestBase sets up a DefaultCaptureClient for root_window(), but that + // can't deal with capture between different root windows. Instead we need to + // use the wm::CaptureController instance that also exists, which can handle + // this situation. Exchange the capture clients and put the old one back at + // the end. + client::CaptureClient* const old_capture_client = + client::GetCaptureClient(root_window()); + { + wm::ScopedCaptureClient scoped_capture_first(root_window()); + wm::ScopedCaptureClient scoped_capture_second(second_host->window()); - std::unique_ptr<Window> window_second(CreateTestWindowWithDelegate( - &delegate, 12, gfx::Rect(10, 10, 20, 30), second_host->window())); - window_second->Show(); + test::EventCountDelegate delegate; + std::unique_ptr<Window> window_first(CreateTestWindowWithDelegate( + &delegate, 123, gfx::Rect(20, 10, 10, 20), root_window())); + window_first->Show(); - window_second->SetCapture(); - EXPECT_EQ(window_second.get(), - client::GetCaptureWindow(root_window())); + std::unique_ptr<Window> window_second(CreateTestWindowWithDelegate( + &delegate, 12, gfx::Rect(10, 10, 20, 30), second_host->window())); + window_second->Show(); - // Send an event to the first host. Make sure it goes to |window_second| in - // |second_host| instead (since it has capture). - EventFilterRecorder recorder_first; - window_first->AddPreTargetHandler(&recorder_first); - EventFilterRecorder recorder_second; - window_second->AddPreTargetHandler(&recorder_second); - const gfx::Point event_location(25, 15); - ui::MouseEvent mouse(ui::ET_MOUSE_PRESSED, event_location, event_location, - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - DispatchEventUsingWindowDispatcher(&mouse); - EXPECT_TRUE(recorder_first.events().empty()); - ASSERT_EQ(1u, recorder_second.events().size()); - EXPECT_EQ(ui::ET_MOUSE_PRESSED, recorder_second.events()[0]); - EXPECT_EQ(event_location.ToString(), - recorder_second.mouse_locations()[0].ToString()); - window_first->RemovePreTargetHandler(&recorder_first); - window_second->RemovePreTargetHandler(&recorder_second); + window_second->SetCapture(); + + // Send an event to the first host. Make sure it goes to |window_second| in + // |second_host| instead (since it has capture). + EventFilterRecorder recorder_first; + window_first->AddPreTargetHandler(&recorder_first); + EventFilterRecorder recorder_second; + window_second->AddPreTargetHandler(&recorder_second); + const gfx::Point event_location(25, 15); + ui::MouseEvent mouse(ui::ET_MOUSE_PRESSED, event_location, event_location, + ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, + ui::EF_LEFT_MOUSE_BUTTON); + DispatchEventUsingWindowDispatcher(&mouse); + EXPECT_TRUE(recorder_first.events().empty()); + ASSERT_EQ(1u, recorder_second.events().size()); + EXPECT_EQ(ui::ET_MOUSE_PRESSED, recorder_second.events()[0]); + EXPECT_EQ(event_location.ToString(), + recorder_second.mouse_locations()[0].ToString()); + window_first->RemovePreTargetHandler(&recorder_first); + window_second->RemovePreTargetHandler(&recorder_second); + } + client::SetCaptureClient(root_window(), old_capture_client); } class AsyncWindowDelegate : public test::TestWindowDelegate {
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn index 33b8a3b..f93a4af8 100644 --- a/ui/base/BUILD.gn +++ b/ui/base/BUILD.gn
@@ -680,6 +680,25 @@ "//ui/gfx", "//ui/snapshot", ] + + if (!is_fuchsia) { + data_deps = [ ":goldctl" ] + } + } + + group("goldctl") { + data = [] + + # Because this links to a CIPD dependency, which is a symlink on Unix + # platforms, refer to the actual executable rather than the whole directory; + # copying the whole directory doesn't work, at least with "mb.py zip". + if (is_win) { + data += [ "//tools/skia_goldctl/win/goldctl.exe" ] + } else if (is_mac) { + data += [ "//tools/skia_goldctl/mac/goldctl" ] + } else { + data += [ "//tools/skia_goldctl/linux/goldctl" ] + } } }
diff --git a/ui/base/ime/chromeos/input_method_chromeos.cc b/ui/base/ime/chromeos/input_method_chromeos.cc index b1cd1e0..707aa88 100644 --- a/ui/base/ime/chromeos/input_method_chromeos.cc +++ b/ui/base/ime/chromeos/input_method_chromeos.cc
@@ -254,8 +254,7 @@ // |surrounding_text| coordinates. if (GetEngine()) { GetEngine()->SetSurroundingText( - base::UTF16ToUTF8(surrounding_text), - selection_range.start() - text_range.start(), + surrounding_text, selection_range.start() - text_range.start(), selection_range.end() - text_range.start(), text_range.start()); } }
diff --git a/ui/base/ime/chromeos/input_method_chromeos_unittest.cc b/ui/base/ime/chromeos/input_method_chromeos_unittest.cc index 5ce2721..11fd2fc 100644 --- a/ui/base/ime/chromeos/input_method_chromeos_unittest.cc +++ b/ui/base/ime/chromeos/input_method_chromeos_unittest.cc
@@ -205,7 +205,7 @@ MOCK_METHOD1(FocusIn, void(const InputContext&)); MOCK_METHOD0(FocusOut, void()); MOCK_METHOD4(SetSurroundingText, - void(const std::string&, uint32_t, uint32_t, uint32_t)); + void(const base::string16&, uint32_t, uint32_t, uint32_t)); }; class InputMethodChromeOSTest : public internal::InputMethodDelegate, @@ -782,7 +782,7 @@ // Check the call count. EXPECT_EQ(1, mock_ime_engine_handler_->set_surrounding_text_call_count()); - EXPECT_EQ(UTF16ToUTF8(surrounding_text_), + EXPECT_EQ(surrounding_text_, mock_ime_engine_handler_->last_set_surrounding_text()); EXPECT_EQ(3U, mock_ime_engine_handler_->last_set_surrounding_cursor_pos()); @@ -808,7 +808,7 @@ // Check the call count. EXPECT_EQ(1, mock_ime_engine_handler_->set_surrounding_text_call_count()); - EXPECT_EQ(UTF16ToUTF8(surrounding_text_), + EXPECT_EQ(surrounding_text_, mock_ime_engine_handler_->last_set_surrounding_text()); EXPECT_EQ(2U, mock_ime_engine_handler_->last_set_surrounding_cursor_pos()); @@ -833,7 +833,7 @@ mock_ime_engine_handler_->set_surrounding_text_call_count()); // Set the verifier for SetSurroundingText mock call. // Here (2, 4) is selection range in expected surrounding text coordinates. - EXPECT_EQ("fghij", + EXPECT_EQ(base::UTF8ToUTF16("fghij"), mock_ime_engine_handler_->last_set_surrounding_text()); EXPECT_EQ(2U, mock_ime_engine_handler_->last_set_surrounding_cursor_pos());
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.cc b/ui/base/ime/chromeos/mock_ime_engine_handler.cc index 8d3d2db..e0b3eeb6 100644 --- a/ui/base/ime/chromeos/mock_ime_engine_handler.cc +++ b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
@@ -61,7 +61,7 @@ void MockIMEEngineHandler::CandidateClicked(uint32_t index) {} -void MockIMEEngineHandler::SetSurroundingText(const std::string& text, +void MockIMEEngineHandler::SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) {
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.h b/ui/base/ime/chromeos/mock_ime_engine_handler.h index 8af256d..988957c0 100644 --- a/ui/base/ime/chromeos/mock_ime_engine_handler.h +++ b/ui/base/ime/chromeos/mock_ime_engine_handler.h
@@ -32,7 +32,7 @@ void SetCompositionBounds(const std::vector<gfx::Rect>& bounds) override; void PropertyActivate(const std::string& property_name) override; void CandidateClicked(uint32_t index) override; - void SetSurroundingText(const std::string& text, + void SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) override; @@ -59,7 +59,7 @@ return last_activated_property_; } - std::string last_set_surrounding_text() const { + base::string16 last_set_surrounding_text() const { return last_set_surrounding_text_; } @@ -87,7 +87,7 @@ int reset_call_count_; InputContext last_text_input_context_; std::string last_activated_property_; - std::string last_set_surrounding_text_; + base::string16 last_set_surrounding_text_; uint32_t last_set_surrounding_cursor_pos_; uint32_t last_set_surrounding_anchor_pos_; std::unique_ptr<ui::KeyEvent> last_processed_key_event_;
diff --git a/ui/base/ime/ime_engine_handler_interface.h b/ui/base/ime/ime_engine_handler_interface.h index 2b109047..4eb49c6 100644 --- a/ui/base/ime/ime_engine_handler_interface.h +++ b/ui/base/ime/ime_engine_handler_interface.h
@@ -106,7 +106,7 @@ // selection range, |anchor_pos| represents opposite index from |cursor_pos|. // Otherwise |anchor_pos| is equal to |cursor_pos|. If not all surrounding // text is given |offset_pos| indicates the starting offset of |text|. - virtual void SetSurroundingText(const std::string& text, + virtual void SetSurroundingText(const base::string16& text, uint32_t cursor_pos, uint32_t anchor_pos, uint32_t offset_pos) = 0;
diff --git a/ui/color/color_id.h b/ui/color/color_id.h index 7b47c956..ea3a947 100644 --- a/ui/color/color_id.h +++ b/ui/color/color_id.h
@@ -108,6 +108,8 @@ NativeTheme::kColorId_TextfieldReadOnlyBackground) \ E(kColorTextfieldDisabledForeground, \ NativeTheme::kColorId_TextfieldReadOnlyColor) \ + E(kColorTextfieldPlaceholderForeground, \ + NativeTheme::kColorId_TextfieldPlaceholderColor) \ E(kColorTextfieldForeground, NativeTheme::kColorId_TextfieldDefaultColor) \ E(kColorTextfieldSelectionBackground, \ NativeTheme::kColorId_TextfieldSelectionBackgroundFocused) \
diff --git a/ui/color/ui_color_mixer.cc b/ui/color/ui_color_mixer.cc index babfa02..e7864a3 100644 --- a/ui/color/ui_color_mixer.cc +++ b/ui/color/ui_color_mixer.cc
@@ -74,6 +74,8 @@ GetColorWithMaxContrast(kColorTextfieldForeground); mixer[kColorTextfieldDisabledBackground] = {kColorPrimaryBackground}; mixer[kColorTextfieldDisabledForeground] = {kColorDisabledForeground}; + mixer[kColorTextfieldPlaceholderForeground] = { + kColorTextfieldDisabledForeground}; mixer[kColorTextfieldForeground] = {kColorPrimaryForeground}; mixer[kColorTextfieldSelectionBackground] = {kColorTextSelectionBackground}; mixer[kColorTextfieldSelectionForeground] = {kColorTextfieldForeground};
diff --git a/ui/display/win/screen_win.cc b/ui/display/win/screen_win.cc index a087d37..81ecf6c 100644 --- a/ui/display/win/screen_win.cc +++ b/ui/display/win/screen_win.cc
@@ -171,14 +171,12 @@ std::vector<DisplayInfo> FindAndRemoveTouchingDisplayInfos( const DisplayInfo& parent_info, std::vector<DisplayInfo>* display_infos) { - std::vector<DisplayInfo> touching_display_infos; - base::EraseIf(*display_infos, [&](const auto& display_info) { - if (DisplayInfosTouch(parent_info, display_info)) { - touching_display_infos.push_back(display_info); - return true; - } - return false; - }); + const auto first_touching_it = std::partition( + display_infos->begin(), display_infos->end(), + [&](const auto& info) { return !DisplayInfosTouch(parent_info, info); }); + std::vector<DisplayInfo> touching_display_infos(first_touching_it, + display_infos->end()); + display_infos->erase(first_touching_it, display_infos->end()); return touching_display_infos; } @@ -629,9 +627,8 @@ bool ScreenWin::IsWindowUnderCursor(gfx::NativeWindow window) { POINT cursor_loc; - HWND hwnd = - ::GetCursorPos(&cursor_loc) ? ::WindowFromPoint(cursor_loc) : nullptr; - return GetNativeWindowFromHWND(hwnd) == window; + return ::GetCursorPos(&cursor_loc) && + (GetNativeWindowFromHWND(::WindowFromPoint(cursor_loc)) == window); } gfx::NativeWindow ScreenWin::GetWindowAtScreenPoint(const gfx::Point& point) { @@ -754,18 +751,12 @@ // The color profile reader will often just confirm that our guess that the // color profile was sRGB was indeed correct. Avoid doing an update in these // cases. - bool changed = false; - for (const auto& display : displays_) { - if (display.color_spaces().GetRasterColorSpace() != - color_profile_reader_->GetDisplayColorSpace(display.id())) { - changed = true; - break; - } - } - if (!changed) - return; - - UpdateAllDisplaysAndNotify(); + if (std::any_of( + displays_.cbegin(), displays_.cend(), [this](const auto& display) { + return display.color_spaces().GetRasterColorSpace() != + color_profile_reader_->GetDisplayColorSpace(display.id()); + })) + UpdateAllDisplaysAndNotify(); } void ScreenWin::UpdateAllDisplaysAndNotify() { @@ -804,20 +795,14 @@ ScreenWinDisplay ScreenWin::GetScreenWinDisplayNearestDIPRect( const gfx::Rect& dip_rect) const { - ScreenWinDisplay closest_screen_win_display; - int64_t closest_distance = INT64_MAX; - for (const auto& screen_win_display : screen_win_displays_) { - Display display = screen_win_display.display(); - gfx::Rect dip_bounds = display.bounds(); - if (dip_rect.Intersects(dip_bounds)) - return screen_win_display; - int64_t distance = SquaredDistanceBetweenRects(dip_rect, dip_bounds); - if (distance < closest_distance) { - closest_distance = distance; - closest_screen_win_display = screen_win_display; - } - } - return closest_screen_win_display; + const auto first_closer = [dip_rect](const auto& display1, + const auto& display2) { + return SquaredDistanceBetweenRects(dip_rect, display1.display().bounds()) < + SquaredDistanceBetweenRects(dip_rect, display2.display().bounds()); + }; + const auto it = std::min_element(screen_win_displays_.cbegin(), + screen_win_displays_.cend(), first_closer); + return (it == screen_win_displays_.cend()) ? ScreenWinDisplay() : *it; } ScreenWinDisplay ScreenWin::GetPrimaryScreenWinDisplay() const { @@ -831,15 +816,14 @@ ScreenWinDisplay ScreenWin::GetScreenWinDisplay( const MONITORINFOEX& monitor_info) const { const int64_t id = DisplayInfo::DeviceIdFromDeviceName(monitor_info.szDevice); - for (const auto& screen_win_display : screen_win_displays_) { - if (screen_win_display.display().id() == id) - return screen_win_display; - } + const auto it = std::find_if( + screen_win_displays_.cbegin(), screen_win_displays_.cend(), + [id](const auto& display) { return display.display().id() == id; }); // There is 1:1 correspondence between MONITORINFOEX and ScreenWinDisplay. // If we found no screens, either there are no screens, or we're in the midst // of updating our screens (see crbug.com/768845); either way, hand out the // default display. - return ScreenWinDisplay(); + return (it == screen_win_displays_.cend()) ? ScreenWinDisplay() : *it; } // static
diff --git a/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js b/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js index 02c582e..fad76aa6 100644 --- a/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js +++ b/ui/file_manager/file_manager/background/js/runtime_loaded_test_util.js
@@ -15,6 +15,16 @@ * styles:(Object<string>|undefined), * hidden:boolean, * hasShadowRoot: boolean, + * imageWidth: (number|undefined), + * imageHeight: (number|undefined), + * renderedWidth: (number|undefined), + * renderedHeight: (number|undefined), + * renderedTop: (number|undefined), + * renderedLeft: (number|undefined), + * scrollLeft: (number|undefined), + * scrollTop: (number|undefined), + * scrollWidth: (number|undefined), + * scrollHeight: (number|undefined), * }} */ let ElementObject;
diff --git a/ui/file_manager/file_manager/foreground/css/file_manager.css b/ui/file_manager/file_manager/foreground/css/file_manager.css index da18ebe2..ca11743f 100644 --- a/ui/file_manager/file_manager/foreground/css/file_manager.css +++ b/ui/file_manager/file_manager/foreground/css/file_manager.css
@@ -436,6 +436,10 @@ width: 32px; } +html.pointer-active body.files-ng div.splitter:not(.splitter-active):hover { + cursor: default; +} + body.files-ng div.splitter.splitter-active .splitter-button:hover { --hover-bg-color: none; } @@ -444,6 +448,11 @@ --hover-bg-color: none; } +html.pointer-active body.files-ng div.splitter:not(.splitter-active) .splitter-button:not(:active):hover { + --hover-bg-color: none; + cursor: default; +} + body.files-ng div.splitter.splitter-active .splitter-button:not(:active) { background-color: rgba(var(--google-grey-300-rgb), 88%); } @@ -465,6 +474,11 @@ background-color: var(--google-grey-500); } +html.pointer-active body.files-ng div.splitter:not(.splitter-active) .splitter-button:not(:active):hover .icon { + background-color: var(--google-grey-300); + cursor: default; +} + body.files-ng div.splitter.splitter-active .splitter-button .icon { background-color: var(--google-grey-500); } @@ -1072,12 +1086,18 @@ display: none; } -#search-box.has-cursor, -#search-box.has-text, -#search-box.hide-pending { +.dialog-header:not(.files-ng) #search-box.has-cursor, +.dialog-header:not(.files-ng) #search-box.has-text, +.dialog-header:not(.files-ng) #search-box.hide-pending { margin-inline-end: 12px; } +.dialog-header.files-ng #search-box.has-cursor, +.dialog-header.files-ng #search-box.has-text, +.dialog-header.files-ng #search-box.hide-pending { + margin-inline-end: 6px; +} + .dialog-header:not(.files-ng) #search-box.has-cursor cr-input, .dialog-header:not(.files-ng) #search-box.has-text cr-input, .dialog-header:not(.files-ng) #search-box.hide-pending cr-input { @@ -1087,7 +1107,8 @@ .dialog-header.files-ng #search-box.has-cursor cr-input, .dialog-header.files-ng #search-box.has-text cr-input, .dialog-header.files-ng #search-box.hide-pending cr-input { - width: calc(288px - 60px); + --cr-input-width: calc(288px - 74px); + width: calc(288px - 54px); } #search-box .clear {
diff --git a/ui/file_manager/file_manager/foreground/elements/files_tooltip.js b/ui/file_manager/file_manager/foreground/elements/files_tooltip.js index 3dbda24..d090582 100644 --- a/ui/file_manager/file_manager/foreground/elements/files_tooltip.js +++ b/ui/file_manager/file_manager/foreground/elements/files_tooltip.js
@@ -64,8 +64,9 @@ * Adds an event listener to the body. */ attached: function() { - document.body.addEventListener( - 'mousedown', this.onDocumentMouseDown_.bind(this)); + const closeTooltipHandler = this.onDocumentMouseDown_.bind(this); + document.body.addEventListener('mousedown', closeTooltipHandler); + window.addEventListener('resize', closeTooltipHandler); }, /** @@ -142,8 +143,8 @@ if (this.hideTooltipTimerId_) { clearTimeout(this.hideTooltipTimerId_); } - this.hideTooltipTimerId_ = setTimeout( - this.hideTooltip_.bind(this), this.hideTimeout); + this.hideTooltipTimerId_ = + setTimeout(this.hideTooltip_.bind(this), this.hideTimeout); }, /** @@ -243,5 +244,5 @@ clearTimeout(this.showTooltipTimerId_); this.showTooltipTimerId_ = 0; } - } + }, });
diff --git a/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js b/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js index 8bd9b34..1a572ed4 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js +++ b/ui/file_manager/file_manager/foreground/js/ui/breadcrumb.js
@@ -11,6 +11,10 @@ display: none !important; } + :host-context(html.col-resize) > * { + cursor: unset !important; + } + :host { display: flex; font-family: 'Roboto Medium'; @@ -27,7 +31,6 @@ -webkit-mask-position: center; -webkit-mask-repeat: no-repeat; background-color: currentColor; - cursor: default; display: inline-flex; height: 20px; padding: 8px 0;
diff --git a/ui/file_manager/integration_tests/file_manager/BUILD.gn b/ui/file_manager/integration_tests/file_manager/BUILD.gn index 9d40e30..3110468 100644 --- a/ui/file_manager/integration_tests/file_manager/BUILD.gn +++ b/ui/file_manager/integration_tests/file_manager/BUILD.gn
@@ -8,6 +8,12 @@ testonly = true deps = [ ":background", + ":breadcrumbs", + ":context_menu", + ":copy_between_windows", + ":create_new_folder", + ":crostini", + ":directory_tree", ":file_dialog", ] } @@ -25,3 +31,33 @@ testonly = true deps = [] } + +js_library("breadcrumbs") { + testonly = true + deps = [] +} + +js_library("context_menu") { + testonly = true + deps = [] +} + +js_library("copy_between_windows") { + testonly = true + deps = [] +} + +js_library("create_new_folder") { + testonly = true + deps = [] +} + +js_library("crostini") { + testonly = true + deps = [] +} + +js_library("directory_tree") { + testonly = true + deps = [] +}
diff --git a/ui/file_manager/integration_tests/file_manager/context_menu.js b/ui/file_manager/integration_tests/file_manager/context_menu.js index 5e4d5b7..e063f07 100644 --- a/ui/file_manager/integration_tests/file_manager/context_menu.js +++ b/ui/file_manager/integration_tests/file_manager/context_menu.js
@@ -388,7 +388,8 @@ // Focus the search box. chrome.test.assertEq(2, elements.length); for (const element of elements) { - chrome.test.assertEq('#text-context-menu', element.attributes.contextmenu); + chrome.test.assertEq( + '#text-context-menu', element.attributes['contextmenu']); } chrome.test.assertTrue(await remoteCall.callRemoteTestUtil( @@ -784,5 +785,5 @@ // Check currently focused element. const focusedElement = await remoteCall.callRemoteTestUtil('getActiveElement', appId, []); - chrome.test.assertEq('menuitem', focusedElement.attributes.role); + chrome.test.assertEq('menuitem', focusedElement.attributes['role']); };
diff --git a/ui/file_manager/integration_tests/file_manager/files_tooltip.js b/ui/file_manager/integration_tests/file_manager/files_tooltip.js index 3783c69..a45575bc 100644 --- a/ui/file_manager/integration_tests/file_manager/files_tooltip.js +++ b/ui/file_manager/integration_tests/file_manager/files_tooltip.js
@@ -123,4 +123,28 @@ // The tooltip should be hidden. tooltip = await remoteCall.waitForElement(appId, tooltipQueryHidden); }; + + /** + * Tests that the tooltip should hide when the window resizes. + */ + testcase.filesTooltipHidesOnWindowResize = async () => { + const appId = await setupAndWaitUntilReady( + RootPath.DOWNLOADS, [ENTRIES.beautiful], []); + + // The tooltip should be hidden. + await remoteCall.waitForElement(appId, tooltipQueryHidden); + + // Focus a button with tooltip. + chrome.test.assertTrue( + await remoteCall.callRemoteTestUtil('focus', appId, [searchButton])); + + // The tooltip should be visible. + await remoteCall.waitForElement(appId, tooltipQueryVisible); + + // Resize the window. + await remoteCall.callRemoteTestUtil('resizeWindow', appId, [1200, 1200]); + + // The tooltip should be hidden. + await remoteCall.waitForElement(appId, tooltipQueryHidden); + }; })();
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js index fc2e6b44..3a9688a3 100644 --- a/ui/file_manager/integration_tests/remote_call.js +++ b/ui/file_manager/integration_tests/remote_call.js
@@ -186,7 +186,8 @@ * If query is an array, |query[0]| specifies the first * element(s), |query[1]| specifies elements inside the shadow DOM of * the first element, and so on. - * @return {Promise} Promise to be fulfilled when the element appears. + * @return {Promise<ElementObject>} Promise to be fulfilled when the element + * appears. */ waitForElement(appId, query) { return this.waitForElementStyles(appId, query, []); @@ -201,7 +202,6 @@ * the first element, and so on. * @param {!Array<string>} styleNames List of CSS property name to be * obtained. NOTE: Causes element style re-calculation. - * TODO(lucmult): Add a typedef for the returned object. * @return {Promise<ElementObject>} Promise to be fulfilled when the element * appears. */
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 2bbf25b..17a6259 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -265,6 +265,12 @@ } bool GetMscRate(int32_t* numerator, int32_t* denominator) override { + // TODO(https://crbug.com/1064078): eglGetMscRateCHROMIUM is not universally + // available when the EGL_CHROMIUM_sync_control extension is present (for + // example, EGL Mesa). + if (!gl::g_driver_egl.fn.eglGetMscRateCHROMIUMFn) + return false; + bool result = eglGetMscRateCHROMIUM(g_egl_display, surface_, numerator, denominator) == EGL_TRUE; return result;
diff --git a/ui/latency/latency_info.h b/ui/latency/latency_info.h index f77a938..1c8b192 100644 --- a/ui/latency/latency_info.h +++ b/ui/latency/latency_info.h
@@ -40,6 +40,11 @@ // When adding new components, or new metrics based on LatencyInfo, // please update latency_info.dot. +// +// When adding new components, please update +// //third_party/perfetto/protos/perfetto/trace/track_event/chrome_latency_info.proto +// so both this and the internal versions can be kept up to date. Or reach out +// to tracing@chromium.org so we can assist. enum LatencyComponentType { // ---------------------------BEGIN COMPONENT------------------------------- // BEGIN COMPONENT is when we show the latency begin in chrome://tracing.
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc index c17e1fd..e0c2d90 100644 --- a/ui/native_theme/common_theme.cc +++ b/ui/native_theme/common_theme.cc
@@ -391,6 +391,7 @@ } case NativeTheme::kColorId_TextfieldReadOnlyBackground: return SK_ColorWHITE; + case NativeTheme::kColorId_TextfieldPlaceholderColor: case NativeTheme::kColorId_TextfieldReadOnlyColor: { const SkColor bg = base_theme->GetSystemColor( NativeTheme::kColorId_TextfieldReadOnlyBackground, color_scheme);
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc index 68c0830..fbfc8ade 100644 --- a/ui/native_theme/native_theme.cc +++ b/ui/native_theme/native_theme.cc
@@ -116,6 +116,8 @@ kColorTextfieldDisabledBackground}, {NTCID::kColorId_TextfieldReadOnlyColor, kColorTextfieldDisabledForeground}, + {NTCID::kColorId_TextfieldPlaceholderColor, + kColorTextfieldPlaceholderForeground}, {NTCID::kColorId_TextfieldDefaultColor, kColorTextfieldForeground}, {NTCID::kColorId_TextfieldSelectionBackgroundFocused, kColorTextfieldSelectionBackground}, @@ -158,9 +160,12 @@ SkColor NativeTheme::GetSystemColor(ColorId color_id, ColorScheme color_scheme) const { + if (color_scheme == NativeTheme::ColorScheme::kDefault) + color_scheme = GetDefaultSystemColorScheme(); + // TODO(http://crbug.com/1057754): Remove the below restrictions. if (base::FeatureList::IsEnabled(features::kColorProviderRedirection) && - !ShouldUseDarkColors() && !UsesHighContrastColors()) { + color_scheme == NativeTheme::ColorScheme::kLight) { if (!color_provider_) { // Lazy init the color provider as it makes USER32 calls underneath on // Windows, which isn't permitted on renderers.
diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc index f081706..a83498fd 100644 --- a/ui/native_theme/native_theme_base.cc +++ b/ui/native_theme/native_theme_base.cc
@@ -1631,20 +1631,22 @@ case kPressedAccent: case kDisabledAccent: case kFill: - case kDisabledFill: case kLightenLayer: case kProgressValue: - case kSlider: - case kHoveredSlider: - case kPressedSlider: - case kDisabledSlider: case kAutoCompleteBackground: case kBackground: return SkColorSetRGB(0x3B, 0x3B, 0x3B); - case kDisabledBackground: - return SkColorSetARGB(0x4D ,0x3B, 0x3B, 0x3B); case kBorder: + case kSlider: return SkColorSetRGB(0xC3, 0xC3, 0xC3); + case kHoveredSlider: + return SkColorSetRGB(0xD8, 0xD8, 0xD8); + case kPressedSlider: + return SkColorSetRGB(0xB9, 0xB9, 0xB9); + case kDisabledSlider: + return SkColorSetRGB(0x70, 0x70, 0x70); + case kDisabledBackground: + return SkColorSetARGB(0x4D, 0x3B, 0x3B, 0x3B); case kHoveredBorder: return SkColorSetRGB(0xEA, 0xEA, 0xEA); case kPressedBorder: @@ -1655,6 +1657,8 @@ return SkColorSetRGB(0x54, 0x54, 0x54); case kPressedFill: return SkColorSetRGB(0x45, 0x45, 0x45); + case kDisabledFill: + return SkColorSetARGB(0x4D, 0x3B, 0x3B, 0x3B); } NOTREACHED(); return gfx::kPlaceholderColor;
diff --git a/ui/native_theme/native_theme_color_id.h b/ui/native_theme/native_theme_color_id.h index 19b7c25..980e8e80 100644 --- a/ui/native_theme/native_theme_color_id.h +++ b/ui/native_theme/native_theme_color_id.h
@@ -89,6 +89,7 @@ /* Textfield */ \ OP(kColorId_TextfieldDefaultColor), \ OP(kColorId_TextfieldDefaultBackground), \ + OP(kColorId_TextfieldPlaceholderColor), \ OP(kColorId_TextfieldReadOnlyColor), \ OP(kColorId_TextfieldReadOnlyBackground), \ OP(kColorId_TextfieldSelectionColor), \
diff --git a/ui/native_theme/native_theme_unittest.cc b/ui/native_theme/native_theme_unittest.cc index 820fe4d7..2a32fb4 100644 --- a/ui/native_theme/native_theme_unittest.cc +++ b/ui/native_theme/native_theme_unittest.cc
@@ -5,6 +5,7 @@ #include "ui/native_theme/native_theme.h" #include <ostream> +#include <tuple> #include "base/strings/stringprintf.h" #include "base/test/scoped_feature_list.h" @@ -42,18 +43,41 @@ } class NativeThemeRedirectedEquivalenceTest - : public testing::TestWithParam<NativeTheme::ColorId> { + : public testing::TestWithParam< + std::tuple<NativeTheme::ColorScheme, NativeTheme::ColorId>> { public: NativeThemeRedirectedEquivalenceTest() = default; static std::string ParamInfoToString( - ::testing::TestParamInfo<NativeTheme::ColorId> param_info) { - NativeTheme::ColorId color_id = param_info.param; - if (color_id >= NativeTheme::ColorId::kColorId_NumColors) { - ADD_FAILURE() << "Invalid color value " << color_id; - return "Invalid"; + ::testing::TestParamInfo<std::tuple<NativeTheme::ColorScheme, + NativeTheme::ColorId>> param_info) { + auto param_tuple = param_info.param; + return ColorSchemeToString(std::get<0>(param_tuple)) + "_With_" + + ColorIdToString(std::get<1>(param_tuple)); + } + + private: + static std::string ColorSchemeToString(NativeTheme::ColorScheme scheme) { + switch (scheme) { + case NativeTheme::ColorScheme::kDefault: + NOTREACHED() + << "Cannot unit test kDefault as it depends on machine state."; + return "InvalidColorScheme"; + case NativeTheme::ColorScheme::kLight: + return "kLight"; + case NativeTheme::ColorScheme::kDark: + return "kDark"; + case NativeTheme::ColorScheme::kPlatformHighContrast: + return "kPlatformHighContrast"; } - return kColorIdStringName[color_id]; + } + + static std::string ColorIdToString(NativeTheme::ColorId id) { + if (id >= NativeTheme::ColorId::kColorId_NumColors) { + NOTREACHED() << "Invalid color value " << id; + return "InvalidColorId"; + } + return kColorIdStringName[id]; } }; @@ -62,13 +86,17 @@ TEST_P(NativeThemeRedirectedEquivalenceTest, NativeUiGetSystemColor) { // Verifies that colors with and without the Color Provider are the same. NativeTheme* native_theme = NativeTheme::GetInstanceForNativeUi(); - NativeTheme::ColorId color_id = GetParam(); + auto param_tuple = GetParam(); + auto color_scheme = std::get<0>(param_tuple); + auto color_id = std::get<1>(param_tuple); - PrintableSkColor original{native_theme->GetSystemColor(color_id)}; + PrintableSkColor original{ + native_theme->GetSystemColor(color_id, color_scheme)}; base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(features::kColorProviderRedirection); - PrintableSkColor redirected{native_theme->GetSystemColor(color_id)}; + PrintableSkColor redirected{ + native_theme->GetSystemColor(color_id, color_scheme)}; EXPECT_EQ(original, redirected); } @@ -77,7 +105,11 @@ INSTANTIATE_TEST_SUITE_P( , NativeThemeRedirectedEquivalenceTest, - ::testing::Values(NATIVE_THEME_COLOR_IDS), + ::testing::Combine( + ::testing::Values(NativeTheme::ColorScheme::kLight, + NativeTheme::ColorScheme::kDark, + NativeTheme::ColorScheme::kPlatformHighContrast), + ::testing::Values(NATIVE_THEME_COLOR_IDS)), NativeThemeRedirectedEquivalenceTest::ParamInfoToString); #undef OP
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc index f374882..06f0951f 100644 --- a/ui/native_theme/native_theme_win.cc +++ b/ui/native_theme/native_theme_win.cc
@@ -659,6 +659,7 @@ case kColorId_TextfieldDefaultColor: case kColorId_ButtonEnabledColor: case kColorId_UnfocusedBorderColor: + case kColorId_TextfieldPlaceholderColor: case kColorId_TextfieldReadOnlyColor: case kColorId_FocusedBorderColor: case kColorId_TabTitleColorActive:
diff --git a/ui/snapshot/snapshot_aura_unittest.cc b/ui/snapshot/snapshot_aura_unittest.cc index 031a7913..0604185 100644 --- a/ui/snapshot/snapshot_aura_unittest.cc +++ b/ui/snapshot/snapshot_aura_unittest.cc
@@ -111,7 +111,7 @@ helper_ = std::make_unique<aura::test::AuraTestHelper>(); helper_->SetUp(context_factories_->GetContextFactory()); - new ::wm::DefaultActivationClient(helper_->root_window()); + new ::wm::DefaultActivationClient(root_window()); } void TearDown() override { @@ -126,13 +126,13 @@ protected: aura::Window* test_window() { return test_window_.get(); } - aura::Window* root_window() { return helper_->root_window(); } - aura::TestScreen* test_screen() { return helper_->test_screen(); } + aura::Window* root_window() { return helper_->GetContext(); } + aura::TestScreen* test_screen() { return helper_->GetTestScreen(); } void WaitForDraw() { - helper_->host()->compositor()->ScheduleDraw(); + helper_->GetHost()->compositor()->ScheduleDraw(); ui::DrawWaiterForTest::WaitForCompositingEnded( - helper_->host()->compositor()); + helper_->GetHost()->compositor()); } void SetupTestWindow(const gfx::Rect& window_bounds) {
diff --git a/ui/strings/translations/ui_strings_as.xtb b/ui/strings/translations/ui_strings_as.xtb index b21a672..fba571d 100644 --- a/ui/strings/translations/ui_strings_as.xtb +++ b/ui/strings/translations/ui_strings_as.xtb
@@ -21,6 +21,7 @@ <translation id="1398853756734560583">সৰ্বাধিক মাত্ৰালৈ বঢ়াওক</translation> <translation id="1414271762428216854"><ph name="APP_NAME" />, ইনষ্টল হৈ থকা এপ্</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> শ্বেয়াৰ কৰিব নোৱাৰি</translation> +<translation id="1487931858675166540"><ph name="FIRST_ITEM_TITLE" />ক <ph name="SECOND_ITEM_TITLE" />ৰ সৈতে সলনাসলনি কৰা হৈছে</translation> <translation id="1498028757988366001">আপুনি এই বিষয়ে পূর্বে সন্ধান কৰিছে। আপোনাৰ ইতিহাসৰ পৰা "<ph name="QUERY" />"ক মচা কার্যয়ে আপোনাৰ সকলো ডিভাইচৰ পৰাই ইয়াক স্থায়ীভাৱে আঁতৰাব।</translation> <translation id="1591184457164800433">{MINUTES,plural, =1{১ মিনিট আৰু }one{# মিনিট আৰু }other{# মিনিট আৰু }}</translation> <translation id="1643823602425662293">জাননী</translation> @@ -186,6 +187,7 @@ <translation id="6974053822202609517">সোঁফালৰ পৰা বাওঁফাললৈ</translation> <translation id="7052633198403197513">F1</translation> <translation id="7130207228079676353">আটাইতকৈ বেছি পচন্দৰ</translation> +<translation id="7170202025028120564">পাছৰবাৰ এইটো ৰিষ্টাৰ্ট কৰিলে আপোনাৰ এপ্লিকেশ্বনৰ ডিছপ্লে’ৰ ছেটিংসমূহ কার্যকৰী হ’ব।</translation> <translation id="7222373446505536781">F11</translation> <translation id="7238427729722629793">{MINUTES,plural, =1{১ মিনিট বাকী আছে}one{# মিনিট বাকী আছে}other{# মিনিট বাকী আছে}}</translation> <translation id="7319740667687257810">লঞ্চাৰ, আংশিক ভিউ</translation>
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb index 4d03d58..84d09732 100644 --- a/ui/strings/translations/ui_strings_bn.xtb +++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">কমা</translation> <translation id="6397363302884558537">কথা বলা বন্ধ করুন</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{১ সেকেন্ড পূর্বে}one{# সেকেন্ড পূর্বে}other{# সেকেন্ড পূর্বে}}</translation> -<translation id="6417265370957905582">Google অ্যাসিস্ট্যান্ট</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">এই অ্যাপ থেকে সমস্ত বিজ্ঞপ্তি ব্লক করুন</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{১ সেকেন্ড আগে}one{# সেকেন্ড আগে}other{# সেকেন্ড আগে}}</translation> <translation id="6539092367496845964">কোনও সমস্যা হয়েছে। পরে আবার চেষ্টা করুন।</translation>
diff --git a/ui/strings/translations/ui_strings_cs.xtb b/ui/strings/translations/ui_strings_cs.xtb index 408e21c..40476f83 100644 --- a/ui/strings/translations/ui_strings_cs.xtb +++ b/ui/strings/translations/ui_strings_cs.xtb
@@ -21,7 +21,7 @@ <translation id="1398853756734560583">Maximalizovat</translation> <translation id="1414271762428216854"><ph name="APP_NAME" />, nainstalovaná aplikace</translation> <translation id="1450753235335490080">Sdílení obsahu typu <ph name="CONTENT_TYPE" /> se nezdařilo</translation> -<translation id="1487931858675166540">Položka <ph name="FIRST_ITEM_TITLE" /> byla vyměněna s položkou <ph name="SECOND_ITEM_TITLE" /></translation> +<translation id="1487931858675166540">Položka <ph name="FIRST_ITEM_TITLE" /> byla prohozená s položkou <ph name="SECOND_ITEM_TITLE" /></translation> <translation id="1498028757988366001">Toto jste v minulosti vyhledávali. Když dotaz „<ph name="QUERY" />“ vymažete z historie, bude trvale odstraněn z vašeho účtu na všech zařízeních.</translation> <translation id="1591184457164800433">{MINUTES,plural, =1{1 minuta a }few{# minuty a }many{# minuty a }other{# minut a }}</translation> <translation id="1643823602425662293">Oznámení</translation>
diff --git a/ui/strings/translations/ui_strings_eu.xtb b/ui/strings/translations/ui_strings_eu.xtb index dbb884b..c239c15 100644 --- a/ui/strings/translations/ui_strings_eu.xtb +++ b/ui/strings/translations/ui_strings_eu.xtb
@@ -22,7 +22,7 @@ <translation id="1414271762428216854">Instalatutako aplikazioa (<ph name="APP_NAME" />)</translation> <translation id="1450753235335490080">Ezin da partekatu <ph name="CONTENT_TYPE" /></translation> <translation id="1487931858675166540"><ph name="SECOND_ITEM_TITLE" /> elementuarekin trukatu da <ph name="FIRST_ITEM_TITLE" /></translation> -<translation id="1498028757988366001">Dagoeneko bilatu duzu hori. Kendu egiten baduzu "<ph name="QUERY" />" historiatik, behin betiko kenduko da kontutik, gailu guztietan.</translation> +<translation id="1498028757988366001">Dagoeneko bilatu duzu hori. Kendu egiten baduzu "<ph name="QUERY" />" historiatik, betiko kenduko da kontutik, gailu guztietan.</translation> <translation id="1591184457164800433">{MINUTES,plural, =1{1 minutu eta }other{# minutu eta }}</translation> <translation id="1643823602425662293">Jakinarazpena</translation> <translation id="169515659049020177">Maius</translation> @@ -188,7 +188,7 @@ <translation id="6974053822202609517">Eskuinetik ezkerrera</translation> <translation id="7052633198403197513">F1</translation> <translation id="7130207228079676353">ZIURRENIK ERABILIKO DIREN APLIKAZIOAK</translation> -<translation id="7170202025028120564">Aplikazioaren bistaratze-ezarpenak aplikazioa berrabiarazten denean izango dute eragina.</translation> +<translation id="7170202025028120564">Aplikazioaren bistaratze-ezarpenek aplikazioa berrabiarazten denean izango dute eragina.</translation> <translation id="7222373446505536781">F11</translation> <translation id="7238427729722629793">{MINUTES,plural, =1{1 minutu gelditzen da}other{# minutu gelditzen dira}}</translation> <translation id="7319740667687257810">Abiarazlea, ikuspegi partziala</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb index 607bca7..40f852e 100644 --- a/ui/strings/translations/ui_strings_kn.xtb +++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">ಅರ್ಧವಿರಾಮ</translation> <translation id="6397363302884558537">ಮಾತನಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 ಸೆಕೆಂ ಹಿಂದೆ}one{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}other{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}}</translation> -<translation id="6417265370957905582">Google ಸಹಾಯಕ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">ಈ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 ಸೆಕೆಂಡ್ ಹಿಂದೆ}one{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}other{# ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ}}</translation> <translation id="6539092367496845964">ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb index a9b9faf..2b99545 100644 --- a/ui/strings/translations/ui_strings_ml.xtb +++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">കോമ</translation> <translation id="6397363302884558537">സംഭാഷണം നിർത്തുക</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{ഒരു സെക്കൻഡ് മുമ്പ്}other{# സെക്കൻഡ് മുമ്പ്}}</translation> -<translation id="6417265370957905582">Google അസിസ്റ്റന്റ്</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">ഈ ആപ്പിൽ നിന്നുള്ള എല്ലാ അറിയിപ്പുകളും ബ്ലോക്ക് ചെയ്യുക</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 സെക്കൻഡ് മുമ്പ്}other{# സെക്കൻഡ് മുമ്പ്}}</translation> <translation id="6539092367496845964">എന്തോ കുഴപ്പം സംഭവിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
diff --git a/ui/strings/translations/ui_strings_mr.xtb b/ui/strings/translations/ui_strings_mr.xtb index 84e86672..b502b19 100644 --- a/ui/strings/translations/ui_strings_mr.xtb +++ b/ui/strings/translations/ui_strings_mr.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">स्वल्पविराम</translation> <translation id="6397363302884558537">बोलणे थांबवा</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 सेकंदापूर्वी}other{# सेकंदांपूर्वी}}</translation> -<translation id="6417265370957905582">Google साहाय्यक</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">या अॅपच्या सर्व सूचना ब्लॉक करा</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 सेकंदापूर्वी}other{# सेकंदांपूर्वी}}</translation> <translation id="6539092367496845964">काहीतरी चूक झाली. पुन्हा प्रयत्न करा.</translation>
diff --git a/ui/strings/translations/ui_strings_or.xtb b/ui/strings/translations/ui_strings_or.xtb index c6d5534..35b0b0d 100644 --- a/ui/strings/translations/ui_strings_or.xtb +++ b/ui/strings/translations/ui_strings_or.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">କମା</translation> <translation id="6397363302884558537">କଥା କହିବା ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 ସେକେଣ୍ଡ ପୂର୍ବେ}other{# ସେକେଣ୍ଡ ପୂର୍ବେ}}</translation> -<translation id="6417265370957905582">Google ଆସିଷ୍ଟାଣ୍ଟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">ଏହି ଆପ୍ରୁ ସମସ୍ତ ବିଜ୍ଞପ୍ତି ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 ସେକେଣ୍ଡ ପୂର୍ବେ}other{# ସେକେଣ୍ଡ ପୂର୍ବେ}}</translation> <translation id="6539092367496845964">କିଛି ଭୁଲ ହୋଇଗଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
diff --git a/ui/strings/translations/ui_strings_pa.xtb b/ui/strings/translations/ui_strings_pa.xtb index fbcc41b5..d2a4862 100644 --- a/ui/strings/translations/ui_strings_pa.xtb +++ b/ui/strings/translations/ui_strings_pa.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">ਕਾਮਾ</translation> <translation id="6397363302884558537">ਬੋਲਣਾ ਬੰਦ ਕਰੋ</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 ਸਕਿੰਟ ਪਹਿਲਾਂ}one{# ਸਕਿੰਟ ਪਹਿਲਾਂ}other{# ਸਕਿੰਟ ਪਹਿਲਾਂ}}</translation> -<translation id="6417265370957905582">Google ਅਸਿਸਟੈਂਟ</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">ਇਸ ਐਪ ਦੀਆਂ ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਬਲਾਕ ਕਰੋ</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 ਸਕਿੰਟ ਪਹਿਲਾਂ}one{# ਸਕਿੰਟ ਪਹਿਲਾਂ}other{# ਸਕਿੰਟ ਪਹਿਲਾਂ}}</translation> <translation id="6539092367496845964">ਕੋਈ ਗੜਬੜ ਹੋਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
diff --git a/ui/strings/translations/ui_strings_ta.xtb b/ui/strings/translations/ui_strings_ta.xtb index 3be652d1..a3f65fe 100644 --- a/ui/strings/translations/ui_strings_ta.xtb +++ b/ui/strings/translations/ui_strings_ta.xtb
@@ -161,7 +161,7 @@ <translation id="6394627529324717982">கமா</translation> <translation id="6397363302884558537">பேச்சை நிறுத்து</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 நிமிடம் முன்பு}other{# நிமிடங்கள் முன்பு}}</translation> -<translation id="6417265370957905582">Google அசிஸ்டண்ட்</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">இந்தப் பயன்பாட்டிலிருந்து எல்லா அறிவிப்புகளையும் தடு</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 வினாடிக்கு முன்பு}other{# வினாடிகளுக்கு முன்பு}}</translation> <translation id="6539092367496845964">ஏதோ தவறாகிவிட்டது. பிறகு முயலவும்.</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb index e7f605875..5a7b2dd 100644 --- a/ui/strings/translations/ui_strings_te.xtb +++ b/ui/strings/translations/ui_strings_te.xtb
@@ -162,7 +162,7 @@ <translation id="6394627529324717982">కామా</translation> <translation id="6397363302884558537">మాట్లాడటాన్ని ఆపివేయి</translation> <translation id="6404817160109697034">{SECONDS,plural, =1{1 సెక. క్రితం}other{# సెక. క్రితం}}</translation> -<translation id="6417265370957905582">Google అసిస్టెంట్</translation> +<translation id="6417265370957905582">Google Assistant</translation> <translation id="6430678249303439055">ఈ యాప్ నుండి నోటిఫికేషన్లు అన్ని బ్లాక్ చేయండి</translation> <translation id="6483402905448010557">{SECONDS,plural, =1{1 సెకను క్రితం}other{# సెకన్ల క్రితం}}</translation> <translation id="6539092367496845964">ఏదో తప్పు జరిగింది. తర్వాత మళ్లీ ప్రయత్నించండి.</translation>
diff --git a/ui/strings/translations/ui_strings_ur.xtb b/ui/strings/translations/ui_strings_ur.xtb index 8cbfe37..d256d92 100644 --- a/ui/strings/translations/ui_strings_ur.xtb +++ b/ui/strings/translations/ui_strings_ur.xtb
@@ -188,7 +188,7 @@ <translation id="6974053822202609517">دائیں سے بائیں</translation> <translation id="7052633198403197513">F1</translation> <translation id="7130207228079676353">غالبأ</translation> -<translation id="7170202025028120564">اگلی بار دوبارہ شروع ہونے پر آپ کی ایپلیکیشن کے ڈسپلے کی ترتیبات لاگو ہوں گی۔</translation> +<translation id="7170202025028120564">اگلی بار ری اسٹارٹ ہونے پر آپ کی ایپلیکیشن کے ڈسپلے کی ترتیبات لاگو ہوں گی۔</translation> <translation id="7222373446505536781">F11</translation> <translation id="7238427729722629793">{MINUTES,plural, =1{1 منٹ باقی}other{# منٹ باقی}}</translation> <translation id="7319740667687257810">لانچر، جزوی منظر</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb index 1e8cf55a..f79041b9 100644 --- a/ui/strings/translations/ui_strings_vi.xtb +++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -21,7 +21,7 @@ <translation id="1398853756734560583">Phóng to</translation> <translation id="1414271762428216854"><ph name="APP_NAME" />, Ứng dụng đã được cài đặt</translation> <translation id="1450753235335490080">Không thể chia sẻ <ph name="CONTENT_TYPE" /></translation> -<translation id="1487931858675166540">Đã hoán đổi <ph name="FIRST_ITEM_TITLE" /> bằng <ph name="SECOND_ITEM_TITLE" /></translation> +<translation id="1487931858675166540">Đã hoán đổi <ph name="FIRST_ITEM_TITLE" /> cho <ph name="SECOND_ITEM_TITLE" /></translation> <translation id="1498028757988366001">Bạn đã tìm kiếm nội dung này trước đây. Việc xóa "<ph name="QUERY" />" khỏi lịch sử sẽ xóa vĩnh viễn cụm từ tìm kiếm này khỏi tài khoản của bạn trên tất cả các thiết bị.</translation> <translation id="1591184457164800433">{MINUTES,plural, =1{1 phút và }other{# phút và }}</translation> <translation id="1643823602425662293">Thông báo</translation>
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.cc b/ui/views/bubble/bubble_dialog_delegate_view.cc index cc234a9..ca848c0 100644 --- a/ui/views/bubble/bubble_dialog_delegate_view.cc +++ b/ui/views/bubble/bubble_dialog_delegate_view.cc
@@ -349,12 +349,14 @@ } gfx::Rect BubbleDialogDelegateView::GetAnchorRect() const { + // TODO(tluk) eliminate the need for GetAnchorRect() to return an empty rect + // if neither an |anchor_rect_| or an anchor view have been set. if (!GetAnchorView()) - return anchor_rect_; + return anchor_rect_.value_or(gfx::Rect()); anchor_rect_ = GetAnchorView()->GetAnchorBoundsInScreen(); - anchor_rect_.Inset(anchor_view_insets_); - return anchor_rect_; + anchor_rect_->Inset(anchor_view_insets_); + return anchor_rect_.value(); } void BubbleDialogDelegateView::OnBeforeBubbleWidgetInit(
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.h b/ui/views/bubble/bubble_dialog_delegate_view.h index 7233224..62bc3d2 100644 --- a/ui/views/bubble/bubble_dialog_delegate_view.h +++ b/ui/views/bubble/bubble_dialog_delegate_view.h
@@ -82,7 +82,7 @@ void SetHighlightedButton(Button* highlighted_button); // The anchor rect is used in the absence of an assigned anchor view. - const gfx::Rect& anchor_rect() const { return anchor_rect_; } + const base::Optional<gfx::Rect>& anchor_rect() const { return anchor_rect_; } // Set the desired arrow for the bubble and updates the bubble's bounds // accordingly. The arrow will be mirrored for RTL. @@ -243,7 +243,7 @@ ViewTracker highlighted_button_tracker_; // The anchor rect used in the absence of an anchor view. - mutable gfx::Rect anchor_rect_; + mutable base::Optional<gfx::Rect> anchor_rect_; // The arrow's default location on the bubble post-RTL mirroring if needed. BubbleBorder::Arrow arrow_ = BubbleBorder::NONE;
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc index 1b68b93..93b3b60 100644 --- a/ui/views/controls/textfield/textfield.cc +++ b/ui/views/controls/textfield/textfield.cc
@@ -2255,7 +2255,8 @@ GetPlaceholderText(), placeholder_font_list_.has_value() ? placeholder_font_list_.value() : GetFontList(), - placeholder_text_color_.value_or(SkColorSetA(GetTextColor(), 0x83)), + placeholder_text_color_.value_or(style::GetColor( + *this, style::CONTEXT_TEXTFIELD, style::STYLE_HINT)), render_text->display_rect(), placeholder_text_draw_flags); }
diff --git a/ui/views/examples/native_theme_example.cc b/ui/views/examples/native_theme_example.cc index 144e1b6..1df11d9 100644 --- a/ui/views/examples/native_theme_example.cc +++ b/ui/views/examples/native_theme_example.cc
@@ -122,6 +122,7 @@ InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TabBottomBorder)); InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TextfieldDefaultColor)); InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TextfieldDefaultBackground)); + InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TextfieldPlaceholderColor)); InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TextfieldReadOnlyColor)); InsertColorRow(layout, COLOR_LABEL_ARGS(kColorId_TextfieldReadOnlyBackground));
diff --git a/ui/views/style/typography.h b/ui/views/style/typography.h index d010691..7c16c39 100644 --- a/ui/views/style/typography.h +++ b/ui/views/style/typography.h
@@ -77,6 +77,9 @@ // Secondary text: Appears near the primary text. STYLE_SECONDARY, + // "Hint" text, usually a line that gives context to something more important. + STYLE_HINT, + // Style for text that is displayed in a selection. STYLE_SELECTED,
diff --git a/ui/views/style/typography_provider.cc b/ui/views/style/typography_provider.cc index cd9417d..419f5c1b 100644 --- a/ui/views/style/typography_provider.cc +++ b/ui/views/style/typography_provider.cc
@@ -97,6 +97,12 @@ } } +ui::NativeTheme::ColorId GetHintColorId(int context) { + return (context == style::CONTEXT_TEXTFIELD) + ? ui::NativeTheme::kColorId_TextfieldPlaceholderColor + : ui::NativeTheme::kColorId_LabelSecondaryColor; +} + ui::NativeTheme::ColorId GetColorId(int context, int style) { if (style == style::STYLE_DIALOG_BUTTON_DEFAULT) return ui::NativeTheme::kColorId_TextOnProminentButtonColor; @@ -104,6 +110,8 @@ return GetDisabledColorId(context); if (style == style::STYLE_LINK) return ui::NativeTheme::kColorId_LinkEnabled; + if (style == style::STYLE_HINT) + return GetHintColorId(context); if (context == style::CONTEXT_BUTTON_MD) return ui::NativeTheme::kColorId_ButtonEnabledColor; if (context == style::CONTEXT_LABEL && style == style::STYLE_SECONDARY)
diff --git a/ui/views/test/scoped_views_test_helper.cc b/ui/views/test/scoped_views_test_helper.cc index ab3fe461..371afb6 100644 --- a/ui/views/test/scoped_views_test_helper.cc +++ b/ui/views/test/scoped_views_test_helper.cc
@@ -10,7 +10,6 @@ #include "ui/base/clipboard/test/test_clipboard.h" #include "ui/base/ime/init/input_method_initializer.h" #include "ui/views/test/test_views_delegate.h" -#include "ui/views/test/views_test_helper.h" #if defined(USE_AURA) #include "ui/aura/window.h" @@ -21,8 +20,7 @@ ScopedViewsTestHelper::ScopedViewsTestHelper( std::unique_ptr<TestViewsDelegate> test_views_delegate) : test_views_delegate_(std::move(test_views_delegate)) { - test_helper_ = ViewsTestHelper::Create(); - test_views_delegate_->set_context_factory(test_helper_->GetContextFactory()); + test_helper_->SetUpTestViewsDelegate(test_views_delegate_.get()); ui::InitializeInputMethodForTesting(); ui::TestClipboard::CreateForCurrentThread();
diff --git a/ui/views/test/scoped_views_test_helper.h b/ui/views/test/scoped_views_test_helper.h index 7752673..c4b828e 100644 --- a/ui/views/test/scoped_views_test_helper.h +++ b/ui/views/test/scoped_views_test_helper.h
@@ -9,11 +9,11 @@ #include "base/macros.h" #include "ui/gfx/native_widget_types.h" +#include "ui/views/test/views_test_helper.h" namespace views { class TestViewsDelegate; -class ViewsTestHelper; class Widget; // Creates a ViewsTestHelper that is destroyed automatically. Acts like @@ -41,8 +41,8 @@ } private: + std::unique_ptr<ViewsTestHelper> test_helper_ = ViewsTestHelper::Create(); std::unique_ptr<TestViewsDelegate> test_views_delegate_; - std::unique_ptr<ViewsTestHelper> test_helper_; DISALLOW_COPY_AND_ASSIGN(ScopedViewsTestHelper); };
diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h index 11fdb27..bc44c894 100644 --- a/ui/views/test/test_views_delegate.h +++ b/ui/views/test/test_views_delegate.h
@@ -30,10 +30,12 @@ use_transparent_windows_ = transparent; } +#if defined(OS_MACOSX) // Allows tests to provide a ContextFactory via the ViewsDelegate interface. void set_context_factory(ui::ContextFactory* context_factory) { context_factory_ = context_factory; } +#endif // For convenience, we create a layout provider by default, but embedders // that use their own layout provider subclasses may need to set those classes @@ -48,10 +50,14 @@ #endif void OnBeforeWidgetInit(Widget::InitParams* params, internal::NativeWidgetDelegate* delegate) override; +#if defined(OS_MACOSX) ui::ContextFactory* GetContextFactory() override; +#endif private: +#if defined(OS_MACOSX) ui::ContextFactory* context_factory_ = nullptr; +#endif bool use_desktop_native_widgets_ = false; bool use_transparent_windows_ = false; std::unique_ptr<LayoutProvider> layout_provider_ =
diff --git a/ui/views/test/test_views_delegate_aura.cc b/ui/views/test/test_views_delegate_aura.cc index 40993c2..3f8e75d 100644 --- a/ui/views/test/test_views_delegate_aura.cc +++ b/ui/views/test/test_views_delegate_aura.cc
@@ -5,7 +5,6 @@ #include "ui/views/test/test_views_delegate.h" #include "build/build_config.h" -#include "ui/aura/env.h" #include "ui/views/buildflags.h" #if BUILDFLAG(ENABLE_DESKTOP_AURA) @@ -38,12 +37,4 @@ #endif // BUILDFLAG(ENABLE_DESKTOP_AURA) } -ui::ContextFactory* TestViewsDelegate::GetContextFactory() { - if (context_factory_) - return context_factory_; - if (aura::Env::GetInstance()) - return aura::Env::GetInstance()->context_factory(); - return nullptr; -} - } // namespace views
diff --git a/ui/views/test/views_test_base.h b/ui/views/test/views_test_base.h index 3a7f7895..dac4ce3 100644 --- a/ui/views/test/views_test_base.h +++ b/ui/views/test/views_test_base.h
@@ -25,6 +25,7 @@ #if defined(USE_AURA) #include "ui/aura/test/aura_test_helper.h" +#include "ui/aura/window_tree_host.h" #endif namespace views { @@ -100,15 +101,13 @@ #if defined(USE_AURA) aura::Window* root_window() { - return aura::test::AuraTestHelper::GetInstance()->root_window(); + return aura::test::AuraTestHelper::GetInstance()->GetContext(); } - ui::EventSink* event_sink() { - return aura::test::AuraTestHelper::GetInstance()->event_sink(); - } + ui::EventSink* event_sink() { return host()->event_sink(); } aura::WindowTreeHost* host() { - return aura::test::AuraTestHelper::GetInstance()->host(); + return aura::test::AuraTestHelper::GetInstance()->GetHost(); } #endif
diff --git a/ui/views/test/views_test_helper.cc b/ui/views/test/views_test_helper.cc index 47d563f7..607c12fd 100644 --- a/ui/views/test/views_test_helper.cc +++ b/ui/views/test/views_test_helper.cc
@@ -6,6 +6,8 @@ namespace views { +void ViewsTestHelper::SetUpTestViewsDelegate(TestViewsDelegate* delegate) {} + gfx::NativeWindow ViewsTestHelper::GetContext() { return nullptr; }
diff --git a/ui/views/test/views_test_helper.h b/ui/views/test/views_test_helper.h index 7771a26..d65b7e7 100644 --- a/ui/views/test/views_test_helper.h +++ b/ui/views/test/views_test_helper.h
@@ -10,12 +10,10 @@ #include "base/macros.h" #include "ui/gfx/native_widget_types.h" -namespace ui { -class ContextFactory; -} - namespace views { +class TestViewsDelegate; + // A helper class owned by tests that performs platform specific initialization // required for running tests. class ViewsTestHelper { @@ -25,12 +23,13 @@ virtual ~ViewsTestHelper() = default; + // Does any additional necessary setup of the provided |delegate|. + virtual void SetUpTestViewsDelegate(TestViewsDelegate* delegate); + // Returns a context view. In aura builds, this will be the RootWindow. // Everywhere else, null. virtual gfx::NativeWindow GetContext(); - virtual ui::ContextFactory* GetContextFactory() = 0; - protected: ViewsTestHelper() = default;
diff --git a/ui/views/test/views_test_helper_aura.cc b/ui/views/test/views_test_helper_aura.cc index 46210a9..2ab1aa0 100644 --- a/ui/views/test/views_test_helper_aura.cc +++ b/ui/views/test/views_test_helper_aura.cc
@@ -55,11 +55,7 @@ } gfx::NativeWindow ViewsTestHelperAura::GetContext() { - return aura_test_helper_.root_window(); -} - -ui::ContextFactory* ViewsTestHelperAura::GetContextFactory() { - return aura_test_helper_.GetContextFactory(); + return aura_test_helper_.GetContext(); } } // namespace views
diff --git a/ui/views/test/views_test_helper_aura.h b/ui/views/test/views_test_helper_aura.h index 0125b61..a4172d6 100644 --- a/ui/views/test/views_test_helper_aura.h +++ b/ui/views/test/views_test_helper_aura.h
@@ -26,7 +26,6 @@ // ViewsTestHelper: gfx::NativeWindow GetContext() override; - ui::ContextFactory* GetContextFactory() override; private: aura::test::AuraTestHelper aura_test_helper_;
diff --git a/ui/views/test/views_test_helper_mac.h b/ui/views/test/views_test_helper_mac.h index f3cd6c6..f377666d 100644 --- a/ui/views/test/views_test_helper_mac.h +++ b/ui/views/test/views_test_helper_mac.h
@@ -28,7 +28,7 @@ ~ViewsTestHelperMac() override; // ViewsTestHelper: - ui::ContextFactory* GetContextFactory() override; + void SetUpTestViewsDelegate(TestViewsDelegate* delegate) override; private: ui::TestContextFactories context_factories_{false};
diff --git a/ui/views/test/views_test_helper_mac.mm b/ui/views/test/views_test_helper_mac.mm index 7483832..9cafa47 100644 --- a/ui/views/test/views_test_helper_mac.mm +++ b/ui/views/test/views_test_helper_mac.mm
@@ -12,6 +12,7 @@ #include "ui/base/test/ui_controls.h" #include "ui/events/test/event_generator.h" #include "ui/views/test/event_generator_delegate_mac.h" +#include "ui/views/test/test_views_delegate.h" #include "ui/views/widget/widget.h" namespace views { @@ -58,8 +59,8 @@ } } -ui::ContextFactory* ViewsTestHelperMac::GetContextFactory() { - return context_factories_.GetContextFactory(); +void ViewsTestHelperMac::SetUpTestViewsDelegate(TestViewsDelegate* delegate) { + delegate->set_context_factory(context_factories_.GetContextFactory()); } } // namespace views
diff --git a/ui/views/test/widget_test_aura.cc b/ui/views/test/widget_test_aura.cc index 2537b4c..efa9e77 100644 --- a/ui/views/test/widget_test_aura.cc +++ b/ui/views/test/widget_test_aura.cc
@@ -88,7 +88,7 @@ DCHECK(aura_test_helper) << "Can't find all widgets without a test helper"; #endif if (aura_test_helper) - roots.push_back(aura_test_helper->root_window()); + roots.push_back(aura_test_helper->GetContext()); return roots; }
diff --git a/ui/views/views_delegate.cc b/ui/views/views_delegate.cc index d78e90c..e000750 100644 --- a/ui/views/views_delegate.cc +++ b/ui/views/views_delegate.cc
@@ -112,9 +112,11 @@ return false; } +#if defined(OS_MACOSX) ui::ContextFactory* ViewsDelegate::GetContextFactory() { return nullptr; } +#endif std::string ViewsDelegate::GetApplicationName() { base::FilePath program = base::CommandLine::ForCurrentProcess()->GetProgram();
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h index 5677ce6f..23b538a 100644 --- a/ui/views/views_delegate.h +++ b/ui/views/views_delegate.h
@@ -30,7 +30,9 @@ } // namespace gfx namespace ui { +#if defined(OS_MACOSX) class ContextFactory; +#endif class TouchEditingControllerFactory; } // namespace ui @@ -158,8 +160,10 @@ // maximized windows; otherwise to restored windows. virtual bool WindowManagerProvidesTitleBar(bool maximized); +#if defined(OS_MACOSX) // Returns the context factory for new windows. virtual ui::ContextFactory* GetContextFactory(); +#endif // Returns the user-visible name of the application. virtual std::string GetApplicationName();
diff --git a/ui/views_content_client/views_content_client_main_parts.cc b/ui/views_content_client/views_content_client_main_parts.cc index 0a8055e5..98301ef 100644 --- a/ui/views_content_client/views_content_client_main_parts.cc +++ b/ui/views_content_client/views_content_client_main_parts.cc
@@ -8,7 +8,6 @@ #include "base/run_loop.h" #include "build/build_config.h" -#include "content/public/browser/context_factory.h" #include "content/shell/browser/shell_browser_context.h" #include "ui/base/ime/init/input_method_initializer.h" #include "ui/views/test/desktop_test_views_delegate.h" @@ -33,10 +32,7 @@ ui::InitializeInputMethodForTesting(); browser_context_ = std::make_unique<content::ShellBrowserContext>(false); - std::unique_ptr<views::TestViewsDelegate> test_views_delegate( - new views::DesktopTestViewsDelegate); - test_views_delegate->set_context_factory(content::GetContextFactory()); - views_delegate_ = std::move(test_views_delegate); + views_delegate_ = std::make_unique<views::DesktopTestViewsDelegate>(); run_loop_ = std::make_unique<base::RunLoop>(); views_content_client()->set_quit_closure(run_loop_->QuitClosure()); }
diff --git a/ui/views_content_client/views_content_client_main_parts.h b/ui/views_content_client/views_content_client_main_parts.h index f5a76ae..b78b960 100644 --- a/ui/views_content_client/views_content_client_main_parts.h +++ b/ui/views_content_client/views_content_client_main_parts.h
@@ -8,6 +8,7 @@ #include <memory> #include "base/macros.h" +#include "build/build_config.h" #include "content/public/browser/browser_main_parts.h" namespace base { @@ -20,7 +21,7 @@ } namespace views { -class ViewsDelegate; +class TestViewsDelegate; } namespace ui { @@ -57,10 +58,14 @@ const content::MainFunctionParams& content_params, ViewsContentClient* views_content_client); +#if defined(OS_MACOSX) + views::TestViewsDelegate* views_delegate() { return views_delegate_.get(); } +#endif + private: std::unique_ptr<content::ShellBrowserContext> browser_context_; - std::unique_ptr<views::ViewsDelegate> views_delegate_; + std::unique_ptr<views::TestViewsDelegate> views_delegate_; ViewsContentClient* views_content_client_;
diff --git a/ui/views_content_client/views_content_client_main_parts_mac.mm b/ui/views_content_client/views_content_client_main_parts_mac.mm index 64fb381b..20a36c6 100644 --- a/ui/views_content_client/views_content_client_main_parts_mac.mm +++ b/ui/views_content_client/views_content_client_main_parts_mac.mm
@@ -12,10 +12,12 @@ #include "base/mac/scoped_nsobject.h" #include "base/macros.h" #include "base/path_service.h" +#include "content/public/browser/context_factory.h" #include "content/public/browser/plugin_service.h" #include "content/public/common/content_paths.h" #include "content/shell/browser/shell_application_mac.h" #include "content/shell/browser/shell_browser_context.h" +#include "ui/views/test/test_views_delegate.h" #include "ui/views_content_client/views_content_client.h" #include "ui/views_content_client/views_content_client_main_parts.h" @@ -66,6 +68,8 @@ void ViewsContentClientMainPartsMac::PreMainMessageLoopRun() { ViewsContentClientMainParts::PreMainMessageLoopRun(); + views_delegate()->set_context_factory(content::GetContextFactory()); + // On Mac, the task must be deferred to applicationDidFinishLaunching. If not, // the widget can activate, but (even if configured) the mainMenu won't be // ready to switch over in the OSX UI, so it will look strange.
diff --git a/ui/webui/resources/cr_components/chromeos/network/OWNERS b/ui/webui/resources/cr_components/chromeos/network/OWNERS index f0e0e725..dce9805 100644 --- a/ui/webui/resources/cr_components/chromeos/network/OWNERS +++ b/ui/webui/resources/cr_components/chromeos/network/OWNERS
@@ -1,6 +1,3 @@ -azeemarshad@chromium.org -jonmann@chromium.org -khorimoto@chromium.org -stevenjb@chromium.org +file://chrome/browser/resources/settings/chromeos/internet_page/OWNERS -# COMPONENT: UI>Shell>Networking +# COMPONENT: OS>Systems>Network
diff --git a/ui/webui/resources/cr_elements/shared_style_css.html b/ui/webui/resources/cr_elements/shared_style_css.html index 125bf97..469c981 100644 --- a/ui/webui/resources/cr_elements/shared_style_css.html +++ b/ui/webui/resources/cr_elements/shared_style_css.html
@@ -89,6 +89,14 @@ opacity: var(--cr-container-shadow-max-opacity); } + .cr-section { + align-items: center; + border-top: var(--cr-separator-line); + display: flex; + min-height: var(--cr-section-min-height); + padding: 0 var(--cr-section-padding); + } + /* Typography */ .cr-title-text {
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html index 7698040..4c9126cc 100644 --- a/ui/webui/resources/cr_elements/shared_vars_css.html +++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -155,6 +155,8 @@ --cr-section-indent-padding: calc( var(--cr-section-padding) + var(--cr-section-indent-width)); + /* TODO(crbug.com/973674): Do not use this mixin. Use the class cr-section + * from shared_style_css.html instead. */ --cr-section: { align-items: center; border-top: var(--cr-separator-line);
diff --git a/ui/webui/resources/cr_elements_images.grdp b/ui/webui/resources/cr_elements_images.grdp index 4b08570..38c77c6 100644 --- a/ui/webui/resources/cr_elements_images.grdp +++ b/ui/webui/resources/cr_elements_images.grdp
@@ -3,6 +3,8 @@ <!-- TODO(dschuyler): Many of these may be included for the unit tests which don't appear to flatten the html. We may be able to avoid including these if the browser_tests would not try to load them. --> + <include name="IDR_WEBUI_IMAGES_200_LOGO_GOOGLE_G" + file="images/200-logo_googleg.png" type="BINDATA" compress="gzip" /> <include name="IDR_WEBUI_IMAGES_ARROW_DOWN" file="images/arrow_down.svg" type="BINDATA" compress="gzip" /> <include name="IDR_WEBUI_IMAGES_ARROW_RIGHT"
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS index 91a938bb..22ae82e5 100644 --- a/weblayer/browser/DEPS +++ b/weblayer/browser/DEPS
@@ -22,6 +22,7 @@ "+components/permissions", "+components/pref_registry", "+components/prefs", + "+components/url_formatter", "+components/user_prefs", "+components/safe_browsing/core/common", "+components/safe_browsing/core/features.h",
diff --git a/weblayer/browser/browser_context_impl.cc b/weblayer/browser/browser_context_impl.cc index 07f58b38..8a4f76f 100644 --- a/weblayer/browser/browser_context_impl.cc +++ b/weblayer/browser/browser_context_impl.cc
@@ -29,6 +29,7 @@ #if defined(OS_ANDROID) #include "base/android/path_utils.h" +#include "components/cdm/browser/media_drm_storage_impl.h" // nogncheck #include "components/permissions/contexts/geolocation_permission_context_android.h" #elif defined(OS_WIN) #include <KnownFolders.h> @@ -229,6 +230,7 @@ HostContentSettingsMap::RegisterProfilePrefs(pref_registry); safe_browsing::RegisterProfilePrefs(pref_registry); #if defined(OS_ANDROID) + cdm::MediaDrmStorageImpl::RegisterProfilePrefs(pref_registry); permissions::GeolocationPermissionContextAndroid::RegisterProfilePrefs( pref_registry); #endif
diff --git a/weblayer/browser/content_browser_client_impl.cc b/weblayer/browser/content_browser_client_impl.cc index f6b8011..5bfc9527 100644 --- a/weblayer/browser/content_browser_client_impl.cc +++ b/weblayer/browser/content_browser_client_impl.cc
@@ -72,6 +72,7 @@ #include "base/bind.h" #include "base/task/post_task.h" #include "components/cdm/browser/cdm_message_filter_android.h" +#include "components/cdm/browser/media_drm_storage_impl.h" // nogncheck #include "components/crash/content/browser/crash_handler_host_linux.h" #include "components/navigation_interception/intercept_navigation_delegate.h" #include "components/spellcheck/browser/spell_check_host_impl.h" // nogncheck @@ -151,6 +152,35 @@ std::make_unique<weblayer::WebLayerSecurityBlockingPageFactory>()); } +#if defined(OS_ANDROID) +void CreateOriginId(cdm::MediaDrmStorageImpl::OriginIdObtainedCB callback) { + std::move(callback).Run(true, base::UnguessableToken::Create()); +} + +void AllowEmptyOriginIdCB(base::OnceCallback<void(bool)> callback) { + // Since CreateOriginId() always returns a non-empty origin ID, we don't need + // to allow empty origin ID. + std::move(callback).Run(false); +} + +void CreateMediaDrmStorage( + content::RenderFrameHost* render_frame_host, + mojo::PendingReceiver<::media::mojom::MediaDrmStorage> receiver) { + DCHECK(render_frame_host); + + if (render_frame_host->GetLastCommittedOrigin().opaque()) { + DVLOG(1) << __func__ << ": Unique origin."; + return; + } + + // The object will be deleted on connection error, or when the frame navigates + // away. + new cdm::MediaDrmStorageImpl( + render_frame_host, base::BindRepeating(&CreateOriginId), + base::BindRepeating(&AllowEmptyOriginIdCB), std::move(receiver)); +} +#endif // defined(OS_ANDROID) + } // namespace namespace weblayer { @@ -448,6 +478,15 @@ #endif // defined(OS_ANDROID) } +void ContentBrowserClientImpl::ExposeInterfacesToMediaService( + service_manager::BinderRegistry* registry, + content::RenderFrameHost* render_frame_host) { +#if defined(OS_ANDROID) + registry->AddInterface( + base::BindRepeating(&CreateMediaDrmStorage, render_frame_host)); +#endif +} + void ContentBrowserClientImpl::RegisterBrowserInterfaceBindersForFrame( content::RenderFrameHost* render_frame_host, service_manager::BinderMapWithContext<content::RenderFrameHost*>* map) {
diff --git a/weblayer/browser/content_browser_client_impl.h b/weblayer/browser/content_browser_client_impl.h index f3641d7..677e45e 100644 --- a/weblayer/browser/content_browser_client_impl.h +++ b/weblayer/browser/content_browser_client_impl.h
@@ -80,6 +80,9 @@ service_manager::BinderRegistry* registry, blink::AssociatedInterfaceRegistry* associated_registry, content::RenderProcessHost* render_process_host) override; + void ExposeInterfacesToMediaService( + service_manager::BinderRegistry* registry, + content::RenderFrameHost* render_frame_host) override; void RegisterBrowserInterfaceBindersForFrame( content::RenderFrameHost* render_frame_host, service_manager::BinderMapWithContext<content::RenderFrameHost*>* map)
diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn index aef77fc..aa9023f0 100644 --- a/weblayer/browser/java/BUILD.gn +++ b/weblayer/browser/java/BUILD.gn
@@ -45,7 +45,7 @@ "org/chromium/weblayer_private/DownloadCallbackProxy.java", "org/chromium/weblayer_private/DownloadImpl.java", "org/chromium/weblayer_private/ErrorPageCallbackProxy.java", - "org/chromium/weblayer_private/ExternalNavigationHandler.java", + "org/chromium/weblayer_private/ExternalNavigationDelegateImpl.java", "org/chromium/weblayer_private/FragmentAndroidPermissionDelegate.java", "org/chromium/weblayer_private/FragmentWindowAndroid.java", "org/chromium/weblayer_private/FullscreenCallbackProxy.java", @@ -103,13 +103,17 @@ "//components/permissions/android:java", "//components/security_interstitials/content/android:java", "//components/spellcheck/browser/android:java", + "//components/url_formatter/android:url_formatter_java", "//components/variations/android:variations_java", "//components/version_info/android:version_constants_java", "//content/public/android:content_java", "//net/android:net_java", + "//services/network/public/mojom:mojom_java", "//third_party/android_deps:androidx_core_core_java", + "//third_party/android_deps:com_android_support_support_compat_java", "//ui/android:ui_full_java", "//ui/android:ui_java", + "//url:gurl_java", ] srcjar_deps = [ ":generated_enums",
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationDelegateImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationDelegateImpl.java new file mode 100644 index 0000000..649c578 --- /dev/null +++ b/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationDelegateImpl.java
@@ -0,0 +1,504 @@ +// Copyright 2020 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.weblayer_private; + +import android.Manifest.permission; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Build; +import android.os.StrictMode; +import android.provider.Browser; +import android.provider.Telephony; +import android.text.TextUtils; +import android.webkit.MimeTypeMap; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.base.ContextUtils; +import org.chromium.base.IntentUtils; +import org.chromium.base.PackageManagerUtils; +import org.chromium.base.PathUtils; +import org.chromium.base.metrics.RecordUserAction; +import org.chromium.base.task.PostTask; +import org.chromium.components.embedder_support.util.UrlConstants; +import org.chromium.components.embedder_support.util.UrlUtilitiesJni; +import org.chromium.components.external_intents.ExternalNavigationDelegate; +import org.chromium.components.external_intents.ExternalNavigationHandler.OverrideUrlLoadingResult; +import org.chromium.components.external_intents.ExternalNavigationParams; +import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.NavigationController; +import org.chromium.content_public.browser.NavigationEntry; +import org.chromium.content_public.browser.UiThreadTaskTraits; +import org.chromium.content_public.common.Referrer; +import org.chromium.network.mojom.ReferrerPolicy; +import org.chromium.ui.base.PageTransition; +import org.chromium.ui.base.PermissionCallback; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * WebLayer's implementation of the {@link ExternalNavigationDelegate}. + */ +public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegate { + private static final String PDF_VIEWER = "com.google.android.apps.docs"; + private static final String PDF_MIME = "application/pdf"; + private static final String PDF_SUFFIX = ".pdf"; + private static final String PDF_EXTENSION = "pdf"; + + protected final Context mApplicationContext; + private final TabImpl mTab; + private boolean mTabDestroyed; + + // TODO(crbug.com/1031465): Componentize IntentHandler's constant to dedupe this. + private static final String ANDROID_APP_REFERRER_SCHEME = "android-app"; + // TODO(crbug.com/1031465): Componentize IntentHandler's constant to dedupe this. + /** + * Records package names of other applications in the system that could have handled + * this intent. + */ + public static final String EXTRA_EXTERNAL_NAV_PACKAGES = "org.chromium.chrome.browser.eenp"; + + public ExternalNavigationDelegateImpl(TabImpl tab) { + mTab = tab; + mApplicationContext = ContextUtils.getApplicationContext(); + } + + public void onTabDestroyed() { + mTabDestroyed = true; + } + + /** + * Get a {@link Context} linked to this delegate with preference to {@link Activity}. + * The tab this delegate associates with can swap the {@link Activity} it is hosted in and + * during the swap, there might not be an available {@link Activity}. + * @return The activity {@link Context} if it can be reached. + * Application {@link Context} if not. + */ + protected final Context getAvailableContext() { + if (mTab.getBrowser().getContext() == null) return mApplicationContext; + Context activityContext = ContextUtils.activityFromContext(mTab.getBrowser().getContext()); + if (activityContext == null) return mApplicationContext; + return activityContext; + } + + /** + * If the intent is for a pdf, resolves intent handlers to find the platform pdf viewer if + * it is available and force is for the provided |intent| so that the user doesn't need to + * choose it from Intent picker. + * + * @param intent Intent to open. + */ + public static void forcePdfViewerAsIntentHandlerIfNeeded(Intent intent) { + if (intent == null || !isPdfIntent(intent)) return; + resolveIntent(intent, true /* allowSelfOpen (ignored) */); + } + + /** + * Retrieve the best activity for the given intent. If a default activity is provided, + * choose the default one. Otherwise, return the Intent picker if there are more than one + * capable activities. If the intent is pdf type, return the platform pdf viewer if + * it is available so user don't need to choose it from Intent picker. + * + * Note this function is slow on Android versions less than Lollipop. + * + * @param intent Intent to open. + * @param allowSelfOpen Whether chrome itself is allowed to open the intent. + * @return true if the intent can be resolved, or false otherwise. + */ + public static boolean resolveIntent(Intent intent, boolean allowSelfOpen) { + Context context = ContextUtils.getApplicationContext(); + ResolveInfo info = PackageManagerUtils.resolveActivity(intent, 0); + if (info == null) return false; + + final String packageName = context.getPackageName(); + if (info.match != 0) { + // There is a default activity for this intent, use that. + return allowSelfOpen || !packageName.equals(info.activityInfo.packageName); + } + List<ResolveInfo> handlers = PackageManagerUtils.queryIntentActivities( + intent, PackageManager.MATCH_DEFAULT_ONLY); + if (handlers == null || handlers.isEmpty()) return false; + boolean canSelfOpen = false; + boolean hasPdfViewer = false; + for (ResolveInfo resolveInfo : handlers) { + String pName = resolveInfo.activityInfo.packageName; + if (packageName.equals(pName)) { + canSelfOpen = true; + } else if (PDF_VIEWER.equals(pName)) { + if (isPdfIntent(intent)) { + intent.setClassName(pName, resolveInfo.activityInfo.name); + // TODO(crbug.com/1031465): Use IntentHandler.java's version of this constant + // once it's componentized. + Uri referrer = new Uri.Builder() + .scheme(ANDROID_APP_REFERRER_SCHEME) + .authority(packageName) + .build(); + intent.putExtra(Intent.EXTRA_REFERRER, referrer); + hasPdfViewer = true; + break; + } + } + } + return !canSelfOpen || allowSelfOpen || hasPdfViewer; + } + + private static boolean isPdfIntent(Intent intent) { + if (intent == null || intent.getData() == null) return false; + String filename = intent.getData().getLastPathSegment(); + return (filename != null && filename.endsWith(PDF_SUFFIX)) + || PDF_MIME.equals(intent.getType()); + } + + @Override + public List<ResolveInfo> queryIntentActivities(Intent intent) { + return PackageManagerUtils.queryIntentActivities( + intent, PackageManager.GET_RESOLVED_FILTER); + } + + @Override + public boolean willChromeHandleIntent(Intent intent) { + return false; + } + + @Override + public boolean shouldDisableExternalIntentRequestsForUrl(String url) { + return false; + } + + @Override + public int countSpecializedHandlers(List<ResolveInfo> infos) { + return getSpecializedHandlersWithFilter(infos, null).size(); + } + + @Override + public ArrayList<String> getSpecializedHandlers(List<ResolveInfo> infos) { + return getSpecializedHandlersWithFilter(infos, null); + } + + @VisibleForTesting + public static ArrayList<String> getSpecializedHandlersWithFilter( + List<ResolveInfo> infos, String filterPackageName) { + ArrayList<String> result = new ArrayList<>(); + if (infos == null) { + return result; + } + + for (ResolveInfo info : infos) { + if (!matchResolveInfoExceptWildCardHost(info, filterPackageName)) { + continue; + } + + if (info.activityInfo != null) { + result.add(info.activityInfo.packageName); + } else { + result.add(""); + } + } + return result; + } + + private static boolean matchResolveInfoExceptWildCardHost( + ResolveInfo info, String filterPackageName) { + IntentFilter intentFilter = info.filter; + if (intentFilter == null) { + // Error on the side of classifying ResolveInfo as generic. + return false; + } + if (intentFilter.countDataAuthorities() == 0 && intentFilter.countDataPaths() == 0) { + // Don't count generic handlers. + return false; + } + boolean isWildCardHost = false; + Iterator<IntentFilter.AuthorityEntry> it = intentFilter.authoritiesIterator(); + while (it != null && it.hasNext()) { + IntentFilter.AuthorityEntry entry = it.next(); + if ("*".equals(entry.getHost())) { + isWildCardHost = true; + break; + } + } + if (isWildCardHost) { + return false; + } + if (!TextUtils.isEmpty(filterPackageName) + && (info.activityInfo == null + || !info.activityInfo.packageName.equals(filterPackageName))) { + return false; + } + return true; + } + + /** + * Check whether the given package is a specialized handler for the given intent + * + * @param packageName Package name to check against. Can be null or empty. + * @param intent The intent to resolve for. + * @return Whether the given package is a specialized handler for the given intent. If there is + * no package name given checks whether there is any specialized handler. + */ + public static boolean isPackageSpecializedHandler(String packageName, Intent intent) { + List<ResolveInfo> handlers = PackageManagerUtils.queryIntentActivities( + intent, PackageManager.GET_RESOLVED_FILTER); + return !getSpecializedHandlersWithFilter(handlers, packageName).isEmpty(); + } + + @Override + public void startActivity(Intent intent, boolean proxy) { + assert !proxy + : "|proxy| should be true only for instant apps, which WebLayer doesn't handle"; + try { + forcePdfViewerAsIntentHandlerIfNeeded(intent); + Context context = getAvailableContext(); + if (!(context instanceof Activity)) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + recordExternalNavigationDispatched(intent); + } catch (RuntimeException e) { + IntentUtils.logTransactionTooLargeOrRethrow(e, intent); + } + } + + @Override + public boolean startActivityIfNeeded(Intent intent, boolean proxy) { + assert !proxy + : "|proxy| should be true only for instant apps, which WebLayer doesn't handle"; + + boolean activityWasLaunched; + // Only touches disk on Kitkat. See http://crbug.com/617725 for more context. + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); + try { + forcePdfViewerAsIntentHandlerIfNeeded(intent); + Context context = getAvailableContext(); + if (context instanceof Activity) { + activityWasLaunched = ((Activity) context).startActivityIfNeeded(intent, -1); + } else { + activityWasLaunched = false; + } + if (activityWasLaunched) recordExternalNavigationDispatched(intent); + return activityWasLaunched; + } catch (SecurityException e) { + // https://crbug.com/808494: Handle the URL in WebLayer if dispatching to another + // application fails with a SecurityException. This happens due to malformed manifests + // in another app. + return false; + } catch (RuntimeException e) { + IntentUtils.logTransactionTooLargeOrRethrow(e, intent); + return false; + } finally { + StrictMode.setThreadPolicy(oldPolicy); + } + } + + private void recordExternalNavigationDispatched(Intent intent) { + ArrayList<String> specializedHandlers = + intent.getStringArrayListExtra(EXTRA_EXTERNAL_NAV_PACKAGES); + if (specializedHandlers != null && specializedHandlers.size() > 0) { + RecordUserAction.record("MobileExternalNavigationDispatched"); + } + } + + @Override + public boolean startIncognitoIntent(final Intent intent, final String referrerUrl, + final String fallbackUrl, final boolean needsToCloseTab, final boolean proxy) { + // TODO(crbug.com/1063399): Determine if this behavior should be refined. + startActivity(intent, proxy); + return true; + } + + @Override + public boolean shouldRequestFileAccess(String url) { + // If the tab is null, then do not attempt to prompt for access. + if (!hasValidTab()) return false; + + // If the url points inside of Chromium's data directory, no permissions are necessary. + // This is required to prevent permission prompt when uses wants to access offline pages. + if (url.startsWith(UrlConstants.FILE_URL_PREFIX + PathUtils.getDataDirectory())) { + return false; + } + + return !mTab.getBrowser().getWindowAndroid().hasPermission(permission.READ_EXTERNAL_STORAGE) + && mTab.getBrowser().getWindowAndroid().canRequestPermission( + permission.READ_EXTERNAL_STORAGE); + } + + @Override + public void startFileIntent( + final Intent intent, final String referrerUrl, final boolean needsToCloseTab) { + PermissionCallback permissionCallback = new PermissionCallback() { + @Override + public void onRequestPermissionsResult(String[] permissions, int[] grantResults) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED + && hasValidTab()) { + String url = intent.getDataString(); + LoadUrlParams loadUrlParams = + new LoadUrlParams(url, PageTransition.AUTO_TOPLEVEL); + if (!TextUtils.isEmpty(referrerUrl)) { + Referrer referrer = new Referrer(referrerUrl, ReferrerPolicy.ALWAYS); + loadUrlParams.setReferrer(referrer); + } + mTab.loadUrl(loadUrlParams); + } else { + // TODO(tedchoc): Show an indication to the user that the navigation failed + // instead of silently dropping it on the floor. + if (needsToCloseTab) { + // If the access was not granted, then close the tab if necessary. + closeTab(); + } + } + } + }; + if (!hasValidTab()) return; + mTab.getBrowser().getWindowAndroid().requestPermissions( + new String[] {permission.READ_EXTERNAL_STORAGE}, permissionCallback); + } + + @Override + public @OverrideUrlLoadingResult int clobberCurrentTab(String url, String referrerUrl) { + int transitionType = PageTransition.LINK; + final LoadUrlParams loadUrlParams = new LoadUrlParams(url, transitionType); + if (!TextUtils.isEmpty(referrerUrl)) { + Referrer referrer = new Referrer(referrerUrl, ReferrerPolicy.ALWAYS); + loadUrlParams.setReferrer(referrer); + } + if (hasValidTab()) { + // Loading URL will start a new navigation which cancels the current one + // that this clobbering is being done for. It leads to UAF. To avoid that, + // we're loading URL asynchronously. See https://crbug.com/732260. + PostTask.postTask(UiThreadTaskTraits.DEFAULT, new Runnable() { + @Override + public void run() { + if (hasValidTab()) mTab.loadUrl(loadUrlParams); + } + }); + return OverrideUrlLoadingResult.OVERRIDE_WITH_CLOBBERING_TAB; + } else { + assert false : "clobberCurrentTab was called with an empty tab."; + Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + String packageName = ContextUtils.getApplicationContext().getPackageName(); + intent.putExtra(Browser.EXTRA_APPLICATION_ID, packageName); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.setPackage(packageName); + startActivity(intent, false); + return OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT; + } + } + + @Override + public boolean isChromeAppInForeground() { + return mTab.getBrowser().isResumed(); + } + + @Override + public void maybeSetWindowId(Intent intent) {} + + @Override + public String getDefaultSmsPackageName() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return null; + return Telephony.Sms.getDefaultSmsPackage(mApplicationContext); + } + + private void closeTab() { + // Closing of tabs as part of intent launching is not yet implemented in WebLayer, and + // parameters are specified such that this flow should never be invoked. + // TODO(crbug.com/1031465): Adapt //chrome's logic for closing of tabs. + assert false; + } + + @Override + public boolean isPdfDownload(String url) { + String fileExtension = MimeTypeMap.getFileExtensionFromUrl(url); + if (TextUtils.isEmpty(fileExtension)) return false; + + return PDF_EXTENSION.equals(fileExtension); + } + + @Override + public void maybeRecordAppHandlersInIntent(Intent intent, List<ResolveInfo> infos) { + intent.putExtra(EXTRA_EXTERNAL_NAV_PACKAGES, getSpecializedHandlersWithFilter(infos, null)); + } + + @Override + public void maybeAdjustInstantAppExtras(Intent intent, boolean isIntentToInstantApp) {} + + @Override + // This is relevant only if the intent ends up being handled by this app, which does not happen + // for WebLayer. + public void maybeSetUserGesture(Intent intent) {} + + @Override + // This is relevant only if the intent ends up being handled by this app, which does not happen + // for WebLayer. + public void maybeSetPendingReferrer(Intent intent, String referrerUrl) {} + + @Override + // This is relevant only if the intent ends up being handled by this app, which does not happen + // for WebLayer. + public void maybeSetPendingIncognitoUrl(Intent intent) {} + + @Override + public boolean isSerpReferrer() { + // TODO (thildebr): Investigate whether or not we can use getLastCommittedUrl() instead of + // the NavigationController. + if (!hasValidTab() || mTab.getWebContents() == null) return false; + + NavigationController nController = mTab.getWebContents().getNavigationController(); + int index = nController.getLastCommittedEntryIndex(); + if (index == -1) return false; + + NavigationEntry entry = nController.getEntryAtIndex(index); + if (entry == null) return false; + + return UrlUtilitiesJni.get().isGoogleSearchUrl(entry.getUrl()); + } + + @Override + public boolean maybeLaunchInstantApp( + String url, String referrerUrl, boolean isIncomingRedirect) { + return false; + } + + @Override + public String getPreviousUrl() { + if (mTab == null || mTab.getWebContents() == null) return null; + return mTab.getWebContents().getLastCommittedUrl(); + } + + /** + * @return Whether or not we have a valid {@link Tab} available. + */ + private boolean hasValidTab() { + assert mTab != null; + return !mTabDestroyed; + } + + @Override + public boolean isIntentForTrustedCallingApp(Intent intent) { + return false; + } + + @Override + public boolean isIntentToInstantApp(Intent intent) { + return false; + } + + @Override + public boolean isValidWebApk(String packageName) { + // TODO(crbug.com/1063874): Determine whether to refine this. + return false; + } + + @Override + public boolean handleWithAutofillAssistant( + ExternalNavigationParams params, Intent targetIntent, String browserFallbackUrl) { + return false; + } +}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationHandler.java b/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationHandler.java deleted file mode 100644 index 0a3d02c..0000000 --- a/weblayer/browser/java/org/chromium/weblayer_private/ExternalNavigationHandler.java +++ /dev/null
@@ -1,137 +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. - -package org.chromium.weblayer_private; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.provider.Browser; - -import org.chromium.base.Log; -import org.chromium.components.embedder_support.util.UrlConstants; -import org.chromium.components.embedder_support.util.UrlUtilities; -import org.chromium.components.external_intents.ExternalNavigationParams; -import org.chromium.content_public.common.ContentUrlConstants; -import org.chromium.ui.base.PageTransition; - -/** - * A class that handles navigations that should be transformed to intents. Logic taken primarly from - * //android_webview's AwContentsClient.java:sendBrowsingIntent(), with some additional logic - * from //android_webview's WebViewBrowserActivity.java:startBrowsingIntent() and - * //components/external_intents' ExternalNavigationHandler.java. - * TODO(crbug.com/1031465): Eliminate this custom class entirely in favor of using - * the //component-level ExternalNavigationHandler.java that //chrome uses. - */ -public class ExternalNavigationHandler { - private static final String TAG = "ExternalNavHandler"; - - /** - * The "about:", "chrome:", "chrome-native:", and "devtools:" schemes - * are internal to the browser; don't want these to be dispatched to other apps. - */ - private static boolean hasInternalScheme( - String url, Intent targetIntent, boolean hasIntentScheme) { - if (hasIntentScheme) { - // TODO(https://crbug.com/783819): When this function is converted to GURL, we should - // also call fixUpUrl on this user-provided URL as the fixed-up URL is what we would end - // up navigating to. - url = targetIntent.getDataString(); - } - if (url.startsWith(ContentUrlConstants.ABOUT_SCHEME) - || url.startsWith(UrlConstants.CHROME_URL_SHORT_PREFIX) - || url.startsWith(UrlConstants.CHROME_NATIVE_URL_SHORT_PREFIX) - || url.startsWith(UrlConstants.DEVTOOLS_URL_SHORT_PREFIX)) { - return true; - } - return false; - } - - /** The "content:" scheme is disabled in WebLayer. Do not try to start an activity. */ - private static boolean hasContentScheme( - String url, Intent targetIntent, boolean hasIntentScheme) { - if (hasIntentScheme) { - url = targetIntent.getDataString(); - } - if (!url.startsWith(UrlConstants.CONTENT_URL_SHORT_PREFIX)) return false; - return true; - } - - static boolean shouldOverrideUrlLoading(TabImpl tab, ExternalNavigationParams params) { - String url = params.getUrl(); - boolean hasUserGesture = params.hasUserGesture(); - boolean isRedirect = params.isRedirect(); - boolean isMainFrame = params.isMainFrame(); - int pageTransition = params.getPageTransition(); - - if (UrlUtilities.isAcceptedScheme(url)) return false; - - // A back-forward navigation should never trigger an intent. - if ((pageTransition & PageTransition.FORWARD_BACK) != 0) return false; - - Intent intent; - // Perform generic parsing of the URI to turn it into an Intent. - try { - intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); - } catch (Exception ex) { - Log.w(TAG, "Bad URI %s", url, ex); - return false; - } - - boolean hasIntentScheme = url.startsWith(UrlConstants.INTENT_URL_SHORT_PREFIX) - || url.startsWith(UrlConstants.APP_INTENT_URL_SHORT_PREFIX); - if (hasInternalScheme(url, intent, hasIntentScheme)) { - return false; - } - - if (hasContentScheme(url, intent, hasIntentScheme)) { - return false; - } - - if (!hasUserGesture && !isRedirect) { - Log.w(TAG, "Denied starting an intent without a user gesture, URI %s", url); - return true; - } - - // Sanitize the Intent, ensuring web pages can not bypass browser - // security (only access to BROWSABLE activities). - intent.addCategory(Intent.CATEGORY_BROWSABLE); - - // Match Chrome's behavior (see //chrome's - // ExternalNavigationHandler.java:PrepareExternalIntent()). - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - intent.setComponent(null); - Intent selector = intent.getSelector(); - if (selector != null) { - selector.addCategory(Intent.CATEGORY_BROWSABLE); - selector.setComponent(null); - } - - Context context = tab.getBrowser().getContext(); - - if (context == null) { - return false; - } - - // Pass the package name as application ID so that the intent from the - // same application can be opened in the same tab. - intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); - - try { - context.startActivity(intent); - return true; - } catch (ActivityNotFoundException ex) { - Log.w(TAG, "No application can handle %s", url); - } catch (SecurityException ex) { - // This can happen if the Activity is exported="true", guarded by a permission, and sets - // up an intent filter matching this intent. This is a valid configuration for an - // Activity, so instead of crashing, we catch the exception and do nothing. See - // https://crbug.com/808494 and https://crbug.com/889300. - Log.w(TAG, "SecurityException when starting intent for %s", url); - } - - return false; - } -}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/InterceptNavigationDelegateImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/InterceptNavigationDelegateImpl.java index fed4427ea..bfc34f74 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/InterceptNavigationDelegateImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/InterceptNavigationDelegateImpl.java
@@ -5,6 +5,8 @@ package org.chromium.weblayer_private; import org.chromium.base.annotations.NativeMethods; +import org.chromium.components.external_intents.ExternalNavigationHandler; +import org.chromium.components.external_intents.ExternalNavigationHandler.OverrideUrlLoadingResult; import org.chromium.components.external_intents.ExternalNavigationParams; import org.chromium.components.navigation_interception.InterceptNavigationDelegate; import org.chromium.components.navigation_interception.NavigationParams; @@ -16,16 +18,24 @@ */ public class InterceptNavigationDelegateImpl implements InterceptNavigationDelegate { private TabImpl mTab; + private ExternalNavigationHandler mExternalNavHandler; + private ExternalNavigationDelegateImpl mExternalNavigationDelegate; /** * Default constructor of {@link InterceptNavigationDelegateImpl}. */ InterceptNavigationDelegateImpl(TabImpl tab) { mTab = tab; + mExternalNavigationDelegate = new ExternalNavigationDelegateImpl(mTab); + mExternalNavHandler = new ExternalNavigationHandler(mExternalNavigationDelegate); InterceptNavigationDelegateImplJni.get().associateWithWebContents( this, mTab.getWebContents()); } + public void onTabDestroyed() { + mExternalNavigationDelegate.onTabDestroyed(); + } + /** * Returns ExternalNavigationParams.Builder to generate ExternalNavigationParams for * ExternalNavigationHandler#shouldOverrideUrlLoading(). @@ -51,12 +61,9 @@ } private boolean shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent() { - if (mTab.getWebContents() == null) return false; - - if (!mTab.getWebContents().getNavigationController().canGoToOffset(0)) return true; - - // TODO(crbug.com/1031465): Adapt the TabRedirectHandler-dependent check that //chrome's - // InterceptNavigationDelegateImpl.java does in its version of this method? + // Closing of tabs as part of intent launching is not yet implemented in WebLayer; specify + // parameters such that this flow is never invoked. + // TODO(crbug.com/1031465): Adapt //chrome's logic for closing of tabs. return false; } @@ -65,7 +72,8 @@ boolean shouldCloseTab = shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(); ExternalNavigationParams params = buildExternalNavigationParams(navigationParams, shouldCloseTab).build(); - return ExternalNavigationHandler.shouldOverrideUrlLoading(mTab, params); + return (mExternalNavHandler.shouldOverrideUrlLoading(params) + != OverrideUrlLoadingResult.NO_OVERRIDE); } @NativeMethods
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java index abaeb11..8f25eff 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/TabImpl.java
@@ -26,6 +26,8 @@ import org.chromium.components.find_in_page.FindInPageBridge; import org.chromium.components.find_in_page.FindMatchRectsDetails; import org.chromium.components.find_in_page.FindResultBar; +import org.chromium.components.url_formatter.UrlFormatter; +import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.NavigationHandle; import org.chromium.content_public.browser.SelectionPopupController; import org.chromium.content_public.browser.ViewEventSink; @@ -35,6 +37,7 @@ import org.chromium.content_public.common.BrowserControlsState; import org.chromium.ui.base.ViewAndroidDelegate; import org.chromium.ui.base.WindowAndroid; +import org.chromium.url.GURL; import org.chromium.weblayer_private.interfaces.IDownloadCallbackClient; import org.chromium.weblayer_private.interfaces.IErrorPageCallbackClient; import org.chromium.weblayer_private.interfaces.IFindInPageCallbackClient; @@ -274,6 +277,17 @@ } } + public void loadUrl(LoadUrlParams loadUrlParams) { + String url = loadUrlParams.getUrl(); + if (url == null || url.isEmpty()) return; + + GURL fixedUrl = UrlFormatter.fixupUrl(url); + if (!fixedUrl.isValid()) return; + + loadUrlParams.setUrl(fixedUrl.getSpec()); + getWebContents().getNavigationController().loadUrl(loadUrlParams); + } + public WebContents getWebContents() { return mWebContents; } @@ -532,6 +546,10 @@ mNewTabCallbackProxy.destroy(); mNewTabCallbackProxy = null; } + + mInterceptNavigationDelegate.onTabDestroyed(); + mInterceptNavigationDelegate = null; + // ObservableSupplierImpl.addObserver() posts a task to notify the observer, ensure the // callback isn't run after destroy() is called (otherwise we'll get crashes as the native // tab has been deleted).
diff --git a/weblayer/browser/permissions/permission_manager_factory.cc b/weblayer/browser/permissions/permission_manager_factory.cc index dce68a5..8fc68c5 100644 --- a/weblayer/browser/permissions/permission_manager_factory.cc +++ b/weblayer/browser/permissions/permission_manager_factory.cc
@@ -22,16 +22,11 @@ namespace weblayer { namespace { + // Permission context which denies all requests. class DeniedPermissionContext : public permissions::PermissionContextBase { public: - DeniedPermissionContext( - content::BrowserContext* browser_context, - ContentSettingsType content_settings_type, - blink::mojom::FeaturePolicyFeature feature_policy_feature) - : PermissionContextBase(browser_context, - content_settings_type, - feature_policy_feature) {} + using PermissionContextBase::PermissionContextBase; protected: ContentSetting GetPermissionStatusInternal( @@ -44,6 +39,18 @@ bool IsRestrictedToSecureOrigins() const override { return true; } }; +// A permission context with default behavior, which is restricted to secure +// origins. +class SafePermissionContext : public permissions::PermissionContextBase { + public: + using PermissionContextBase::PermissionContextBase; + SafePermissionContext(const SafePermissionContext&) = delete; + SafePermissionContext& operator=(const SafePermissionContext&) = delete; + + protected: + bool IsRestrictedToSecureOrigins() const override { return true; } +}; + permissions::PermissionManager::PermissionContextMap CreatePermissionContexts( content::BrowserContext* browser_context) { permissions::PermissionManager::PermissionContextMap permission_contexts; @@ -58,6 +65,12 @@ std::make_unique<GeolocationPermissionContext>( browser_context, std::make_unique<GeolocationPermissionContextDelegate>()); + + permission_contexts[ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER] = + std::make_unique<SafePermissionContext>( + browser_context, ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER, + blink::mojom::FeaturePolicyFeature::kEncryptedMedia); + // For now, all requests are denied. As features are added, their permission // contexts can be added here instead of DeniedPermissionContext. for (content::PermissionType type : content::GetAllPermissionTypes()) {